1
// Copyright 2015 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
4
package cloudimagemetadata_test
9
"github.com/juju/testing"
10
jc "github.com/juju/testing/checkers"
11
gc "gopkg.in/check.v1"
12
"gopkg.in/mgo.v2/bson"
14
"github.com/juju/juju/state/cloudimagemetadata"
17
type funcMetadataSuite struct {
18
testing.IsolationSuite
21
var _ = gc.Suite(&funcMetadataSuite{})
23
func (s *funcMetadataSuite) TestSearchEmptyCriteria(c *gc.C) {
24
s.assertSearchCriteriaBuilt(c, cloudimagemetadata.MetadataFilter{}, nil)
27
func (s *funcMetadataSuite) TestSearchCriteriaWithStream(c *gc.C) {
28
s.assertSearchCriteriaBuilt(c,
29
cloudimagemetadata.MetadataFilter{Stream: "stream-value"},
30
bson.D{{"stream", "stream-value"}})
33
func (s *funcMetadataSuite) TestSearchCriteriaWithRegion(c *gc.C) {
34
s.assertSearchCriteriaBuilt(c,
35
cloudimagemetadata.MetadataFilter{Region: "region-value"},
36
bson.D{{"region", "region-value"}})
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"}}}}})
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"}}}}})
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"}})
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"}})
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",
74
// This is in order in which it is built.
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"},
85
func (s *funcMetadataSuite) assertSearchCriteriaBuilt(c *gc.C,
86
criteria cloudimagemetadata.MetadataFilter,
89
clause := cloudimagemetadata.BuildSearchClauses(criteria)
90
c.Assert(fmt.Sprintf("%s", clause), jc.DeepEquals, fmt.Sprintf("%s", expected))