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  }