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  }