github.com/naphatkrit/deis@v1.12.3/client/controller/models/ps/ps_test.go (about) 1 package ps 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 processesFixture string = ` 18 { 19 "count": 1, 20 "next": null, 21 "previous": null, 22 "results": [ 23 { 24 "owner": "test", 25 "app": "example-go", 26 "release": "v2", 27 "created": "2014-01-01T00:00:00UTC", 28 "updated": "2014-01-01T00:00:00UTC", 29 "uuid": "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75", 30 "type": "web", 31 "num": 1, 32 "state": "up" 33 } 34 ] 35 }` 36 37 const restartAllFixture string = `[ 38 { 39 "owner": "test", 40 "app": "example-go", 41 "release": "v2", 42 "created": "2014-01-01T00:00:00UTC", 43 "updated": "2014-01-01T00:00:00UTC", 44 "uuid": "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75", 45 "type": "web", 46 "num": 1, 47 "state": "up" 48 } 49 ] 50 ` 51 52 const restartWorkerFixture string = `[ 53 { 54 "owner": "test", 55 "app": "example-go", 56 "release": "v2", 57 "created": "2014-01-01T00:00:00UTC", 58 "updated": "2014-01-01T00:00:00UTC", 59 "uuid": "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75", 60 "type": "worker", 61 "num": 1, 62 "state": "up" 63 } 64 ] 65 ` 66 67 const restartWebTwoFixture string = `[ 68 { 69 "owner": "test", 70 "app": "example-go", 71 "release": "v2", 72 "created": "2014-01-01T00:00:00UTC", 73 "updated": "2014-01-01T00:00:00UTC", 74 "uuid": "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75", 75 "type": "web", 76 "num": 2, 77 "state": "up" 78 } 79 ] 80 ` 81 82 const scaleExpected string = `{"web":2}` 83 84 type fakeHTTPServer struct{} 85 86 func (fakeHTTPServer) ServeHTTP(res http.ResponseWriter, req *http.Request) { 87 res.Header().Add("DEIS_API_VERSION", version.APIVersion) 88 89 if req.URL.Path == "/v1/apps/example-go/containers/" && req.Method == "GET" { 90 res.Write([]byte(processesFixture)) 91 return 92 } 93 94 if req.URL.Path == "/v1/apps/example-go/containers/restart/" && req.Method == "POST" { 95 res.Write([]byte(restartAllFixture)) 96 return 97 } 98 99 if req.URL.Path == "/v1/apps/example-go/containers/worker/restart/" && req.Method == "POST" { 100 res.Write([]byte(restartWorkerFixture)) 101 return 102 } 103 104 if req.URL.Path == "/v1/apps/example-go/containers/web/2/restart/" && req.Method == "POST" { 105 res.Write([]byte(restartWebTwoFixture)) 106 return 107 } 108 109 if req.URL.Path == "/v1/apps/example-go/scale/" && req.Method == "POST" { 110 body, err := ioutil.ReadAll(req.Body) 111 112 if err != nil { 113 fmt.Println(err) 114 res.WriteHeader(http.StatusInternalServerError) 115 res.Write(nil) 116 } 117 118 if string(body) != scaleExpected { 119 fmt.Printf("Expected '%s', Got '%s'\n", scaleExpected, body) 120 res.WriteHeader(http.StatusInternalServerError) 121 res.Write(nil) 122 return 123 } 124 125 res.WriteHeader(http.StatusNoContent) 126 res.Write(nil) 127 return 128 } 129 130 fmt.Printf("Unrecognized URL %s\n", req.URL) 131 res.WriteHeader(http.StatusNotFound) 132 res.Write(nil) 133 } 134 135 func TestProcessesList(t *testing.T) { 136 t.Parallel() 137 138 expected := []api.Process{ 139 api.Process{ 140 Owner: "test", 141 App: "example-go", 142 Release: "v2", 143 Created: "2014-01-01T00:00:00UTC", 144 Updated: "2014-01-01T00:00:00UTC", 145 UUID: "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75", 146 Type: "web", 147 Num: 1, 148 State: "up", 149 }, 150 } 151 152 handler := fakeHTTPServer{} 153 server := httptest.NewServer(handler) 154 defer server.Close() 155 156 u, err := url.Parse(server.URL) 157 158 if err != nil { 159 t.Fatal(err) 160 } 161 162 httpClient := client.CreateHTTPClient(false) 163 164 client := client.Client{HTTPClient: httpClient, ControllerURL: *u, Token: "abc"} 165 166 actual, _, err := List(&client, "example-go", 100) 167 168 if err != nil { 169 t.Fatal(err) 170 } 171 172 if !reflect.DeepEqual(expected, actual) { 173 t.Error(fmt.Errorf("Expected %v, Got %v", expected, actual)) 174 } 175 } 176 177 type testExpected struct { 178 Num int 179 Type string 180 Expected []api.Process 181 } 182 183 func TestAppsRestart(t *testing.T) { 184 t.Parallel() 185 186 tests := []testExpected{ 187 testExpected{ 188 Num: -1, 189 Type: "", 190 Expected: []api.Process{ 191 api.Process{ 192 Owner: "test", 193 App: "example-go", 194 Release: "v2", 195 Created: "2014-01-01T00:00:00UTC", 196 Updated: "2014-01-01T00:00:00UTC", 197 UUID: "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75", 198 Type: "web", 199 Num: 1, 200 State: "up", 201 }, 202 }, 203 }, 204 testExpected{ 205 Num: -1, 206 Type: "worker", 207 Expected: []api.Process{ 208 api.Process{ 209 Owner: "test", 210 App: "example-go", 211 Release: "v2", 212 Created: "2014-01-01T00:00:00UTC", 213 Updated: "2014-01-01T00:00:00UTC", 214 UUID: "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75", 215 Type: "worker", 216 Num: 1, 217 State: "up", 218 }, 219 }, 220 }, 221 testExpected{ 222 Num: 2, 223 Type: "web", 224 Expected: []api.Process{ 225 api.Process{ 226 Owner: "test", 227 App: "example-go", 228 Release: "v2", 229 Created: "2014-01-01T00:00:00UTC", 230 Updated: "2014-01-01T00:00:00UTC", 231 UUID: "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75", 232 Type: "web", 233 Num: 2, 234 State: "up", 235 }, 236 }, 237 }, 238 } 239 240 handler := fakeHTTPServer{} 241 server := httptest.NewServer(&handler) 242 defer server.Close() 243 244 u, err := url.Parse(server.URL) 245 246 if err != nil { 247 t.Fatal(err) 248 } 249 250 httpClient := client.CreateHTTPClient(false) 251 252 client := client.Client{HTTPClient: httpClient, ControllerURL: *u, Token: "abc"} 253 254 for _, test := range tests { 255 actual, err := Restart(&client, "example-go", test.Type, test.Num) 256 257 if err != nil { 258 t.Error(err) 259 } 260 261 if !reflect.DeepEqual(test.Expected, actual) { 262 t.Error(fmt.Errorf("Expected %v, Got %v", test.Expected, actual)) 263 } 264 } 265 } 266 267 func TestScale(t *testing.T) { 268 t.Parallel() 269 270 handler := fakeHTTPServer{} 271 server := httptest.NewServer(&handler) 272 defer server.Close() 273 274 u, err := url.Parse(server.URL) 275 276 if err != nil { 277 t.Fatal(err) 278 } 279 280 httpClient := client.CreateHTTPClient(false) 281 282 client := client.Client{HTTPClient: httpClient, ControllerURL: *u, Token: "abc"} 283 284 if err = Scale(&client, "example-go", map[string]int{"web": 2}); err != nil { 285 t.Fatal(err) 286 } 287 }