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 }