本文整理汇总了Golang中github.com/openshift/origin/pkg/deploy/api/test.OkImageChangeTrigger函数的典型用法代码示例。如果您正苦于以下问题:Golang OkImageChangeTrigger函数的具体用法?Golang OkImageChangeTrigger怎么用?Golang OkImageChangeTrigger使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了OkImageChangeTrigger函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: TestDeploy_reenableTriggers
func TestDeploy_reenableTriggers(t *testing.T) {
mktrigger := func() deployapi.DeploymentTriggerPolicy {
t := deploytest.OkImageChangeTrigger()
t.ImageChangeParams.Automatic = false
return t
}
var updated *deployapi.DeploymentConfig
osClient := &tc.Fake{}
osClient.ReactFn = func(action ktc.Action) (runtime.Object, error) {
switch a := action.(type) {
case ktc.UpdateActionImpl:
updated = a.GetObject().(*deployapi.DeploymentConfig)
return updated, nil
}
t.Fatalf("unexpected action: %+v", action)
return nil, nil
}
config := deploytest.OkDeploymentConfig(1)
config.Triggers = []deployapi.DeploymentTriggerPolicy{}
count := 3
for i := 0; i < count; i++ {
config.Triggers = append(config.Triggers, mktrigger())
}
o := &DeployOptions{osClient: osClient}
err := o.reenableTriggers(config, ioutil.Discard)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if updated == nil {
t.Fatalf("expected an updated config")
}
if e, a := count, len(config.Triggers); e != a {
t.Fatalf("expected %d triggers, got %d", e, a)
}
for _, trigger := range config.Triggers {
if !trigger.ImageChangeParams.Automatic {
t.Errorf("expected trigger to be enabled: %#v", trigger.ImageChangeParams)
}
}
}
示例2: TestHandle_nonAutomaticImageUpdates
func TestHandle_nonAutomaticImageUpdates(t *testing.T) {
var updated *deployapi.DeploymentConfig
controller := &DeploymentConfigChangeController{
decodeConfig: func(deployment *kapi.ReplicationController) (*deployapi.DeploymentConfig, error) {
return deployutil.DecodeDeploymentConfig(deployment, kapi.Codecs.LegacyCodec(deployapi.SchemeGroupVersion))
},
changeStrategy: &changeStrategyImpl{
generateDeploymentConfigFunc: func(namespace, name string) (*deployapi.DeploymentConfig, error) {
generated := deployapitest.OkDeploymentConfig(1)
// The generator doesn't change automatic so it's ok to fake it here.
generated.Spec.Triggers[0].ImageChangeParams.Automatic = false
generated.Status.Details = deployapitest.OkImageChangeDetails()
updated = generated
return generated, nil
},
updateDeploymentConfigFunc: func(namespace string, config *deployapi.DeploymentConfig) (*deployapi.DeploymentConfig, error) {
updated.Status.Details = deployapitest.OkConfigChangeDetails()
return updated, nil
},
},
}
config := deployapitest.OkDeploymentConfig(0)
ict := deployapitest.OkImageChangeTrigger()
ict.ImageChangeParams.Automatic = false
config.Spec.Triggers = []deployapi.DeploymentTriggerPolicy{deployapitest.OkConfigChangeTrigger(), ict}
if err := controller.Handle(config); err != nil {
t.Fatalf("unexpected error: %v", err)
}
if e, a := 1, updated.Status.LatestVersion; e != a {
t.Fatalf("expected update to latestversion=%d, got %d", e, a)
}
if updated.Status.Details == nil {
t.Fatalf("expected config change details to be set")
} else if updated.Status.Details.Causes == nil {
t.Fatalf("expected config change causes to be set")
} else if updated.Status.Details.Causes[0].Type != deployapi.DeploymentTriggerOnConfigChange {
t.Fatalf("expected config change cause to be set to config change trigger, got %s", updated.Status.Details.Causes[0].Type)
}
}
示例3: TestDeploy_reenableTriggers
func TestDeploy_reenableTriggers(t *testing.T) {
mktrigger := func() deployapi.DeploymentTriggerPolicy {
t := deploytest.OkImageChangeTrigger()
t.ImageChangeParams.Automatic = false
return t
}
var updated *deployapi.DeploymentConfig
osClient := &tc.Fake{}
osClient.AddReactor("update", "deploymentconfigs", func(action ktc.Action) (handled bool, ret runtime.Object, err error) {
updated = action.(ktc.UpdateAction).GetObject().(*deployapi.DeploymentConfig)
return true, updated, nil
})
config := deploytest.OkDeploymentConfig(1)
config.Spec.Triggers = []deployapi.DeploymentTriggerPolicy{}
count := 3
for i := 0; i < count; i++ {
config.Spec.Triggers = append(config.Spec.Triggers, mktrigger())
}
o := &DeployOptions{osClient: osClient, out: ioutil.Discard}
err := o.reenableTriggers(config)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if updated == nil {
t.Fatalf("expected an updated config")
}
if e, a := count, len(config.Spec.Triggers); e != a {
t.Fatalf("expected %d triggers, got %d", e, a)
}
for _, trigger := range config.Spec.Triggers {
if !trigger.ImageChangeParams.Automatic {
t.Errorf("expected trigger to be enabled: %#v", trigger.ImageChangeParams)
}
}
}
示例4: TestHandle_imageChangeTrigger
// TestHandle_imageChangeTrigger ensures that a config with an image change
// trigger will be reconciled.
func TestHandle_imageChangeTrigger(t *testing.T) {
updated := false
fake := &testclient.Fake{}
fake.AddReactor("update", "deploymentconfigs/instantiate", func(action ktestclient.Action) (handled bool, ret runtime.Object, err error) {
updated = true
return true, nil, nil
})
controller := NewDeploymentTriggerController(dcInformer, streamInformer, fake, codec)
config := testapi.OkDeploymentConfig(0)
config.Namespace = kapi.NamespaceDefault
config.Spec.Triggers = []deployapi.DeploymentTriggerPolicy{testapi.OkImageChangeTrigger()}
if err := controller.Handle(config); err != nil {
t.Fatalf("unexpected error: %v", err)
}
if !updated {
t.Fatalf("expected config to be instantiated")
}
}
示例5: TestDeploy_triggerEnable
func TestDeploy_triggerEnable(t *testing.T) {
var updated *deployapi.DeploymentConfig
triggerEnabler := &triggerEnabler{
updateConfig: func(namespace string, config *deployapi.DeploymentConfig) (*deployapi.DeploymentConfig, error) {
updated = config
return config, nil
},
}
mktrigger := func() deployapi.DeploymentTriggerPolicy {
t := deploytest.OkImageChangeTrigger()
t.ImageChangeParams.Automatic = false
return t
}
count := 3
config := deploytest.OkDeploymentConfig(1)
config.Triggers = []deployapi.DeploymentTriggerPolicy{}
for i := 0; i < count; i++ {
config.Triggers = append(config.Triggers, mktrigger())
}
err := triggerEnabler.enableTriggers(config, ioutil.Discard)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if updated == nil {
t.Fatalf("expected an updated config")
}
if e, a := count, len(config.Triggers); e != a {
t.Fatalf("expected %d triggers, got %d", e, a)
}
for _, trigger := range config.Triggers {
if !trigger.ImageChangeParams.Automatic {
t.Errorf("expected trigger to be enabled: %#v", trigger.ImageChangeParams)
}
}
}
示例6: TestValidateDeploymentConfigICTMissingImage
func TestValidateDeploymentConfigICTMissingImage(t *testing.T) {
dc := &api.DeploymentConfig{
ObjectMeta: kapi.ObjectMeta{Name: "foo", Namespace: "bar"},
Spec: api.DeploymentConfigSpec{
Replicas: 1,
Triggers: []api.DeploymentTriggerPolicy{test.OkImageChangeTrigger()},
Selector: test.OkSelector(),
Strategy: test.OkStrategy(),
Template: test.OkPodTemplateMissingImage("container1"),
},
}
errs := ValidateDeploymentConfig(dc)
if len(errs) > 0 {
t.Errorf("Unexpected non-empty error list: %+v", errs)
}
for _, c := range dc.Spec.Template.Spec.Containers {
if c.Image == "unset" {
t.Errorf("%s image field still has validation fake out value of %s", c.Name, c.Image)
}
}
}
示例7: TestHandle_waitForImageController
// TestHandle_waitForImageController tests an initial deployment with unresolved image. The config
// change controller should never increment latestVersion, thus trigger a deployment for this config.
func TestHandle_waitForImageController(t *testing.T) {
fake := &testclient.Fake{}
kFake := &ktestclient.Fake{}
fake.PrependReactor("update", "deploymentconfigs/status", func(action ktestclient.Action) (handled bool, ret runtime.Object, err error) {
t.Fatalf("an update should never run before the template image is resolved")
return true, nil, nil
})
controller := NewDeploymentTriggerController(fake, kFake, codec)
config := testapi.OkDeploymentConfig(0)
config.Namespace = kapi.NamespaceDefault
config.Spec.Triggers = []deployapi.DeploymentTriggerPolicy{testapi.OkConfigChangeTrigger(), testapi.OkImageChangeTrigger()}
if err := controller.Handle(config); err != nil {
t.Fatalf("unexpected error: %v", err)
}
}
示例8: TestTriggers_imageChange
// TestTriggers_imageChange ensures that a deployment config with an ImageChange trigger
// will start a new deployment when an image change happens.
func TestTriggers_imageChange(t *testing.T) {
testutil.RequireEtcd(t)
_, clusterAdminKubeConfig, err := testserver.StartTestMaster()
if err != nil {
t.Fatalf("error starting master: %v", err)
}
openshiftClusterAdminClient, err := testutil.GetClusterAdminClient(clusterAdminKubeConfig)
if err != nil {
t.Fatalf("error getting cluster admin client: %v", err)
}
openshiftClusterAdminClientConfig, err := testutil.GetClusterAdminClientConfig(clusterAdminKubeConfig)
if err != nil {
t.Fatalf("error getting cluster admin client config: %v", err)
}
openshiftProjectAdminClient, err := testserver.CreateNewProject(openshiftClusterAdminClient, *openshiftClusterAdminClientConfig, testutil.Namespace(), "bob")
if err != nil {
t.Fatalf("error creating project: %v", err)
}
imageStream := &imageapi.ImageStream{ObjectMeta: kapi.ObjectMeta{Name: deploytest.ImageStreamName}}
config := deploytest.OkDeploymentConfig(0)
config.Namespace = testutil.Namespace()
config.Spec.Triggers = []deployapi.DeploymentTriggerPolicy{deploytest.OkImageChangeTrigger()}
configWatch, err := openshiftProjectAdminClient.DeploymentConfigs(testutil.Namespace()).Watch(kapi.ListOptions{})
if err != nil {
t.Fatalf("Couldn't subscribe to deploymentconfigs %v", err)
}
defer configWatch.Stop()
if imageStream, err = openshiftProjectAdminClient.ImageStreams(testutil.Namespace()).Create(imageStream); err != nil {
t.Fatalf("Couldn't create imagestream: %v", err)
}
imageWatch, err := openshiftProjectAdminClient.ImageStreams(testutil.Namespace()).Watch(kapi.ListOptions{})
if err != nil {
t.Fatalf("Couldn't subscribe to imagestreams: %v", err)
}
defer imageWatch.Stop()
updatedImage := fmt.Sprintf("sha256:%s", deploytest.ImageID)
updatedPullSpec := fmt.Sprintf("registry:8080/%s/%[email protected]%s", testutil.Namespace(), deploytest.ImageStreamName, updatedImage)
// Make a function which can create a new tag event for the image stream and
// then wait for the stream status to be asynchronously updated.
createTagEvent := func() {
mapping := &imageapi.ImageStreamMapping{
ObjectMeta: kapi.ObjectMeta{Name: imageStream.Name},
Tag: imageapi.DefaultImageTag,
Image: imageapi.Image{
ObjectMeta: kapi.ObjectMeta{
Name: updatedImage,
},
DockerImageReference: updatedPullSpec,
},
}
if err := openshiftProjectAdminClient.ImageStreamMappings(testutil.Namespace()).Create(mapping); err != nil {
t.Fatalf("unexpected error: %v", err)
}
t.Log("Waiting for image stream mapping to be reflected in the image stream status...")
statusLoop:
for {
select {
case event := <-imageWatch.ResultChan():
stream := event.Object.(*imageapi.ImageStream)
if _, ok := stream.Status.Tags[imageapi.DefaultImageTag]; ok {
t.Logf("imagestream %q now has status with tags: %#v", stream.Name, stream.Status.Tags)
break statusLoop
}
t.Logf("Still waiting for latest tag status on imagestream %q", stream.Name)
}
}
}
if config, err = openshiftProjectAdminClient.DeploymentConfigs(testutil.Namespace()).Create(config); err != nil {
t.Fatalf("Couldn't create deploymentconfig: %v", err)
}
createTagEvent()
var newConfig *deployapi.DeploymentConfig
t.Log("Waiting for a new deployment config in response to imagestream update")
waitForNewConfig:
for {
select {
case event := <-configWatch.ResultChan():
if event.Type == watchapi.Modified {
newConfig = event.Object.(*deployapi.DeploymentConfig)
// Multiple updates to the config can be expected (e.g. status
// updates), so wait for a significant update (e.g. version).
if newConfig.Status.LatestVersion > 0 {
if e, a := updatedPullSpec, newConfig.Spec.Template.Spec.Containers[0].Image; e != a {
t.Fatalf("unexpected image for pod template container 0; expected %q, got %q", e, a)
}
break waitForNewConfig
}
t.Log("Still waiting for a new deployment config in response to imagestream update")
//.........这里部分代码省略.........
示例9: TestCanTrigger
//.........这里部分代码省略.........
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),
},
示例10: TestExport
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",
},
LatestVersion: 0,
Triggers: []deployapi.DeploymentTriggerPolicy{
deploytest.OkImageChangeTrigger(),
},
Template: deploytest.OkDeploymentTemplate(),
},
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"},
},
},
//.........这里部分代码省略.........
示例11: TestHandle_raceWithTheImageController
func TestHandle_raceWithTheImageController(t *testing.T) {
var updated *deployapi.DeploymentConfig
controller := &DeploymentConfigChangeController{
decodeConfig: func(deployment *kapi.ReplicationController) (*deployapi.DeploymentConfig, error) {
return deployutil.DecodeDeploymentConfig(deployment, kapi.Codecs.LegacyCodec(deployapi.SchemeGroupVersion))
},
changeStrategy: &changeStrategyImpl{
generateDeploymentConfigFunc: func(namespace, name string) (*deployapi.DeploymentConfig, error) {
generated := deployapitest.OkDeploymentConfig(1)
generated.Status.Details = deployapitest.OkImageChangeDetails()
updated = generated
return generated, nil
},
updateDeploymentConfigFunc: func(namespace string, config *deployapi.DeploymentConfig) (*deployapi.DeploymentConfig, error) {
t.Errorf("an update should never run in the presence of races")
updated.Status.Details = deployapitest.OkConfigChangeDetails()
return updated, nil
},
},
}
config := deployapitest.OkDeploymentConfig(0)
config.Spec.Triggers = []deployapi.DeploymentTriggerPolicy{deployapitest.OkConfigChangeTrigger(), deployapitest.OkImageChangeTrigger()}
if err := controller.Handle(config); err != nil {
t.Fatalf("unexpected error: %v", err)
}
if e, a := 1, updated.Status.LatestVersion; e != a {
t.Fatalf("expected update to latestversion=%d, got %d", e, a)
}
if updated.Status.Details == nil {
t.Fatalf("expected config change details to be set")
} else if updated.Status.Details.Causes == nil {
t.Fatalf("expected config change causes to be set")
} else if updated.Status.Details.Causes[0].Type != deployapi.DeploymentTriggerOnImageChange {
t.Fatalf("expected config change cause to be set to image change trigger, got %s", updated.Status.Details.Causes[0].Type)
}
}
示例12: TestTriggers_imageChange_nonAutomatic
// TestTriggers_imageChange_nonAutomatic ensures that a deployment config with a non-automatic
// trigger will have its image updated when a deployment is started manually.
func TestTriggers_imageChange_nonAutomatic(t *testing.T) {
testutil.RequireEtcd(t)
defer testutil.DumpEtcdOnFailure(t)
_, clusterAdminKubeConfig, err := testserver.StartTestMaster()
if err != nil {
t.Fatalf("error starting master: %v", err)
}
openshiftClusterAdminClient, err := testutil.GetClusterAdminClient(clusterAdminKubeConfig)
if err != nil {
t.Fatalf("error getting cluster admin client: %v", err)
}
openshiftClusterAdminClientConfig, err := testutil.GetClusterAdminClientConfig(clusterAdminKubeConfig)
if err != nil {
t.Fatalf("error getting cluster admin client config: %v", err)
}
oc, err := testserver.CreateNewProject(openshiftClusterAdminClient, *openshiftClusterAdminClientConfig, testutil.Namespace(), "bob")
if err != nil {
t.Fatalf("error creating project: %v", err)
}
imageStream := &imageapi.ImageStream{ObjectMeta: kapi.ObjectMeta{Name: deploytest.ImageStreamName}}
if imageStream, err = oc.ImageStreams(testutil.Namespace()).Create(imageStream); err != nil {
t.Fatalf("Couldn't create imagestream: %v", err)
}
imageWatch, err := oc.ImageStreams(testutil.Namespace()).Watch(kapi.ListOptions{})
if err != nil {
t.Fatalf("Couldn't subscribe to imagestreams: %v", err)
}
defer imageWatch.Stop()
image := fmt.Sprintf("sha256:%s", deploytest.ImageID)
pullSpec := fmt.Sprintf("registry:5000/%s/%[email protected]%s", testutil.Namespace(), deploytest.ImageStreamName, image)
// Make a function which can create a new tag event for the image stream and
// then wait for the stream status to be asynchronously updated.
mapping := &imageapi.ImageStreamMapping{
ObjectMeta: kapi.ObjectMeta{Name: imageStream.Name},
Tag: imageapi.DefaultImageTag,
Image: imageapi.Image{
ObjectMeta: kapi.ObjectMeta{
Name: image,
},
DockerImageReference: pullSpec,
},
}
createTagEvent := func(mapping *imageapi.ImageStreamMapping) {
if err := oc.ImageStreamMappings(testutil.Namespace()).Create(mapping); err != nil {
t.Fatalf("unexpected error: %v", err)
}
t.Log("Waiting for image stream mapping to be reflected in the image stream status...")
timeout := time.After(time.Minute)
for {
select {
case event := <-imageWatch.ResultChan():
stream := event.Object.(*imageapi.ImageStream)
tagEventList, ok := stream.Status.Tags[imageapi.DefaultImageTag]
if ok && len(tagEventList.Items) > 0 && tagEventList.Items[0].DockerImageReference == mapping.Image.DockerImageReference {
t.Logf("imagestream %q now has status with tags: %#v", stream.Name, stream.Status.Tags)
return
}
if len(tagEventList.Items) > 0 {
t.Logf("want: %s, got: %s", mapping.Image.DockerImageReference, tagEventList.Items[0].DockerImageReference)
}
t.Logf("Still waiting for latest tag status update on imagestream %q with tags: %#v", stream.Name, tagEventList)
case <-timeout:
t.Fatalf("timed out waiting for image stream %q to be updated", imageStream.Name)
}
}
}
configWatch, err := oc.DeploymentConfigs(testutil.Namespace()).Watch(kapi.ListOptions{})
if err != nil {
t.Fatalf("Couldn't subscribe to deploymentconfigs: %v", err)
}
defer configWatch.Stop()
config := deploytest.OkDeploymentConfig(0)
config.Namespace = testutil.Namespace()
config.Spec.Triggers = []deployapi.DeploymentTriggerPolicy{deploytest.OkImageChangeTrigger()}
config.Spec.Triggers[0].ImageChangeParams.Automatic = false
if config, err = oc.DeploymentConfigs(testutil.Namespace()).Create(config); err != nil {
t.Fatalf("Couldn't create deploymentconfig: %v", err)
}
createTagEvent(mapping)
var newConfig *deployapi.DeploymentConfig
t.Log("Waiting for the first imagestream update - no deployment should run")
timeout := time.After(20 * time.Second)
// Deployment config with automatic=false in its ICT - no deployment should trigger.
// We don't really care about the initial update since it's not going to be deployed
//.........这里部分代码省略.........
示例13: TestExport
func TestExport(t *testing.T) {
exporter := &defaultExporter{}
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",
},
LatestVersion: 0,
Triggers: []deployapi.DeploymentTriggerPolicy{
deploytest.OkImageChangeTrigger(),
},
Template: deploytest.OkDeploymentTemplate(),
},
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,
},
}
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)
}
}
}
示例14: TestHandle_automaticImageUpdates
// TestHandle_automaticImageUpdates tests automatic and non-automatic updates
// from image change triggers.
func TestHandle_automaticImageUpdates(t *testing.T) {
tests := []struct {
name string
auto bool
canTrigger bool
version int64
expectedUpdate bool
}{
{
name: "initial deployment with unresolved image (auto: true)",
auto: true,
canTrigger: false,
version: 0,
expectedUpdate: false,
},
{
name: "initial deployment with unresolved image (auto: false)",
auto: false,
canTrigger: false,
version: 0,
expectedUpdate: false,
},
{
name: "initial deployment with resolved image (auto: true)",
auto: true,
canTrigger: true,
version: 0,
expectedUpdate: true,
},
{
name: "initial deployment with resolved image (auto: false)",
auto: false,
canTrigger: true,
version: 0,
expectedUpdate: true,
},
}
for _, test := range tests {
updated := false
fake := &testclient.Fake{}
kFake := &ktestclient.Fake{}
fake.PrependReactor("update", "deploymentconfigs/status", func(action ktestclient.Action) (handled bool, ret runtime.Object, err error) {
updated = true
return true, nil, nil
})
kFake.PrependReactor("get", "replicationcontrollers", func(action ktestclient.Action) (handled bool, ret runtime.Object, err error) {
// This will always return no template difference. We test template differences in TestHandle_changeWithTemplateDiff
config := testapi.OkDeploymentConfig(0)
deployment, _ := deployutil.MakeDeployment(config, kapi.Codecs.LegacyCodec(deployapi.SchemeGroupVersion))
return true, deployment, nil
})
controller := NewDeploymentTriggerController(fake, kFake, codec)
config := testapi.OkDeploymentConfig(test.version)
config.Namespace = kapi.NamespaceDefault
ict := testapi.OkImageChangeTrigger()
ict.ImageChangeParams.Automatic = test.auto
if test.canTrigger {
ict.ImageChangeParams.LastTriggeredImage = testapi.DockerImageReference
}
config.Spec.Triggers = []deployapi.DeploymentTriggerPolicy{testapi.OkConfigChangeTrigger(), ict}
if err := controller.Handle(config); err != nil {
t.Errorf("%s: unexpected error: %v", test.name, err)
continue
}
if test.expectedUpdate != updated {
t.Errorf("%s: expected update: %t, got update: %t", test.name, test.expectedUpdate, updated)
}
}
}
示例15: TestTriggers_MultipleICTs
// TestTriggers_MultipleICTs ensures that a deployment config with more than one ImageChange trigger
// will start a new deployment iff all images are resolved.
func TestTriggers_MultipleICTs(t *testing.T) {
testutil.RequireEtcd(t)
defer testutil.DumpEtcdOnFailure(t)
_, clusterAdminKubeConfig, err := testserver.StartTestMaster()
if err != nil {
t.Fatalf("error starting master: %v", err)
}
openshiftClusterAdminClient, err := testutil.GetClusterAdminClient(clusterAdminKubeConfig)
if err != nil {
t.Fatalf("error getting cluster admin client: %v", err)
}
openshiftClusterAdminClientConfig, err := testutil.GetClusterAdminClientConfig(clusterAdminKubeConfig)
if err != nil {
t.Fatalf("error getting cluster admin client config: %v", err)
}
openshiftProjectAdminClient, err := testserver.CreateNewProject(openshiftClusterAdminClient, *openshiftClusterAdminClientConfig, testutil.Namespace(), "bob")
if err != nil {
t.Fatalf("error creating project: %v", err)
}
imageStream := &imageapi.ImageStream{ObjectMeta: kapi.ObjectMeta{Name: deploytest.ImageStreamName}}
secondImageStream := &imageapi.ImageStream{ObjectMeta: kapi.ObjectMeta{Name: "sample"}}
config := deploytest.OkDeploymentConfig(0)
config.Namespace = testutil.Namespace()
firstTrigger := deploytest.OkImageChangeTrigger()
secondTrigger := deploytest.OkImageChangeTrigger()
secondTrigger.ImageChangeParams.ContainerNames = []string{"container2"}
secondTrigger.ImageChangeParams.From.Name = imageapi.JoinImageStreamTag("sample", imageapi.DefaultImageTag)
config.Spec.Triggers = []deployapi.DeploymentTriggerPolicy{firstTrigger, secondTrigger}
configWatch, err := openshiftProjectAdminClient.DeploymentConfigs(testutil.Namespace()).Watch(kapi.ListOptions{})
if err != nil {
t.Fatalf("Couldn't subscribe to deploymentconfigs %v", err)
}
defer configWatch.Stop()
if imageStream, err = openshiftProjectAdminClient.ImageStreams(testutil.Namespace()).Create(imageStream); err != nil {
t.Fatalf("Couldn't create imagestream %q: %v", imageStream.Name, err)
}
if secondImageStream, err = openshiftProjectAdminClient.ImageStreams(testutil.Namespace()).Create(secondImageStream); err != nil {
t.Fatalf("Couldn't create imagestream %q: %v", secondImageStream.Name, err)
}
imageWatch, err := openshiftProjectAdminClient.ImageStreams(testutil.Namespace()).Watch(kapi.ListOptions{})
if err != nil {
t.Fatalf("Couldn't subscribe to imagestreams: %v", err)
}
defer imageWatch.Stop()
updatedImage := fmt.Sprintf("sha256:%s", deploytest.ImageID)
updatedPullSpec := fmt.Sprintf("registry:8080/%s/%[email protected]%s", testutil.Namespace(), deploytest.ImageStreamName, updatedImage)
// Make a function which can create a new tag event for the image stream and
// then wait for the stream status to be asynchronously updated.
createTagEvent := func(name, tag, image, pullSpec string) {
mapping := &imageapi.ImageStreamMapping{
ObjectMeta: kapi.ObjectMeta{Name: name},
Tag: tag,
Image: imageapi.Image{
ObjectMeta: kapi.ObjectMeta{
Name: image,
},
DockerImageReference: pullSpec,
},
}
if err := openshiftProjectAdminClient.ImageStreamMappings(testutil.Namespace()).Create(mapping); err != nil {
t.Fatalf("unexpected error: %v", err)
}
t.Log("Waiting for image stream mapping to be reflected in the image stream status...")
statusLoop:
for {
select {
case event := <-imageWatch.ResultChan():
stream := event.Object.(*imageapi.ImageStream)
if stream.Name != name {
continue
}
if _, ok := stream.Status.Tags[tag]; ok {
t.Logf("imagestream %q now has status with tags: %#v", stream.Name, stream.Status.Tags)
break statusLoop
}
t.Logf("Still waiting for latest tag status on imagestream %q", stream.Name)
}
}
}
if config, err = openshiftProjectAdminClient.DeploymentConfigs(testutil.Namespace()).Create(config); err != nil {
t.Fatalf("Couldn't create deploymentconfig: %v", err)
}
timeout := time.After(30 * time.Second)
t.Log("Should not trigger a new deployment in response to the first imagestream update")
createTagEvent(imageStream.Name, imageapi.DefaultImageTag, updatedImage, updatedPullSpec)
out:
for {
//.........这里部分代码省略.........