github.com/Pankov404/juju@v0.0.0-20150703034450-be266991dceb/service/windows/service_windows_test.go (about) 1 // Copyright 2015 Cloudbase Solutions 2 // Copyright 2015 Canonical Ltd. 3 // Licensed under the AGPLv3, see LICENCE file for details. 4 5 // +build !linux windows 6 7 package windows_test 8 9 import ( 10 "github.com/gabriel-samfira/sys/windows/svc" 11 "github.com/juju/errors" 12 "github.com/juju/testing" 13 jc "github.com/juju/testing/checkers" 14 gc "gopkg.in/check.v1" 15 16 "github.com/juju/juju/service/common" 17 "github.com/juju/juju/service/windows" 18 coretesting "github.com/juju/juju/testing" 19 ) 20 21 type serviceManagerSuite struct { 22 coretesting.BaseSuite 23 24 stub *testing.Stub 25 passwdStub *testing.Stub 26 conn *windows.StubMgr 27 getPasswd *windows.StubGetPassword 28 29 name string 30 conf common.Conf 31 32 mgr windows.ServiceManager 33 34 execPath string 35 } 36 37 var _ = gc.Suite(&serviceManagerSuite{}) 38 39 func (s *serviceManagerSuite) SetUpTest(c *gc.C) { 40 s.BaseSuite.SetUpTest(c) 41 var err error 42 s.execPath = `C:\juju\bin\jujud.exe` 43 s.stub = &testing.Stub{} 44 s.passwdStub = &testing.Stub{} 45 s.conn = windows.PatchMgrConnect(s, s.stub) 46 s.getPasswd = windows.PatchGetPassword(s, s.passwdStub) 47 48 // Set up the service. 49 s.name = "machine-1" 50 s.conf = common.Conf{ 51 Desc: "service for " + s.name, 52 ExecStart: s.execPath + " " + s.name, 53 } 54 55 s.mgr, err = windows.NewServiceManager() 56 c.Assert(err, gc.IsNil) 57 58 // Clear services 59 s.conn.Clear() 60 } 61 62 func (s *serviceManagerSuite) TestCreate(c *gc.C) { 63 s.getPasswd.SetPasswd("fake") 64 err := s.mgr.Create(s.name, s.conf) 65 c.Assert(err, gc.IsNil) 66 67 c.Assert(s.getPasswd.Calls(), gc.HasLen, 1) 68 69 exists := s.conn.Exists(s.name) 70 c.Assert(exists, jc.IsTrue) 71 72 svcs := s.conn.List() 73 c.Assert(svcs, gc.HasLen, 1) 74 75 m, ok := s.mgr.(*windows.SvcManager) 76 c.Assert(ok, jc.IsTrue) 77 78 cfg, err := m.Config(s.name) 79 c.Assert(err, gc.IsNil) 80 c.Assert(cfg.ServiceStartName, gc.Equals, windows.JujudUser) 81 82 running, err := s.mgr.Running(s.name) 83 c.Assert(err, gc.IsNil) 84 c.Assert(running, jc.IsFalse) 85 } 86 87 func (s *serviceManagerSuite) TestCreateInvalidPassword(c *gc.C) { 88 passwdError := errors.New("Failed to get password") 89 s.passwdStub.SetErrors(passwdError) 90 91 err := s.mgr.Create(s.name, s.conf) 92 c.Assert(errors.Cause(err), gc.Equals, passwdError) 93 94 c.Assert(s.getPasswd.Calls(), gc.HasLen, 1) 95 96 exists := s.conn.Exists(s.name) 97 c.Assert(exists, jc.IsFalse) 98 } 99 100 func (s *serviceManagerSuite) TestCreateInvalidUser(c *gc.C) { 101 s.getPasswd.SetPasswd("fake") 102 103 err := s.mgr.Create(s.name, s.conf) 104 c.Assert(err, gc.IsNil) 105 106 c.Assert(s.getPasswd.Calls(), gc.HasLen, 1) 107 108 m, ok := s.mgr.(*windows.SvcManager) 109 c.Assert(ok, jc.IsTrue) 110 111 cfg, err := m.Config(s.name) 112 113 c.Assert(err, gc.IsNil) 114 c.Assert(cfg.ServiceStartName, gc.Equals, windows.JujudUser) 115 } 116 117 func (s *serviceManagerSuite) TestCreateAlreadyExists(c *gc.C) { 118 err := s.mgr.Create(s.name, s.conf) 119 c.Assert(err, gc.IsNil) 120 exists := s.conn.Exists(s.name) 121 c.Assert(exists, jc.IsTrue) 122 err = s.mgr.Create(s.name, s.conf) 123 c.Assert(errors.Cause(err), gc.Equals, windows.ERROR_SERVICE_EXISTS) 124 } 125 126 func (s *serviceManagerSuite) TestCreateMultipleServices(c *gc.C) { 127 err := s.mgr.Create("test-service", common.Conf{}) 128 c.Assert(err, gc.IsNil) 129 exists := s.conn.Exists("test-service") 130 c.Assert(exists, jc.IsTrue) 131 132 err = s.mgr.Create("another-test-service", common.Conf{}) 133 c.Assert(err, gc.IsNil) 134 exists = s.conn.Exists("another-test-service") 135 c.Assert(exists, jc.IsTrue) 136 137 svcs := s.conn.List() 138 c.Assert(svcs, gc.HasLen, 2) 139 } 140 141 func (s *serviceManagerSuite) TestStart(c *gc.C) { 142 windows.AddService(s.name, s.execPath, s.stub, svc.Status{State: svc.Stopped}) 143 144 err := s.mgr.Start(s.name) 145 c.Assert(err, gc.IsNil) 146 147 running, err := s.mgr.Running(s.name) 148 c.Assert(err, gc.IsNil) 149 c.Assert(running, jc.IsTrue) 150 } 151 152 func (s *serviceManagerSuite) TestStartTwice(c *gc.C) { 153 windows.AddService(s.name, s.execPath, s.stub, svc.Status{State: svc.Stopped}) 154 155 err := s.mgr.Start(s.name) 156 c.Assert(err, gc.IsNil) 157 158 err = s.mgr.Start(s.name) 159 c.Assert(err, gc.IsNil) 160 161 running, err := s.mgr.Running(s.name) 162 c.Assert(err, gc.IsNil) 163 c.Assert(running, jc.IsTrue) 164 } 165 166 func (s *serviceManagerSuite) TestStartStop(c *gc.C) { 167 windows.AddService(s.name, s.execPath, s.stub, svc.Status{State: svc.Stopped}) 168 169 err := s.mgr.Start(s.name) 170 c.Assert(err, gc.IsNil) 171 172 running, err := s.mgr.Running(s.name) 173 c.Assert(err, gc.IsNil) 174 c.Assert(running, jc.IsTrue) 175 176 err = s.mgr.Stop(s.name) 177 c.Assert(err, gc.IsNil) 178 179 running, err = s.mgr.Running(s.name) 180 c.Assert(err, gc.IsNil) 181 c.Assert(running, jc.IsFalse) 182 } 183 184 func (s *serviceManagerSuite) TestStop(c *gc.C) { 185 windows.AddService(s.name, s.execPath, s.stub, svc.Status{State: svc.Running}) 186 187 running, err := s.mgr.Running(s.name) 188 c.Assert(err, gc.IsNil) 189 c.Assert(running, jc.IsTrue) 190 191 err = s.mgr.Stop(s.name) 192 c.Assert(err, gc.IsNil) 193 194 running, err = s.mgr.Running(s.name) 195 c.Assert(err, gc.IsNil) 196 c.Assert(running, jc.IsFalse) 197 } 198 199 func (s *serviceManagerSuite) TestDelete(c *gc.C) { 200 windows.AddService(s.name, s.execPath, s.stub, svc.Status{State: svc.Running}) 201 202 err := s.mgr.Delete(s.name) 203 c.Assert(err, gc.IsNil) 204 exists := s.conn.Exists(s.name) 205 c.Assert(exists, jc.IsFalse) 206 } 207 208 func (s *serviceManagerSuite) TestDeleteInexistent(c *gc.C) { 209 exists := s.conn.Exists(s.name) 210 c.Assert(exists, jc.IsFalse) 211 212 err := s.mgr.Delete(s.name) 213 c.Assert(errors.Cause(err), gc.Equals, windows.ERROR_SERVICE_DOES_NOT_EXIST) 214 }