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