github.com/naphatkrit/deis@v1.12.3/client/controller/models/perms/perms_test.go (about) 1 package perms 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/client" 13 "github.com/deis/deis/version" 14 ) 15 16 const adminFixture string = ` 17 { 18 "count": 1, 19 "next": null, 20 "previous": null, 21 "results": [ 22 { 23 "username": "test", 24 "is_superuser": true 25 }, 26 { 27 "username": "foo", 28 "is_superuser": true 29 } 30 ] 31 }` 32 33 const appPermsFixture string = ` 34 { 35 "users": [ 36 "test", 37 "testing" 38 ] 39 }` 40 41 const adminCreateExpected = `{"username":"test"}` 42 const appCreateExpected = `{"username":"foo"}` 43 44 type fakeHTTPServer struct{} 45 46 func (fakeHTTPServer) ServeHTTP(res http.ResponseWriter, req *http.Request) { 47 res.Header().Add("DEIS_API_VERSION", version.APIVersion) 48 49 if req.URL.Path == "/v1/admin/perms/" && req.Method == "GET" { 50 res.Write([]byte(adminFixture)) 51 return 52 } 53 54 if req.URL.Path == "/v1/admin/perms/" && req.Method == "POST" { 55 body, err := ioutil.ReadAll(req.Body) 56 57 if err != nil { 58 fmt.Println(err) 59 res.WriteHeader(http.StatusInternalServerError) 60 res.Write(nil) 61 } 62 63 if string(body) != adminCreateExpected { 64 fmt.Printf("Expected '%s', Got '%s'\n", adminCreateExpected, body) 65 res.WriteHeader(http.StatusInternalServerError) 66 res.Write(nil) 67 return 68 } 69 70 res.WriteHeader(http.StatusCreated) 71 res.Write(nil) 72 return 73 } 74 75 if req.URL.Path == "/v1/admin/perms/test" && req.Method == "DELETE" { 76 res.WriteHeader(http.StatusNoContent) 77 res.Write(nil) 78 return 79 } 80 81 if req.URL.Path == "/v1/apps/example-go/perms/" && req.Method == "GET" { 82 res.Write([]byte(appPermsFixture)) 83 return 84 } 85 86 if req.URL.Path == "/v1/apps/example-go/perms/foo" && req.Method == "DELETE" { 87 res.WriteHeader(http.StatusNoContent) 88 res.Write(nil) 89 return 90 } 91 92 if req.URL.Path == "/v1/apps/example-go/perms/" && req.Method == "POST" { 93 body, err := ioutil.ReadAll(req.Body) 94 95 if err != nil { 96 fmt.Println(err) 97 res.WriteHeader(http.StatusInternalServerError) 98 res.Write(nil) 99 } 100 101 if string(body) != appCreateExpected { 102 fmt.Printf("Expected '%s', Got '%s'\n", appCreateExpected, body) 103 res.WriteHeader(http.StatusInternalServerError) 104 res.Write(nil) 105 return 106 } 107 108 res.WriteHeader(http.StatusCreated) 109 res.Write(nil) 110 return 111 } 112 113 fmt.Printf("Unrecognized URL %s\n", req.URL) 114 res.WriteHeader(http.StatusNotFound) 115 res.Write(nil) 116 } 117 118 func TestList(t *testing.T) { 119 t.Parallel() 120 121 expected := []string{ 122 "test", 123 "testing", 124 } 125 126 handler := fakeHTTPServer{} 127 server := httptest.NewServer(handler) 128 defer server.Close() 129 130 u, err := url.Parse(server.URL) 131 132 if err != nil { 133 t.Fatal(err) 134 } 135 136 httpClient := client.CreateHTTPClient(false) 137 138 client := client.Client{HTTPClient: httpClient, ControllerURL: *u, Token: "abc"} 139 140 actual, err := List(&client, "example-go") 141 142 if err != nil { 143 t.Fatal(err) 144 } 145 146 if !reflect.DeepEqual(expected, actual) { 147 t.Errorf("Expected %v, Got %v", expected, actual) 148 } 149 } 150 151 func TestListAdmins(t *testing.T) { 152 t.Parallel() 153 154 expected := []string{ 155 "test", 156 "foo", 157 } 158 159 handler := fakeHTTPServer{} 160 server := httptest.NewServer(handler) 161 defer server.Close() 162 163 u, err := url.Parse(server.URL) 164 165 if err != nil { 166 t.Fatal(err) 167 } 168 169 httpClient := client.CreateHTTPClient(false) 170 171 client := client.Client{HTTPClient: httpClient, ControllerURL: *u, Token: "abc"} 172 173 actual, _, err := ListAdmins(&client, 100) 174 175 if err != nil { 176 t.Fatal(err) 177 } 178 179 if !reflect.DeepEqual(expected, actual) { 180 t.Errorf("Expected %v, Got %v", expected, actual) 181 } 182 } 183 184 func TestNew(t *testing.T) { 185 t.Parallel() 186 187 handler := fakeHTTPServer{} 188 server := httptest.NewServer(handler) 189 defer server.Close() 190 191 u, err := url.Parse(server.URL) 192 193 if err != nil { 194 t.Fatal(err) 195 } 196 197 httpClient := client.CreateHTTPClient(false) 198 199 client := client.Client{HTTPClient: httpClient, ControllerURL: *u, Token: "abc"} 200 201 if err = New(&client, "example-go", "foo"); err != nil { 202 t.Fatal(err) 203 } 204 } 205 206 func TestNewAdmin(t *testing.T) { 207 t.Parallel() 208 209 handler := fakeHTTPServer{} 210 server := httptest.NewServer(handler) 211 defer server.Close() 212 213 u, err := url.Parse(server.URL) 214 215 if err != nil { 216 t.Fatal(err) 217 } 218 219 httpClient := client.CreateHTTPClient(false) 220 221 client := client.Client{HTTPClient: httpClient, ControllerURL: *u, Token: "abc"} 222 223 if err = NewAdmin(&client, "test"); err != nil { 224 t.Fatal(err) 225 } 226 } 227 228 func TestDelete(t *testing.T) { 229 t.Parallel() 230 231 handler := fakeHTTPServer{} 232 server := httptest.NewServer(handler) 233 defer server.Close() 234 235 u, err := url.Parse(server.URL) 236 237 if err != nil { 238 t.Fatal(err) 239 } 240 241 httpClient := client.CreateHTTPClient(false) 242 243 client := client.Client{HTTPClient: httpClient, ControllerURL: *u, Token: "abc"} 244 245 if err = Delete(&client, "example-go", "foo"); err != nil { 246 t.Fatal(err) 247 } 248 } 249 250 func TestDeleteAdmin(t *testing.T) { 251 t.Parallel() 252 253 handler := fakeHTTPServer{} 254 server := httptest.NewServer(handler) 255 defer server.Close() 256 257 u, err := url.Parse(server.URL) 258 259 if err != nil { 260 t.Fatal(err) 261 } 262 263 httpClient := client.CreateHTTPClient(false) 264 265 client := client.Client{HTTPClient: httpClient, ControllerURL: *u, Token: "abc"} 266 267 if err = DeleteAdmin(&client, "test"); err != nil { 268 t.Fatal(err) 269 } 270 }