package allocation
import (
"fmt"
"testing"
routeapi "github.com/openshift/origin/pkg/route/api"
kapi "k8s.io/kubernetes/pkg/api"
)
type TestAllocationPlugin struct {
Name string
}
func (p *TestAllocationPlugin) Allocate(route *routeapi.Route) (*routeapi.RouterShard, error) {
return &routeapi.RouterShard{ShardName: "test", DNSSuffix: "openshift.test"}, nil
}
func (p *TestAllocationPlugin) GenerateHostname(route *routeapi.Route, shard *routeapi.RouterShard) string {
if len(route.Spec.To.Name) > 0 && len(route.Namespace) > 0 {
return fmt.Sprintf("%s-%s.%s", route.Spec.To.Name, route.Namespace, shard.DNSSuffix)
}
return "test-test-test.openshift.test"
}
func TestRouteAllocationController(t *testing.T) {
tests := []struct {
name string
route *routeapi.Route
}{
{
name: "No Name",
route: &routeapi.Route{
ObjectMeta: kapi.ObjectMeta{
Namespace: "namespace",
},
Spec: routeapi.RouteSpec{
To: routeapi.RouteTargetReference{
Name: "service",
},
},
},
},
{
name: "No namespace",
route: &routeapi.Route{
ObjectMeta: kapi.ObjectMeta{
Name: "name",
},
Spec: routeapi.RouteSpec{
To: routeapi.RouteTargetReference{
Name: "nonamespace",
},
},
},
},
{
name: "No service name",
route: &routeapi.Route{
ObjectMeta: kapi.ObjectMeta{
Name: "name",
Namespace: "foo",
},
},
},
{
name: "Valid route",
route: &routeapi.Route{
ObjectMeta: kapi.ObjectMeta{
Name: "name",
Namespace: "foo",
},
Spec: routeapi.RouteSpec{
Host: "www.example.org",
To: routeapi.RouteTargetReference{
Name: "serviceName",
},
},
},
},
}
plugin := &TestAllocationPlugin{Name: "test allocation plugin"}
fac := &RouteAllocationControllerFactory{nil, nil}
allocator := fac.Create(plugin)
for _, tc := range tests {
shard, err := allocator.AllocateRouterShard(tc.route)
if err != nil {
t.Errorf("Test case %s got an error %s", tc.name, err)
continue
}
name := allocator.GenerateHostname(tc.route, shard)
if len(name) <= 0 {
t.Errorf("Test case %s got %d length name", tc.name, len(name))
}
}
}