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  }