diff --git a/pkg/cloudprovider/fake_cloud.go b/pkg/cloudprovider/fake_cloud.go new file mode 100644 index 00000000000..b044631e859 --- /dev/null +++ b/pkg/cloudprovider/fake_cloud.go @@ -0,0 +1,64 @@ +/* +Copyright 2014 Google Inc. All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package cloudprovider + +import ( + "net" +) + +type FakeCloud struct { + Exists bool + Err error + Calls []string + IP net.IP +} + +func (f *FakeCloud) addCall(desc string) { + f.Calls = append(f.Calls, desc) +} + +func (f *FakeCloud) ClearCalls() { + f.Calls = []string{} +} + +func (f *FakeCloud) TCPLoadBalancer() (TCPLoadBalancer, error) { + return f, nil +} + +func (f *FakeCloud) TCPLoadBalancerExists(name, region string) (bool, error) { + return f.Exists, f.Err +} + +func (f *FakeCloud) CreateTCPLoadBalancer(name, region string, port int, hosts []string) error { + f.addCall("create") + return f.Err +} + +func (f *FakeCloud) UpdateTCPLoadBalancer(name, region string, hosts []string) error { + f.addCall("update") + return f.Err +} + +func (f *FakeCloud) DeleteTCPLoadBalancer(name, region string) error { + f.addCall("delete") + return f.Err +} + +func (f *FakeCloud) IPAddress(instance string) (net.IP, error) { + f.addCall("ip-address") + return f.IP, f.Err +} diff --git a/pkg/registry/service_registry.go b/pkg/registry/service_registry.go index b69d8c14a0e..f50b63814c7 100644 --- a/pkg/registry/service_registry.go +++ b/pkg/registry/service_registry.go @@ -13,6 +13,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ + package registry import ( diff --git a/pkg/registry/service_registry_test.go b/pkg/registry/service_registry_test.go new file mode 100644 index 00000000000..2b6d09cb529 --- /dev/null +++ b/pkg/registry/service_registry_test.go @@ -0,0 +1,144 @@ +/* +Copyright 2014 Google Inc. All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package registry + +import ( + "fmt" + "testing" + + "github.com/GoogleCloudPlatform/kubernetes/pkg/api" + "github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider" +) + +func TestServiceRegistry(t *testing.T) { + memory := MakeMemoryRegistry() + fakeCloud := &cloudprovider.FakeCloud{} + machines := []string{"foo", "bar", "baz"} + + storage := MakeServiceRegistryStorage(memory, fakeCloud, machines) + + svc := api.Service{ + JSONBase: api.JSONBase{ID: "foo"}, + } + storage.Create(svc) + + if len(fakeCloud.Calls) != 0 { + t.Errorf("Unexpected call(s): %#v", fakeCloud.Calls) + } + srv, err := memory.GetService(svc.ID) + expectNoError(t, err) + if srv == nil { + t.Errorf("Failed to find service: %s", svc.ID) + } +} + +func TestServiceRegistryExternalService(t *testing.T) { + memory := MakeMemoryRegistry() + fakeCloud := &cloudprovider.FakeCloud{} + machines := []string{"foo", "bar", "baz"} + + storage := MakeServiceRegistryStorage(memory, fakeCloud, machines) + + svc := api.Service{ + JSONBase: api.JSONBase{ID: "foo"}, + CreateExternalLoadBalancer: true, + } + storage.Create(svc) + + if len(fakeCloud.Calls) != 1 || fakeCloud.Calls[0] != "create" { + t.Errorf("Unexpected call(s): %#v", fakeCloud.Calls) + } + srv, err := memory.GetService(svc.ID) + expectNoError(t, err) + if srv == nil { + t.Errorf("Failed to find service: %s", svc.ID) + } +} + +func TestServiceRegistryExternalServiceError(t *testing.T) { + memory := MakeMemoryRegistry() + fakeCloud := &cloudprovider.FakeCloud{ + Err: fmt.Errorf("test error"), + } + machines := []string{"foo", "bar", "baz"} + + storage := MakeServiceRegistryStorage(memory, fakeCloud, machines) + + svc := api.Service{ + JSONBase: api.JSONBase{ID: "foo"}, + CreateExternalLoadBalancer: true, + } + storage.Create(svc) + + if len(fakeCloud.Calls) != 1 || fakeCloud.Calls[0] != "create" { + t.Errorf("Unexpected call(s): %#v", fakeCloud.Calls) + } + srv, err := memory.GetService("foo") + expectNoError(t, err) + if srv != nil { + t.Errorf("Unexpected service: %#v", *srv) + } +} + +func TestServiceRegistryDelete(t *testing.T) { + memory := MakeMemoryRegistry() + fakeCloud := &cloudprovider.FakeCloud{} + machines := []string{"foo", "bar", "baz"} + + storage := MakeServiceRegistryStorage(memory, fakeCloud, machines) + + svc := api.Service{ + JSONBase: api.JSONBase{ID: "foo"}, + } + memory.CreateService(svc) + + storage.Delete(svc.ID) + + if len(fakeCloud.Calls) != 0 { + t.Errorf("Unexpected call(s): %#v", fakeCloud.Calls) + } + srv, err := memory.GetService(svc.ID) + expectNoError(t, err) + if srv != nil { + t.Errorf("Unexpected service: %#v", *srv) + } +} + +func TestServiceRegistryDeleteExternal(t *testing.T) { + memory := MakeMemoryRegistry() + fakeCloud := &cloudprovider.FakeCloud{} + machines := []string{"foo", "bar", "baz"} + + storage := MakeServiceRegistryStorage(memory, fakeCloud, machines) + + svc := api.Service{ + JSONBase: api.JSONBase{ID: "foo"}, + CreateExternalLoadBalancer: true, + } + memory.CreateService(svc) + + storage.Delete(svc.ID) + + if len(fakeCloud.Calls) != 1 || fakeCloud.Calls[0] != "delete" { + t.Errorf("Unexpected call(s): %#v", fakeCloud.Calls) + } + srv, err := memory.GetService(svc.ID) + expectNoError(t, err) + if srv != nil { + t.Errorf("Unexpected service: %#v", *srv) + } +}