github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/apiserver/imagemetadata/functions_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package imagemetadata_test 5 6 import ( 7 "fmt" 8 9 jc "github.com/juju/testing/checkers" 10 gc "gopkg.in/check.v1" 11 12 "github.com/juju/juju/apiserver/imagemetadata" 13 "github.com/juju/juju/apiserver/params" 14 "github.com/juju/juju/environs" 15 "github.com/juju/juju/environs/config" 16 envtesting "github.com/juju/juju/environs/testing" 17 "github.com/juju/juju/jujuclient/jujuclienttesting" 18 "github.com/juju/juju/state/cloudimagemetadata" 19 "github.com/juju/juju/testing" 20 ) 21 22 type funcSuite struct { 23 baseImageMetadataSuite 24 25 env environs.Environ 26 expected cloudimagemetadata.Metadata 27 } 28 29 var _ = gc.Suite(&funcSuite{}) 30 31 func (s *funcSuite) SetUpTest(c *gc.C) { 32 s.baseImageMetadataSuite.SetUpTest(c) 33 34 var err error 35 s.env, err = environs.Prepare( 36 envtesting.BootstrapContext(c), 37 jujuclienttesting.NewMemStore(), 38 environs.PrepareParams{ 39 ControllerName: "dummycontroller", 40 BaseConfig: mockConfig(), 41 CloudName: "dummy", 42 }, 43 ) 44 c.Assert(err, jc.ErrorIsNil) 45 s.state = s.constructState(s.env.Config()) 46 47 s.expected = cloudimagemetadata.Metadata{ 48 cloudimagemetadata.MetadataAttributes{ 49 Stream: "released", 50 Source: "custom", 51 Series: config.LatestLtsSeries(), 52 Arch: "amd64", 53 Region: "dummy_region", 54 }, 55 0, 56 "", 57 } 58 } 59 60 func (s *funcSuite) TestParseMetadataNoSource(c *gc.C) { 61 m, err := imagemetadata.ParseMetadataFromParams(s.api, params.CloudImageMetadata{}, s.env) 62 c.Assert(err, jc.ErrorIsNil) 63 c.Assert(m, gc.DeepEquals, s.expected) 64 } 65 66 func (s *funcSuite) TestParseMetadataAnySource(c *gc.C) { 67 s.expected.Source = "any" 68 m, err := imagemetadata.ParseMetadataFromParams(s.api, params.CloudImageMetadata{Source: "any"}, s.env) 69 c.Assert(err, jc.ErrorIsNil) 70 c.Assert(m, gc.DeepEquals, s.expected) 71 } 72 73 func (s *funcSuite) TestParseMetadataAnyStream(c *gc.C) { 74 stream := "happy stream" 75 s.expected.Stream = stream 76 77 m, err := imagemetadata.ParseMetadataFromParams(s.api, params.CloudImageMetadata{Stream: stream}, s.env) 78 c.Assert(err, jc.ErrorIsNil) 79 c.Assert(m, gc.DeepEquals, s.expected) 80 } 81 82 func (s *funcSuite) TestParseMetadataDefaultStream(c *gc.C) { 83 m, err := imagemetadata.ParseMetadataFromParams(s.api, params.CloudImageMetadata{}, s.env) 84 c.Assert(err, jc.ErrorIsNil) 85 c.Assert(m, gc.DeepEquals, s.expected) 86 } 87 88 func (s *funcSuite) TestParseMetadataAnyRegion(c *gc.C) { 89 region := "region" 90 s.expected.Region = region 91 92 m, err := imagemetadata.ParseMetadataFromParams(s.api, params.CloudImageMetadata{Region: region}, s.env) 93 c.Assert(err, jc.ErrorIsNil) 94 c.Assert(m, gc.DeepEquals, s.expected) 95 } 96 97 type funcMetadataSuite struct { 98 testing.BaseSuite 99 } 100 101 var _ = gc.Suite(&funcMetadataSuite{}) 102 103 func (s *funcMetadataSuite) TestProcessErrorsNil(c *gc.C) { 104 s.assertProcessErrorsNone(c, nil) 105 } 106 107 func (s *funcMetadataSuite) TestProcessErrorsEmpty(c *gc.C) { 108 s.assertProcessErrorsNone(c, []params.ErrorResult{}) 109 } 110 111 func (s *funcMetadataSuite) TestProcessErrorsNilError(c *gc.C) { 112 s.assertProcessErrorsNone(c, []params.ErrorResult{{Error: nil}}) 113 } 114 115 func (s *funcMetadataSuite) TestProcessErrorsEmptyMessageError(c *gc.C) { 116 s.assertProcessErrorsNone(c, []params.ErrorResult{{Error: ¶ms.Error{Message: ""}}}) 117 } 118 119 func (s *funcMetadataSuite) TestProcessErrorsFullError(c *gc.C) { 120 msg := "my bad" 121 122 errs := []params.ErrorResult{{Error: ¶ms.Error{Message: msg}}} 123 124 expected := fmt.Sprintf(` 125 saving some image metadata: 126 %v`[1:], msg) 127 128 s.assertProcessErrors(c, errs, expected) 129 } 130 131 func (s *funcMetadataSuite) TestProcessErrorsMany(c *gc.C) { 132 msg1 := "my bad" 133 msg2 := "my good" 134 135 errs := []params.ErrorResult{ 136 {Error: ¶ms.Error{Message: msg1}}, 137 {Error: ¶ms.Error{Message: ""}}, 138 {Error: nil}, 139 {Error: ¶ms.Error{Message: msg2}}, 140 } 141 142 expected := fmt.Sprintf(` 143 saving some image metadata: 144 %v 145 %v`[1:], msg1, msg2) 146 147 s.assertProcessErrors(c, errs, expected) 148 } 149 150 var process = imagemetadata.ProcessErrors 151 152 func (s *funcMetadataSuite) assertProcessErrorsNone(c *gc.C, errs []params.ErrorResult) { 153 c.Assert(process(errs), jc.ErrorIsNil) 154 } 155 156 func (s *funcMetadataSuite) assertProcessErrors(c *gc.C, errs []params.ErrorResult, expected string) { 157 c.Assert(process(errs), gc.ErrorMatches, expected) 158 }