// prevDeployment is the old object tested for both old and new client updates. func prevDeployment() *deployapi.DeploymentConfig { return &deployapi.DeploymentConfig{ ObjectMeta: kapi.ObjectMeta{Name: "foo", Namespace: "default", Generation: 4, Annotations: make(map[string]string)}, Spec: deploytest.OkDeploymentConfigSpec(), Status: deploytest.OkDeploymentConfigStatus(1), } }
func TestCanTrigger(t *testing.T) { tests := []struct { name string config *deployapi.DeploymentConfig decoded *deployapi.DeploymentConfig expected bool expectedCauses []deployapi.DeploymentCause }{ { name: "nil decoded config", config: testapi.OkDeploymentConfig(1), decoded: nil, expected: false, expectedCauses: nil, }, { name: "no trigger", config: &deployapi.DeploymentConfig{ Spec: deployapi.DeploymentConfigSpec{ Template: testapi.OkPodTemplateChanged(), }, Status: testapi.OkDeploymentConfigStatus(1), }, decoded: &deployapi.DeploymentConfig{ Spec: deployapi.DeploymentConfigSpec{ Template: testapi.OkPodTemplate(), }, Status: testapi.OkDeploymentConfigStatus(1), }, expected: false, expectedCauses: nil, }, { name: "config change trigger only", config: &deployapi.DeploymentConfig{ Spec: deployapi.DeploymentConfigSpec{ Template: testapi.OkPodTemplateChanged(), Triggers: []deployapi.DeploymentTriggerPolicy{ testapi.OkConfigChangeTrigger(), }, }, Status: testapi.OkDeploymentConfigStatus(1), }, decoded: &deployapi.DeploymentConfig{ Spec: deployapi.DeploymentConfigSpec{ Template: testapi.OkPodTemplate(), Triggers: []deployapi.DeploymentTriggerPolicy{ testapi.OkConfigChangeTrigger(), }, }, Status: testapi.OkDeploymentConfigStatus(1), }, expected: true, expectedCauses: testapi.OkConfigChangeDetails().Causes, }, { name: "config change trigger only [no change][initial]", config: &deployapi.DeploymentConfig{ Spec: deployapi.DeploymentConfigSpec{ Template: testapi.OkPodTemplate(), Triggers: []deployapi.DeploymentTriggerPolicy{ testapi.OkConfigChangeTrigger(), }, }, Status: testapi.OkDeploymentConfigStatus(0), }, decoded: &deployapi.DeploymentConfig{ Spec: deployapi.DeploymentConfigSpec{ Template: testapi.OkPodTemplate(), Triggers: []deployapi.DeploymentTriggerPolicy{ testapi.OkConfigChangeTrigger(), }, }, Status: testapi.OkDeploymentConfigStatus(0), }, expected: true, expectedCauses: testapi.OkConfigChangeDetails().Causes, }, { name: "config change trigger only [no change]", config: &deployapi.DeploymentConfig{ Spec: deployapi.DeploymentConfigSpec{ Template: testapi.OkPodTemplate(), Triggers: []deployapi.DeploymentTriggerPolicy{ testapi.OkConfigChangeTrigger(), }, }, Status: testapi.OkDeploymentConfigStatus(1), }, decoded: &deployapi.DeploymentConfig{ Spec: deployapi.DeploymentConfigSpec{ Template: testapi.OkPodTemplate(), Triggers: []deployapi.DeploymentTriggerPolicy{ testapi.OkConfigChangeTrigger(), }, }, Status: testapi.OkDeploymentConfigStatus(1), }, expected: false, expectedCauses: nil, }, { name: "image change trigger only [automatic=false]", config: &deployapi.DeploymentConfig{ Spec: deployapi.DeploymentConfigSpec{ Template: testapi.OkPodTemplateChanged(), // Irrelevant change Triggers: []deployapi.DeploymentTriggerPolicy{ testapi.OkNonAutomaticICT(), // Image still to be resolved but it's false anyway }, }, }, decoded: &deployapi.DeploymentConfig{ Spec: deployapi.DeploymentConfigSpec{ Template: testapi.OkPodTemplate(), Triggers: []deployapi.DeploymentTriggerPolicy{ testapi.OkNonAutomaticICT(), }, }, }, expected: false, expectedCauses: nil, }, { name: "image change trigger only [automatic=false][image triggered]", config: &deployapi.DeploymentConfig{ Spec: deployapi.DeploymentConfigSpec{ Template: testapi.OkPodTemplateChanged(), // Image has been updated in the template but automatic=false Triggers: []deployapi.DeploymentTriggerPolicy{ testapi.OkTriggeredNonAutomatic(), }, }, }, decoded: &deployapi.DeploymentConfig{ Spec: deployapi.DeploymentConfigSpec{ Template: testapi.OkPodTemplate(), Triggers: []deployapi.DeploymentTriggerPolicy{ testapi.OkNonAutomaticICT(), }, }, }, expected: false, expectedCauses: nil, }, { name: "image change trigger only [automatic=true]", config: &deployapi.DeploymentConfig{ Spec: deployapi.DeploymentConfigSpec{ Template: testapi.OkPodTemplateChanged(), Triggers: []deployapi.DeploymentTriggerPolicy{ testapi.OkTriggeredImageChange(), }, }, }, decoded: &deployapi.DeploymentConfig{ Spec: deployapi.DeploymentConfigSpec{ Template: testapi.OkPodTemplate(), Triggers: []deployapi.DeploymentTriggerPolicy{ testapi.OkImageChangeTrigger(), }, }, }, expected: true, expectedCauses: testapi.OkImageChangeDetails().Causes, }, { name: "image change trigger only [automatic=true][no change]", config: &deployapi.DeploymentConfig{ Spec: deployapi.DeploymentConfigSpec{ Template: testapi.OkPodTemplate(), Triggers: []deployapi.DeploymentTriggerPolicy{ testapi.OkImageChangeTrigger(), }, }, }, decoded: &deployapi.DeploymentConfig{ Spec: deployapi.DeploymentConfigSpec{ Template: testapi.OkPodTemplate(), Triggers: []deployapi.DeploymentTriggerPolicy{ testapi.OkImageChangeTrigger(), }, }, }, expected: false, expectedCauses: nil, }, { name: "config change and image change trigger [automatic=false][initial][image resolved]", config: &deployapi.DeploymentConfig{ Spec: deployapi.DeploymentConfigSpec{ Template: testapi.OkPodTemplateChanged(), Triggers: []deployapi.DeploymentTriggerPolicy{ testapi.OkConfigChangeTrigger(), testapi.OkTriggeredNonAutomatic(), }, }, Status: testapi.OkDeploymentConfigStatus(0), }, decoded: &deployapi.DeploymentConfig{ Spec: deployapi.DeploymentConfigSpec{ Template: testapi.OkPodTemplate(), Triggers: []deployapi.DeploymentTriggerPolicy{ testapi.OkConfigChangeTrigger(), testapi.OkNonAutomaticICT(), }, }, Status: testapi.OkDeploymentConfigStatus(0), }, expected: true, expectedCauses: testapi.OkConfigChangeDetails().Causes, }, { name: "config change and image change trigger [automatic=false][initial]", config: &deployapi.DeploymentConfig{ Spec: deployapi.DeploymentConfigSpec{ Template: testapi.OkPodTemplate(), Triggers: []deployapi.DeploymentTriggerPolicy{ testapi.OkConfigChangeTrigger(), testapi.OkNonAutomaticICT(), // Image is not resolved yet }, }, Status: testapi.OkDeploymentConfigStatus(0), }, decoded: &deployapi.DeploymentConfig{ Spec: deployapi.DeploymentConfigSpec{ Template: testapi.OkPodTemplate(), Triggers: []deployapi.DeploymentTriggerPolicy{ testapi.OkConfigChangeTrigger(), testapi.OkNonAutomaticICT(), }, }, Status: testapi.OkDeploymentConfigStatus(0), }, expected: false, expectedCauses: nil, }, { name: "config change and image change trigger [automatic=true][initial]", config: &deployapi.DeploymentConfig{ Spec: deployapi.DeploymentConfigSpec{ Template: testapi.OkPodTemplateChanged(), // Pod template has changed but the image in the template is yet to be updated Triggers: []deployapi.DeploymentTriggerPolicy{ testapi.OkConfigChangeTrigger(), testapi.OkImageChangeTrigger(), }, }, Status: testapi.OkDeploymentConfigStatus(0), }, decoded: &deployapi.DeploymentConfig{ Spec: deployapi.DeploymentConfigSpec{ Template: testapi.OkPodTemplate(), Triggers: []deployapi.DeploymentTriggerPolicy{ testapi.OkConfigChangeTrigger(), testapi.OkImageChangeTrigger(), }, }, Status: testapi.OkDeploymentConfigStatus(0), }, expected: false, expectedCauses: nil, }, { name: "config change and image change trigger [automatic=true][initial][image triggered]", config: &deployapi.DeploymentConfig{ Spec: deployapi.DeploymentConfigSpec{ Template: testapi.OkPodTemplateChanged(), Triggers: []deployapi.DeploymentTriggerPolicy{ testapi.OkConfigChangeTrigger(), testapi.OkTriggeredImageChange(), }, }, Status: testapi.OkDeploymentConfigStatus(0), }, decoded: &deployapi.DeploymentConfig{ Spec: deployapi.DeploymentConfigSpec{ Template: testapi.OkPodTemplate(), Triggers: []deployapi.DeploymentTriggerPolicy{ testapi.OkConfigChangeTrigger(), testapi.OkImageChangeTrigger(), }, }, Status: testapi.OkDeploymentConfigStatus(0), }, expected: true, expectedCauses: testapi.OkImageChangeDetails().Causes, }, { name: "config change and image change trigger [automatic=true][no change]", config: &deployapi.DeploymentConfig{ Spec: deployapi.DeploymentConfigSpec{ Template: testapi.OkPodTemplate(), Triggers: []deployapi.DeploymentTriggerPolicy{ testapi.OkConfigChangeTrigger(), testapi.OkImageChangeTrigger(), }, }, Status: testapi.OkDeploymentConfigStatus(1), }, decoded: &deployapi.DeploymentConfig{ Spec: deployapi.DeploymentConfigSpec{ Template: testapi.OkPodTemplate(), Triggers: []deployapi.DeploymentTriggerPolicy{ testapi.OkConfigChangeTrigger(), testapi.OkImageChangeTrigger(), }, }, Status: testapi.OkDeploymentConfigStatus(1), }, expected: false, expectedCauses: nil, }, } for _, test := range tests { got, gotCauses := canTrigger(test.config, test.decoded) if test.expected != got { t.Errorf("%s: expected to trigger: %t, got: %t", test.name, test.expected, got) continue } if !kapi.Semantic.DeepEqual(test.expectedCauses, gotCauses) { t.Errorf("%s: expected causes:\n%#v\ngot:\n%#v", test.name, test.expectedCauses, gotCauses) } } }
func TestCanTrigger(t *testing.T) { tests := []struct { name string config *deployapi.DeploymentConfig decoded *deployapi.DeploymentConfig force bool expected bool expectedCauses []deployapi.DeploymentCause expectedErr bool }{ { name: "no trigger [w/ podtemplate change]", config: &deployapi.DeploymentConfig{ ObjectMeta: kapi.ObjectMeta{Name: "config"}, Spec: deployapi.DeploymentConfigSpec{ Triggers: []deployapi.DeploymentTriggerPolicy{}, Template: deploytest.OkPodTemplateChanged(), }, Status: deploytest.OkDeploymentConfigStatus(1), }, decoded: &deployapi.DeploymentConfig{ ObjectMeta: kapi.ObjectMeta{Name: "config"}, Spec: deployapi.DeploymentConfigSpec{ Triggers: []deployapi.DeploymentTriggerPolicy{}, Template: deploytest.OkPodTemplate(), }, Status: deploytest.OkDeploymentConfigStatus(1), }, force: false, expected: false, expectedCauses: nil, }, { name: "forced updated", config: &deployapi.DeploymentConfig{ ObjectMeta: kapi.ObjectMeta{Name: "config"}, Spec: deployapi.DeploymentConfigSpec{ Template: deploytest.OkPodTemplateChanged(), }, Status: deploytest.OkDeploymentConfigStatus(1), }, decoded: &deployapi.DeploymentConfig{ ObjectMeta: kapi.ObjectMeta{Name: "config"}, Spec: deployapi.DeploymentConfigSpec{ Template: deploytest.OkPodTemplate(), }, Status: deploytest.OkDeploymentConfigStatus(1), }, force: true, expected: true, expectedCauses: []deployapi.DeploymentCause{{Type: deployapi.DeploymentTriggerManual}}, }, { name: "config change trigger only [w/ podtemplate change]", config: &deployapi.DeploymentConfig{ ObjectMeta: kapi.ObjectMeta{Name: "config"}, Spec: deployapi.DeploymentConfigSpec{ Template: deploytest.OkPodTemplateChanged(), Triggers: []deployapi.DeploymentTriggerPolicy{ deploytest.OkConfigChangeTrigger(), }, }, Status: deploytest.OkDeploymentConfigStatus(1), }, decoded: &deployapi.DeploymentConfig{ ObjectMeta: kapi.ObjectMeta{Name: "config"}, Spec: deployapi.DeploymentConfigSpec{ Template: deploytest.OkPodTemplate(), Triggers: []deployapi.DeploymentTriggerPolicy{ deploytest.OkConfigChangeTrigger(), }, }, Status: deploytest.OkDeploymentConfigStatus(1), }, force: false, expected: true, expectedCauses: deploytest.OkConfigChangeDetails().Causes, }, { name: "config change trigger only [no change][initial]", config: &deployapi.DeploymentConfig{ ObjectMeta: kapi.ObjectMeta{Name: "config"}, Spec: deployapi.DeploymentConfigSpec{ Template: deploytest.OkPodTemplate(), Triggers: []deployapi.DeploymentTriggerPolicy{ deploytest.OkConfigChangeTrigger(), }, }, Status: deploytest.OkDeploymentConfigStatus(0), }, decoded: &deployapi.DeploymentConfig{ ObjectMeta: kapi.ObjectMeta{Name: "config"}, Spec: deployapi.DeploymentConfigSpec{ Template: deploytest.OkPodTemplate(), Triggers: []deployapi.DeploymentTriggerPolicy{ deploytest.OkConfigChangeTrigger(), }, }, Status: deploytest.OkDeploymentConfigStatus(0), }, force: false, expected: true, expectedCauses: deploytest.OkConfigChangeDetails().Causes, }, { name: "config change trigger only [no change]", config: &deployapi.DeploymentConfig{ ObjectMeta: kapi.ObjectMeta{Name: "config"}, Spec: deployapi.DeploymentConfigSpec{ Template: deploytest.OkPodTemplate(), Triggers: []deployapi.DeploymentTriggerPolicy{ deploytest.OkConfigChangeTrigger(), }, }, Status: deploytest.OkDeploymentConfigStatus(1), }, decoded: &deployapi.DeploymentConfig{ ObjectMeta: kapi.ObjectMeta{Name: "config"}, Spec: deployapi.DeploymentConfigSpec{ Template: deploytest.OkPodTemplate(), Triggers: []deployapi.DeploymentTriggerPolicy{ deploytest.OkConfigChangeTrigger(), }, }, Status: deploytest.OkDeploymentConfigStatus(1), }, force: false, expected: false, expectedCauses: nil, }, { name: "image change trigger only [automatic=false][w/ podtemplate change]", config: &deployapi.DeploymentConfig{ ObjectMeta: kapi.ObjectMeta{Name: "config"}, Spec: deployapi.DeploymentConfigSpec{ Template: deploytest.OkPodTemplateChanged(), // Irrelevant change Triggers: []deployapi.DeploymentTriggerPolicy{ deploytest.OkNonAutomaticICT(), // Image still to be resolved but it's false anyway }, }, Status: deploytest.OkDeploymentConfigStatus(1), }, decoded: &deployapi.DeploymentConfig{ ObjectMeta: kapi.ObjectMeta{Name: "config"}, Spec: deployapi.DeploymentConfigSpec{ Template: deploytest.OkPodTemplate(), Triggers: []deployapi.DeploymentTriggerPolicy{ deploytest.OkNonAutomaticICT(), }, }, Status: deploytest.OkDeploymentConfigStatus(1), }, force: false, expected: false, expectedCauses: nil, expectedErr: true, }, { name: "image change trigger only [automatic=false][w/ image change]", config: &deployapi.DeploymentConfig{ ObjectMeta: kapi.ObjectMeta{Name: "config"}, Spec: deployapi.DeploymentConfigSpec{ Template: deploytest.OkPodTemplateChanged(), // Image has been updated in the template but automatic=false Triggers: []deployapi.DeploymentTriggerPolicy{ deploytest.OkTriggeredNonAutomatic(), }, }, Status: deploytest.OkDeploymentConfigStatus(1), }, decoded: &deployapi.DeploymentConfig{ ObjectMeta: kapi.ObjectMeta{Name: "config"}, Spec: deployapi.DeploymentConfigSpec{ Template: deploytest.OkPodTemplate(), Triggers: []deployapi.DeploymentTriggerPolicy{ deploytest.OkNonAutomaticICT(), }, }, Status: deploytest.OkDeploymentConfigStatus(1), }, force: false, expected: false, expectedCauses: nil, }, { name: "image change trigger only [automatic=true][w/ image change]", config: &deployapi.DeploymentConfig{ ObjectMeta: kapi.ObjectMeta{Name: "config"}, Spec: deployapi.DeploymentConfigSpec{ Template: deploytest.OkPodTemplateChanged(), Triggers: []deployapi.DeploymentTriggerPolicy{ deploytest.OkTriggeredImageChange(), }, }, Status: deploytest.OkDeploymentConfigStatus(1), }, decoded: &deployapi.DeploymentConfig{ ObjectMeta: kapi.ObjectMeta{Name: "config"}, Spec: deployapi.DeploymentConfigSpec{ Template: deploytest.OkPodTemplate(), Triggers: []deployapi.DeploymentTriggerPolicy{ deploytest.OkImageChangeTrigger(), }, }, Status: deploytest.OkDeploymentConfigStatus(1), }, force: false, expected: true, expectedCauses: deploytest.OkImageChangeDetails().Causes, }, { name: "image change trigger only [automatic=true][no change]", config: &deployapi.DeploymentConfig{ ObjectMeta: kapi.ObjectMeta{Name: "config"}, Spec: deployapi.DeploymentConfigSpec{ Template: deploytest.OkPodTemplateChanged(), Triggers: []deployapi.DeploymentTriggerPolicy{ deploytest.OkTriggeredImageChange(), }, }, Status: deploytest.OkDeploymentConfigStatus(1), }, decoded: &deployapi.DeploymentConfig{ ObjectMeta: kapi.ObjectMeta{Name: "config"}, Spec: deployapi.DeploymentConfigSpec{ Template: deploytest.OkPodTemplateChanged(), Triggers: []deployapi.DeploymentTriggerPolicy{ deploytest.OkTriggeredImageChange(), }, }, Status: deploytest.OkDeploymentConfigStatus(1), }, force: false, expected: false, expectedCauses: nil, }, { name: "config change and image change trigger [automatic=false][initial][w/ image change]", config: &deployapi.DeploymentConfig{ ObjectMeta: kapi.ObjectMeta{Name: "config"}, Spec: deployapi.DeploymentConfigSpec{ Template: deploytest.OkPodTemplateChanged(), Triggers: []deployapi.DeploymentTriggerPolicy{ deploytest.OkConfigChangeTrigger(), deploytest.OkTriggeredNonAutomatic(), }, }, Status: deploytest.OkDeploymentConfigStatus(0), }, decoded: &deployapi.DeploymentConfig{ ObjectMeta: kapi.ObjectMeta{Name: "config"}, Spec: deployapi.DeploymentConfigSpec{ Template: deploytest.OkPodTemplate(), Triggers: []deployapi.DeploymentTriggerPolicy{ deploytest.OkConfigChangeTrigger(), deploytest.OkNonAutomaticICT(), }, }, Status: deploytest.OkDeploymentConfigStatus(0), }, force: false, expected: true, expectedCauses: deploytest.OkConfigChangeDetails().Causes, }, { name: "config change and image change trigger [automatic=false][initial][no change]", config: &deployapi.DeploymentConfig{ ObjectMeta: kapi.ObjectMeta{Name: "config"}, Spec: deployapi.DeploymentConfigSpec{ Template: deploytest.OkPodTemplate(), Triggers: []deployapi.DeploymentTriggerPolicy{ deploytest.OkConfigChangeTrigger(), deploytest.OkNonAutomaticICT(), // Image is not resolved yet }, }, Status: deploytest.OkDeploymentConfigStatus(0), }, decoded: &deployapi.DeploymentConfig{ ObjectMeta: kapi.ObjectMeta{Name: "config"}, Spec: deployapi.DeploymentConfigSpec{ Template: deploytest.OkPodTemplate(), Triggers: []deployapi.DeploymentTriggerPolicy{ deploytest.OkConfigChangeTrigger(), deploytest.OkNonAutomaticICT(), }, }, Status: deploytest.OkDeploymentConfigStatus(0), }, force: false, expected: false, expectedCauses: nil, expectedErr: true, }, { name: "config change and image change trigger [automatic=true][initial][w/ podtemplate change]", config: &deployapi.DeploymentConfig{ ObjectMeta: kapi.ObjectMeta{Name: "config"}, Spec: deployapi.DeploymentConfigSpec{ Template: deploytest.OkPodTemplateChanged(), // Pod template has changed but the image in the template is yet to be updated Triggers: []deployapi.DeploymentTriggerPolicy{ deploytest.OkConfigChangeTrigger(), deploytest.OkImageChangeTrigger(), }, }, Status: deploytest.OkDeploymentConfigStatus(0), }, decoded: &deployapi.DeploymentConfig{ ObjectMeta: kapi.ObjectMeta{Name: "config"}, Spec: deployapi.DeploymentConfigSpec{ Template: deploytest.OkPodTemplate(), Triggers: []deployapi.DeploymentTriggerPolicy{ deploytest.OkConfigChangeTrigger(), deploytest.OkImageChangeTrigger(), }, }, Status: deploytest.OkDeploymentConfigStatus(0), }, force: false, expected: false, expectedCauses: nil, expectedErr: true, }, { name: "config change and image change trigger [automatic=true][initial][w/ image change]", config: &deployapi.DeploymentConfig{ ObjectMeta: kapi.ObjectMeta{Name: "config"}, Spec: deployapi.DeploymentConfigSpec{ Template: deploytest.OkPodTemplateChanged(), Triggers: []deployapi.DeploymentTriggerPolicy{ deploytest.OkConfigChangeTrigger(), deploytest.OkTriggeredImageChange(), }, }, Status: deploytest.OkDeploymentConfigStatus(0), }, decoded: &deployapi.DeploymentConfig{ ObjectMeta: kapi.ObjectMeta{Name: "config"}, Spec: deployapi.DeploymentConfigSpec{ Template: deploytest.OkPodTemplate(), Triggers: []deployapi.DeploymentTriggerPolicy{ deploytest.OkConfigChangeTrigger(), deploytest.OkImageChangeTrigger(), }, }, Status: deploytest.OkDeploymentConfigStatus(0), }, force: false, expected: true, expectedCauses: deploytest.OkImageChangeDetails().Causes, }, { name: "config change and image change trigger [automatic=true][no change]", config: &deployapi.DeploymentConfig{ ObjectMeta: kapi.ObjectMeta{Name: "config"}, Spec: deployapi.DeploymentConfigSpec{ Template: deploytest.OkPodTemplateChanged(), Triggers: []deployapi.DeploymentTriggerPolicy{ deploytest.OkConfigChangeTrigger(), deploytest.OkTriggeredImageChange(), }, }, Status: deploytest.OkDeploymentConfigStatus(1), }, force: false, expected: false, expectedCauses: nil, }, } for _, test := range tests { t.Logf("running scenario %q", test.name) fake := &ktestclient.Fake{} fake.AddReactor("get", "replicationcontrollers", func(action ktestclient.Action) (handled bool, ret runtime.Object, err error) { config := test.decoded if config == nil { config = test.config } config = deploytest.RoundTripConfig(t, config) deployment, _ := deployutil.MakeDeployment(config, codec) return true, deployment, nil }) test.config = deploytest.RoundTripConfig(t, test.config) got, gotCauses, err := canTrigger(test.config, fake, codec, test.force) if err != nil && !test.expectedErr { t.Errorf("unexpected error: %v", err) continue } if err == nil && test.expectedErr { t.Errorf("expected an error") continue } if test.expected != got { t.Errorf("expected to trigger: %t, got: %t", test.expected, got) } if !kapi.Semantic.DeepEqual(test.expectedCauses, gotCauses) { t.Errorf("expected causes:\n%#v\ngot:\n%#v", test.expectedCauses, gotCauses) } } }
func TestExport(t *testing.T) { exporter := &defaultExporter{} baseSA := &kapi.ServiceAccount{} baseSA.Name = "my-sa" tests := []struct { name string object runtime.Object exact bool expectedObj runtime.Object expectedErr error }{ { name: "export deploymentConfig", object: deploytest.OkDeploymentConfig(1), expectedObj: &deployapi.DeploymentConfig{ ObjectMeta: kapi.ObjectMeta{ Name: "config", }, Spec: deploytest.OkDeploymentConfigSpec(), Status: deploytest.OkDeploymentConfigStatus(0), }, expectedErr: nil, }, { name: "export imageStream", object: &imageapi.ImageStream{ ObjectMeta: kapi.ObjectMeta{ Name: "test", Namespace: "other", }, Spec: imageapi.ImageStreamSpec{ Tags: map[string]imageapi.TagReference{ "v1": { Annotations: map[string]string{"an": "annotation"}, }, }, }, Status: imageapi.ImageStreamStatus{ DockerImageRepository: "foo/bar", Tags: map[string]imageapi.TagEventList{ "v1": { Items: []imageapi.TagEvent{{Image: "the image"}}, }, }, }, }, expectedObj: &imageapi.ImageStream{ ObjectMeta: kapi.ObjectMeta{ Name: "test", Namespace: "", }, Spec: imageapi.ImageStreamSpec{ Tags: map[string]imageapi.TagReference{ "v1": { From: &kapi.ObjectReference{ Kind: "DockerImage", Name: "foo/bar:v1", }, Annotations: map[string]string{"an": "annotation"}, }, }, }, Status: imageapi.ImageStreamStatus{ Tags: map[string]imageapi.TagEventList{}, }, }, expectedErr: nil, }, { name: "remove unexportable SA secrets", object: &kapi.ServiceAccount{ ObjectMeta: kapi.ObjectMeta{ Name: baseSA.Name, }, ImagePullSecrets: []kapi.LocalObjectReference{ {Name: osautil.GetDockercfgSecretNamePrefix(baseSA) + "-foo"}, {Name: "another-pull-secret"}, }, Secrets: []kapi.ObjectReference{ {Name: osautil.GetDockercfgSecretNamePrefix(baseSA) + "-foo"}, {Name: osautil.GetTokenSecretNamePrefix(baseSA) + "-foo"}, {Name: "another-mountable-secret"}, }, }, expectedObj: &kapi.ServiceAccount{ ObjectMeta: kapi.ObjectMeta{ Name: baseSA.Name, }, ImagePullSecrets: []kapi.LocalObjectReference{ {Name: "another-pull-secret"}, }, Secrets: []kapi.ObjectReference{ {Name: "another-mountable-secret"}, }, }, expectedErr: nil, }, { name: "do not remove unexportable SA secrets with exact", object: &kapi.ServiceAccount{ ObjectMeta: kapi.ObjectMeta{ Name: baseSA.Name, }, ImagePullSecrets: []kapi.LocalObjectReference{ {Name: osautil.GetDockercfgSecretNamePrefix(baseSA) + "-foo"}, {Name: "another-pull-secret"}, }, Secrets: []kapi.ObjectReference{ {Name: osautil.GetDockercfgSecretNamePrefix(baseSA) + "-foo"}, {Name: osautil.GetTokenSecretNamePrefix(baseSA) + "-foo"}, {Name: "another-mountable-secret"}, }, }, expectedObj: &kapi.ServiceAccount{ ObjectMeta: kapi.ObjectMeta{ Name: baseSA.Name, }, ImagePullSecrets: []kapi.LocalObjectReference{ {Name: osautil.GetDockercfgSecretNamePrefix(baseSA) + "-foo"}, {Name: "another-pull-secret"}, }, Secrets: []kapi.ObjectReference{ {Name: osautil.GetDockercfgSecretNamePrefix(baseSA) + "-foo"}, {Name: osautil.GetTokenSecretNamePrefix(baseSA) + "-foo"}, {Name: "another-mountable-secret"}, }, }, exact: true, expectedErr: nil, }, } for _, test := range tests { if err := exporter.Export(test.object, test.exact); err != test.expectedErr { t.Errorf("error mismatch: expected %v, got %v", test.expectedErr, err) } if !reflect.DeepEqual(test.object, test.expectedObj) { t.Errorf("object mismatch: expected \n%v\ngot \n%v\n", test.expectedObj, test.object) } } }