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