Describe("Properties", func() { Context("http success", func() { BeforeEach(func() { server.AppendHandlers( ghttp.CombineHandlers( ghttp.VerifyRequest("GET", "/api/containers/containerhandle/properties"), ghttp.RespondWith(200, `{"Keymaster": "Gatekeeper"}`), func(w http.ResponseWriter, req *http.Request) { req.Body.Close() }, ), ) }) It("returns info about the container", func() { properties, err := container.Properties() Expect(err).NotTo(HaveOccurred()) Expect(properties).Should(Equal(garden.Properties{"Keymaster": "Gatekeeper"})) }) }) Context("http 500 and returns Exception Json", func() { BeforeEach(func() { server.AppendHandlers( ghttp.CombineHandlers( ghttp.VerifyRequest("GET", "/api/containers/containerhandle/properties"), ghttp.RespondWith(500, `{"Message": "An exception occurred", "ExceptionMessage":"Object reference not set to an instance of an object."}`), func(w http.ResponseWriter, req *http.Request) { req.Body.Close() }, ),
) var _ = Describe("Container", func() { var ( container garden.Container propertyManager *fakes.FakePropertyManager ) Describe("Properties", func() { BeforeEach(func() { propertyManager = new(fakes.FakePropertyManager) container = gardener.NewContainer(nil, "some-handle", nil, nil, propertyManager) }) It("delegates to the property manager for Properties", func() { container.Properties() Expect(propertyManager.AllCallCount()).To(Equal(1)) handle := propertyManager.AllArgsForCall(0) Expect(handle).To(Equal("some-handle")) }) It("delegates to the property manager for SetProperty", func() { container.SetProperty("name", "value") Expect(propertyManager.SetCallCount()).To(Equal(1)) handle, prop, val := propertyManager.SetArgsForCall(0) Expect(handle).To(Equal("some-handle")) Expect(prop).To(Equal("name")) Expect(val).To(Equal("value")) }) It("delegates to the property manager for Property", func() {
It("includes the properties", func() { info, err := container.Info() Expect(err).ToNot(HaveOccurred()) Expect(info.Properties["foo"]).To(Equal("bar")) Expect(info.Properties["a"]).To(Equal("b")) Expect(info.Properties).To(HaveLen(2)) }) }) Describe("getting container properties without getting info", func() { It("can list properties", func() { err := container.SetProperty("bar", "baz") value, err := container.Properties() Expect(err).ToNot(HaveOccurred()) Expect(value).To(HaveKeyWithValue("foo", "bar")) Expect(value).To(HaveKeyWithValue("bar", "baz")) }) }) Describe("updating container properties", func() { It("can CRUD", func() { value, err := container.Property("foo") Expect(err).ToNot(HaveOccurred()) Expect(value).To(Equal("bar")) err = container.SetProperty("foo", "baz") Expect(err).ToNot(HaveOccurred())
It("returns the error", func() { _, err := container.Info() Ω(err).Should(Equal(disaster)) }) }) }) Describe("Properties", func() { Context("when getting properties succeeds", func() { BeforeEach(func() { fakeConnection.PropertiesReturns(garden.Properties{"Foo": "bar"}, nil) }) It("returns the properties map", func() { result, err := container.Properties() Ω(err).ShouldNot(HaveOccurred()) Ω(result).Should(Equal(garden.Properties{"Foo": "bar"})) }) }) Context("when getting properties fails", func() { disaster := errors.New("oh no!") BeforeEach(func() { fakeConnection.PropertiesReturns(nil, disaster) }) It("returns the error", func() { _, err := container.Properties() Ω(err).Should(Equal(disaster))
func containerIP(container garden.Container) string { properties, err := container.Properties() Expect(err).NotTo(HaveOccurred()) return properties["kawasaki.container-ip"] }