github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/state/cloudimagemetadata/functions_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package cloudimagemetadata_test 5 6 import ( 7 "fmt" 8 9 "github.com/juju/testing" 10 jc "github.com/juju/testing/checkers" 11 gc "gopkg.in/check.v1" 12 "gopkg.in/mgo.v2/bson" 13 14 "github.com/juju/juju/state/cloudimagemetadata" 15 ) 16 17 type funcMetadataSuite struct { 18 testing.IsolationSuite 19 } 20 21 var _ = gc.Suite(&funcMetadataSuite{}) 22 23 func (s *funcMetadataSuite) TestSearchEmptyCriteria(c *gc.C) { 24 s.assertSearchCriteriaBuilt(c, cloudimagemetadata.MetadataFilter{}, nil) 25 } 26 27 func (s *funcMetadataSuite) TestSearchCriteriaWithStream(c *gc.C) { 28 s.assertSearchCriteriaBuilt(c, 29 cloudimagemetadata.MetadataFilter{Stream: "stream-value"}, 30 bson.D{{"stream", "stream-value"}}) 31 } 32 33 func (s *funcMetadataSuite) TestSearchCriteriaWithRegion(c *gc.C) { 34 s.assertSearchCriteriaBuilt(c, 35 cloudimagemetadata.MetadataFilter{Region: "region-value"}, 36 bson.D{{"region", "region-value"}}) 37 } 38 39 func (s *funcMetadataSuite) TestSearchCriteriaWithSeries(c *gc.C) { 40 s.assertSearchCriteriaBuilt(c, 41 cloudimagemetadata.MetadataFilter{Series: []string{"series-value"}}, 42 bson.D{{"series", bson.D{{"$in", []string{"series-value"}}}}}) 43 } 44 45 func (s *funcMetadataSuite) TestSearchCriteriaWithArch(c *gc.C) { 46 s.assertSearchCriteriaBuilt(c, 47 cloudimagemetadata.MetadataFilter{Arches: []string{"arch-value"}}, 48 bson.D{{"arch", bson.D{{"$in", []string{"arch-value"}}}}}) 49 } 50 51 func (s *funcMetadataSuite) TestSearchCriteriaWithVirtType(c *gc.C) { 52 s.assertSearchCriteriaBuilt(c, 53 cloudimagemetadata.MetadataFilter{VirtType: "vtype-value"}, 54 bson.D{{"virt_type", "vtype-value"}}) 55 } 56 57 func (s *funcMetadataSuite) TestSearchCriteriaWithStorageType(c *gc.C) { 58 s.assertSearchCriteriaBuilt(c, 59 cloudimagemetadata.MetadataFilter{RootStorageType: "rootstorage-value"}, 60 bson.D{{"root_storage_type", "rootstorage-value"}}) 61 } 62 63 func (s *funcMetadataSuite) TestSearchCriteriaAll(c *gc.C) { 64 // There should not be any size mentioned in criteria. 65 s.assertSearchCriteriaBuilt(c, 66 cloudimagemetadata.MetadataFilter{ 67 RootStorageType: "rootstorage-value", 68 Series: []string{"series-value", "series-value-two"}, 69 Stream: "stream-value", 70 Region: "region-value", 71 Arches: []string{"arch-value", "arch-value-two"}, 72 VirtType: "vtype-value", 73 }, 74 // This is in order in which it is built. 75 bson.D{ 76 {"stream", "stream-value"}, 77 {"region", "region-value"}, 78 {"series", bson.D{{"$in", []string{"series-value", "series-value-two"}}}}, 79 {"arch", bson.D{{"$in", []string{"arch-value", "arch-value-two"}}}}, 80 {"virt_type", "vtype-value"}, 81 {"root_storage_type", "rootstorage-value"}, 82 }) 83 } 84 85 func (s *funcMetadataSuite) assertSearchCriteriaBuilt(c *gc.C, 86 criteria cloudimagemetadata.MetadataFilter, 87 expected bson.D, 88 ) { 89 clause := cloudimagemetadata.BuildSearchClauses(criteria) 90 c.Assert(fmt.Sprintf("%s", clause), jc.DeepEquals, fmt.Sprintf("%s", expected)) 91 }