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  }