github.com/cellofellow/gopkg@v0.0.0-20140722061823-eec0544a62ad/osext/winsvc/mgr/mgr_test.go (about)

     1  // Copyright 2012 The Go Authors.  All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package mgr_test
     6  
     7  import (
     8  	"chai2010.gopkg/osext/winsvc/mgr"
     9  	"os"
    10  	"path/filepath"
    11  	"testing"
    12  )
    13  
    14  func TestOpenLanManServer(t *testing.T) {
    15  	m, err := mgr.Connect()
    16  	if err != nil {
    17  		t.Fatalf("SCM connection failed: %s", err)
    18  	}
    19  	defer m.Disconnect()
    20  	s, err := m.OpenService("lanmanserver")
    21  	if err != nil {
    22  		t.Fatalf("OpenService(lanmanserver) failed: %s", err)
    23  	}
    24  	_, err = s.Config()
    25  	if err != nil {
    26  		t.Fatalf("Config failed: %s", err)
    27  	}
    28  	defer s.Close()
    29  }
    30  
    31  func install(t *testing.T, m *mgr.Mgr, name, exepath string, c mgr.Config) {
    32  	s, err := m.OpenService(name)
    33  	if err == nil {
    34  		s.Close()
    35  		t.Fatalf("service %s already exists", name)
    36  	}
    37  
    38  	s, err = m.CreateService(name, exepath, c)
    39  	if err != nil {
    40  		t.Fatalf("CreateService(%s) failed: %v", name, err)
    41  	}
    42  	defer s.Close()
    43  }
    44  
    45  func testConfig(t *testing.T, s *mgr.Service, should mgr.Config) mgr.Config {
    46  	is, err := s.Config()
    47  	if err != nil {
    48  		t.Fatalf("Config failed: %s", err)
    49  	}
    50  	if should.DisplayName != is.DisplayName {
    51  		t.Fatalf("config mismatch: DisplayName is %q, but should have %q", is.DisplayName, should.DisplayName)
    52  	}
    53  	if should.StartType != is.StartType {
    54  		t.Fatalf("config mismatch: StartType is %v, but should have %v", is.StartType, should.StartType)
    55  	}
    56  	if should.Description != is.Description {
    57  		t.Fatalf("config mismatch: Description is %q, but should have %q", is.Description, should.Description)
    58  	}
    59  	return is
    60  }
    61  
    62  func remove(t *testing.T, s *mgr.Service) {
    63  	err := s.Delete()
    64  	if err != nil {
    65  		t.Fatalf("Delete failed: %s", err)
    66  	}
    67  }
    68  
    69  func TestMyService(t *testing.T) {
    70  	const name = "myservice"
    71  
    72  	m, err := mgr.Connect()
    73  	if err != nil {
    74  		t.Fatalf("SCM connection failed: %s", err)
    75  	}
    76  	defer m.Disconnect()
    77  
    78  	c := mgr.Config{
    79  		StartType:   mgr.StartDisabled,
    80  		DisplayName: "my service",
    81  		Description: "my service is just a test",
    82  	}
    83  
    84  	exename := os.Args[0]
    85  	exepath, err := filepath.Abs(exename)
    86  	if err != nil {
    87  		t.Fatalf("filepath.Abs(%s) failed: %s", exename, err)
    88  	}
    89  
    90  	install(t, m, name, exepath, c)
    91  
    92  	s, err := m.OpenService(name)
    93  	if err != nil {
    94  		t.Fatalf("service %s is not installed", name)
    95  	}
    96  	defer s.Close()
    97  
    98  	c.BinaryPathName = exepath
    99  	c = testConfig(t, s, c)
   100  
   101  	c.StartType = mgr.StartManual
   102  	err = s.UpdateConfig(c)
   103  	if err != nil {
   104  		t.Fatalf("UpdateConfig failed: %v", err)
   105  	}
   106  
   107  	testConfig(t, s, c)
   108  
   109  	remove(t, s)
   110  }