github.com/asifdxtreme/cli@v6.1.3-0.20150123051144-9ead8700b4ae+incompatible/cf/api/app_instances/app_instances_test.go (about)

     1  package app_instances_test
     2  
     3  import (
     4  	"net/http"
     5  	"net/http/httptest"
     6  	"time"
     7  
     8  	testapi "github.com/cloudfoundry/cli/cf/api/fakes"
     9  	"github.com/cloudfoundry/cli/cf/models"
    10  	"github.com/cloudfoundry/cli/cf/net"
    11  	testconfig "github.com/cloudfoundry/cli/testhelpers/configuration"
    12  	testnet "github.com/cloudfoundry/cli/testhelpers/net"
    13  	testterm "github.com/cloudfoundry/cli/testhelpers/terminal"
    14  
    15  	. "github.com/cloudfoundry/cli/cf/api/app_instances"
    16  	. "github.com/cloudfoundry/cli/testhelpers/matchers"
    17  	. "github.com/onsi/ginkgo"
    18  	. "github.com/onsi/gomega"
    19  )
    20  
    21  var _ = Describe("AppInstancesRepo", func() {
    22  	Describe("Getting the instances for an application", func() {
    23  		It("returns instances of the app, given a guid", func() {
    24  			ts, handler, repo := createAppInstancesRepo([]testnet.TestRequest{
    25  				appInstancesRequest,
    26  				appStatsRequest,
    27  			})
    28  			defer ts.Close()
    29  			appGuid := "my-cool-app-guid"
    30  
    31  			instances, err := repo.GetInstances(appGuid)
    32  			Expect(err).NotTo(HaveOccurred())
    33  			Expect(handler).To(HaveAllRequestsCalled())
    34  
    35  			Expect(len(instances)).To(Equal(2))
    36  
    37  			Expect(instances[0].State).To(Equal(models.InstanceRunning))
    38  			Expect(instances[1].State).To(Equal(models.InstanceStarting))
    39  
    40  			instance0 := instances[0]
    41  			Expect(instance0.Since).To(Equal(time.Unix(1379522342, 0)))
    42  			Expect(instance0.DiskQuota).To(Equal(int64(1073741824)))
    43  			Expect(instance0.DiskUsage).To(Equal(int64(56037376)))
    44  			Expect(instance0.MemQuota).To(Equal(int64(67108864)))
    45  			Expect(instance0.MemUsage).To(Equal(int64(19218432)))
    46  			Expect(instance0.CpuUsage).To(Equal(3.659571249238058e-05))
    47  		})
    48  	})
    49  
    50  	Describe("Deleting an instance for an application", func() {
    51  		It("returns no error if the response is successful", func() {
    52  			ts, handler, repo := createAppInstancesRepo([]testnet.TestRequest{
    53  				deleteInstanceRequest,
    54  			})
    55  			defer ts.Close()
    56  			appGuid := "my-cool-app-guid"
    57  
    58  			err := repo.DeleteInstance(appGuid, 0)
    59  			Expect(err).NotTo(HaveOccurred())
    60  			Expect(handler).To(HaveAllRequestsCalled())
    61  		})
    62  
    63  		It("returns the error if the response is unsuccessful", func() {
    64  			ts, handler, repo := createAppInstancesRepo([]testnet.TestRequest{
    65  				deleteInstanceFromUnkownApp,
    66  			})
    67  			defer ts.Close()
    68  			appGuid := "some-wrong-app-guid"
    69  
    70  			err := repo.DeleteInstance(appGuid, 0)
    71  			Expect(err).To(HaveOccurred())
    72  			Expect(handler).To(HaveAllRequestsCalled())
    73  
    74  		})
    75  	})
    76  })
    77  
    78  var appStatsRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{
    79  	Method: "GET",
    80  	Path:   "/v2/apps/my-cool-app-guid/stats",
    81  	Response: testnet.TestResponse{Status: http.StatusOK, Body: `
    82  {
    83    "1":{
    84      "stats": {
    85          "disk_quota": 10000,
    86          "mem_quota": 1024,
    87          "usage": {
    88              "cpu": 0.3,
    89              "disk": 10000,
    90              "mem": 1024
    91          }
    92      }
    93    },
    94    "0":{
    95      "stats": {
    96          "disk_quota": 1073741824,
    97          "mem_quota": 67108864,
    98          "usage": {
    99              "cpu": 3.659571249238058e-05,
   100              "disk": 56037376,
   101              "mem": 19218432
   102          }
   103      }
   104    }
   105  }`}})
   106  
   107  var appInstancesRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{
   108  	Method: "GET",
   109  	Path:   "/v2/apps/my-cool-app-guid/instances",
   110  	Response: testnet.TestResponse{Status: http.StatusOK, Body: `
   111  {
   112    "1": {
   113      "state": "STARTING",
   114      "since": 1379522342.6783738
   115    },
   116    "0": {
   117      "state": "RUNNING",
   118      "since": 1379522342.6783738
   119    }
   120  }`}})
   121  
   122  var deleteInstanceRequest = testapi.NewCloudControllerTestRequest(testnet.TestRequest{
   123  	Method:   "DELETE",
   124  	Path:     "/v2/apps/my-cool-app-guid/instances/0",
   125  	Response: testnet.TestResponse{Status: http.StatusNoContent, Body: `{}`},
   126  })
   127  
   128  var deleteInstanceFromUnkownApp = testapi.NewCloudControllerTestRequest(testnet.TestRequest{
   129  	Method:   "DELETE",
   130  	Path:     "/v2/apps/some-wrong-app-guid/instances/0",
   131  	Response: testnet.TestResponse{Status: http.StatusNotFound, Body: `{}`},
   132  })
   133  
   134  func createAppInstancesRepo(requests []testnet.TestRequest) (ts *httptest.Server, handler *testnet.TestHandler, repo AppInstancesRepository) {
   135  	ts, handler = testnet.NewServer(requests)
   136  	space := models.SpaceFields{}
   137  	space.Guid = "my-space-guid"
   138  	configRepo := testconfig.NewRepositoryWithDefaults()
   139  	configRepo.SetApiEndpoint(ts.URL)
   140  	gateway := net.NewCloudControllerGateway(configRepo, time.Now, &testterm.FakeUI{})
   141  	repo = NewCloudControllerAppInstancesRepository(configRepo, gateway)
   142  	return
   143  }