github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/service/windows/service_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Copyright 2015 Cloudbase Solutions SRL 3 // Licensed under the AGPLv3, see LICENCE file for details. 4 5 package windows_test 6 7 import ( 8 "github.com/juju/errors" 9 "github.com/juju/testing" 10 jc "github.com/juju/testing/checkers" 11 gc "gopkg.in/check.v1" 12 13 "github.com/juju/juju/service/common" 14 "github.com/juju/juju/service/windows" 15 coretesting "github.com/juju/juju/testing" 16 ) 17 18 type serviceSuite struct { 19 coretesting.BaseSuite 20 21 name string 22 conf common.Conf 23 execPath string 24 25 stub *testing.Stub 26 stubMgr *windows.StubSvcManager 27 28 svcExistsErr error 29 30 mgr *windows.Service 31 } 32 33 var _ = gc.Suite(&serviceSuite{}) 34 35 func (s *serviceSuite) SetUpTest(c *gc.C) { 36 s.BaseSuite.SetUpTest(c) 37 var err error 38 s.execPath = `C:\juju\bin\jujud.exe` 39 s.stub = &testing.Stub{} 40 s.stubMgr = windows.PatchServiceManager(s, s.stub) 41 42 // Set up the service. 43 s.name = "machine-1" 44 s.conf = common.Conf{ 45 Desc: "service for " + s.name, 46 ExecStart: s.execPath + " " + s.name, 47 } 48 49 s.svcExistsErr = errors.New("Service machine-1 already installed") 50 51 s.mgr, err = windows.NewService(s.name, s.conf) 52 c.Assert(err, gc.IsNil) 53 54 // Clear services 55 s.stubMgr.Clear() 56 s.stub.ResetCalls() 57 } 58 59 func (s *serviceSuite) TestInstall(c *gc.C) { 60 err := s.mgr.Install() 61 c.Assert(err, gc.IsNil) 62 63 exists, err := s.stubMgr.Exists(s.name, s.conf) 64 c.Assert(err, gc.IsNil) 65 c.Assert(exists, jc.IsTrue) 66 67 s.stub.CheckCallNames(c, "listServices", "Create") 68 } 69 70 func (s *serviceSuite) TestInstallAlreadyExists(c *gc.C) { 71 err := s.mgr.Install() 72 c.Assert(err, gc.IsNil) 73 74 exists, err := s.stubMgr.Exists(s.name, s.conf) 75 c.Assert(err, gc.IsNil) 76 c.Assert(exists, jc.IsTrue) 77 78 err = s.mgr.Install() 79 c.Assert(err.Error(), gc.Equals, s.svcExistsErr.Error()) 80 81 s.stub.CheckCallNames(c, "listServices", "Create", "listServices") 82 } 83 84 func (s *serviceSuite) TestStop(c *gc.C) { 85 err := s.mgr.Install() 86 c.Assert(err, gc.IsNil) 87 88 running, err := s.mgr.Running() 89 c.Assert(err, gc.IsNil) 90 c.Assert(running, jc.IsFalse) 91 92 err = s.mgr.Start() 93 c.Assert(err, gc.IsNil) 94 95 running, err = s.mgr.Running() 96 c.Assert(err, gc.IsNil) 97 c.Assert(running, jc.IsTrue) 98 99 err = s.mgr.Stop() 100 c.Assert(err, gc.IsNil) 101 102 running, err = s.mgr.Running() 103 c.Assert(err, gc.IsNil) 104 c.Assert(running, jc.IsFalse) 105 } 106 107 func (s *serviceSuite) TestStopStart(c *gc.C) { 108 err := s.mgr.Install() 109 c.Assert(err, gc.IsNil) 110 111 running, err := s.mgr.Running() 112 c.Assert(err, gc.IsNil) 113 c.Assert(running, jc.IsFalse) 114 115 err = s.mgr.Start() 116 c.Assert(err, gc.IsNil) 117 118 running, err = s.mgr.Running() 119 c.Assert(err, gc.IsNil) 120 c.Assert(running, jc.IsTrue) 121 122 err = s.mgr.Stop() 123 c.Assert(err, gc.IsNil) 124 125 running, err = s.mgr.Running() 126 c.Assert(err, gc.IsNil) 127 c.Assert(running, jc.IsFalse) 128 129 err = s.mgr.Start() 130 c.Assert(err, gc.IsNil) 131 132 running, err = s.mgr.Running() 133 c.Assert(err, gc.IsNil) 134 c.Assert(running, jc.IsTrue) 135 } 136 137 func (s *serviceSuite) TestRemove(c *gc.C) { 138 err := s.mgr.Install() 139 c.Assert(err, gc.IsNil) 140 141 exists, err := s.stubMgr.Exists(s.name, s.conf) 142 c.Assert(err, gc.IsNil) 143 c.Assert(exists, jc.IsTrue) 144 145 err = s.mgr.Remove() 146 c.Assert(err, gc.IsNil) 147 148 exists, err = s.stubMgr.Exists(s.name, s.conf) 149 c.Assert(err, gc.IsNil) 150 c.Assert(exists, jc.IsFalse) 151 152 s.stub.CheckCallNames(c, "listServices", "Create", "listServices", "listServices", "Running", "Delete") 153 } 154 155 func (s *serviceSuite) TestRemoveRunningService(c *gc.C) { 156 err := s.mgr.Install() 157 c.Assert(err, gc.IsNil) 158 159 exists, err := s.stubMgr.Exists(s.name, s.conf) 160 c.Assert(err, gc.IsNil) 161 c.Assert(exists, jc.IsTrue) 162 163 err = s.mgr.Start() 164 c.Assert(err, gc.IsNil) 165 166 err = s.mgr.Remove() 167 c.Assert(err, gc.IsNil) 168 169 exists, err = s.stubMgr.Exists(s.name, s.conf) 170 c.Assert(err, gc.IsNil) 171 c.Assert(exists, jc.IsFalse) 172 173 s.stub.CheckCallNames(c, "listServices", "Create", "listServices", "Running", "Start", "listServices", "listServices", "Running", "Stop", "Delete") 174 } 175 176 func (s *serviceSuite) TestRemoveInexistent(c *gc.C) { 177 exists, err := s.stubMgr.Exists(s.name, s.conf) 178 c.Assert(err, gc.IsNil) 179 c.Assert(exists, jc.IsFalse) 180 181 err = s.mgr.Remove() 182 c.Assert(err, gc.IsNil) 183 184 s.stub.CheckCallNames(c, "listServices") 185 } 186 187 func (s *serviceSuite) TestInstalled(c *gc.C) { 188 err := s.mgr.Install() 189 c.Assert(err, gc.IsNil) 190 191 exists, err := s.mgr.Installed() 192 c.Assert(err, gc.IsNil) 193 c.Assert(exists, jc.IsTrue) 194 195 s.stub.CheckCallNames(c, "listServices", "Create", "listServices") 196 } 197 198 func (s *serviceSuite) TestInstalledListError(c *gc.C) { 199 err := s.mgr.Install() 200 c.Assert(err, gc.IsNil) 201 202 listErr := errors.New("random error") 203 s.stub.SetErrors(listErr) 204 205 exists, err := s.mgr.Installed() 206 c.Assert(err.Error(), gc.Equals, listErr.Error()) 207 c.Assert(exists, jc.IsFalse) 208 }