Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Fix unit tests
  • Loading branch information
hongkailiu committed Oct 30, 2025
commit ce9610597c2a19f9dc1b4b3af5f91ac9ddd85b0e
149 changes: 75 additions & 74 deletions pkg/cvo/cvo_scenarios_test.go

Large diffs are not rendered by default.

197 changes: 99 additions & 98 deletions pkg/cvo/cvo_test.go

Large diffs are not rendered by default.

6 changes: 4 additions & 2 deletions pkg/cvo/metrics_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ import (
"k8s.io/client-go/tools/record"

configv1 "github.com/openshift/api/config/v1"

"github.com/openshift/cluster-version-operator/pkg/internal"
)

func Test_operatorMetrics_Collect(t *testing.T) {
Expand Down Expand Up @@ -479,7 +481,7 @@ func Test_operatorMetrics_Collect(t *testing.T) {
{State: configv1.CompletedUpdate, Version: "0.0.2", Image: "test/image:1", CompletionTime: &([]metav1.Time{{Time: time.Unix(2, 0)}}[0])},
},
Conditions: []configv1.ClusterOperatorStatusCondition{
{Type: ClusterStatusFailing, Status: configv1.ConditionTrue, LastTransitionTime: metav1.Time{Time: time.Unix(4, 0)}, Reason: "Because stuff"},
{Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, LastTransitionTime: metav1.Time{Time: time.Unix(4, 0)}, Reason: "Because stuff"},
},
},
},
Expand Down Expand Up @@ -517,7 +519,7 @@ func Test_operatorMetrics_Collect(t *testing.T) {
},
Status: configv1.ClusterVersionStatus{
Conditions: []configv1.ClusterOperatorStatusCondition{
{Type: ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "Because stuff"},
{Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "Because stuff"},
},
},
},
Expand Down
59 changes: 30 additions & 29 deletions pkg/cvo/status_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package cvo
import (
"context"
"fmt"
"github.com/openshift/cluster-version-operator/pkg/internal"
"reflect"
"testing"
"time"
Expand Down Expand Up @@ -112,7 +113,7 @@ func TestOperator_syncFailingStatus(t *testing.T) {
VersionHash: "",
Conditions: []configv1.ClusterOperatorStatusCondition{
{Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse},
{Type: ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "UpdatePayloadIntegrity", Message: "unable to apply object"},
{Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "UpdatePayloadIntegrity", Message: "unable to apply object"},
{Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Message: "Working towards 4.0.1"},
{Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse},
{Type: "ImplicitlyEnabledCapabilities", Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"},
Expand Down Expand Up @@ -153,7 +154,7 @@ func TestOperator_syncFailingStatus(t *testing.T) {
VersionHash: "",
Conditions: []configv1.ClusterOperatorStatusCondition{
{Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse},
{Type: ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "", Message: "bad"},
{Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "", Message: "bad"},
{Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Reason: "", Message: "Error ensuring the cluster version is up to date: bad"},
{Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse},
{Type: "ImplicitlyEnabledCapabilities", Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"},
Expand Down Expand Up @@ -252,7 +253,7 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t
},
},
expectedConditionNotModified: &configv1.ClusterOperatorStatusCondition{
Type: ClusterStatusFailing,
Type: internal.ClusterStatusFailing,
Status: configv1.ConditionFalse,
},
},
Expand All @@ -264,7 +265,7 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t
},
},
expectedConditionNotModified: &configv1.ClusterOperatorStatusCondition{
Type: ClusterStatusFailing,
Type: internal.ClusterStatusFailing,
Status: configv1.ConditionTrue,
Message: "error has happened",
},
Expand All @@ -283,14 +284,14 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t
},
},
expectedConditionNotModified: &configv1.ClusterOperatorStatusCondition{
Type: ClusterStatusFailing,
Type: internal.ClusterStatusFailing,
Status: configv1.ConditionTrue,
Reason: "ClusterOperatorUpdating",
Message: "Cluster operator A is updating",
},
shouldModifyWhenNotReconcilingAndHistoryNotEmpty: true,
expectedConditionModified: &configv1.ClusterOperatorStatusCondition{
Type: ClusterStatusFailing,
Type: internal.ClusterStatusFailing,
Status: configv1.ConditionFalse,
},
expectedProgressingCondition: &configv1.ClusterOperatorStatusCondition{
Expand All @@ -314,14 +315,14 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t
},
},
expectedConditionNotModified: &configv1.ClusterOperatorStatusCondition{
Type: ClusterStatusFailing,
Type: internal.ClusterStatusFailing,
Status: configv1.ConditionTrue,
Reason: "ClusterOperatorUpdating",
Message: "Cluster operator A is updating",
},
shouldModifyWhenNotReconcilingAndHistoryNotEmpty: true,
expectedConditionModified: &configv1.ClusterOperatorStatusCondition{
Type: ClusterStatusFailing,
Type: internal.ClusterStatusFailing,
Status: configv1.ConditionUnknown,
Reason: "SlowClusterOperator",
Message: "waiting on co-timeout over 30 minutes which is longer than expected",
Expand All @@ -347,14 +348,14 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t
},
},
expectedConditionNotModified: &configv1.ClusterOperatorStatusCondition{
Type: ClusterStatusFailing,
Type: internal.ClusterStatusFailing,
Status: configv1.ConditionTrue,
Reason: "ClusterOperatorUpdating",
Message: "Cluster operator A is updating",
},
shouldModifyWhenNotReconcilingAndHistoryNotEmpty: true,
expectedConditionModified: &configv1.ClusterOperatorStatusCondition{
Type: ClusterStatusFailing,
Type: internal.ClusterStatusFailing,
Status: configv1.ConditionFalse,
},
expectedProgressingCondition: &configv1.ClusterOperatorStatusCondition{
Expand All @@ -379,14 +380,14 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t
},
machineConfigTimeout: true,
expectedConditionNotModified: &configv1.ClusterOperatorStatusCondition{
Type: ClusterStatusFailing,
Type: internal.ClusterStatusFailing,
Status: configv1.ConditionTrue,
Reason: "ClusterOperatorUpdating",
Message: "Cluster operator A is updating",
},
shouldModifyWhenNotReconcilingAndHistoryNotEmpty: true,
expectedConditionModified: &configv1.ClusterOperatorStatusCondition{
Type: ClusterStatusFailing,
Type: internal.ClusterStatusFailing,
Status: configv1.ConditionUnknown,
Reason: "SlowClusterOperator",
Message: "waiting on machine-config over 90 minutes which is longer than expected",
Expand Down Expand Up @@ -422,7 +423,7 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t
},
},
expectedConditionNotModified: &configv1.ClusterOperatorStatusCondition{
Type: ClusterStatusFailing,
Type: internal.ClusterStatusFailing,
Status: configv1.ConditionTrue,
Reason: "ClusterOperatorNotAvailable",
Message: "Cluster operators A, B are not available",
Expand Down Expand Up @@ -452,7 +453,7 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t
},
},
expectedConditionNotModified: &configv1.ClusterOperatorStatusCondition{
Type: ClusterStatusFailing,
Type: internal.ClusterStatusFailing,
Status: configv1.ConditionTrue,
Reason: "MultipleErrors",
Message: "Multiple errors are preventing progress:\n* Cluster operator A is not available\n* Cluster operator B is degraded",
Expand Down Expand Up @@ -482,14 +483,14 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t
},
},
expectedConditionNotModified: &configv1.ClusterOperatorStatusCondition{
Type: ClusterStatusFailing,
Type: internal.ClusterStatusFailing,
Status: configv1.ConditionTrue,
Reason: "MultipleErrors",
Message: "Multiple errors are preventing progress:\n* Cluster operator A is not available\n* Cluster operator B is updating versions",
},
shouldModifyWhenNotReconcilingAndHistoryNotEmpty: true,
expectedConditionModified: &configv1.ClusterOperatorStatusCondition{
Type: ClusterStatusFailing,
Type: internal.ClusterStatusFailing,
Status: configv1.ConditionTrue,
Reason: "ClusterOperatorNotAvailable",
Message: "Cluster operator A is not available",
Expand Down Expand Up @@ -519,14 +520,14 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t
},
},
expectedConditionNotModified: &configv1.ClusterOperatorStatusCondition{
Type: ClusterStatusFailing,
Type: internal.ClusterStatusFailing,
Status: configv1.ConditionTrue,
Reason: "MultipleErrors",
Message: "Multiple errors are preventing progress:\n* Cluster operator A is updating versions\n* Cluster operator B is getting conscious",
},
shouldModifyWhenNotReconcilingAndHistoryNotEmpty: true,
expectedConditionModified: &configv1.ClusterOperatorStatusCondition{
Type: ClusterStatusFailing,
Type: internal.ClusterStatusFailing,
Status: configv1.ConditionFalse,
},
},
Expand Down Expand Up @@ -559,14 +560,14 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t
},
},
expectedConditionNotModified: &configv1.ClusterOperatorStatusCondition{
Type: ClusterStatusFailing,
Type: internal.ClusterStatusFailing,
Status: configv1.ConditionTrue,
Reason: "MultipleErrors",
Message: "Multiple errors are preventing progress:\n* Cluster operator A is not available\n* Cluster operator B is updating versions\n* Cluster operator C is degraded",
},
shouldModifyWhenNotReconcilingAndHistoryNotEmpty: true,
expectedConditionModified: &configv1.ClusterOperatorStatusCondition{
Type: ClusterStatusFailing,
Type: internal.ClusterStatusFailing,
Status: configv1.ConditionTrue,
Reason: "MultipleErrors",
Message: "Multiple errors are preventing progress:\n* Cluster operator A is not available\n* Cluster operator C is degraded",
Expand All @@ -586,14 +587,14 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t
},
},
expectedConditionNotModified: &configv1.ClusterOperatorStatusCondition{
Type: ClusterStatusFailing,
Type: internal.ClusterStatusFailing,
Status: configv1.ConditionTrue,
Reason: "ClusterOperatorsUpdating",
Message: "some-message",
},
shouldModifyWhenNotReconcilingAndHistoryNotEmpty: true,
expectedConditionModified: &configv1.ClusterOperatorStatusCondition{
Type: ClusterStatusFailing,
Type: internal.ClusterStatusFailing,
Status: configv1.ConditionFalse,
},
expectedProgressingCondition: &configv1.ClusterOperatorStatusCondition{
Expand All @@ -617,14 +618,14 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t
},
},
expectedConditionNotModified: &configv1.ClusterOperatorStatusCondition{
Type: ClusterStatusFailing,
Type: internal.ClusterStatusFailing,
Status: configv1.ConditionTrue,
Reason: "ClusterOperatorsUpdating",
Message: "some-message",
},
shouldModifyWhenNotReconcilingAndHistoryNotEmpty: true,
expectedConditionModified: &configv1.ClusterOperatorStatusCondition{
Type: ClusterStatusFailing,
Type: internal.ClusterStatusFailing,
Status: configv1.ConditionUnknown,
Reason: "SlowClusterOperator",
Message: "waiting on co-timeout over 30 minutes which is longer than expected",
Expand All @@ -650,14 +651,14 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t
},
},
expectedConditionNotModified: &configv1.ClusterOperatorStatusCondition{
Type: ClusterStatusFailing,
Type: internal.ClusterStatusFailing,
Status: configv1.ConditionTrue,
Reason: "ClusterOperatorsUpdating",
Message: "some-message",
},
shouldModifyWhenNotReconcilingAndHistoryNotEmpty: true,
expectedConditionModified: &configv1.ClusterOperatorStatusCondition{
Type: ClusterStatusFailing,
Type: internal.ClusterStatusFailing,
Status: configv1.ConditionUnknown,
Reason: "SlowClusterOperator",
Message: "waiting on co-timeout, co-bar-timeout over 30 minutes which is longer than expected",
Expand All @@ -684,14 +685,14 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t
},
machineConfigTimeout: true,
expectedConditionNotModified: &configv1.ClusterOperatorStatusCondition{
Type: ClusterStatusFailing,
Type: internal.ClusterStatusFailing,
Status: configv1.ConditionTrue,
Reason: "ClusterOperatorsUpdating",
Message: "some-message",
},
shouldModifyWhenNotReconcilingAndHistoryNotEmpty: true,
expectedConditionModified: &configv1.ClusterOperatorStatusCondition{
Type: ClusterStatusFailing,
Type: internal.ClusterStatusFailing,
Status: configv1.ConditionUnknown,
Reason: "SlowClusterOperator",
Message: "waiting on co-timeout, co-bar-timeout over 30 minutes and machine-config over 90 minutes which is longer than expected",
Expand Down Expand Up @@ -742,7 +743,7 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t
expectedCondition = tc.expectedConditionModified
}
updateClusterVersionStatus(cvStatus, tc.args.syncWorkerStatus, release, getAvailableUpdates, gates, noErrors)
condition := resourcemerge.FindOperatorStatusCondition(cvStatus.Conditions, ClusterStatusFailing)
condition := resourcemerge.FindOperatorStatusCondition(cvStatus.Conditions, internal.ClusterStatusFailing)
if diff := cmp.Diff(expectedCondition, condition, ignoreLastTransitionTime); diff != "" {
t.Errorf("unexpected condition when Reconciling == %t && isHistoryEmpty == %t\n:%s", c.isReconciling, c.isHistoryEmpty, diff)
}
Expand Down
10 changes: 6 additions & 4 deletions pkg/cvo/upgradeable_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import (
configv1 "github.com/openshift/api/config/v1"
"github.com/openshift/client-go/config/clientset/versioned/fake"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

"github.com/openshift/cluster-version-operator/pkg/internal"
)

func TestUpgradeableCheckIntervalsThrottlePeriod(t *testing.T) {
Expand All @@ -23,18 +25,18 @@ func TestUpgradeableCheckIntervalsThrottlePeriod(t *testing.T) {
},
{
name: "passing preconditions",
condition: &configv1.ClusterOperatorStatusCondition{Type: DesiredReleaseAccepted, Reason: "PreconditionChecks", Status: configv1.ConditionTrue, LastTransitionTime: metav1.Now()},
condition: &configv1.ClusterOperatorStatusCondition{Type: internal.DesiredReleaseAccepted, Reason: "PreconditionChecks", Status: configv1.ConditionTrue, LastTransitionTime: metav1.Now()},
expected: intervals.min,
},
{
name: "failing but not precondition",
condition: &configv1.ClusterOperatorStatusCondition{Type: DesiredReleaseAccepted, Reason: "NotPreconditionChecks", Status: configv1.ConditionFalse, LastTransitionTime: metav1.Now()},
condition: &configv1.ClusterOperatorStatusCondition{Type: internal.DesiredReleaseAccepted, Reason: "NotPreconditionChecks", Status: configv1.ConditionFalse, LastTransitionTime: metav1.Now()},
expected: intervals.min,
},
{
name: "failing preconditions but too long ago",
condition: &configv1.ClusterOperatorStatusCondition{
Type: DesiredReleaseAccepted,
Type: internal.DesiredReleaseAccepted,
Reason: "PreconditionChecks",
Status: configv1.ConditionFalse,
LastTransitionTime: metav1.NewTime(time.Now().Add(-(intervals.afterPreconditionsFailed + time.Hour))),
Expand All @@ -43,7 +45,7 @@ func TestUpgradeableCheckIntervalsThrottlePeriod(t *testing.T) {
},
{
name: "failing preconditions recently",
condition: &configv1.ClusterOperatorStatusCondition{Type: DesiredReleaseAccepted, Reason: "PreconditionChecks", Status: configv1.ConditionFalse, LastTransitionTime: metav1.Now()},
condition: &configv1.ClusterOperatorStatusCondition{Type: internal.DesiredReleaseAccepted, Reason: "PreconditionChecks", Status: configv1.ConditionFalse, LastTransitionTime: metav1.Now()},
expected: intervals.minOnFailedPreconditions,
},
}
Expand Down
6 changes: 4 additions & 2 deletions pkg/start/start_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ import (
configv1 "github.com/openshift/api/config/v1"
clientset "github.com/openshift/client-go/config/clientset/versioned"

"github.com/openshift/cluster-version-operator/pkg/internal"

"github.com/openshift/cluster-version-operator/lib/resourcemerge"
"github.com/openshift/cluster-version-operator/pkg/cvo"
"github.com/openshift/cluster-version-operator/pkg/payload"
Expand Down Expand Up @@ -605,7 +607,7 @@ func waitForUpdateAvailable(ctx context.Context, t *testing.T, client clientset.
verifyClusterVersionHistory(t, cv)

if !allowIncrementalFailure {
if failing := resourcemerge.FindOperatorStatusCondition(cv.Status.Conditions, cvo.ClusterStatusFailing); failing != nil && failing.Status == configv1.ConditionTrue {
if failing := resourcemerge.FindOperatorStatusCondition(cv.Status.Conditions, internal.ClusterStatusFailing); failing != nil && failing.Status == configv1.ConditionTrue {
return false, fmt.Errorf("operator listed as failing (%s): %s", failing.Reason, failing.Message)
}
}
Expand Down Expand Up @@ -676,7 +678,7 @@ func waitForUpdateAvailable(ctx context.Context, t *testing.T, client clientset.
return false, nil
}

if failing := resourcemerge.FindOperatorStatusCondition(cv.Status.Conditions, cvo.ClusterStatusFailing); failing != nil && failing.Status == configv1.ConditionTrue {
if failing := resourcemerge.FindOperatorStatusCondition(cv.Status.Conditions, internal.ClusterStatusFailing); failing != nil && failing.Status == configv1.ConditionTrue {
return false, fmt.Errorf("operator listed as failing (%s): %s", failing.Reason, failing.Message)
}

Expand Down