@@ -15,6 +15,7 @@ import (
1515 "k8s.io/apimachinery/pkg/types"
1616 "k8s.io/client-go/tools/cache"
1717 "open-cluster-management.io/addon-framework/pkg/addonmanager/addontesting"
18+ "open-cluster-management.io/addon-framework/pkg/addonmanager/constants"
1819 "open-cluster-management.io/addon-framework/pkg/agent"
1920 "open-cluster-management.io/addon-framework/pkg/index"
2021 "open-cluster-management.io/addon-framework/pkg/utils"
@@ -53,8 +54,9 @@ func (t *healthCheckTestAgent) Manifests(cluster *clusterv1.ManagedCluster,
5354
5455func (t * healthCheckTestAgent ) GetAgentAddonOptions () agent.AgentAddonOptions {
5556 return agent.AgentAddonOptions {
56- AddonName : t .name ,
57- HealthProber : t .health ,
57+ AddonName : t .name ,
58+ HealthProber : t .health ,
59+ HostedModeInfoFunc : constants .GetHostedModeInfo ,
5860 }
5961}
6062
@@ -1106,6 +1108,128 @@ func TestHealthCheckReconcile(t *testing.T) {
11061108 Message : "test add-on is available." ,
11071109 },
11081110 },
1111+ {
1112+ name : "Health check mode is workload availability and WorkProber check pass for hosted addon" ,
1113+ testAddon : & healthCheckTestAgent {name : "test" ,
1114+ health : & agent.HealthProber {Type : agent .HealthProberTypeWorkloadAvailability },
1115+ },
1116+ addon : addontesting .NewHostedModeAddon ("test" , "cluster1" ,
1117+ "hostingcluster" , manifestAppliedCondition ),
1118+ existingWork : []runtime.Object {
1119+ & v1.ManifestWork {
1120+ ObjectMeta : metav1.ObjectMeta {
1121+ Name : "addon-test-deploy-01" ,
1122+ Namespace : "hostingcluster" ,
1123+ Labels : map [string ]string {
1124+ "open-cluster-management.io/addon-name" : "test" ,
1125+ "open-cluster-management.io/addon-namespace" : "cluster1" ,
1126+ },
1127+ },
1128+ Spec : v1.ManifestWorkSpec {},
1129+ Status : v1.ManifestWorkStatus {
1130+ ResourceStatus : v1.ManifestResourceStatus {
1131+ Manifests : []v1.ManifestCondition {
1132+ {
1133+ ResourceMeta : v1.ManifestResourceMeta {
1134+ Ordinal : 0 ,
1135+ Group : "apps" ,
1136+ Version : "" ,
1137+ Kind : "" ,
1138+ Resource : "deployments" ,
1139+ Name : "test-deployment" ,
1140+ Namespace : "default" ,
1141+ },
1142+ StatusFeedbacks : v1.StatusFeedbackResult {
1143+ Values : []v1.FeedbackValue {
1144+ {
1145+ Name : "Replicas" ,
1146+ Value : v1.FieldValue {
1147+ Integer : boolPtr (2 ),
1148+ },
1149+ },
1150+ {
1151+ Name : "ReadyReplicas" ,
1152+ Value : v1.FieldValue {
1153+ Integer : boolPtr (2 ),
1154+ },
1155+ },
1156+ },
1157+ },
1158+ },
1159+ {
1160+ ResourceMeta : v1.ManifestResourceMeta {
1161+ Ordinal : 0 ,
1162+ Group : "apps" ,
1163+ Version : "" ,
1164+ Kind : "" ,
1165+ Resource : "deployments" ,
1166+ Name : "test-deployment-replicas-not-set" ,
1167+ Namespace : "default" ,
1168+ },
1169+ StatusFeedbacks : v1.StatusFeedbackResult {
1170+ Values : []v1.FeedbackValue {
1171+ {
1172+ Name : "Replicas" ,
1173+ Value : v1.FieldValue {
1174+ Integer : boolPtr (1 ),
1175+ },
1176+ },
1177+ {
1178+ Name : "ReadyReplicas" ,
1179+ Value : v1.FieldValue {
1180+ Integer : boolPtr (1 ),
1181+ },
1182+ },
1183+ },
1184+ },
1185+ },
1186+ {
1187+ ResourceMeta : v1.ManifestResourceMeta {
1188+ Ordinal : 0 ,
1189+ Group : "apps" ,
1190+ Version : "" ,
1191+ Kind : "" ,
1192+ Resource : "daemonsets" ,
1193+ Name : "test-daemonset" ,
1194+ Namespace : "default" ,
1195+ },
1196+ StatusFeedbacks : v1.StatusFeedbackResult {
1197+ Values : []v1.FeedbackValue {
1198+ {
1199+ Name : "DesiredNumberScheduled" ,
1200+ Value : v1.FieldValue {
1201+ Integer : boolPtr (2 ),
1202+ },
1203+ },
1204+ {
1205+ Name : "NumberReady" ,
1206+ Value : v1.FieldValue {
1207+ Integer : boolPtr (2 ),
1208+ },
1209+ },
1210+ },
1211+ },
1212+ },
1213+ },
1214+ },
1215+ Conditions : []metav1.Condition {
1216+ {
1217+ Type : v1 .WorkAvailable ,
1218+ Status : metav1 .ConditionTrue ,
1219+ },
1220+ },
1221+ },
1222+ },
1223+ },
1224+ expectedErr : nil ,
1225+ expectedHealthCheckMode : addonapiv1alpha1 .HealthCheckModeCustomized ,
1226+ expectAvailableCondition : metav1.Condition {
1227+ Type : addonapiv1alpha1 .ManagedClusterAddOnConditionAvailable ,
1228+ Status : metav1 .ConditionTrue ,
1229+ Reason : addonapiv1alpha1 .AddonAvailableReasonProbeAvailable ,
1230+ Message : "test add-on is available." ,
1231+ },
1232+ },
11091233 }
11101234
11111235 for _ , c := range cases {
@@ -1134,8 +1258,9 @@ func TestHealthCheckReconcile(t *testing.T) {
11341258 }
11351259
11361260 healthCheckSyncer := healthCheckSyncer {
1137- getWorkByAddon : addonDeploymentController .getWorksByAddonFn (index .ManifestWorkByAddon ),
1138- agentAddon : addonDeploymentController .agentAddons [c .testAddon .name ],
1261+ getWorkByAddon : addonDeploymentController .getWorksByAddonFn (index .ManifestWorkByAddon ),
1262+ getWorkByHostedAddon : addonDeploymentController .getWorksByAddonFn (index .ManifestWorkByHostedAddon ),
1263+ agentAddon : addonDeploymentController .agentAddons [c .testAddon .name ],
11391264 }
11401265
11411266 addon , err := healthCheckSyncer .sync (context .TODO (), addontesting .NewFakeSyncContext (t ), c .cluster , c .addon )
0 commit comments