package simple import ( "testing" kapi "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/util/validation" "github.com/openshift/origin/pkg/route/api" rac "github.com/openshift/origin/pkg/route/controller/allocation" ) func TestNewSimpleAllocationPlugin(t *testing.T) { tests := []struct { Name string ErrorExpectation bool }{ { Name: "www.example.org", ErrorExpectation: false, }, { Name: "www^acme^org", ErrorExpectation: true, }, { Name: "bad wolf.whoswho", ErrorExpectation: true, }, { Name: "tardis#1.watch", ErrorExpectation: true, }, { Name: "ããã«ã¡ã¯openshift.com", ErrorExpectation: true, }, { Name: "yo!yo!@#$%%$%^&*(0){[]}:;',<>?/1.test", ErrorExpectation: true, }, { Name: "", ErrorExpectation: false, }, } for _, tc := range tests { sap, err := NewSimpleAllocationPlugin(tc.Name) if err != nil && !tc.ErrorExpectation { t.Errorf("Test case for %s got an error where none was expected", tc.Name) } if len(tc.Name) > 0 { continue } dap := &SimpleAllocationPlugin{DNSSuffix: defaultDNSSuffix} if sap.DNSSuffix != dap.DNSSuffix { t.Errorf("Expected function to use defaultDNSSuffix for empty name argument.") } } } func TestSimpleAllocationPlugin(t *testing.T) { tests := []struct { name string route *api.Route empty bool }{ { name: "No Name", route: &api.Route{ ObjectMeta: kapi.ObjectMeta{ Namespace: "namespace", }, Spec: api.RouteSpec{ To: api.RouteTargetReference{ Name: "service", }, }, }, empty: true, }, { name: "No namespace", route: &api.Route{ ObjectMeta: kapi.ObjectMeta{ Name: "name", }, Spec: api.RouteSpec{ To: api.RouteTargetReference{ Name: "nonamespace", }, }, }, empty: true, }, { name: "No service name", route: &api.Route{ ObjectMeta: kapi.ObjectMeta{ Name: "name", Namespace: "foo", }, }, }, { name: "Valid route", route: &api.Route{ ObjectMeta: kapi.ObjectMeta{ Name: "name", Namespace: "foo", }, Spec: api.RouteSpec{ Host: "www.example.com", To: api.RouteTargetReference{ Name: "myservice", }, }, }, }, { name: "No host", route: &api.Route{ ObjectMeta: kapi.ObjectMeta{ Name: "name", Namespace: "foo", }, Spec: api.RouteSpec{ Host: "www.example.com", To: api.RouteTargetReference{ Name: "myservice", }, }, }, }, } plugin, err := NewSimpleAllocationPlugin("www.example.org") if err != nil { t.Errorf("Error creating SimpleAllocationPlugin got %s", err) return } for _, tc := range tests { shard, _ := plugin.Allocate(tc.route) name := plugin.GenerateHostname(tc.route, shard) switch { case len(name) == 0 && !tc.empty, len(name) != 0 && tc.empty: t.Errorf("Test case %s got %d length name.", tc.name, len(name)) case tc.empty: continue } if len(validation.IsDNS1123Subdomain(name)) != 0 { t.Errorf("Test case %s got %s - invalid DNS name.", tc.name, name) } } } func TestSimpleAllocationPluginViaController(t *testing.T) { tests := []struct { name string route *api.Route empty bool }{ { name: "No Name", route: &api.Route{ ObjectMeta: kapi.ObjectMeta{ Namespace: "namespace", }, Spec: api.RouteSpec{ To: api.RouteTargetReference{ Name: "service", }, }, }, empty: true, }, { name: "Host but no name", route: &api.Route{ ObjectMeta: kapi.ObjectMeta{ Namespace: "namespace", }, Spec: api.RouteSpec{ Host: "foo.com", }, }, empty: true, }, { name: "No namespace", route: &api.Route{ ObjectMeta: kapi.ObjectMeta{ Name: "name", }, Spec: api.RouteSpec{ To: api.RouteTargetReference{ Name: "nonamespace", }, }, }, empty: true, }, { name: "No service name", route: &api.Route{ ObjectMeta: kapi.ObjectMeta{ Name: "name", Namespace: "foo", }, }, }, { name: "Valid route", route: &api.Route{ ObjectMeta: kapi.ObjectMeta{ Name: "name", Namespace: "foo", }, Spec: api.RouteSpec{ Host: "www.example.com", To: api.RouteTargetReference{ Name: "s3", }, }, }, }, } plugin, _ := NewSimpleAllocationPlugin("www.example.org") fac := &rac.RouteAllocationControllerFactory{OSClient: nil, KubeClient: nil} sac := fac.Create(plugin) for _, tc := range tests { shard, err := sac.AllocateRouterShard(tc.route) if err != nil { t.Errorf("Test case %s got an error %s", tc.name, err) } name := sac.GenerateHostname(tc.route, shard) switch { case len(name) == 0 && !tc.empty, len(name) != 0 && tc.empty: t.Errorf("Test case %s got %d length name.", tc.name, len(name)) case tc.empty: continue } if len(validation.IsDNS1123Subdomain(name)) != 0 { t.Errorf("Test case %s got %s - invalid DNS name.", tc.name, name) } } }