// TestProcess_changeForUnregisteredTag ensures that an image update for which // there is a matching trigger results in a no-op due to the tag specified on // the trigger not matching the tags defined on the image stream. func TestProcess_changeForUnregisteredTag(t *testing.T) { config := deploytest.OkDeploymentConfig(0) stream := deploytest.OkStreamForConfig(config) // The image has been resolved at least once before. config.Spec.Triggers[0].ImageChangeParams.From.Name = imageapi.JoinImageStreamTag(stream.Name, "unrelatedtag") fake := &testclient.Fake{} fake.AddReactor("get", "imagestreams", func(action ktestclient.Action) (handled bool, ret runtime.Object, err error) { return true, stream, nil }) image := config.Spec.Template.Spec.Containers[0].Image // verify no-op; should be the same for force=true and force=false if err := processTriggers(config, fake, false); err != nil { t.Fatalf("unexpected error: %v", err) } if image != config.Spec.Template.Spec.Containers[0].Image { t.Fatalf("unexpected image update: %#v", config.Spec.Template.Spec.Containers[0].Image) } if err := processTriggers(config, fake, true); err != nil { t.Fatalf("unexpected error when forced: %v", err) } if image != config.Spec.Template.Spec.Containers[0].Image { t.Fatalf("unexpected image update when forced: %#v", config.Spec.Template.Spec.Containers[0].Image) } }
// TestProcess_changeForNonAutomaticTag ensures that an image update for which // there is a matching trigger results in a no-op due to the trigger's // automatic flag being set to false or updates the config if forced. func TestProcess_changeForNonAutomaticTag(t *testing.T) { tests := []struct { name string force bool expected bool expectedErr bool }{ { name: "normal update", force: false, expected: false, expectedErr: false, }, { name: "forced update", force: true, expected: true, expectedErr: false, }, } for _, test := range tests { config := deploytest.OkDeploymentConfig(1) config.Namespace = kapi.NamespaceDefault config.Spec.Triggers[0].ImageChangeParams.Automatic = false // The image has been resolved at least once before. config.Spec.Triggers[0].ImageChangeParams.LastTriggeredImage = deploytest.DockerImageReference stream := deploytest.OkStreamForConfig(config) config.Spec.Triggers[0].ImageChangeParams.LastTriggeredImage = "someotherresolveddockerimagereference" fake := &testclient.Fake{} fake.AddReactor("get", "imagestreams", func(action ktestclient.Action) (handled bool, ret runtime.Object, err error) { if !test.expected { t.Errorf("unexpected imagestream call") } return true, stream, nil }) image := config.Spec.Template.Spec.Containers[0].Image // Force equals to false; we shouldn't update the config anyway err := processTriggers(config, fake, test.force) if err == nil && test.expectedErr { t.Errorf("%s: expected an error", test.name) continue } if err != nil && !test.expectedErr { t.Errorf("%s: unexpected error: %v", test.name, err) continue } if test.expected && config.Spec.Template.Spec.Containers[0].Image == image { t.Errorf("%s: expected an image update but got none", test.name) } else if !test.expected && config.Spec.Template.Spec.Containers[0].Image != image { t.Errorf("%s: didn't expect an image update but got %s", test.name, image) } } }