github.com/altoros/juju-vmware@v0.0.0-20150312064031-f19ae857ccca/apiserver/charmrevisionupdater/updater_test.go (about) 1 // Copyright 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package charmrevisionupdater_test 5 6 import ( 7 "github.com/juju/errors" 8 jc "github.com/juju/testing/checkers" 9 gc "gopkg.in/check.v1" 10 "gopkg.in/juju/charm.v4" 11 12 "github.com/juju/juju/apiserver/charmrevisionupdater" 13 "github.com/juju/juju/apiserver/charmrevisionupdater/testing" 14 "github.com/juju/juju/apiserver/common" 15 apiservertesting "github.com/juju/juju/apiserver/testing" 16 jujutesting "github.com/juju/juju/juju/testing" 17 "github.com/juju/juju/state" 18 ) 19 20 type charmVersionSuite struct { 21 testing.CharmSuite 22 jujutesting.JujuConnSuite 23 24 charmrevisionupdater *charmrevisionupdater.CharmRevisionUpdaterAPI 25 resources *common.Resources 26 authoriser apiservertesting.FakeAuthorizer 27 } 28 29 var _ = gc.Suite(&charmVersionSuite{}) 30 31 func (s *charmVersionSuite) SetUpSuite(c *gc.C) { 32 s.JujuConnSuite.SetUpSuite(c) 33 s.CharmSuite.SetUpSuite(c, &s.JujuConnSuite) 34 } 35 36 func (s *charmVersionSuite) TearDownSuite(c *gc.C) { 37 s.CharmSuite.TearDownSuite(c) 38 s.JujuConnSuite.TearDownSuite(c) 39 } 40 41 func (s *charmVersionSuite) SetUpTest(c *gc.C) { 42 s.JujuConnSuite.SetUpTest(c) 43 s.CharmSuite.SetUpTest(c) 44 s.resources = common.NewResources() 45 s.AddCleanup(func(_ *gc.C) { s.resources.StopAll() }) 46 s.authoriser = apiservertesting.FakeAuthorizer{ 47 EnvironManager: true, 48 } 49 var err error 50 s.charmrevisionupdater, err = charmrevisionupdater.NewCharmRevisionUpdaterAPI(s.State, s.resources, s.authoriser) 51 c.Assert(err, jc.ErrorIsNil) 52 } 53 54 func (s *charmVersionSuite) TearDownTest(c *gc.C) { 55 s.CharmSuite.TearDownTest(c) 56 s.JujuConnSuite.TearDownTest(c) 57 } 58 59 func (s *charmVersionSuite) TestNewCharmRevisionUpdaterAPIAcceptsStateManager(c *gc.C) { 60 endPoint, err := charmrevisionupdater.NewCharmRevisionUpdaterAPI(s.State, s.resources, s.authoriser) 61 c.Assert(err, jc.ErrorIsNil) 62 c.Assert(endPoint, gc.NotNil) 63 } 64 65 func (s *charmVersionSuite) TestNewCharmRevisionUpdaterAPIRefusesNonStateManager(c *gc.C) { 66 anAuthoriser := s.authoriser 67 anAuthoriser.EnvironManager = false 68 endPoint, err := charmrevisionupdater.NewCharmRevisionUpdaterAPI(s.State, s.resources, anAuthoriser) 69 c.Assert(endPoint, gc.IsNil) 70 c.Assert(err, gc.ErrorMatches, "permission denied") 71 } 72 73 func (s *charmVersionSuite) TestUpdateRevisions(c *gc.C) { 74 s.AddMachine(c, "0", state.JobManageEnviron) 75 s.SetupScenario(c) 76 77 curl := charm.MustParseURL("cs:quantal/mysql") 78 _, err := s.State.LatestPlaceholderCharm(curl) 79 c.Assert(err, jc.Satisfies, errors.IsNotFound) 80 81 curl = charm.MustParseURL("cs:quantal/wordpress") 82 _, err = s.State.LatestPlaceholderCharm(curl) 83 c.Assert(err, jc.Satisfies, errors.IsNotFound) 84 85 result, err := s.charmrevisionupdater.UpdateLatestRevisions() 86 c.Assert(err, jc.ErrorIsNil) 87 c.Assert(result.Error, gc.IsNil) 88 89 curl = charm.MustParseURL("cs:quantal/mysql") 90 pending, err := s.State.LatestPlaceholderCharm(curl) 91 c.Assert(err, jc.ErrorIsNil) 92 c.Assert(pending.String(), gc.Equals, "cs:quantal/mysql-23") 93 94 // Latest wordpress is already deployed, so no pending charm. 95 curl = charm.MustParseURL("cs:quantal/wordpress") 96 _, err = s.State.LatestPlaceholderCharm(curl) 97 c.Assert(err, jc.Satisfies, errors.IsNotFound) 98 99 // Varnish has an error when updating, so no pending charm. 100 curl = charm.MustParseURL("cs:quantal/varnish") 101 _, err = s.State.LatestPlaceholderCharm(curl) 102 c.Assert(err, jc.Satisfies, errors.IsNotFound) 103 104 // Update mysql version and run update again. 105 svc, err := s.State.Service("mysql") 106 c.Assert(err, jc.ErrorIsNil) 107 ch := s.AddCharmWithRevision(c, "mysql", 23) 108 err = svc.SetCharm(ch, true) 109 c.Assert(err, jc.ErrorIsNil) 110 111 result, err = s.charmrevisionupdater.UpdateLatestRevisions() 112 c.Assert(err, jc.ErrorIsNil) 113 c.Assert(result.Error, gc.IsNil) 114 115 // Latest mysql is now deployed, so no pending charm. 116 curl = charm.MustParseURL("cs:quantal/mysql") 117 _, err = s.State.LatestPlaceholderCharm(curl) 118 c.Assert(err, jc.Satisfies, errors.IsNotFound) 119 } 120 121 func (s *charmVersionSuite) TestEnvironmentUUIDUsed(c *gc.C) { 122 s.AddMachine(c, "0", state.JobManageEnviron) 123 s.SetupScenario(c) 124 result, err := s.charmrevisionupdater.UpdateLatestRevisions() 125 c.Assert(err, jc.ErrorIsNil) 126 c.Assert(result.Error, gc.IsNil) 127 128 env, err := s.State.Environment() 129 c.Assert(err, jc.ErrorIsNil) 130 c.Assert(s.Server.Metadata, gc.DeepEquals, []string{"environment_uuid=" + env.UUID()}) 131 }