func (c *FakeRoles) List(label labels.Selector, field fields.Selector) (*authorizationapi.RoleList, error) { obj, err := c.Fake.Invokes(ktestclient.NewListAction("roles", c.Namespace, label, field), &authorizationapi.RoleList{}) if obj == nil { return nil, err } return obj.(*authorizationapi.RoleList), err }
func (c *FakeTemplates) List(label labels.Selector, field fields.Selector) (*templateapi.TemplateList, error) { obj, err := c.Fake.Invokes(ktestclient.NewListAction("templates", c.Namespace, label, field), &templateapi.TemplateList{}) if obj == nil { return nil, err } return obj.(*templateapi.TemplateList), err }
func (c *FakeBuildConfigs) List(label labels.Selector, field fields.Selector) (*buildapi.BuildConfigList, error) { obj, err := c.Fake.Invokes(ktestclient.NewListAction("buildconfigs", c.Namespace, label, field), &buildapi.BuildConfigList{}) if obj == nil { return nil, err } return obj.(*buildapi.BuildConfigList), err }
func (c *FakeDeploymentConfigs) List(label labels.Selector, field fields.Selector) (*deployapi.DeploymentConfigList, error) { obj, err := c.Fake.Invokes(ktestclient.NewListAction("deploymentconfigs", c.Namespace, label, field), &deployapi.DeploymentConfigList{}) if obj == nil { return nil, err } return obj.(*deployapi.DeploymentConfigList), err }
func (c *FakeImageStreams) List(label labels.Selector, field fields.Selector) (*imageapi.ImageStreamList, error) { obj, err := c.Fake.Invokes(ktestclient.NewListAction("imagestreams", c.Namespace, label, field), &imageapi.ImageStreamList{}) if obj == nil { return nil, err } return obj.(*imageapi.ImageStreamList), err }
func TestSyncNamespaceThatIsTerminating(t *testing.T) { mockKubeClient := &ktestclient.Fake{} mockOriginClient := &testclient.Fake{} nm := NamespaceController{ KubeClient: mockKubeClient, Client: mockOriginClient, } now := util.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", "", nil, nil), ktestclient.NewListAction("policies", "", nil, nil), ktestclient.NewListAction("imagestreams", "", nil, nil), ktestclient.NewListAction("policybindings", "", nil, nil), ktestclient.NewListAction("rolebindings", "", nil, nil), ktestclient.NewListAction("roles", "", nil, nil), ktestclient.NewListAction("routes", "", nil, nil), ktestclient.NewListAction("templates", "", nil, nil), ktestclient.NewListAction("builds", "", nil, nil), ktestclient.NewListAction("namespace", "", nil, nil), ktestclient.NewListAction("deploymentconfig", "", nil, nil), } 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 TestStop(t *testing.T) { notfound := func() runtime.Object { return &(kerrors.NewNotFound("DeploymentConfig", "config").(*kerrors.StatusError).ErrStatus) } tests := []struct { testName string namespace string name string oc *testclient.Fake kc *ktestclient.Fake expected []ktestclient.Action kexpected []ktestclient.Action output string err bool }{ { testName: "simple stop", namespace: "default", name: "config", oc: testclient.NewSimpleFake(deploytest.OkDeploymentConfig(1)), kc: ktestclient.NewSimpleFake(mkdeploymentlist(1)), expected: []ktestclient.Action{ ktestclient.NewDeleteAction("deploymentconfigs", "default", "config"), }, kexpected: []ktestclient.Action{ ktestclient.NewListAction("replicationcontrollers", "default", nil, nil), ktestclient.NewGetAction("replicationcontrollers", "", "config-1"), ktestclient.NewListAction("replicationcontrollers", "", nil, nil), ktestclient.NewGetAction("replicationcontrollers", "", "config-1"), ktestclient.NewUpdateAction("replicationcontrollers", "", nil), ktestclient.NewGetAction("replicationcontrollers", "", "config-1"), ktestclient.NewGetAction("replicationcontrollers", "", "config-1"), ktestclient.NewDeleteAction("replicationcontrollers", "", "config-1"), }, output: "config stopped", err: false, }, { testName: "stop multiple controllers", namespace: "default", name: "config", oc: testclient.NewSimpleFake(deploytest.OkDeploymentConfig(5)), kc: ktestclient.NewSimpleFake(mkdeploymentlist(1, 2, 3, 4, 5)), expected: []ktestclient.Action{ ktestclient.NewDeleteAction("deploymentconfigs", "default", "config"), }, kexpected: []ktestclient.Action{ ktestclient.NewListAction("replicationcontrollers", "default", nil, nil), ktestclient.NewGetAction("replicationcontrollers", "", "config-1"), ktestclient.NewListAction("replicationcontrollers", "", nil, nil), ktestclient.NewGetAction("replicationcontrollers", "", "config-1"), ktestclient.NewUpdateAction("replicationcontrollers", "", nil), ktestclient.NewGetAction("replicationcontrollers", "", "config-1"), ktestclient.NewGetAction("replicationcontrollers", "", "config-4"), ktestclient.NewDeleteAction("replicationcontrollers", "", "config-1"), ktestclient.NewGetAction("replicationcontrollers", "", "config-2"), ktestclient.NewListAction("replicationcontrollers", "", nil, nil), ktestclient.NewGetAction("replicationcontrollers", "", "config-2"), ktestclient.NewUpdateAction("replicationcontrollers", "", nil), ktestclient.NewGetAction("replicationcontrollers", "", "config-2"), ktestclient.NewGetAction("replicationcontrollers", "", "config-5"), ktestclient.NewDeleteAction("replicationcontrollers", "", "config-2"), ktestclient.NewGetAction("replicationcontrollers", "", "config-3"), ktestclient.NewListAction("replicationcontrollers", "", nil, nil), ktestclient.NewGetAction("replicationcontrollers", "", "config-3"), ktestclient.NewUpdateAction("replicationcontrollers", "", nil), ktestclient.NewGetAction("replicationcontrollers", "", "config-3"), ktestclient.NewGetAction("replicationcontrollers", "", "config-5"), ktestclient.NewDeleteAction("replicationcontrollers", "", "config-3"), ktestclient.NewGetAction("replicationcontrollers", "", "config-4"), ktestclient.NewListAction("replicationcontrollers", "", nil, nil), ktestclient.NewGetAction("replicationcontrollers", "", "config-4"), ktestclient.NewUpdateAction("replicationcontrollers", "", nil), ktestclient.NewGetAction("replicationcontrollers", "", "config-4"), ktestclient.NewGetAction("replicationcontrollers", "", "config-5"), ktestclient.NewDeleteAction("replicationcontrollers", "", "config-4"), ktestclient.NewGetAction("replicationcontrollers", "", "config-5"), ktestclient.NewListAction("replicationcontrollers", "", nil, nil), ktestclient.NewGetAction("replicationcontrollers", "", "config-5"), ktestclient.NewUpdateAction("replicationcontrollers", "", nil), ktestclient.NewGetAction("replicationcontrollers", "", "config-5"), ktestclient.NewGetAction("replicationcontrollers", "", "config-5"), ktestclient.NewDeleteAction("replicationcontrollers", "", "config-5"), }, output: "config stopped", err: false, }, { testName: "no config, some deployments", namespace: "default", name: "config", oc: testclient.NewSimpleFake(notfound()), kc: ktestclient.NewSimpleFake(mkdeploymentlist(1)), expected: []ktestclient.Action{ ktestclient.NewDeleteAction("deploymentconfigs", "default", "config"), }, kexpected: []ktestclient.Action{ ktestclient.NewListAction("replicationcontrollers", "default", nil, nil), ktestclient.NewGetAction("replicationcontrollers", "", "config-1"), ktestclient.NewListAction("replicationcontrollers", "", nil, nil), ktestclient.NewGetAction("replicationcontrollers", "", "config-1"), ktestclient.NewUpdateAction("replicationcontrollers", "", nil), ktestclient.NewGetAction("replicationcontrollers", "", "config-1"), ktestclient.NewGetAction("replicationcontrollers", "", "config-1"), ktestclient.NewDeleteAction("replicationcontrollers", "", "config-1"), }, output: "config stopped", err: false, }, { testName: "no config, no deployments", namespace: "default", name: "config", oc: testclient.NewSimpleFake(notfound()), kc: ktestclient.NewSimpleFake(&kapi.ReplicationControllerList{}), expected: []ktestclient.Action{ ktestclient.NewDeleteAction("deploymentconfigs", "default", "config"), }, kexpected: []ktestclient.Action{ ktestclient.NewListAction("replicationcontrollers", "default", nil, nil), }, output: "", err: true, }, { testName: "config, no deployments", namespace: "default", name: "config", oc: testclient.NewSimpleFake(deploytest.OkDeploymentConfig(5)), kc: ktestclient.NewSimpleFake(&kapi.ReplicationControllerList{}), expected: []ktestclient.Action{ ktestclient.NewDeleteAction("deploymentconfigs", "default", "config"), }, kexpected: []ktestclient.Action{ ktestclient.NewListAction("replicationcontrollers", "default", nil, nil), }, output: "config stopped", err: false, }, } for _, test := range tests { reaper := &DeploymentConfigReaper{oc: test.oc, kc: test.kc, pollInterval: time.Millisecond, timeout: time.Millisecond} out, err := reaper.Stop(test.namespace, test.name, 1*time.Second, nil) if !test.err && err != nil { t.Errorf("%s: unexpected error: %v", test.testName, err) } if test.err && err == nil { t.Errorf("%s: expected an error", test.testName) } if len(test.oc.Actions()) != len(test.expected) { t.Fatalf("%s: unexpected actions: %v, expected %v", test.testName, test.oc.Actions, test.expected) } for j, actualAction := range test.oc.Actions() { if !reflect.DeepEqual(actualAction, test.expected[j]) { t.Errorf("%s: unexpected action: %s, expected %s", test.testName, actualAction, test.expected[j]) } } if len(test.kc.Actions()) != len(test.kexpected) { t.Fatalf("%s: unexpected actions: %v, expected %v", test.testName, test.kc.Actions(), test.kexpected) } for j, actualAction := range test.kc.Actions() { e, a := test.kexpected[j], actualAction if e.GetVerb() != a.GetVerb() || e.GetNamespace() != a.GetNamespace() || e.GetResource() != a.GetResource() || e.GetSubresource() != a.GetSubresource() { t.Errorf("%s: unexpected action[%d]: %s, expected %s", test.testName, j, a, e) } switch a.(type) { case ktestclient.GetAction, ktestclient.DeleteAction: if !reflect.DeepEqual(e, a) { t.Errorf("%s: unexpected action[%d]: %s, expected %s", test.testName, j, a, e) } } } if out != test.output { t.Errorf("%s: unexpected output %q, expected %q", test.testName, out, test.output) } } }
func TestTokenDeletion(t *testing.T) { dockercfgSecretFieldSelector := fields.OneTermEqualSelector(client.SecretType, string(api.SecretTypeDockercfg)) testcases := map[string]struct { ClientObjects []runtime.Object DeletedSecret *api.Secret ExpectedActions []testclient.Action }{ "deleted token secret without serviceaccount": { ClientObjects: []runtime.Object{serviceAccount(addTokenSecretReference(tokenSecretReferences()), imagePullSecretReferences()), createdDockercfgSecret()}, DeletedSecret: serviceAccountTokenSecret(), ExpectedActions: []testclient.Action{ testclient.NewListAction("secrets", "default", labels.Everything(), dockercfgSecretFieldSelector), testclient.NewDeleteAction("secrets", "default", "default-dockercfg-fplln"), }, }, "deleted token secret with serviceaccount with reference": { ClientObjects: []runtime.Object{serviceAccount(addTokenSecretReference(tokenSecretReferences()), imagePullSecretReferences()), createdDockercfgSecret()}, DeletedSecret: serviceAccountTokenSecret(), ExpectedActions: []testclient.Action{ testclient.NewListAction("secrets", "default", labels.Everything(), dockercfgSecretFieldSelector), testclient.NewDeleteAction("secrets", "default", "default-dockercfg-fplln"), }, }, "deleted token secret with serviceaccount without reference": { ClientObjects: []runtime.Object{serviceAccount(addTokenSecretReference(tokenSecretReferences()), imagePullSecretReferences()), createdDockercfgSecret()}, DeletedSecret: serviceAccountTokenSecret(), ExpectedActions: []testclient.Action{ testclient.NewListAction("secrets", "default", labels.Everything(), dockercfgSecretFieldSelector), testclient.NewDeleteAction("secrets", "default", "default-dockercfg-fplln"), }, }, } for k, tc := range testcases { // Re-seed to reset name generation rand.Seed(1) client := testclient.NewSimpleFake(tc.ClientObjects...) controller := NewDockercfgTokenDeletedController(client, DockercfgTokenDeletedControllerOptions{}) if tc.DeletedSecret != nil { controller.secretDeleted(tc.DeletedSecret) } for i, action := range client.Actions() { if len(tc.ExpectedActions) < i+1 { t.Errorf("%s: %d unexpected actions: %+v", k, len(client.Actions())-len(tc.ExpectedActions), client.Actions()[i:]) break } expectedAction := tc.ExpectedActions[i] if !reflect.DeepEqual(expectedAction, action) { t.Errorf("%s: Expected %v, got %v", k, expectedAction, action) continue } } if len(tc.ExpectedActions) > len(client.Actions()) { t.Errorf("%s: %d additional expected actions:%+v", k, len(tc.ExpectedActions)-len(client.Actions()), tc.ExpectedActions[len(client.Actions()):]) } } }