Skip to content

Commit 2463543

Browse files
Merge pull request #17471 from mfojtik/add-deployer-test
Automatic merge from submit-queue (batch tested with PRs 17299, 17482, 17471). Add test to guard unset fields in deployer pod This should protect is from "missing fields" in deployer pods for those fields we don't copy.
2 parents e776aff + 9084edf commit 2463543

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed

pkg/apps/controller/deployer/deployer_controller_test.go

+80
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,29 @@ package deployment
22

33
import (
44
"fmt"
5+
"math/rand"
56
"reflect"
67
"sort"
78
"testing"
89

10+
fuzz "github.com/google/gofuzz"
11+
912
"k8s.io/api/core/v1"
13+
kapiv1 "k8s.io/api/core/v1"
1014
kerrors "k8s.io/apimachinery/pkg/api/errors"
1115
"k8s.io/apimachinery/pkg/api/resource"
16+
"k8s.io/apimachinery/pkg/api/testing/fuzzer"
1217
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1318
"k8s.io/apimachinery/pkg/runtime"
19+
"k8s.io/apimachinery/pkg/util/diff"
1420
kinformers "k8s.io/client-go/informers"
1521
kclientset "k8s.io/client-go/kubernetes"
1622
"k8s.io/client-go/kubernetes/fake"
1723
clientgotesting "k8s.io/client-go/testing"
1824
"k8s.io/client-go/tools/cache"
1925
kapi "k8s.io/kubernetes/pkg/api"
2026
kapihelper "k8s.io/kubernetes/pkg/api/helper"
27+
kapitesting "k8s.io/kubernetes/pkg/api/testing"
2128

2229
deployapiv1 "github.com/openshift/api/apps/v1"
2330
deployapi "github.com/openshift/origin/pkg/apps/apis/apps"
@@ -1075,3 +1082,76 @@ func TestDeployerCustomLabelsAndAnnotations(t *testing.T) {
10751082
expectMapContains(t, podTemplate.Annotations, test.annotations, "annotations")
10761083
}
10771084
}
1085+
1086+
func TestMakeDeployerPod(t *testing.T) {
1087+
client := &fake.Clientset{}
1088+
controller := okDeploymentController(client, nil, nil, true, v1.PodUnknown)
1089+
config := deploytest.OkDeploymentConfig(1)
1090+
deployment, _ := deployutil.MakeDeploymentV1(config, codec)
1091+
container := controller.makeDeployerContainer(&config.Spec.Strategy)
1092+
container.Resources = deployutil.CopyApiResourcesToV1Resources(&config.Spec.Strategy.Resources)
1093+
defaultGracePeriod := int64(10)
1094+
maxDeploymentDurationSeconds := deployapi.MaxDeploymentDurationSeconds
1095+
1096+
for i := 1; i <= 25; i++ {
1097+
seed := rand.Int63()
1098+
f := fuzzer.FuzzerFor(kapitesting.FuzzerFuncs, rand.NewSource(seed), kapi.Codecs)
1099+
f.Funcs(
1100+
func(p *kapiv1.PodTemplateSpec, c fuzz.Continue) {
1101+
c.FuzzNoCustom(p)
1102+
p.Spec.InitContainers = nil
1103+
1104+
// These are specific for deployer pod container:
1105+
p.Spec.Containers = []kapiv1.Container{*container}
1106+
p.Spec.Containers[0].Name = "deployment"
1107+
p.Spec.Containers[0].Command = container.Command
1108+
p.Spec.Containers[0].Args = container.Args
1109+
p.Spec.Containers[0].Image = container.Image
1110+
p.Spec.Containers[0].Env = append(p.Spec.Containers[0].Env, kapiv1.EnvVar{Name: "OPENSHIFT_DEPLOYMENT_NAME", Value: "config-1"})
1111+
p.Spec.Containers[0].Env = append(p.Spec.Containers[0].Env, kapiv1.EnvVar{Name: "OPENSHIFT_DEPLOYMENT_NAMESPACE", Value: "default"})
1112+
p.Spec.Containers[0].Resources = container.Resources
1113+
p.Spec.Containers[0].ImagePullPolicy = kapiv1.PullIfNotPresent
1114+
1115+
// These are hardcoded for deployer pod spec
1116+
p.Spec.RestartPolicy = kapiv1.RestartPolicyNever
1117+
p.Spec.TerminationGracePeriodSeconds = &defaultGracePeriod
1118+
p.Spec.ActiveDeadlineSeconds = &maxDeploymentDurationSeconds
1119+
p.Spec.ServiceAccountName = "sa:test"
1120+
1121+
// FIXME: These are weird or missing. If you get an error below, consider
1122+
// adding this field into deployer controller or to this list:
1123+
p.Spec.DeprecatedServiceAccount = ""
1124+
p.Spec.AutomountServiceAccountToken = nil
1125+
p.Spec.Tolerations = nil
1126+
p.Spec.Volumes = nil
1127+
p.Spec.NodeName = ""
1128+
p.Spec.HostNetwork = false
1129+
p.Spec.HostPID = false
1130+
p.Spec.HostIPC = false
1131+
p.Spec.Hostname = ""
1132+
p.Spec.Subdomain = ""
1133+
p.Spec.Affinity = nil
1134+
p.Spec.SchedulerName = ""
1135+
p.Spec.HostAliases = nil
1136+
p.Spec.Priority = nil
1137+
p.Spec.PriorityClassName = ""
1138+
p.Spec.SecurityContext = nil
1139+
},
1140+
)
1141+
inputPodTemplate := &kapiv1.PodTemplateSpec{}
1142+
f.Fuzz(&inputPodTemplate)
1143+
deployment.Spec.Template = inputPodTemplate
1144+
1145+
outputPodTemplate, err := controller.makeDeployerPod(deployment)
1146+
if err != nil {
1147+
t.Fatalf("unexpected error: %v", err)
1148+
}
1149+
1150+
if !reflect.DeepEqual(inputPodTemplate.Spec, outputPodTemplate.Spec) {
1151+
t.Fatalf("Deployer pod is missing fields:\n%s\n\n%s",
1152+
diff.ObjectReflectDiff(inputPodTemplate.Spec, outputPodTemplate.Spec),
1153+
diff.ObjectDiff(inputPodTemplate.Spec, outputPodTemplate.Spec),
1154+
)
1155+
}
1156+
}
1157+
}

0 commit comments

Comments
 (0)