package keepalived import ( "testing" "github.com/openshift/origin/pkg/ipfailover" ) func TestNewIPFailoverConfiguratorPlugin(t *testing.T) { tests := []struct { Name string Options *ipfailover.IPFailoverConfigCmdOptions ErrorExpectation bool }{ { Name: "selector", Options: &ipfailover.IPFailoverConfigCmdOptions{Selector: "ipfailover=test-nodes"}, ErrorExpectation: false, }, { Name: "empty-selector", Options: &ipfailover.IPFailoverConfigCmdOptions{Selector: ""}, ErrorExpectation: false, }, { Name: "vips", Options: &ipfailover.IPFailoverConfigCmdOptions{ VirtualIPs: "1.2.3.4,5.6.7.8-10,11.0.0.12", }, ErrorExpectation: false, }, { Name: "empty-vips", Options: &ipfailover.IPFailoverConfigCmdOptions{VirtualIPs: ""}, ErrorExpectation: false, }, { Name: "interface", Options: &ipfailover.IPFailoverConfigCmdOptions{NetworkInterface: "eth0"}, ErrorExpectation: false, }, { Name: "empty-interface", Options: &ipfailover.IPFailoverConfigCmdOptions{NetworkInterface: ""}, ErrorExpectation: false, }, { Name: "watch-port", Options: &ipfailover.IPFailoverConfigCmdOptions{WatchPort: 999}, ErrorExpectation: false, }, { Name: "replicas", Options: &ipfailover.IPFailoverConfigCmdOptions{Replicas: 2}, ErrorExpectation: false, }, { Name: "vrid-base", Options: &ipfailover.IPFailoverConfigCmdOptions{VRRPIDOffset: 30}, ErrorExpectation: false, }, { Name: "all-options", Options: &ipfailover.IPFailoverConfigCmdOptions{ Selector: "ipf=v1", VirtualIPs: "9.8.7.6,5.4.3.2-5", NetworkInterface: "ipf0", WatchPort: 12345, VRRPIDOffset: 70, Replicas: 1, }, ErrorExpectation: false, }, { Name: "no-options", Options: &ipfailover.IPFailoverConfigCmdOptions{}, ErrorExpectation: false, }, { Name: "", // empty Options: &ipfailover.IPFailoverConfigCmdOptions{}, ErrorExpectation: false, }, } for _, tc := range tests { p, err := NewIPFailoverConfiguratorPlugin(tc.Name, nil, tc.Options) if err != nil && !tc.ErrorExpectation { t.Errorf("Test case for %s got an error where none was expected", tc.Name) } if nil == err && nil == p { t.Errorf("Test case for %s got no error but plugin was not found", tc.Name) } } } func TestPluginGetWatchPort(t *testing.T) { tests := []struct { Name string WatchPort int Expected int }{ { Name: "router", WatchPort: 80, Expected: 80, }, { Name: "service1", WatchPort: 9999, Expected: 9999, }, { Name: "service2", WatchPort: 65535, Expected: 65535, }, { Name: "invalid-port", WatchPort: -12345, Expected: 80, }, { Name: "invalid-port-2", WatchPort: -1, Expected: 80, }, { Name: "invalid-port-3", WatchPort: 65536, Expected: 80, }, { Name: "zero-port", WatchPort: 0, Expected: 80, }, } for _, tc := range tests { options := &ipfailover.IPFailoverConfigCmdOptions{WatchPort: tc.WatchPort} p, err := NewIPFailoverConfiguratorPlugin(tc.Name, nil, options) if err != nil { t.Errorf("Error creating IPFailoverConfigurator plugin - test=%q, error: %v", tc.Name, err) } port, err := p.GetWatchPort() if err != nil { t.Errorf("Error getting watch port - test=%q, error: %v", tc.Name, err) } if tc.Expected != port { t.Errorf("Test case %q expected watch port = %d, got %d", tc.Name, tc.Expected, port) } } } func TestPluginGetSelector(t *testing.T) { tests := []struct { Name string Selector string ExpectedKey string }{ { Name: "router", Selector: "ipf=router", ExpectedKey: "ipf", }, { Name: "service1", Selector: "service1=us-west", ExpectedKey: "service1", }, { Name: "default-selector", Selector: ipfailover.DefaultSelector, ExpectedKey: ipfailover.DefaultName, }, } for _, tc := range tests { options := &ipfailover.IPFailoverConfigCmdOptions{Selector: tc.Selector} p, err := NewIPFailoverConfiguratorPlugin(tc.Name, nil, options) if err != nil { t.Errorf("Error creating IPFailoverConfigurator plugin - test=%q, error: %v", tc.Name, err) } selector, err := p.GetSelector() if err != nil { t.Errorf("Error getting selector - test=%q, error: %v", tc.Name, err) } if len(tc.ExpectedKey) > 0 { if _, ok := selector[tc.ExpectedKey]; !ok { t.Errorf("Test case %q expected key %q was not found", tc.Name, tc.ExpectedKey) } } } } // TODO: tests for Create, Generate, GetService, GetNamespace.