github.com/naphatkrit/deis@v1.12.3/client/controller/models/builds/builds_test.go (about) 1 package builds 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "net/http" 7 "net/http/httptest" 8 "net/url" 9 "reflect" 10 "testing" 11 12 "github.com/deis/deis/client/controller/api" 13 "github.com/deis/deis/client/controller/client" 14 "github.com/deis/deis/version" 15 ) 16 17 const buildsFixture string = ` 18 { 19 "count": 1, 20 "next": null, 21 "previous": null, 22 "results": [ 23 { 24 "app": "example-go", 25 "created": "2014-01-01T00:00:00UTC", 26 "dockerfile": "FROM deis/slugrunner RUN mkdir -p /app WORKDIR /app ENTRYPOINT [\"/runner/init\"] ADD slug.tgz /app ENV GIT_SHA 060da68f654e75fac06dbedd1995d5f8ad9084db", 27 "image": "example-go", 28 "owner": "test", 29 "procfile": { 30 "web": "example-go" 31 }, 32 "sha": "060da68f", 33 "updated": "2014-01-01T00:00:00UTC", 34 "uuid": "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75" 35 } 36 ] 37 }` 38 39 const buildFixture string = ` 40 { 41 "app": "example-go", 42 "created": "2014-01-01T00:00:00UTC", 43 "dockerfile": "", 44 "image": "deis/example-go:latest", 45 "owner": "test", 46 "procfile": { 47 "web": "example-go" 48 }, 49 "sha": "", 50 "updated": "2014-01-01T00:00:00UTC", 51 "uuid": "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75" 52 }` 53 54 const buildExpected string = `{"image":"deis/example-go","procfile":{"web":"example-go"}}` 55 56 type fakeHTTPServer struct{} 57 58 func (fakeHTTPServer) ServeHTTP(res http.ResponseWriter, req *http.Request) { 59 res.Header().Add("DEIS_API_VERSION", version.APIVersion) 60 61 if req.URL.Path == "/v1/apps/example-go/builds/" && req.Method == "GET" { 62 res.Write([]byte(buildsFixture)) 63 return 64 } 65 66 if req.URL.Path == "/v1/apps/example-go/builds/" && req.Method == "POST" { 67 body, err := ioutil.ReadAll(req.Body) 68 69 if err != nil { 70 fmt.Println(err) 71 res.WriteHeader(http.StatusInternalServerError) 72 res.Write(nil) 73 } 74 75 if string(body) != buildExpected { 76 fmt.Printf("Expected '%s', Got '%s'\n", buildExpected, body) 77 res.WriteHeader(http.StatusInternalServerError) 78 res.Write(nil) 79 return 80 } 81 82 res.WriteHeader(http.StatusCreated) 83 res.Write([]byte(buildFixture)) 84 return 85 } 86 87 fmt.Printf("Unrecognized URL %s\n", req.URL) 88 res.WriteHeader(http.StatusNotFound) 89 res.Write(nil) 90 } 91 92 func TestBuildsList(t *testing.T) { 93 t.Parallel() 94 95 expected := []api.Build{ 96 api.Build{ 97 App: "example-go", 98 Created: "2014-01-01T00:00:00UTC", 99 Dockerfile: "FROM deis/slugrunner RUN mkdir -p /app WORKDIR /app ENTRYPOINT [\"/runner/init\"] ADD slug.tgz /app ENV GIT_SHA 060da68f654e75fac06dbedd1995d5f8ad9084db", 100 Image: "example-go", 101 Owner: "test", 102 Procfile: map[string]string{ 103 "web": "example-go", 104 }, 105 Sha: "060da68f", 106 Updated: "2014-01-01T00:00:00UTC", 107 UUID: "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75", 108 }, 109 } 110 111 handler := fakeHTTPServer{} 112 server := httptest.NewServer(handler) 113 defer server.Close() 114 115 u, err := url.Parse(server.URL) 116 117 if err != nil { 118 t.Fatal(err) 119 } 120 121 httpClient := client.CreateHTTPClient(false) 122 123 client := client.Client{HTTPClient: httpClient, ControllerURL: *u, Token: "abc"} 124 125 actual, _, err := List(&client, "example-go", 100) 126 127 if err != nil { 128 t.Fatal(err) 129 } 130 131 if !reflect.DeepEqual(expected, actual) { 132 t.Error(fmt.Errorf("Expected %v, Got %v", expected, actual)) 133 } 134 } 135 136 func TestBuildCreate(t *testing.T) { 137 t.Parallel() 138 139 expected := api.Build{ 140 App: "example-go", 141 Created: "2014-01-01T00:00:00UTC", 142 Image: "deis/example-go:latest", 143 Owner: "test", 144 Procfile: map[string]string{ 145 "web": "example-go", 146 }, 147 Updated: "2014-01-01T00:00:00UTC", 148 UUID: "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75", 149 } 150 151 handler := fakeHTTPServer{} 152 server := httptest.NewServer(handler) 153 defer server.Close() 154 155 u, err := url.Parse(server.URL) 156 157 if err != nil { 158 t.Fatal(err) 159 } 160 161 httpClient := client.CreateHTTPClient(false) 162 163 client := client.Client{HTTPClient: httpClient, ControllerURL: *u, Token: "abc"} 164 165 procfile := map[string]string{ 166 "web": "example-go", 167 } 168 169 actual, err := New(&client, "example-go", "deis/example-go", procfile) 170 171 if err != nil { 172 t.Fatal(err) 173 } 174 175 if !reflect.DeepEqual(expected, actual) { 176 t.Error(fmt.Errorf("Expected %v, Got %v", expected, actual)) 177 } 178 }