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 }