@@ -3,6 +3,7 @@ package e2e
3
3
import (
4
4
"bufio"
5
5
"bytes"
6
+ "context"
6
7
goctx "context"
7
8
"encoding/json"
8
9
"fmt"
@@ -16,6 +17,7 @@ import (
16
17
"testing"
17
18
"time"
18
19
20
+ machinev1 "github.com/openshift/api/machine/v1beta1"
19
21
"github.com/openshift/file-integrity-operator/pkg/apis/fileintegrity/v1alpha1"
20
22
"github.com/openshift/file-integrity-operator/pkg/controller/metrics"
21
23
"github.com/pborman/uuid"
@@ -66,6 +68,7 @@ const (
66
68
metricsTestCRBName = "fio-metrics-client"
67
69
metricsTestSAName = "default"
68
70
metricsTestTokenName = "metrics-token"
71
+ machineSetNamespace = "openshift-machine-api"
69
72
compressionFileCmd = "for i in `seq 1 10000`; do mktemp \" /hostroot/etc/addedbytest$i.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\" ; done || true"
70
73
)
71
74
@@ -115,6 +118,7 @@ CONTENT_EX = sha512+ftype+p+u+g+n+acl+selinux+xattrs
115
118
!/hostroot/etc/docker/certs.d
116
119
!/hostroot/etc/selinux/targeted
117
120
!/hostroot/etc/openvswitch/conf.db
121
+ !/hostroot/etc/kubernetes/cni/net.d
118
122
!/hostroot/etc/kubernetes/cni/net.d/*
119
123
!/hostroot/etc/machine-config-daemon/currentconfig$
120
124
!/hostroot/etc/pki/ca-trust/extracted/java/cacerts$
@@ -1005,6 +1009,164 @@ func assertNodeOKStatusEvents(t *testing.T, f *framework.Framework, namespace st
1005
1009
}
1006
1010
}
1007
1011
1012
+ func scaleUpWorkerMachineSet (t * testing.T , f * framework.Framework , interval , timeout time.Duration ) (string , string ) {
1013
+ // Add a new worker node to the cluster through the machineset
1014
+ // Get the machineset
1015
+ machineSets := & machinev1.MachineSetList {}
1016
+ err := f .Client .List (context .TODO (), machineSets , & client.ListOptions {
1017
+ Namespace : machineSetNamespace })
1018
+ if err != nil {
1019
+ t .Error (err )
1020
+ }
1021
+ if len (machineSets .Items ) == 0 {
1022
+ t .Error ("No machinesets found" )
1023
+ }
1024
+ machineSetName := ""
1025
+ for _ , ms := range machineSets .Items {
1026
+ if ms .Spec .Replicas != nil && * ms .Spec .Replicas > 0 {
1027
+ t .Logf ("Found machineset %s with %d replicas" , ms .Name , * ms .Spec .Replicas )
1028
+ machineSetName = ms .Name
1029
+ break
1030
+ }
1031
+ }
1032
+
1033
+ // Add one more replica to one of the machinesets
1034
+ machineSet := & machinev1.MachineSet {}
1035
+ err = f .Client .Get (context .TODO (), types.NamespacedName {Name : machineSetName , Namespace : machineSetNamespace }, machineSet )
1036
+ if err != nil {
1037
+ t .Error (err )
1038
+ }
1039
+ t .Logf ("Scaling up machineset %s" , machineSetName )
1040
+
1041
+ replicas := * machineSet .Spec .Replicas + 1
1042
+ machineSet .Spec .Replicas = & replicas
1043
+ err = f .Client .Update (context .TODO (), machineSet )
1044
+ if err != nil {
1045
+ t .Error (err )
1046
+ }
1047
+ t .Logf ("Waiting for scaling up machineset %s" , machineSetName )
1048
+ provisionningMachineName := ""
1049
+ err = wait .Poll (interval , timeout , func () (bool , error ) {
1050
+ err = f .Client .Get (context .TODO (), types.NamespacedName {Name : machineSetName , Namespace : machineSetNamespace }, machineSet )
1051
+ if err != nil {
1052
+ t .Error (err )
1053
+ }
1054
+ // get name of the new machine
1055
+ if provisionningMachineName == "" {
1056
+ machines := & machinev1.MachineList {}
1057
+ err = f .Client .List (context .TODO (), machines , & client.ListOptions {
1058
+ Namespace : machineSetNamespace })
1059
+ if err != nil {
1060
+ t .Error (err )
1061
+ }
1062
+ for _ , machine := range machines .Items {
1063
+ if * machine .Status .Phase == "Provisioning" {
1064
+ provisionningMachineName = machine .Name
1065
+ break
1066
+ }
1067
+ }
1068
+ }
1069
+ if machineSet .Status .Replicas == machineSet .Status .ReadyReplicas {
1070
+ t .Logf ("Machineset %s scaled up" , machineSetName )
1071
+ return true , nil
1072
+ }
1073
+ t .Logf ("Waiting for machineset %s to scale up, current ready replicas: %d of %d" , machineSetName , machineSet .Status .ReadyReplicas , machineSet .Status .Replicas )
1074
+ return false , nil
1075
+ })
1076
+ if err != nil {
1077
+ t .Error (err )
1078
+ }
1079
+ // get the new node name
1080
+ newNodeName := ""
1081
+ machine := & machinev1.Machine {}
1082
+ err = f .Client .Get (context .TODO (), types.NamespacedName {Name : provisionningMachineName , Namespace : machineSetNamespace }, machine )
1083
+ if err != nil {
1084
+ t .Error (err )
1085
+ }
1086
+ newNodeName = machine .Status .NodeRef .Name
1087
+ t .Logf ("New node name is %s" , newNodeName )
1088
+
1089
+ return machineSetName , newNodeName
1090
+ }
1091
+
1092
+ func scaleDownWorkerMachineSet (t * testing.T , f * framework.Framework , machineSetName string , interval , timeout time.Duration ) string {
1093
+ // Remove the worker node from the cluster through the machineset
1094
+ // Get the machineset
1095
+ machineSet := & machinev1.MachineSet {}
1096
+ err := f .Client .Get (context .TODO (), types.NamespacedName {Name : machineSetName , Namespace : machineSetNamespace }, machineSet )
1097
+ if err != nil {
1098
+ t .Error (err )
1099
+ }
1100
+
1101
+ // Remove one replica from the machineset
1102
+ t .Logf ("Scaling down machineset %s" , machineSetName )
1103
+ replicas := * machineSet .Spec .Replicas - 1
1104
+ machineSet .Spec .Replicas = & replicas
1105
+ err = f .Client .Update (context .TODO (), machineSet )
1106
+ if err != nil {
1107
+ t .Error (err )
1108
+ }
1109
+ deletedNodeName := ""
1110
+ t .Logf ("Waiting for scaling down machineset %s" , machineSetName )
1111
+ err = wait .Poll (interval , timeout , func () (bool , error ) {
1112
+ err = f .Client .Get (context .TODO (), types.NamespacedName {Name : machineSetName , Namespace : machineSetNamespace }, machineSet )
1113
+ if err != nil {
1114
+ t .Error (err )
1115
+ }
1116
+ if machineSet .Status .Replicas == machineSet .Status .ReadyReplicas {
1117
+ t .Logf ("Machineset %s scaled down" , machineSetName )
1118
+ return true , nil
1119
+ }
1120
+ t .Logf ("Waiting for machineset %s to scale down, current ready replicas: %d of %d" , machineSet .Name , machineSet .Status .ReadyReplicas , machineSet .Status .Replicas )
1121
+ return false , nil
1122
+ })
1123
+ if err != nil {
1124
+ t .Error (err )
1125
+ }
1126
+ if deletedNodeName == "" {
1127
+ // Get the node that was deleted
1128
+ machineList := & machinev1.MachineList {}
1129
+ err = f .Client .List (context .TODO (), machineList , & client.ListOptions {
1130
+ Namespace : machineSetNamespace })
1131
+ if err != nil {
1132
+ t .Error (err )
1133
+ }
1134
+ if len (machineList .Items ) == 0 {
1135
+ t .Error ("No machines found" )
1136
+ }
1137
+ for _ , machine := range machineList .Items {
1138
+ if machine .DeletionTimestamp != nil {
1139
+ deletedNodeName = machine .Status .NodeRef .Name
1140
+ t .Logf ("Found deleted node %s" , deletedNodeName )
1141
+ return deletedNodeName
1142
+ }
1143
+ }
1144
+ }
1145
+ return deletedNodeName
1146
+ }
1147
+
1148
+ func assertNodeStatusForRemovedNode (t * testing.T , f * framework.Framework , integrityName , namespace , deletedNodeName string , interval , timeout time.Duration ) {
1149
+ timeoutErr := wait .PollImmediate (interval , timeout , func () (bool , error ) {
1150
+ nodestatus := & v1alpha1.FileIntegrityNodeStatus {}
1151
+ err := f .Client .Get (goctx .TODO (), types.NamespacedName {Name : integrityName + "-" + deletedNodeName , Namespace : namespace }, nodestatus )
1152
+ if err != nil {
1153
+ if kerr .IsNotFound (err ) {
1154
+ t .Logf ("Node status for node %s not found, as expected" , deletedNodeName )
1155
+ return true , nil
1156
+ } else {
1157
+ t .Errorf ("error getting node status for node %s: %v" , deletedNodeName , err )
1158
+ return true , err
1159
+ }
1160
+ } else {
1161
+ t .Logf ("Node status for node %s found, waiting for it to be deleted" , deletedNodeName )
1162
+ return false , nil
1163
+ }
1164
+ })
1165
+ if timeoutErr != nil {
1166
+ t .Errorf ("timed out waiting for node status for node %s to be deleted" , deletedNodeName )
1167
+ }
1168
+ }
1169
+
1008
1170
func assertNodesConditionIsSuccess (t * testing.T , f * framework.Framework , integrityName , namespace string , interval , timeout time.Duration ) {
1009
1171
var lastErr error
1010
1172
type nodeStatus struct {
0 commit comments