github.com/cloudbase/juju-core@v0.0.0-20140504232958-a7271ac7912f/state/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 gc "launchpad.net/gocheck" 8 9 "launchpad.net/juju-core/charm" 10 "launchpad.net/juju-core/errors" 11 "launchpad.net/juju-core/state" 12 "launchpad.net/juju-core/state/apiserver/charmrevisionupdater" 13 "launchpad.net/juju-core/state/apiserver/charmrevisionupdater/testing" 14 "launchpad.net/juju-core/state/apiserver/common" 15 apiservertesting "launchpad.net/juju-core/state/apiserver/testing" 16 jc "launchpad.net/juju-core/testing/checkers" 17 ) 18 19 type charmVersionSuite struct { 20 testing.CharmSuite 21 22 charmrevisionupdater *charmrevisionupdater.CharmRevisionUpdaterAPI 23 resources *common.Resources 24 authoriser apiservertesting.FakeAuthorizer 25 } 26 27 var _ = gc.Suite(&charmVersionSuite{}) 28 29 func (s *charmVersionSuite) SetUpSuite(c *gc.C) { 30 s.CharmSuite.SetUpSuite(c) 31 } 32 33 func (s *charmVersionSuite) SetUpTest(c *gc.C) { 34 s.CharmSuite.SetUpTest(c) 35 s.resources = common.NewResources() 36 s.AddCleanup(func(_ *gc.C) { s.resources.StopAll() }) 37 s.authoriser = apiservertesting.FakeAuthorizer{ 38 LoggedIn: true, 39 EnvironManager: true, 40 } 41 var err error 42 s.charmrevisionupdater, err = charmrevisionupdater.NewCharmRevisionUpdaterAPI(s.State, s.resources, s.authoriser) 43 c.Assert(err, gc.IsNil) 44 } 45 46 func (s *charmVersionSuite) TestNewCharmRevisionUpdaterAPIAcceptsStateManager(c *gc.C) { 47 endPoint, err := charmrevisionupdater.NewCharmRevisionUpdaterAPI(s.State, s.resources, s.authoriser) 48 c.Assert(err, gc.IsNil) 49 c.Assert(endPoint, gc.NotNil) 50 } 51 52 func (s *charmVersionSuite) TestNewCharmRevisionUpdaterAPIRefusesNonStateManager(c *gc.C) { 53 anAuthoriser := s.authoriser 54 anAuthoriser.EnvironManager = false 55 endPoint, err := charmrevisionupdater.NewCharmRevisionUpdaterAPI(s.State, s.resources, anAuthoriser) 56 c.Assert(endPoint, gc.IsNil) 57 c.Assert(err, gc.ErrorMatches, "permission denied") 58 } 59 60 func (s *charmVersionSuite) TestUpdateRevisions(c *gc.C) { 61 s.AddMachine(c, "0", state.JobManageEnviron) 62 s.SetupScenario(c) 63 64 curl := charm.MustParseURL("cs:quantal/mysql") 65 _, err := s.State.LatestPlaceholderCharm(curl) 66 c.Assert(err, jc.Satisfies, errors.IsNotFoundError) 67 68 curl = charm.MustParseURL("cs:quantal/wordpress") 69 _, err = s.State.LatestPlaceholderCharm(curl) 70 c.Assert(err, jc.Satisfies, errors.IsNotFoundError) 71 72 result, err := s.charmrevisionupdater.UpdateLatestRevisions() 73 c.Assert(err, gc.IsNil) 74 c.Assert(result.Error, gc.IsNil) 75 76 curl = charm.MustParseURL("cs:quantal/mysql") 77 pending, err := s.State.LatestPlaceholderCharm(curl) 78 c.Assert(err, gc.IsNil) 79 c.Assert(pending.String(), gc.Equals, "cs:quantal/mysql-23") 80 81 // Latest wordpress is already deployed, so no pending charm. 82 curl = charm.MustParseURL("cs:quantal/wordpress") 83 _, err = s.State.LatestPlaceholderCharm(curl) 84 c.Assert(err, jc.Satisfies, errors.IsNotFoundError) 85 86 // Varnish has an error when updating, so no pending charm. 87 curl = charm.MustParseURL("cs:quantal/varnish") 88 _, err = s.State.LatestPlaceholderCharm(curl) 89 c.Assert(err, jc.Satisfies, errors.IsNotFoundError) 90 91 // Update mysql version and run update again. 92 svc, err := s.State.Service("mysql") 93 c.Assert(err, gc.IsNil) 94 ch := s.AddCharmWithRevision(c, "mysql", 23) 95 err = svc.SetCharm(ch, true) 96 c.Assert(err, gc.IsNil) 97 98 result, err = s.charmrevisionupdater.UpdateLatestRevisions() 99 c.Assert(err, gc.IsNil) 100 c.Assert(result.Error, gc.IsNil) 101 102 // Latest mysql is now deployed, so no pending charm. 103 curl = charm.MustParseURL("cs:quantal/mysql") 104 _, err = s.State.LatestPlaceholderCharm(curl) 105 c.Assert(err, jc.Satisfies, errors.IsNotFoundError) 106 } 107 108 func (s *charmVersionSuite) TestEnvironmentUUIDUsed(c *gc.C) { 109 s.AddMachine(c, "0", state.JobManageEnviron) 110 s.SetupScenario(c) 111 result, err := s.charmrevisionupdater.UpdateLatestRevisions() 112 c.Assert(err, gc.IsNil) 113 c.Assert(result.Error, gc.IsNil) 114 115 env, err := s.State.Environment() 116 c.Assert(err, gc.IsNil) 117 c.Assert(s.Server.Metadata, gc.DeepEquals, []string{"environment_uuid=" + env.UUID()}) 118 }