github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/worker/upgradeseries/upgrader_test.go (about) 1 // Copyright 2018 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package upgradeseries_test 5 6 import ( 7 "github.com/golang/mock/gomock" 8 jc "github.com/juju/testing/checkers" 9 gc "gopkg.in/check.v1" 10 11 "github.com/juju/juju/juju/paths" 12 "github.com/juju/juju/service/systemd" 13 "github.com/juju/juju/testing" 14 "github.com/juju/juju/version" 15 "github.com/juju/juju/worker/upgradeseries" 16 . "github.com/juju/juju/worker/upgradeseries/mocks" 17 ) 18 19 type upgraderSuite struct { 20 testing.BaseSuite 21 22 machineService string 23 unitServices []string 24 25 logger upgradeseries.Logger 26 manager *MockSystemdServiceManager 27 } 28 29 var _ = gc.Suite(&upgraderSuite{}) 30 31 func (s *upgraderSuite) SetUpTest(c *gc.C) { 32 s.BaseSuite.SetUpTest(c) 33 34 s.machineService = "jujud-machine-0" 35 s.unitServices = []string{"jujud-unit-ubuntu-0", "jujud-unit-redis-0"} 36 } 37 38 func (s *upgraderSuite) TestNotToSystemdCopyToolsOnly(c *gc.C) { 39 ctrl := gomock.NewController(c) 40 defer ctrl.Finish() 41 s.setupMocks(ctrl) 42 43 s.patchFrom("precise") 44 45 // No systemd file changes; just the new tools for the target series. 46 s.manager.EXPECT().CopyAgentBinary( 47 s.machineService, s.unitServices, paths.NixDataDir, "trusty", "precise", version.Current, 48 ).Return(nil) 49 50 upg := s.newUpgrader(c, "trusty") 51 c.Assert(upg.PerformUpgrade(), jc.ErrorIsNil) 52 } 53 54 func (s *upgraderSuite) TestFromSystemdCopyToolsOnly(c *gc.C) { 55 ctrl := gomock.NewController(c) 56 defer ctrl.Finish() 57 s.setupMocks(ctrl) 58 59 s.patchFrom("xenial") 60 61 // No systemd file changes; just the new tools for the target series. 62 s.manager.EXPECT().CopyAgentBinary( 63 s.machineService, s.unitServices, paths.NixDataDir, "bionic", "xenial", version.Current, 64 ).Return(nil) 65 66 upg := s.newUpgrader(c, "bionic") 67 c.Assert(upg.PerformUpgrade(), jc.ErrorIsNil) 68 } 69 70 func (s *upgraderSuite) TestToSystemdServicesWritten(c *gc.C) { 71 ctrl := gomock.NewController(c) 72 defer ctrl.Finish() 73 s.setupMocks(ctrl) 74 75 s.patchFrom("trusty") 76 77 s.manager.EXPECT().WriteSystemdAgents( 78 s.machineService, s.unitServices, paths.NixDataDir, systemd.EtcSystemdDir, systemd.EtcSystemdMultiUserDir, 79 ).Return(append(s.unitServices, s.machineService), nil, nil, nil) 80 81 s.manager.EXPECT().CopyAgentBinary( 82 s.machineService, s.unitServices, paths.NixDataDir, "xenial", "trusty", version.Current, 83 ).Return(nil) 84 85 upg := s.newUpgrader(c, "xenial") 86 c.Assert(upg.PerformUpgrade(), jc.ErrorIsNil) 87 } 88 89 func (s *upgraderSuite) setupMocks(ctrl *gomock.Controller) { 90 s.logger = voidLogger(ctrl) 91 s.manager = NewMockSystemdServiceManager(ctrl) 92 93 s.manager.EXPECT().FindAgents(paths.NixDataDir).Return(s.machineService, s.unitServices, nil, nil) 94 } 95 96 func (s *upgraderSuite) newUpgrader(c *gc.C, toSeries string) upgradeseries.Upgrader { 97 upg, err := upgradeseries.NewUpgrader(toSeries, s.manager, s.logger) 98 c.Assert(err, jc.ErrorIsNil) 99 return upg 100 } 101 102 func (s *upgraderSuite) patchFrom(series string) { 103 upgradeseries.PatchHostSeries(s, series) 104 }