github.com/daniellockard/packer@v0.7.6-0.20141210173435-5a9390934716/common/download_test.go (about)

     1  package common
     2  
     3  import (
     4  	"crypto/md5"
     5  	"encoding/hex"
     6  	"io/ioutil"
     7  	"net/http"
     8  	"net/http/httptest"
     9  	"os"
    10  	"testing"
    11  )
    12  
    13  func TestDownloadClient_VerifyChecksum(t *testing.T) {
    14  	tf, err := ioutil.TempFile("", "packer")
    15  	if err != nil {
    16  		t.Fatalf("tempfile error: %s", err)
    17  	}
    18  	defer os.Remove(tf.Name())
    19  
    20  	// "foo"
    21  	checksum, err := hex.DecodeString("acbd18db4cc2f85cedef654fccc4a4d8")
    22  	if err != nil {
    23  		t.Fatalf("decode err: %s", err)
    24  	}
    25  
    26  	// Write the file
    27  	tf.Write([]byte("foo"))
    28  	tf.Close()
    29  
    30  	config := &DownloadConfig{
    31  		Hash:     md5.New(),
    32  		Checksum: checksum,
    33  	}
    34  
    35  	d := NewDownloadClient(config)
    36  	result, err := d.VerifyChecksum(tf.Name())
    37  	if err != nil {
    38  		t.Fatalf("Verify err: %s", err)
    39  	}
    40  
    41  	if !result {
    42  		t.Fatal("didn't verify")
    43  	}
    44  }
    45  
    46  func TestDownloadClientUsesDefaultUserAgent(t *testing.T) {
    47  	tf, err := ioutil.TempFile("", "packer")
    48  	if err != nil {
    49  		t.Fatalf("tempfile error: %s", err)
    50  	}
    51  	defer os.Remove(tf.Name())
    52  
    53  	defaultUserAgent := ""
    54  	asserted := false
    55  	server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    56  		if defaultUserAgent == "" {
    57  			defaultUserAgent = r.UserAgent()
    58  		} else {
    59  			incomingUserAgent := r.UserAgent()
    60  			if incomingUserAgent != defaultUserAgent {
    61  				t.Fatalf("Expected user agent %s, got: %s", defaultUserAgent, incomingUserAgent)
    62  			}
    63  
    64  			asserted = true
    65  		}
    66  	}))
    67  
    68  	req, err := http.NewRequest("GET", server.URL, nil)
    69  	if err != nil {
    70  		t.Fatal(err)
    71  	}
    72  
    73  	httpClient := &http.Client{
    74  		Transport: &http.Transport{
    75  			Proxy: http.ProxyFromEnvironment,
    76  		},
    77  	}
    78  
    79  	_, err = httpClient.Do(req)
    80  	if err != nil {
    81  		t.Fatal(err)
    82  	}
    83  
    84  	config := &DownloadConfig{
    85  		Url:        server.URL,
    86  		TargetPath: tf.Name(),
    87  	}
    88  
    89  	client := NewDownloadClient(config)
    90  	_, err = client.Get()
    91  	if err != nil {
    92  		t.Fatal(err)
    93  	}
    94  
    95  	if !asserted {
    96  		t.Fatal("User-Agent never observed")
    97  	}
    98  }
    99  
   100  func TestDownloadClientSetsUserAgent(t *testing.T) {
   101  	tf, err := ioutil.TempFile("", "packer")
   102  	if err != nil {
   103  		t.Fatalf("tempfile error: %s", err)
   104  	}
   105  	defer os.Remove(tf.Name())
   106  
   107  	asserted := false
   108  	server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
   109  		asserted = true
   110  		if r.UserAgent() != "fancy user agent" {
   111  			t.Fatalf("Expected useragent fancy user agent, got: %s", r.UserAgent())
   112  		}
   113  	}))
   114  	config := &DownloadConfig{
   115  		Url:        server.URL,
   116  		TargetPath: tf.Name(),
   117  		UserAgent:  "fancy user agent",
   118  	}
   119  
   120  	client := NewDownloadClient(config)
   121  	_, err = client.Get()
   122  	if err != nil {
   123  		t.Fatal(err)
   124  	}
   125  
   126  	if !asserted {
   127  		t.Fatal("HTTP request never made")
   128  	}
   129  }
   130  
   131  func TestHashForType(t *testing.T) {
   132  	if h := HashForType("md5"); h == nil {
   133  		t.Fatalf("md5 hash is nil")
   134  	} else {
   135  		h.Write([]byte("foo"))
   136  		result := h.Sum(nil)
   137  
   138  		expected := "acbd18db4cc2f85cedef654fccc4a4d8"
   139  		actual := hex.EncodeToString(result)
   140  		if actual != expected {
   141  			t.Fatalf("bad hash: %s", actual)
   142  		}
   143  	}
   144  
   145  	if h := HashForType("sha1"); h == nil {
   146  		t.Fatalf("sha1 hash is nil")
   147  	} else {
   148  		h.Write([]byte("foo"))
   149  		result := h.Sum(nil)
   150  
   151  		expected := "0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33"
   152  		actual := hex.EncodeToString(result)
   153  		if actual != expected {
   154  			t.Fatalf("bad hash: %s", actual)
   155  		}
   156  	}
   157  
   158  	if h := HashForType("sha256"); h == nil {
   159  		t.Fatalf("sha256 hash is nil")
   160  	} else {
   161  		h.Write([]byte("foo"))
   162  		result := h.Sum(nil)
   163  
   164  		expected := "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae"
   165  		actual := hex.EncodeToString(result)
   166  		if actual != expected {
   167  			t.Fatalf("bad hash: %s", actual)
   168  		}
   169  	}
   170  
   171  	if h := HashForType("sha512"); h == nil {
   172  		t.Fatalf("sha512 hash is nil")
   173  	} else {
   174  		h.Write([]byte("foo"))
   175  		result := h.Sum(nil)
   176  
   177  		expected := "f7fbba6e0636f890e56fbbf3283e524c6fa3204ae298382d624741d0dc6638326e282c41be5e4254d8820772c5518a2c5a8c0c7f7eda19594a7eb539453e1ed7"
   178  		actual := hex.EncodeToString(result)
   179  		if actual != expected {
   180  			t.Fatalf("bad hash: %s", actual)
   181  		}
   182  	}
   183  
   184  	if HashForType("fake") != nil {
   185  		t.Fatalf("fake hash is not nil")
   186  	}
   187  }