| // +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) |
| } |
| }) |
| } |
| } |