github.com/fluxrad/terraform@v0.6.4-0.20150906191316-06627ccf39fa/config/module/get_http_test.go (about) 1 package module 2 3 import ( 4 "fmt" 5 "net" 6 "net/http" 7 "net/url" 8 "os" 9 "path/filepath" 10 "testing" 11 ) 12 13 func TestHttpGetter_impl(t *testing.T) { 14 var _ Getter = new(HttpGetter) 15 } 16 17 func TestHttpGetter_header(t *testing.T) { 18 ln := testHttpServer(t) 19 defer ln.Close() 20 21 g := new(HttpGetter) 22 dst := tempDir(t) 23 24 var u url.URL 25 u.Scheme = "http" 26 u.Host = ln.Addr().String() 27 u.Path = "/header" 28 29 // Get it! 30 if err := g.Get(dst, &u); err != nil { 31 t.Fatalf("err: %s", err) 32 } 33 34 // Verify the main file exists 35 mainPath := filepath.Join(dst, "main.tf") 36 if _, err := os.Stat(mainPath); err != nil { 37 t.Fatalf("err: %s", err) 38 } 39 } 40 41 func TestHttpGetter_meta(t *testing.T) { 42 ln := testHttpServer(t) 43 defer ln.Close() 44 45 g := new(HttpGetter) 46 dst := tempDir(t) 47 48 var u url.URL 49 u.Scheme = "http" 50 u.Host = ln.Addr().String() 51 u.Path = "/meta" 52 53 // Get it! 54 if err := g.Get(dst, &u); err != nil { 55 t.Fatalf("err: %s", err) 56 } 57 58 // Verify the main file exists 59 mainPath := filepath.Join(dst, "main.tf") 60 if _, err := os.Stat(mainPath); err != nil { 61 t.Fatalf("err: %s", err) 62 } 63 } 64 65 func TestHttpGetter_metaSubdir(t *testing.T) { 66 ln := testHttpServer(t) 67 defer ln.Close() 68 69 g := new(HttpGetter) 70 dst := tempDir(t) 71 72 var u url.URL 73 u.Scheme = "http" 74 u.Host = ln.Addr().String() 75 u.Path = "/meta-subdir" 76 77 // Get it! 78 if err := g.Get(dst, &u); err != nil { 79 t.Fatalf("err: %s", err) 80 } 81 82 // Verify the main file exists 83 mainPath := filepath.Join(dst, "sub.tf") 84 if _, err := os.Stat(mainPath); err != nil { 85 t.Fatalf("err: %s", err) 86 } 87 } 88 89 func TestHttpGetter_none(t *testing.T) { 90 ln := testHttpServer(t) 91 defer ln.Close() 92 93 g := new(HttpGetter) 94 dst := tempDir(t) 95 96 var u url.URL 97 u.Scheme = "http" 98 u.Host = ln.Addr().String() 99 u.Path = "/none" 100 101 // Get it! 102 if err := g.Get(dst, &u); err == nil { 103 t.Fatal("should error") 104 } 105 } 106 107 func testHttpServer(t *testing.T) net.Listener { 108 ln, err := net.Listen("tcp", "127.0.0.1:0") 109 if err != nil { 110 t.Fatalf("err: %s", err) 111 } 112 113 mux := http.NewServeMux() 114 mux.HandleFunc("/header", testHttpHandlerHeader) 115 mux.HandleFunc("/meta", testHttpHandlerMeta) 116 mux.HandleFunc("/meta-subdir", testHttpHandlerMetaSubdir) 117 118 var server http.Server 119 server.Handler = mux 120 go server.Serve(ln) 121 122 return ln 123 } 124 125 func testHttpHandlerHeader(w http.ResponseWriter, r *http.Request) { 126 w.Header().Add("X-Terraform-Get", testModuleURL("basic").String()) 127 w.WriteHeader(200) 128 } 129 130 func testHttpHandlerMeta(w http.ResponseWriter, r *http.Request) { 131 w.Write([]byte(fmt.Sprintf(testHttpMetaStr, testModuleURL("basic").String()))) 132 } 133 134 func testHttpHandlerMetaSubdir(w http.ResponseWriter, r *http.Request) { 135 w.Write([]byte(fmt.Sprintf(testHttpMetaStr, testModuleURL("basic//subdir").String()))) 136 } 137 138 func testHttpHandlerNone(w http.ResponseWriter, r *http.Request) { 139 w.Write([]byte(testHttpNoneStr)) 140 } 141 142 const testHttpMetaStr = ` 143 <html> 144 <head> 145 <meta name="terraform-get" content="%s"> 146 </head> 147 </html> 148 ` 149 150 const testHttpNoneStr = ` 151 <html> 152 <head> 153 </head> 154 </html> 155 `