github.com/sneal/packer@v0.5.2/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 }