| //go:build windows | |
| package daemon // import "github.com/docker/docker/daemon" | |
| import ( | |
| "strings" | |
| "testing" | |
| "golang.org/x/sys/windows/svc/mgr" | |
| ) | |
| const existingService = "Power" | |
| func TestEnsureServicesExist(t *testing.T) { | |
| m, err := mgr.Connect() | |
| if err != nil { | |
| t.Fatal("failed to connect to service manager, this test needs admin") | |
| } | |
| defer m.Disconnect() | |
| s, err := m.OpenService(existingService) | |
| if err != nil { | |
| t.Fatalf("expected to find known inbox service %q, this test needs a known inbox service to run correctly", existingService) | |
| } | |
| defer s.Close() | |
| input := []string{existingService} | |
| err = ensureServicesInstalled(input) | |
| if err != nil { | |
| t.Fatalf("unexpected error for input %q: %q", input, err) | |
| } | |
| } | |
| func TestEnsureServicesExistErrors(t *testing.T) { | |
| m, err := mgr.Connect() | |
| if err != nil { | |
| t.Fatal("failed to connect to service manager, this test needs admin") | |
| } | |
| defer m.Disconnect() | |
| s, err := m.OpenService(existingService) | |
| if err != nil { | |
| t.Fatalf("expected to find known inbox service %q, this test needs a known inbox service to run correctly", existingService) | |
| } | |
| defer s.Close() | |
| for _, testcase := range []struct { | |
| input []string | |
| expectedError string | |
| }{ | |
| { | |
| input: []string{"daemon_windows_test_fakeservice"}, | |
| expectedError: "failed to open service daemon_windows_test_fakeservice", | |
| }, | |
| { | |
| input: []string{"daemon_windows_test_fakeservice1", "daemon_windows_test_fakeservice2"}, | |
| expectedError: "failed to open service daemon_windows_test_fakeservice1", | |
| }, | |
| { | |
| input: []string{existingService, "daemon_windows_test_fakeservice"}, | |
| expectedError: "failed to open service daemon_windows_test_fakeservice", | |
| }, | |
| } { | |
| t.Run(strings.Join(testcase.input, ";"), func(t *testing.T) { | |
| err := ensureServicesInstalled(testcase.input) | |
| if err == nil { | |
| t.Fatalf("expected error for input %v", testcase.input) | |
| } | |
| if !strings.Contains(err.Error(), testcase.expectedError) { | |
| t.Fatalf("expected error %q to contain %q", err.Error(), testcase.expectedError) | |
| } | |
| }) | |
| } | |
| } |