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  }