2014-09-16 22:44:12 +02:00
|
|
|
package module
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"net"
|
|
|
|
"net/http"
|
|
|
|
"net/url"
|
|
|
|
"os"
|
|
|
|
"path/filepath"
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestHttpGetter_impl(t *testing.T) {
|
|
|
|
var _ Getter = new(HttpGetter)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestHttpGetter_header(t *testing.T) {
|
|
|
|
ln := testHttpServer(t)
|
|
|
|
defer ln.Close()
|
|
|
|
|
|
|
|
g := new(HttpGetter)
|
|
|
|
dst := tempDir(t)
|
|
|
|
|
|
|
|
var u url.URL
|
|
|
|
u.Scheme = "http"
|
|
|
|
u.Host = ln.Addr().String()
|
|
|
|
u.Path = "/header"
|
|
|
|
|
|
|
|
// Get it!
|
|
|
|
if err := g.Get(dst, &u); err != nil {
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Verify the main file exists
|
|
|
|
mainPath := filepath.Join(dst, "main.tf")
|
|
|
|
if _, err := os.Stat(mainPath); err != nil {
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestHttpGetter_meta(t *testing.T) {
|
|
|
|
ln := testHttpServer(t)
|
|
|
|
defer ln.Close()
|
|
|
|
|
|
|
|
g := new(HttpGetter)
|
|
|
|
dst := tempDir(t)
|
|
|
|
|
|
|
|
var u url.URL
|
|
|
|
u.Scheme = "http"
|
|
|
|
u.Host = ln.Addr().String()
|
|
|
|
u.Path = "/meta"
|
|
|
|
|
|
|
|
// Get it!
|
|
|
|
if err := g.Get(dst, &u); err != nil {
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Verify the main file exists
|
|
|
|
mainPath := filepath.Join(dst, "main.tf")
|
|
|
|
if _, err := os.Stat(mainPath); err != nil {
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-09-27 00:22:26 +02:00
|
|
|
func TestHttpGetter_metaSubdir(t *testing.T) {
|
|
|
|
ln := testHttpServer(t)
|
|
|
|
defer ln.Close()
|
|
|
|
|
|
|
|
g := new(HttpGetter)
|
|
|
|
dst := tempDir(t)
|
|
|
|
|
|
|
|
var u url.URL
|
|
|
|
u.Scheme = "http"
|
|
|
|
u.Host = ln.Addr().String()
|
|
|
|
u.Path = "/meta-subdir"
|
|
|
|
|
|
|
|
// Get it!
|
|
|
|
if err := g.Get(dst, &u); err != nil {
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Verify the main file exists
|
|
|
|
mainPath := filepath.Join(dst, "sub.tf")
|
|
|
|
if _, err := os.Stat(mainPath); err != nil {
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-09-16 22:44:12 +02:00
|
|
|
func TestHttpGetter_none(t *testing.T) {
|
|
|
|
ln := testHttpServer(t)
|
|
|
|
defer ln.Close()
|
|
|
|
|
|
|
|
g := new(HttpGetter)
|
|
|
|
dst := tempDir(t)
|
|
|
|
|
|
|
|
var u url.URL
|
|
|
|
u.Scheme = "http"
|
|
|
|
u.Host = ln.Addr().String()
|
|
|
|
u.Path = "/none"
|
|
|
|
|
|
|
|
// Get it!
|
|
|
|
if err := g.Get(dst, &u); err == nil {
|
|
|
|
t.Fatal("should error")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func testHttpServer(t *testing.T) net.Listener {
|
2015-01-27 15:12:37 +01:00
|
|
|
ln, err := net.Listen("tcp", "127.0.0.1:0")
|
2014-09-16 22:44:12 +02:00
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
mux := http.NewServeMux()
|
|
|
|
mux.HandleFunc("/header", testHttpHandlerHeader)
|
|
|
|
mux.HandleFunc("/meta", testHttpHandlerMeta)
|
2014-09-27 00:22:26 +02:00
|
|
|
mux.HandleFunc("/meta-subdir", testHttpHandlerMetaSubdir)
|
2014-09-16 22:44:12 +02:00
|
|
|
|
|
|
|
var server http.Server
|
|
|
|
server.Handler = mux
|
|
|
|
go server.Serve(ln)
|
|
|
|
|
|
|
|
return ln
|
|
|
|
}
|
|
|
|
|
|
|
|
func testHttpHandlerHeader(w http.ResponseWriter, r *http.Request) {
|
|
|
|
w.Header().Add("X-Terraform-Get", testModuleURL("basic").String())
|
|
|
|
w.WriteHeader(200)
|
|
|
|
}
|
|
|
|
|
|
|
|
func testHttpHandlerMeta(w http.ResponseWriter, r *http.Request) {
|
|
|
|
w.Write([]byte(fmt.Sprintf(testHttpMetaStr, testModuleURL("basic").String())))
|
|
|
|
}
|
|
|
|
|
2014-09-27 00:22:26 +02:00
|
|
|
func testHttpHandlerMetaSubdir(w http.ResponseWriter, r *http.Request) {
|
|
|
|
w.Write([]byte(fmt.Sprintf(testHttpMetaStr, testModuleURL("basic//subdir").String())))
|
|
|
|
}
|
|
|
|
|
2014-09-16 22:44:12 +02:00
|
|
|
func testHttpHandlerNone(w http.ResponseWriter, r *http.Request) {
|
|
|
|
w.Write([]byte(testHttpNoneStr))
|
|
|
|
}
|
|
|
|
|
|
|
|
const testHttpMetaStr = `
|
|
|
|
<html>
|
|
|
|
<head>
|
|
|
|
<meta name="terraform-get" content="%s">
|
|
|
|
</head>
|
|
|
|
</html>
|
|
|
|
`
|
|
|
|
|
|
|
|
const testHttpNoneStr = `
|
|
|
|
<html>
|
|
|
|
<head>
|
|
|
|
</head>
|
|
|
|
</html>
|
|
|
|
`
|