Skip to content

Commit 28c40be

Browse files
committed
test custom detector with X-Terraform-Get
1 parent 35a9e31 commit 28c40be

File tree

1 file changed

+71
-1
lines changed

1 file changed

+71
-1
lines changed

get_http_test.go

Lines changed: 71 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -584,6 +584,47 @@ func TestHttpGetter__XTerraformGetDisabled(t *testing.T) {
584584
}
585585
}
586586

587+
type testCustomDetector struct{}
588+
589+
func (testCustomDetector) Detect(src, _ string) (string, bool, error) {
590+
if strings.HasPrefix(src, "custom|") {
591+
return "http://" + src[7:], true, nil
592+
}
593+
return "", false, nil
594+
}
595+
596+
// test a source url with no protocol
597+
func TestHttpGetter__XTerraformGetDetected(t *testing.T) {
598+
ctx, cancel := context.WithCancel(context.Background())
599+
defer cancel()
600+
601+
ln := testHttpServerWithXTerraformGetDetected(t)
602+
603+
var u url.URL
604+
u.Scheme = "http"
605+
u.Host = ln.Addr().String()
606+
u.Path = "/first"
607+
dst := tempDir(t)
608+
609+
c := &Client{
610+
Ctx: ctx,
611+
Src: u.String(),
612+
Dst: dst,
613+
Mode: ClientModeDir,
614+
Options: []ClientOption{
615+
func(c *Client) error {
616+
c.Detectors = append(c.Detectors, testCustomDetector{})
617+
return nil
618+
},
619+
},
620+
}
621+
622+
err := c.Get()
623+
if err != nil {
624+
t.Fatal(err)
625+
}
626+
}
627+
587628
func TestHttpGetter__XTerraformGetProxyBypass(t *testing.T) {
588629
ctx, cancel := context.WithCancel(context.Background())
589630
defer cancel()
@@ -696,7 +737,6 @@ func TestHttpGetter__endless_body(t *testing.T) {
696737
client := &Client{
697738
Ctx: ctx,
698739
Mode: ClientModeFile,
699-
// Mode: ClientModeDir,
700740
Getters: map[string]Getter{
701741
"http": httpGetter,
702742
},
@@ -770,6 +810,36 @@ func testHttpServerWithXTerraformGetLoop(t *testing.T) net.Listener {
770810
return ln
771811
}
772812

813+
func testHttpServerWithXTerraformGetDetected(t *testing.T) net.Listener {
814+
t.Helper()
815+
816+
ln, err := net.Listen("tcp", "127.0.0.1:0")
817+
if err != nil {
818+
t.Fatalf("err: %s", err)
819+
}
820+
821+
// This location requires a custom detector to work.
822+
first := fmt.Sprintf("custom|%s/archive.tar.gz", ln.Addr())
823+
824+
mux := http.NewServeMux()
825+
mux.HandleFunc("/first", func(w http.ResponseWriter, r *http.Request) {
826+
w.Header().Set("X-Terraform-Get", first)
827+
})
828+
mux.HandleFunc("/archive.tar.gz", func(w http.ResponseWriter, r *http.Request) {
829+
f, err := ioutil.ReadFile("testdata/archive.tar.gz")
830+
if err != nil {
831+
t.Fatal(err)
832+
}
833+
w.Write(f)
834+
})
835+
836+
var server http.Server
837+
server.Handler = mux
838+
go server.Serve(ln)
839+
840+
return ln
841+
}
842+
773843
func testHttpServerWithXTerraformGetProxyBypass(t *testing.T) net.Listener {
774844
t.Helper()
775845

0 commit comments

Comments
 (0)