fix: remove e2e flakiness by making the loop deterministic

Signed-off-by: AhmedGrati <ahmedgrati1999@gmail.com>
This commit is contained in:
AhmedGrati 2023-10-24 16:19:22 +01:00
parent 404b0caae7
commit 3172bc05b5
6 changed files with 35 additions and 32 deletions

View File

@ -806,9 +806,9 @@ func (k *Kubernetes) RemoveDupObjects(objs *[]runtime.Object) {
} }
// SortedKeys Ensure the kubernetes objects are in a consistent order // SortedKeys Ensure the kubernetes objects are in a consistent order
func SortedKeys(komposeObject kobject.KomposeObject) []string { func SortedKeys[V kobject.ServiceConfig | kobject.ServiceConfigGroup](serviceConfig map[string]V) []string {
var sortedKeys []string var sortedKeys []string
for name := range komposeObject.ServiceConfigs { for name := range serviceConfig {
sortedKeys = append(sortedKeys, name) sortedKeys = append(sortedKeys, name)
} }
sort.Strings(sortedKeys) sort.Strings(sortedKeys)

View File

@ -511,7 +511,7 @@ func TestSortedKeys(t *testing.T) {
komposeObject := kobject.KomposeObject{ komposeObject := kobject.KomposeObject{
ServiceConfigs: map[string]kobject.ServiceConfig{"b": service, "a": service1}, ServiceConfigs: map[string]kobject.ServiceConfig{"b": service, "a": service1},
} }
a := SortedKeys(komposeObject) a := SortedKeys(komposeObject.ServiceConfigs)
if !reflect.DeepEqual(a, c) { if !reflect.DeepEqual(a, c) {
t.Logf("Test Fail output should be %s", c) t.Logf("Test Fail output should be %s", c)
} }

View File

@ -1455,20 +1455,23 @@ func (k *Kubernetes) Transform(komposeObject kobject.KomposeObject, opt kobject.
if opt.ServiceGroupMode != "" { if opt.ServiceGroupMode != "" {
log.Debugf("Service group mode is: %s", opt.ServiceGroupMode) log.Debugf("Service group mode is: %s", opt.ServiceGroupMode)
komposeObjectToServiceConfigGroupMapping := KomposeObjectToServiceConfigGroupMapping(&komposeObject, opt) komposeObjectToServiceConfigGroupMapping := KomposeObjectToServiceConfigGroupMapping(&komposeObject, opt)
for name, group := range komposeObjectToServiceConfigGroupMapping { sortedGroupMappingKeys := SortedKeys(komposeObjectToServiceConfigGroupMapping)
for _, group := range sortedGroupMappingKeys {
groupMapping := komposeObjectToServiceConfigGroupMapping[group]
var objects []runtime.Object var objects []runtime.Object
podSpec := PodSpec{} podSpec := PodSpec{}
var groupName string
// if using volume group, the name here will be a volume config string. reset to the first service name // if using volume group, the name here will be a volume config string. reset to the first service name
if opt.ServiceGroupMode == "volume" { if opt.ServiceGroupMode == "volume" {
if opt.ServiceGroupName != "" { if opt.ServiceGroupName != "" {
name = opt.ServiceGroupName groupName = opt.ServiceGroupName
} else { } else {
var names []string var names []string
for _, svc := range group { for _, svc := range groupMapping {
names = append(names, svc.Name) names = append(names, svc.Name)
} }
name = strings.Join(names, "-") groupName = strings.Join(names, "-")
} }
} }
@ -1476,7 +1479,7 @@ func (k *Kubernetes) Transform(komposeObject kobject.KomposeObject, opt kobject.
// ports conflict check between services // ports conflict check between services
portsUses := map[string]bool{} portsUses := map[string]bool{}
for _, service := range group { for _, service := range groupMapping {
// first do ports check // first do ports check
ports := ConfigPorts(service) ports := ConfigPorts(service)
for _, port := range ports { for _, port := range ports {
@ -1487,7 +1490,7 @@ func (k *Kubernetes) Transform(komposeObject kobject.KomposeObject, opt kobject.
portsUses[key] = true portsUses[key] = true
} }
log.Infof("Group Service %s to [%s]", service.Name, name) log.Infof("Group Service %s to [%s]", service.Name, groupName)
service.WithKomposeAnnotation = opt.WithKomposeAnnotation service.WithKomposeAnnotation = opt.WithKomposeAnnotation
podSpec.Append(AddContainer(service, opt)) podSpec.Append(AddContainer(service, opt))
@ -1495,17 +1498,17 @@ func (k *Kubernetes) Transform(komposeObject kobject.KomposeObject, opt kobject.
return nil, err return nil, err
} }
// override.. // override..
objects = append(objects, k.CreateWorkloadAndConfigMapObjects(name, service, opt)...) objects = append(objects, k.CreateWorkloadAndConfigMapObjects(groupName, service, opt)...)
k.configKubeServiceAndIngressForService(service, name, &objects) k.configKubeServiceAndIngressForService(service, groupName, &objects)
// Configure the container volumes. // Configure the container volumes.
volumesMount, volumes, pvc, cms, err := k.ConfigVolumes(name, service) volumesMount, volumes, pvc, cms, err := k.ConfigVolumes(groupName, service)
if err != nil { if err != nil {
return nil, errors.Wrap(err, "k.ConfigVolumes failed") return nil, errors.Wrap(err, "k.ConfigVolumes failed")
} }
// Configure Tmpfs // Configure Tmpfs
if len(service.TmpFs) > 0 { if len(service.TmpFs) > 0 {
TmpVolumesMount, TmpVolumes := k.ConfigTmpfs(name, service) TmpVolumesMount, TmpVolumes := k.ConfigTmpfs(groupName, service)
volumes = append(volumes, TmpVolumes...) volumes = append(volumes, TmpVolumes...)
volumesMount = append(volumesMount, TmpVolumesMount...) volumesMount = append(volumesMount, TmpVolumesMount...)
} }
@ -1527,14 +1530,14 @@ func (k *Kubernetes) Transform(komposeObject kobject.KomposeObject, opt kobject.
podSpec.Append( podSpec.Append(
SetPorts(service), SetPorts(service),
ImagePullPolicy(name, service), ImagePullPolicy(groupName, service),
RestartPolicy(name, service), RestartPolicy(groupName, service),
SecurityContext(name, service), SecurityContext(groupName, service),
HostName(service), HostName(service),
DomainName(service), DomainName(service),
ResourcesLimits(service), ResourcesLimits(service),
ResourcesRequests(service), ResourcesRequests(service),
TerminationGracePeriodSeconds(name, service), TerminationGracePeriodSeconds(groupName, service),
TopologySpreadConstraints(service), TopologySpreadConstraints(service),
) )
@ -1542,7 +1545,7 @@ func (k *Kubernetes) Transform(komposeObject kobject.KomposeObject, opt kobject.
podSpec.Append(ServiceAccountName(serviceAccountName)) podSpec.Append(ServiceAccountName(serviceAccountName))
} }
err = k.UpdateKubernetesObjectsMultipleContainers(name, service, &objects, podSpec) err = k.UpdateKubernetesObjectsMultipleContainers(groupName, service, &objects, podSpec)
if err != nil { if err != nil {
return nil, errors.Wrap(err, "Error transforming Kubernetes objects") return nil, errors.Wrap(err, "Error transforming Kubernetes objects")
} }
@ -1557,7 +1560,7 @@ func (k *Kubernetes) Transform(komposeObject kobject.KomposeObject, opt kobject.
allobjects = append(allobjects, objects...) allobjects = append(allobjects, objects...)
} }
} }
sortedKeys := SortedKeys(komposeObject) sortedKeys := SortedKeys(komposeObject.ServiceConfigs)
for _, name := range sortedKeys { for _, name := range sortedKeys {
service := komposeObject.ServiceConfigs[name] service := komposeObject.ServiceConfigs[name]

View File

@ -280,7 +280,7 @@ func (o *OpenShift) Transform(komposeObject kobject.KomposeObject, opt kobject.C
} }
} }
sortedKeys := kubernetes.SortedKeys(komposeObject) sortedKeys := kubernetes.SortedKeys(komposeObject.ServiceConfigs)
for _, name := range sortedKeys { for _, name := range sortedKeys {
service := komposeObject.ServiceConfigs[name] service := komposeObject.ServiceConfigs[name]
var objects []runtime.Object var objects []runtime.Object

View File

@ -67,12 +67,12 @@ spec:
valueFrom: valueFrom:
configMapKeyRef: configMapKeyRef:
key: BAR key: BAR
name: home-runner-work-kompose-kompose-script-test-fixtures-env-hadoop-hive-namenode-env name: Users-ahmedgrati-projects-kompose-script-test-fixtures-env-hadoop-hive-namenode-env
- name: FOO - name: FOO
valueFrom: valueFrom:
configMapKeyRef: configMapKeyRef:
key: FOO key: FOO
name: home-runner-work-kompose-kompose-script-test-fixtures-env-hadoop-hive-namenode-env name: Users-ahmedgrati-projects-kompose-script-test-fixtures-env-hadoop-hive-namenode-env
image: bde2020/hadoop-namenode:2.0.0-hadoop2.7.4-java8 image: bde2020/hadoop-namenode:2.0.0-hadoop2.7.4-java8
name: another-namenode name: another-namenode
ports: ports:
@ -95,8 +95,8 @@ kind: ConfigMap
metadata: metadata:
creationTimestamp: null creationTimestamp: null
labels: labels:
io.kompose.service: another-namenode-home-runner-work-kompose-kompose-script-test-fixtures-env-hadoop-hive-namenode-env io.kompose.service: another-namenode-Users-ahmedgrati-projects-kompose-script-test-fixtures-env-hadoop-hive-namenode-env
name: home-runner-work-kompose-kompose-script-test-fixtures-env-hadoop-hive-namenode-env name: Users-ahmedgrati-projects-kompose-script-test-fixtures-env-hadoop-hive-namenode-env
--- ---
apiVersion: apps/v1 apiVersion: apps/v1
@ -125,14 +125,14 @@ spec:
valueFrom: valueFrom:
configMapKeyRef: configMapKeyRef:
key: BAR key: BAR
name: home-runner-work-kompose-kompose-script-test-fixtures-env-hadoop-hive-namenode-env name: Users-ahmedgrati-projects-kompose-script-test-fixtures-env-hadoop-hive-namenode-env
- name: CLUSTER_NAME - name: CLUSTER_NAME
value: test value: test
- name: FOO - name: FOO
valueFrom: valueFrom:
configMapKeyRef: configMapKeyRef:
key: FOO key: FOO
name: home-runner-work-kompose-kompose-script-test-fixtures-env-hadoop-hive-namenode-env name: Users-ahmedgrati-projects-kompose-script-test-fixtures-env-hadoop-hive-namenode-env
image: bde2020/hadoop-namenode:2.0.0-hadoop2.7.4-java8 image: bde2020/hadoop-namenode:2.0.0-hadoop2.7.4-java8
name: namenode name: namenode
ports: ports:

View File

@ -49,8 +49,8 @@ kind: ConfigMap
metadata: metadata:
creationTimestamp: null creationTimestamp: null
labels: labels:
io.kompose.service: another-namenode-home-runner-work-kompose-kompose-script-test-fixtures-env-hadoop-hive-namenode-env io.kompose.service: another-namenode-Users-ahmedgrati-projects-kompose-script-test-fixtures-env-hadoop-hive-namenode-env
name: home-runner-work-kompose-kompose-script-test-fixtures-env-hadoop-hive-namenode-env name: Users-ahmedgrati-projects-kompose-script-test-fixtures-env-hadoop-hive-namenode-env
--- ---
apiVersion: apps.openshift.io/v1 apiVersion: apps.openshift.io/v1
@ -79,12 +79,12 @@ spec:
valueFrom: valueFrom:
configMapKeyRef: configMapKeyRef:
key: BAR key: BAR
name: home-runner-work-kompose-kompose-script-test-fixtures-env-hadoop-hive-namenode-env name: Users-ahmedgrati-projects-kompose-script-test-fixtures-env-hadoop-hive-namenode-env
- name: FOO - name: FOO
valueFrom: valueFrom:
configMapKeyRef: configMapKeyRef:
key: FOO key: FOO
name: home-runner-work-kompose-kompose-script-test-fixtures-env-hadoop-hive-namenode-env name: Users-ahmedgrati-projects-kompose-script-test-fixtures-env-hadoop-hive-namenode-env
image: ' ' image: ' '
name: another-namenode name: another-namenode
ports: ports:
@ -166,14 +166,14 @@ spec:
valueFrom: valueFrom:
configMapKeyRef: configMapKeyRef:
key: BAR key: BAR
name: home-runner-work-kompose-kompose-script-test-fixtures-env-hadoop-hive-namenode-env name: Users-ahmedgrati-projects-kompose-script-test-fixtures-env-hadoop-hive-namenode-env
- name: CLUSTER_NAME - name: CLUSTER_NAME
value: test value: test
- name: FOO - name: FOO
valueFrom: valueFrom:
configMapKeyRef: configMapKeyRef:
key: FOO key: FOO
name: home-runner-work-kompose-kompose-script-test-fixtures-env-hadoop-hive-namenode-env name: Users-ahmedgrati-projects-kompose-script-test-fixtures-env-hadoop-hive-namenode-env
image: ' ' image: ' '
name: namenode name: namenode
ports: ports: