package controller
import (
"testing"
kapi "k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/unversioned"
ktestclient "k8s.io/kubernetes/pkg/client/unversioned/testclient"
"github.com/openshift/origin/pkg/client/testclient"
"github.com/openshift/origin/pkg/project/api"
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
)
func TestSyncNamespaceThatIsTerminating(t *testing.T) {
mockKubeClient := &fake.Clientset{}
mockOriginClient := &testclient.Fake{}
nm := NamespaceController{
KubeClient: mockKubeClient,
Client: mockOriginClient,
}
now := unversioned.Now()
testNamespace := &kapi.Namespace{
ObjectMeta: kapi.ObjectMeta{
Name: "test",
ResourceVersion: "1",
DeletionTimestamp: &now,
},
Spec: kapi.NamespaceSpec{
Finalizers: []kapi.FinalizerName{kapi.FinalizerKubernetes, api.FinalizerOrigin},
},
Status: kapi.NamespaceStatus{
Phase: kapi.NamespaceTerminating,
},
}
err := nm.Handle(testNamespace)
if err != nil {
t.Errorf("Unexpected error when handling namespace %v", err)
}
// TODO: we will expect a finalize namespace call after rebase
expectedActionSet := []ktestclient.Action{
ktestclient.NewListAction("buildconfigs", "", kapi.ListOptions{}),
ktestclient.NewListAction("policies", "", kapi.ListOptions{}),
ktestclient.NewListAction("imagestreams", "", kapi.ListOptions{}),
ktestclient.NewListAction("policybindings", "", kapi.ListOptions{}),
ktestclient.NewListAction("rolebindings", "", kapi.ListOptions{}),
ktestclient.NewListAction("roles", "", kapi.ListOptions{}),
ktestclient.NewListAction("routes", "", kapi.ListOptions{}),
ktestclient.NewListAction("templates", "", kapi.ListOptions{}),
ktestclient.NewListAction("builds", "", kapi.ListOptions{}),
ktestclient.NewListAction("namespace", "", kapi.ListOptions{}),
ktestclient.NewListAction("deploymentconfig", "", kapi.ListOptions{}),
}
actionSet := []ktestclient.Action{}
for i := range mockKubeClient.Actions() {
actionSet = append(actionSet, mockKubeClient.Actions()[i])
}
for i := range mockOriginClient.Actions() {
actionSet = append(actionSet, mockOriginClient.Actions()[i])
}
if len(actionSet) != len(expectedActionSet) {
t.Errorf("Expected actions: %v, but got: %v", expectedActionSet, actionSet)
}
}
func TestSyncNamespaceThatIsActive(t *testing.T) {
mockKubeClient := &fake.Clientset{}
mockOriginClient := &testclient.Fake{}
nm := NamespaceController{
KubeClient: mockKubeClient,
Client: mockOriginClient,
}
testNamespace := &kapi.Namespace{
ObjectMeta: kapi.ObjectMeta{
Name: "test",
ResourceVersion: "1",
},
Spec: kapi.NamespaceSpec{
Finalizers: []kapi.FinalizerName{kapi.FinalizerKubernetes, api.FinalizerOrigin},
},
Status: kapi.NamespaceStatus{
Phase: kapi.NamespaceActive,
},
}
err := nm.Handle(testNamespace)
if err != nil {
t.Errorf("Unexpected error when handling namespace %v", err)
}
actionSet := []ktestclient.Action{}
for i := range mockKubeClient.Actions() {
actionSet = append(actionSet, mockKubeClient.Actions()[i])
}
for i := range mockOriginClient.Actions() {
actionSet = append(actionSet, mockOriginClient.Actions()[i])
}
if len(actionSet) != 0 {
t.Errorf("Expected no action from controller, but got: %v", actionSet)
}
}