github.com/maheshbr/terraform@v0.3.1-0.20141020033300-deec7194a3ea/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", ":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  `