package v1 import ( "reflect" "testing" kapi "k8s.io/kubernetes/pkg/api" kapiv1 "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/util/diff" "k8s.io/kubernetes/pkg/util/intstr" newer "github.com/openshift/origin/pkg/deploy/api" testutil "github.com/openshift/origin/test/util/api" ) func TestTriggerRoundTrip(t *testing.T) { tests := []struct { testName string kind, name string }{ { testName: "ImageStream -> ImageStreamTag", kind: "ImageStream", name: "golang", }, { testName: "ImageStreamTag -> ImageStreamTag", kind: "ImageStreamTag", name: "golang:latest", }, { testName: "ImageRepository -> ImageStreamTag", kind: "ImageRepository", name: "golang", }, } for _, test := range tests { p := DeploymentTriggerImageChangeParams{ From: kapiv1.ObjectReference{ Kind: test.kind, Name: test.name, }, } out := &newer.DeploymentTriggerImageChangeParams{} if err := kapi.Scheme.Convert(&p, out, nil); err != nil { t.Errorf("%s: unexpected error: %v", test.testName, err) } if out.From.Name != "golang:latest" { t.Errorf("%s: unexpected name: %s", test.testName, out.From.Name) } if out.From.Kind != "ImageStreamTag" { t.Errorf("%s: unexpected kind: %s", test.testName, out.From.Kind) } } } func Test_convert_v1_RollingDeploymentStrategyParams_To_api_RollingDeploymentStrategyParams(t *testing.T) { tests := []struct { in *RollingDeploymentStrategyParams out *newer.RollingDeploymentStrategyParams }{ { in: &RollingDeploymentStrategyParams{ UpdatePeriodSeconds: newInt64(5), IntervalSeconds: newInt64(6), TimeoutSeconds: newInt64(7), MaxUnavailable: newIntOrString(intstr.FromString("25%")), Pre: &LifecycleHook{ FailurePolicy: LifecycleHookFailurePolicyIgnore, }, Post: &LifecycleHook{ FailurePolicy: LifecycleHookFailurePolicyAbort, }, }, out: &newer.RollingDeploymentStrategyParams{ UpdatePeriodSeconds: newInt64(5), IntervalSeconds: newInt64(6), TimeoutSeconds: newInt64(7), MaxSurge: intstr.FromInt(0), MaxUnavailable: intstr.FromString("25%"), Pre: &newer.LifecycleHook{ FailurePolicy: newer.LifecycleHookFailurePolicyIgnore, }, Post: &newer.LifecycleHook{ FailurePolicy: newer.LifecycleHookFailurePolicyAbort, }, }, }, { in: &RollingDeploymentStrategyParams{ UpdatePeriodSeconds: newInt64(5), IntervalSeconds: newInt64(6), TimeoutSeconds: newInt64(7), MaxSurge: newIntOrString(intstr.FromString("25%")), }, out: &newer.RollingDeploymentStrategyParams{ UpdatePeriodSeconds: newInt64(5), IntervalSeconds: newInt64(6), TimeoutSeconds: newInt64(7), MaxSurge: intstr.FromString("25%"), MaxUnavailable: intstr.FromInt(0), }, }, { in: &RollingDeploymentStrategyParams{ UpdatePeriodSeconds: newInt64(5), IntervalSeconds: newInt64(6), TimeoutSeconds: newInt64(7), MaxSurge: newIntOrString(intstr.FromInt(10)), MaxUnavailable: newIntOrString(intstr.FromInt(20)), }, out: &newer.RollingDeploymentStrategyParams{ UpdatePeriodSeconds: newInt64(5), IntervalSeconds: newInt64(6), TimeoutSeconds: newInt64(7), MaxSurge: intstr.FromInt(10), MaxUnavailable: intstr.FromInt(20), }, }, { in: &RollingDeploymentStrategyParams{ UpdatePeriodSeconds: newInt64(5), IntervalSeconds: newInt64(6), TimeoutSeconds: newInt64(7), }, out: &newer.RollingDeploymentStrategyParams{ UpdatePeriodSeconds: newInt64(5), IntervalSeconds: newInt64(6), TimeoutSeconds: newInt64(7), MaxSurge: intstr.FromString("25%"), MaxUnavailable: intstr.FromString("25%"), }, }, } for i, test := range tests { t.Logf("running test case #%d", i) out := &newer.RollingDeploymentStrategyParams{} if err := kapi.Scheme.Convert(test.in, out, nil); err != nil { t.Errorf("unexpected error: %v", err) } if !reflect.DeepEqual(out, test.out) { t.Errorf("got different than expected:\nA:\t%#v\nB:\t%#v\n\nDiff:\n%s\n\n%s", out, test.out, diff.ObjectDiff(test.out, out), diff.ObjectGoPrintSideBySide(test.out, out)) } } } func Test_convert_api_RollingDeploymentStrategyParams_To_v1_RollingDeploymentStrategyParams(t *testing.T) { tests := []struct { in *newer.RollingDeploymentStrategyParams out *RollingDeploymentStrategyParams }{ { in: &newer.RollingDeploymentStrategyParams{ UpdatePeriodSeconds: newInt64(5), IntervalSeconds: newInt64(6), TimeoutSeconds: newInt64(7), MaxSurge: intstr.FromInt(0), MaxUnavailable: intstr.FromString("25%"), }, out: &RollingDeploymentStrategyParams{ UpdatePeriodSeconds: newInt64(5), IntervalSeconds: newInt64(6), TimeoutSeconds: newInt64(7), MaxSurge: newIntOrString(intstr.FromInt(0)), MaxUnavailable: newIntOrString(intstr.FromString("25%")), }, }, { in: &newer.RollingDeploymentStrategyParams{ UpdatePeriodSeconds: newInt64(5), IntervalSeconds: newInt64(6), TimeoutSeconds: newInt64(7), MaxSurge: intstr.FromString("25%"), MaxUnavailable: intstr.FromInt(0), }, out: &RollingDeploymentStrategyParams{ UpdatePeriodSeconds: newInt64(5), IntervalSeconds: newInt64(6), TimeoutSeconds: newInt64(7), MaxSurge: newIntOrString(intstr.FromString("25%")), MaxUnavailable: newIntOrString(intstr.FromInt(0)), }, }, { in: &newer.RollingDeploymentStrategyParams{ UpdatePeriodSeconds: newInt64(5), IntervalSeconds: newInt64(6), TimeoutSeconds: newInt64(7), MaxSurge: intstr.FromInt(10), MaxUnavailable: intstr.FromInt(20), }, out: &RollingDeploymentStrategyParams{ UpdatePeriodSeconds: newInt64(5), IntervalSeconds: newInt64(6), TimeoutSeconds: newInt64(7), MaxSurge: newIntOrString(intstr.FromInt(10)), MaxUnavailable: newIntOrString(intstr.FromInt(20)), }, }, } for _, test := range tests { out := &RollingDeploymentStrategyParams{} if err := kapi.Scheme.Convert(test.in, out, nil); err != nil { t.Errorf("unexpected error: %v", err) } if !reflect.DeepEqual(out, test.out) { t.Errorf("got different than expected:\nA:\t%#v\nB:\t%#v\n\nDiff:\n%s\n\n%s", out, test.out, diff.ObjectDiff(test.out, out), diff.ObjectGoPrintSideBySide(test.out, out)) } } } func newInt64(val int64) *int64 { return &val } func newInt32(val int32) *int32 { return &val } func newIntOrString(ios intstr.IntOrString) *intstr.IntOrString { return &ios } func TestFieldSelectors(t *testing.T) { testutil.CheckFieldLabelConversions(t, "v1", "DeploymentConfig", // Ensure all currently returned labels are supported newer.DeploymentConfigToSelectableFields(&newer.DeploymentConfig{}), ) }