github.com/mwhudson/juju@v0.0.0-20160512215208-90ff01f3497f/environs/tools/urls_test.go (about) 1 // Copyright 2012, 2013, 2014 Canonical Ltd. 2 // Copyright 2014 Cloudbase Solutions SRL 3 // Licensed under the AGPLv3, see LICENCE file for details. 4 5 package tools_test 6 7 import ( 8 "fmt" 9 10 "github.com/juju/errors" 11 jc "github.com/juju/testing/checkers" 12 "github.com/juju/utils" 13 gc "gopkg.in/check.v1" 14 15 "github.com/juju/juju/environs" 16 "github.com/juju/juju/environs/simplestreams" 17 sstesting "github.com/juju/juju/environs/simplestreams/testing" 18 envtesting "github.com/juju/juju/environs/testing" 19 "github.com/juju/juju/environs/tools" 20 "github.com/juju/juju/juju" 21 "github.com/juju/juju/jujuclient/jujuclienttesting" 22 "github.com/juju/juju/provider/dummy" 23 "github.com/juju/juju/testing" 24 coretesting "github.com/juju/juju/testing" 25 ) 26 27 type URLsSuite struct { 28 coretesting.BaseSuite 29 } 30 31 var _ = gc.Suite(&URLsSuite{}) 32 33 func (s *URLsSuite) TearDownTest(c *gc.C) { 34 dummy.Reset(c) 35 36 s.BaseSuite.TearDownTest(c) 37 } 38 39 func (s *URLsSuite) env(c *gc.C, toolsMetadataURL string) environs.Environ { 40 attrs := dummy.SampleConfig() 41 if toolsMetadataURL != "" { 42 attrs = attrs.Merge(testing.Attrs{ 43 "agent-metadata-url": toolsMetadataURL, 44 }) 45 } 46 env, err := environs.Prepare(envtesting.BootstrapContext(c), 47 jujuclienttesting.NewMemStore(), 48 environs.PrepareParams{ 49 ControllerName: attrs["name"].(string), 50 BaseConfig: attrs, 51 CloudName: "dummy", 52 }, 53 ) 54 c.Assert(err, jc.ErrorIsNil) 55 return env 56 } 57 58 func (s *URLsSuite) TestToolsURLsNoConfigURL(c *gc.C) { 59 env := s.env(c, "") 60 sources, err := tools.GetMetadataSources(env) 61 c.Assert(err, jc.ErrorIsNil) 62 sstesting.AssertExpectedSources(c, sources, []sstesting.SourceDetails{{"https://streams.canonical.com/juju/tools/", juju.JujuPublicKey}}) 63 } 64 65 func (s *URLsSuite) TestToolsSources(c *gc.C) { 66 env := s.env(c, "config-tools-metadata-url") 67 sources, err := tools.GetMetadataSources(env) 68 c.Assert(err, jc.ErrorIsNil) 69 sstesting.AssertExpectedSources(c, sources, []sstesting.SourceDetails{ 70 {"config-tools-metadata-url/", juju.JujuPublicKey}, 71 {"https://streams.canonical.com/juju/tools/", juju.JujuPublicKey}, 72 }) 73 } 74 75 func (s *URLsSuite) TestToolsMetadataURLsRegisteredFuncs(c *gc.C) { 76 tools.RegisterToolsDataSourceFunc("id0", func(environs.Environ) (simplestreams.DataSource, error) { 77 return simplestreams.NewURLDataSource("id0", "betwixt/releases", utils.NoVerifySSLHostnames, simplestreams.DEFAULT_CLOUD_DATA, false), nil 78 }) 79 tools.RegisterToolsDataSourceFunc("id1", func(environs.Environ) (simplestreams.DataSource, error) { 80 return simplestreams.NewURLDataSource("id1", "yoink", utils.NoVerifySSLHostnames, simplestreams.SPECIFIC_CLOUD_DATA, false), nil 81 }) 82 // overwrite the one previously registered against id1 83 tools.RegisterToolsDataSourceFunc("id1", func(environs.Environ) (simplestreams.DataSource, error) { 84 // NotSupported errors do not cause GetMetadataSources to fail, 85 // they just cause the datasource function to be ignored. 86 return nil, errors.NewNotSupported(nil, "oyvey") 87 }) 88 defer tools.UnregisterToolsDataSourceFunc("id0") 89 defer tools.UnregisterToolsDataSourceFunc("id1") 90 91 env := s.env(c, "config-tools-metadata-url") 92 sources, err := tools.GetMetadataSources(env) 93 c.Assert(err, jc.ErrorIsNil) 94 sstesting.AssertExpectedSources(c, sources, []sstesting.SourceDetails{ 95 {"config-tools-metadata-url/", juju.JujuPublicKey}, 96 {"betwixt/releases/", ""}, 97 {"https://streams.canonical.com/juju/tools/", juju.JujuPublicKey}, 98 }) 99 } 100 101 func (s *URLsSuite) TestToolsMetadataURLsRegisteredFuncsError(c *gc.C) { 102 tools.RegisterToolsDataSourceFunc("id0", func(environs.Environ) (simplestreams.DataSource, error) { 103 // Non-NotSupported errors cause GetMetadataSources to fail. 104 return nil, errors.New("oyvey!") 105 }) 106 defer tools.UnregisterToolsDataSourceFunc("id0") 107 108 env := s.env(c, "config-tools-metadata-url") 109 _, err := tools.GetMetadataSources(env) 110 c.Assert(err, gc.ErrorMatches, "oyvey!") 111 } 112 113 func (s *URLsSuite) TestToolsURL(c *gc.C) { 114 var toolsTests = []struct { 115 in string 116 expected string 117 expectedErr error 118 }{{ 119 in: "", 120 expected: "", 121 expectedErr: nil, 122 }, { 123 in: "file://foo", 124 expected: "file://foo", 125 expectedErr: nil, 126 }, { 127 in: "http://foo", 128 expected: "http://foo", 129 expectedErr: nil, 130 }, { 131 in: "foo", 132 expected: "", 133 expectedErr: fmt.Errorf("foo is not an absolute path"), 134 }} 135 toolsTests = append(toolsTests, toolsTestsPlatformSpecific...) 136 for i, t := range toolsTests { 137 c.Logf("Test %d:", i) 138 139 out, err := tools.ToolsURL(t.in) 140 c.Assert(err, gc.DeepEquals, t.expectedErr) 141 c.Assert(out, gc.Equals, t.expected) 142 } 143 }