windows/svc/mgr: add ability to set a reboot message and command when a service fails

Added configuration options for a windows service recovery settings.
New configurations include modifying the reboot message, or command
to be run when a service fails, and getting the current reboot message
or command.

Fixes golang/go#23239

Change-Id: I3e501d66e97745b7536fd654aee2bba488083e6d
Reviewed-on: https://go-review.googlesource.com/122579
Run-TryBot: Alex Brainman <alex.brainman@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
This commit is contained in:
madiganz
2018-07-15 08:55:29 +00:00
committed by Alex Brainman
parent 1b2967e3c2
commit ac767d655b
2 changed files with 71 additions and 0 deletions
+32
View File
@@ -174,6 +174,34 @@ func testSetRecoveryActions(t *testing.T, s *mgr.Service) {
testResetPeriod(t, s, 0)
}
func testRebootMessage(t *testing.T, s *mgr.Service, should string) {
err := s.SetRebootMessage(should)
if err != nil {
t.Fatalf("SetRebootMessage failed: %v", err)
}
is, err := s.RebootMessage()
if err != nil {
t.Fatalf("RebootMessage failed: %v", err)
}
if should != is {
t.Errorf("reboot message mismatch: message is %q, but should have %q", is, should)
}
}
func testRecoveryCommand(t *testing.T, s *mgr.Service, should string) {
err := s.SetRecoveryCommand(should)
if err != nil {
t.Fatalf("SetRecoveryCommand failed: %v", err)
}
is, err := s.RecoveryCommand()
if err != nil {
t.Fatalf("RecoveryCommand failed: %v", err)
}
if should != is {
t.Errorf("recovery command mismatch: command is %q, but should have %q", is, should)
}
}
func remove(t *testing.T, s *mgr.Service) {
err := s.Delete()
if err != nil {
@@ -245,6 +273,10 @@ func TestMyService(t *testing.T) {
}
testSetRecoveryActions(t, s)
testRebootMessage(t, s, "myservice failed")
testRebootMessage(t, s, "") // delete reboot message
testRecoveryCommand(t, s, "sc query myservice")
testRecoveryCommand(t, s, "") // delete recovery command
remove(t, s)
}