github.com/rochacon/deis@v1.0.2-0.20150903015341-6839b592a1ff/client/controller/models/apps/apps_test.go (about)

     1  package apps
     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 appFixture string = `
    18  {
    19      "created": "2014-01-01T00:00:00UTC",
    20      "id": "example-go",
    21      "owner": "test",
    22      "structure": {},
    23      "updated": "2014-01-01T00:00:00UTC",
    24      "url": "example-go.example.com",
    25      "uuid": "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75"
    26  }`
    27  
    28  const appsFixture string = `
    29  {
    30      "count": 1,
    31      "next": null,
    32      "previous": null,
    33      "results": [
    34          {
    35              "created": "2014-01-01T00:00:00UTC",
    36              "id": "example-go",
    37              "owner": "test",
    38              "structure": {},
    39              "updated": "2014-01-01T00:00:00UTC",
    40              "url": "example-go.example.com",
    41              "uuid": "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75"
    42          }
    43      ]
    44  }`
    45  
    46  const appCreateExpected string = `{"id":"example-go"}`
    47  const appRunExpected string = `{"command":"echo hi"}`
    48  
    49  type fakeHTTPServer struct {
    50  	createID        bool
    51  	createWithoutID bool
    52  }
    53  
    54  func (f *fakeHTTPServer) ServeHTTP(res http.ResponseWriter, req *http.Request) {
    55  	res.Header().Add("DEIS_API_VERSION", version.APIVersion)
    56  
    57  	if req.URL.Path == "/v1/apps/" && req.Method == "POST" {
    58  		body, err := ioutil.ReadAll(req.Body)
    59  
    60  		if err != nil {
    61  			fmt.Println(err)
    62  			res.WriteHeader(http.StatusInternalServerError)
    63  			res.Write(nil)
    64  		}
    65  
    66  		if string(body) == appCreateExpected && f.createID == false {
    67  			f.createID = true
    68  			res.WriteHeader(http.StatusCreated)
    69  			res.Write([]byte(appFixture))
    70  			return
    71  		} else if string(body) == "" && f.createWithoutID == false {
    72  			f.createWithoutID = true
    73  			res.WriteHeader(http.StatusCreated)
    74  			res.Write([]byte(appFixture))
    75  			return
    76  		}
    77  
    78  		fmt.Printf("Unexpected Body: %s'\n", body)
    79  		res.WriteHeader(http.StatusInternalServerError)
    80  		res.Write(nil)
    81  		return
    82  	}
    83  
    84  	if req.URL.Path == "/v1/apps/" && req.Method == "GET" {
    85  		res.Write([]byte(appsFixture))
    86  		return
    87  	}
    88  
    89  	if req.URL.Path == "/v1/apps/example-go/" && req.Method == "GET" {
    90  		res.Write([]byte(appFixture))
    91  		return
    92  	}
    93  
    94  	if req.URL.Path == "/v1/apps/example-go/" && req.Method == "DELETE" {
    95  		res.WriteHeader(http.StatusNoContent)
    96  		res.Write(nil)
    97  		return
    98  	}
    99  
   100  	if req.URL.Path == "/v1/apps/example-go/logs" && req.URL.RawQuery == "" && req.Method == "GET" {
   101  		res.Write([]byte("test\nfoo\nbar\n"))
   102  		return
   103  	}
   104  
   105  	if req.URL.Path == "/v1/apps/example-go/logs" && req.URL.RawQuery == "log_lines=1" && req.Method == "GET" {
   106  		res.Write([]byte("test\n"))
   107  		return
   108  	}
   109  
   110  	if req.URL.Path == "/v1/apps/example-go/run" && req.Method == "POST" {
   111  		body, err := ioutil.ReadAll(req.Body)
   112  
   113  		if err != nil {
   114  			fmt.Println(err)
   115  			res.WriteHeader(http.StatusInternalServerError)
   116  			res.Write(nil)
   117  		}
   118  
   119  		if string(body) != appRunExpected {
   120  			fmt.Printf("Expected '%s', Got '%s'\n", appRunExpected, body)
   121  			res.WriteHeader(http.StatusInternalServerError)
   122  			res.Write(nil)
   123  			return
   124  		}
   125  
   126  		res.Write([]byte(`[0,"hi\n"]`))
   127  		return
   128  	}
   129  
   130  	fmt.Printf("Unrecongized URL %s\n", req.URL)
   131  	res.WriteHeader(http.StatusNotFound)
   132  	res.Write(nil)
   133  }
   134  
   135  func TestAppsCreate(t *testing.T) {
   136  	t.Parallel()
   137  
   138  	expected := api.App{
   139  		ID:      "example-go",
   140  		Created: "2014-01-01T00:00:00UTC",
   141  		Owner:   "test",
   142  		Updated: "2014-01-01T00:00:00UTC",
   143  		URL:     "example-go.example.com",
   144  		UUID:    "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75",
   145  	}
   146  
   147  	handler := fakeHTTPServer{createID: false, createWithoutID: false}
   148  	server := httptest.NewServer(&handler)
   149  	defer server.Close()
   150  
   151  	u, err := url.Parse(server.URL)
   152  
   153  	if err != nil {
   154  		t.Fatal(err)
   155  	}
   156  
   157  	httpClient := client.CreateHTTPClient(false)
   158  
   159  	client := client.Client{HTTPClient: httpClient, ControllerURL: *u, Token: "abc"}
   160  
   161  	for _, id := range []string{"example-go", ""} {
   162  		actual, err := New(&client, id)
   163  
   164  		if err != nil {
   165  			t.Fatal(err)
   166  		}
   167  
   168  		if !reflect.DeepEqual(expected, actual) {
   169  			t.Errorf("Expected %v, Got %v", expected, actual)
   170  		}
   171  	}
   172  }
   173  
   174  func TestAppsGet(t *testing.T) {
   175  	t.Parallel()
   176  
   177  	expected := api.App{
   178  		ID:      "example-go",
   179  		Created: "2014-01-01T00:00:00UTC",
   180  		Owner:   "test",
   181  		Updated: "2014-01-01T00:00:00UTC",
   182  		URL:     "example-go.example.com",
   183  		UUID:    "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75",
   184  	}
   185  
   186  	handler := fakeHTTPServer{}
   187  	server := httptest.NewServer(&handler)
   188  	defer server.Close()
   189  
   190  	u, err := url.Parse(server.URL)
   191  
   192  	if err != nil {
   193  		t.Fatal(err)
   194  	}
   195  
   196  	httpClient := client.CreateHTTPClient(false)
   197  
   198  	client := client.Client{HTTPClient: httpClient, ControllerURL: *u, Token: "abc"}
   199  
   200  	actual, err := Get(&client, "example-go")
   201  
   202  	if err != nil {
   203  		t.Fatal(err)
   204  	}
   205  
   206  	if !reflect.DeepEqual(expected, actual) {
   207  		t.Errorf("Expected %v, Got %v", expected, actual)
   208  	}
   209  }
   210  
   211  func TestAppsDestroy(t *testing.T) {
   212  	t.Parallel()
   213  
   214  	handler := fakeHTTPServer{}
   215  	server := httptest.NewServer(&handler)
   216  	defer server.Close()
   217  
   218  	u, err := url.Parse(server.URL)
   219  
   220  	if err != nil {
   221  		t.Fatal(err)
   222  	}
   223  
   224  	httpClient := client.CreateHTTPClient(false)
   225  
   226  	client := client.Client{HTTPClient: httpClient, ControllerURL: *u, Token: "abc"}
   227  
   228  	if err = Delete(&client, "example-go"); err != nil {
   229  		t.Fatal(err)
   230  	}
   231  }
   232  
   233  func TestAppsRun(t *testing.T) {
   234  	t.Parallel()
   235  
   236  	expected := api.AppRunResponse{
   237  		Output:     "hi\n",
   238  		ReturnCode: 0,
   239  	}
   240  
   241  	handler := fakeHTTPServer{}
   242  	server := httptest.NewServer(&handler)
   243  	defer server.Close()
   244  
   245  	u, err := url.Parse(server.URL)
   246  
   247  	if err != nil {
   248  		t.Fatal(err)
   249  	}
   250  
   251  	httpClient := client.CreateHTTPClient(false)
   252  
   253  	client := client.Client{HTTPClient: httpClient, ControllerURL: *u, Token: "abc"}
   254  
   255  	actual, err := Run(&client, "example-go", "echo hi")
   256  
   257  	if err != nil {
   258  		t.Fatal(err)
   259  	}
   260  
   261  	if !reflect.DeepEqual(expected, actual) {
   262  		t.Errorf("Expected %v, Got %v", expected, actual)
   263  	}
   264  }
   265  
   266  func TestAppsList(t *testing.T) {
   267  	t.Parallel()
   268  
   269  	expected := []api.App{
   270  		api.App{
   271  			ID:      "example-go",
   272  			Created: "2014-01-01T00:00:00UTC",
   273  			Owner:   "test",
   274  			Updated: "2014-01-01T00:00:00UTC",
   275  			URL:     "example-go.example.com",
   276  			UUID:    "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75",
   277  		},
   278  	}
   279  
   280  	handler := fakeHTTPServer{}
   281  	server := httptest.NewServer(&handler)
   282  	defer server.Close()
   283  
   284  	u, err := url.Parse(server.URL)
   285  
   286  	if err != nil {
   287  		t.Fatal(err)
   288  	}
   289  
   290  	httpClient := client.CreateHTTPClient(false)
   291  
   292  	client := client.Client{HTTPClient: httpClient, ControllerURL: *u, Token: "abc"}
   293  
   294  	actual, _, err := List(&client, 100)
   295  
   296  	if err != nil {
   297  		t.Fatal(err)
   298  	}
   299  
   300  	if !reflect.DeepEqual(expected, actual) {
   301  		t.Errorf("Expected %v, Got %v", expected, actual)
   302  	}
   303  }
   304  
   305  type testExpected struct {
   306  	Input    int
   307  	Expected string
   308  }
   309  
   310  func TestAppsLogs(t *testing.T) {
   311  	t.Parallel()
   312  
   313  	tests := []testExpected{
   314  		testExpected{
   315  			Input:    -1,
   316  			Expected: "test\nfoo\nbar\n",
   317  		},
   318  		testExpected{
   319  			Input:    1,
   320  			Expected: "test\n",
   321  		},
   322  	}
   323  
   324  	handler := fakeHTTPServer{}
   325  	server := httptest.NewServer(&handler)
   326  	defer server.Close()
   327  
   328  	u, err := url.Parse(server.URL)
   329  
   330  	if err != nil {
   331  		t.Fatal(err)
   332  	}
   333  
   334  	httpClient := client.CreateHTTPClient(false)
   335  
   336  	client := client.Client{HTTPClient: httpClient, ControllerURL: *u, Token: "abc"}
   337  
   338  	for _, test := range tests {
   339  		actual, err := Logs(&client, "example-go", test.Input)
   340  
   341  		if err != nil {
   342  			t.Error(err)
   343  		}
   344  
   345  		if actual != test.Expected {
   346  			t.Errorf("Expected %s, Got %s", test.Expected, actual)
   347  		}
   348  	}
   349  }