github.com/schwarzm/garden-linux@v0.0.0-20150507151835-33bca2147c47/integration/lifecycle/container_info_test.go (about)

     1  package lifecycle_test
     2  
     3  import (
     4  	"github.com/cloudfoundry-incubator/garden"
     5  
     6  	. "github.com/onsi/ginkgo"
     7  	. "github.com/onsi/gomega"
     8  )
     9  
    10  var _ = Describe("Container information", func() {
    11  
    12  	BeforeEach(func() {
    13  		client = startGarden()
    14  	})
    15  
    16  	Describe("for many containers", func() {
    17  		handles := []string{"handle1", "handle2"}
    18  		BeforeEach(func() {
    19  			_, err := client.Create(garden.ContainerSpec{
    20  				Handle: "handle1",
    21  			})
    22  			Expect(err).ToNot(HaveOccurred())
    23  			_, err = client.Create(garden.ContainerSpec{
    24  				Handle: "handle2",
    25  			})
    26  			Expect(err).ToNot(HaveOccurred())
    27  		})
    28  
    29  		Describe(".BulkInfo", func() {
    30  			It("returns container info for the specified handles", func() {
    31  				bulkInfo, err := client.BulkInfo(handles)
    32  				Expect(err).ToNot(HaveOccurred())
    33  				Expect(bulkInfo).To(HaveLen(2))
    34  				for _, containerInfoEntry := range bulkInfo {
    35  					Expect(containerInfoEntry.Err).ToNot(HaveOccurred())
    36  				}
    37  			})
    38  		})
    39  
    40  		Describe(".BulkMetrics", func() {
    41  			It("returns container metrics for the specified handles", func() {
    42  				bulkInfo, err := client.BulkMetrics(handles)
    43  				Expect(err).ToNot(HaveOccurred())
    44  				Expect(bulkInfo).To(HaveLen(2))
    45  				for _, containerMetricsEntry := range bulkInfo {
    46  					Expect(containerMetricsEntry.Err).ToNot(HaveOccurred())
    47  				}
    48  			})
    49  		})
    50  	})
    51  
    52  	Describe("for a single container", func() {
    53  		var container garden.Container
    54  
    55  		BeforeEach(func() {
    56  			var err error
    57  
    58  			container, err = client.Create(garden.ContainerSpec{
    59  				Properties: garden.Properties{
    60  					"foo": "bar",
    61  					"a":   "b",
    62  				},
    63  			})
    64  			Expect(err).ToNot(HaveOccurred())
    65  		})
    66  
    67  		AfterEach(func() {
    68  			err := client.Destroy(container.Handle())
    69  			Expect(err).ToNot(HaveOccurred())
    70  		})
    71  
    72  		Describe("info for one container", func() {
    73  			It("includes the properties", func() {
    74  				info, err := container.Info()
    75  				Expect(err).ToNot(HaveOccurred())
    76  
    77  				Expect(info.Properties["foo"]).To(Equal("bar"))
    78  				Expect(info.Properties["a"]).To(Equal("b"))
    79  
    80  				Expect(info.Properties).To(HaveLen(2))
    81  			})
    82  		})
    83  
    84  		Describe("getting container metrics without getting info", func() {
    85  			It("can list metrics", func() {
    86  				metrics, err := container.Metrics()
    87  				Expect(err).ToNot(HaveOccurred())
    88  
    89  				Expect(metrics).To(BeAssignableToTypeOf(garden.Metrics{}))
    90  				Expect(metrics).ToNot(Equal(garden.Metrics{}))
    91  			})
    92  		})
    93  
    94  		Describe("getting container properties without getting info", func() {
    95  			It("can list properties", func() {
    96  				err := container.SetProperty("bar", "baz")
    97  
    98  				value, err := container.Properties()
    99  				Expect(err).ToNot(HaveOccurred())
   100  				Expect(value).To(HaveKeyWithValue("foo", "bar"))
   101  				Expect(value).To(HaveKeyWithValue("bar", "baz"))
   102  			})
   103  		})
   104  
   105  		Describe("updating container properties", func() {
   106  			It("can CRUD", func() {
   107  				value, err := container.Property("foo")
   108  				Expect(err).ToNot(HaveOccurred())
   109  				Expect(value).To(Equal("bar"))
   110  
   111  				err = container.SetProperty("foo", "baz")
   112  				Expect(err).ToNot(HaveOccurred())
   113  
   114  				err = container.RemoveProperty("a")
   115  				Expect(err).ToNot(HaveOccurred())
   116  
   117  				info, err := container.Info()
   118  				Expect(err).ToNot(HaveOccurred())
   119  
   120  				Expect(info.Properties).To(Equal(garden.Properties{
   121  					"foo": "baz",
   122  				}))
   123  			})
   124  		})
   125  
   126  		Describe("listing container info", func() {
   127  			var undesiredHandles []string
   128  
   129  			BeforeEach(func() {
   130  				undesiredContainer, err := client.Create(garden.ContainerSpec{
   131  					Properties: garden.Properties{
   132  						"foo": "baz",
   133  						"a":   "b",
   134  					},
   135  				})
   136  
   137  				Expect(err).ToNot(HaveOccurred())
   138  
   139  				undesiredHandles = append(undesiredHandles, undesiredContainer.Handle())
   140  
   141  				undesiredContainer, err = client.Create(garden.ContainerSpec{
   142  					Properties: garden.Properties{
   143  						"baz": "bar",
   144  						"a":   "b",
   145  					},
   146  				})
   147  
   148  				Expect(err).ToNot(HaveOccurred())
   149  
   150  				undesiredHandles = append(undesiredHandles, undesiredContainer.Handle())
   151  			})
   152  
   153  			AfterEach(func() {
   154  				for _, handle := range undesiredHandles {
   155  					err := client.Destroy(handle)
   156  					Expect(err).ToNot(HaveOccurred())
   157  				}
   158  			})
   159  
   160  			It("can filter by property", func() {
   161  				containers, err := client.Containers(garden.Properties{"foo": "bar"})
   162  				Expect(err).ToNot(HaveOccurred())
   163  
   164  				Expect(containers).To(HaveLen(1))
   165  				Expect(containers[0].Handle()).To(Equal(container.Handle()))
   166  
   167  				containers, err = client.Containers(garden.Properties{"matthew": "mcconaughey"})
   168  				Expect(err).ToNot(HaveOccurred())
   169  
   170  				Expect(containers).To(BeEmpty())
   171  			})
   172  		})
   173  	})
   174  })