* Copyright (c) 2026 Huawei Technologies Co., Ltd.
* installer is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain n copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
******************************************************************/
package clusterversion
import (
"testing"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
cvv1alpha1 "gopkg.openfuyao.cn/cluster-api-provider-bke/api/v1alpha1"
)
func TestNeedsInstallCompletion(t *testing.T) {
tests := []struct {
name string
cv *cvv1alpha1.ClusterVersion
want bool
}{
{
name: "installing",
cv: &cvv1alpha1.ClusterVersion{
Spec: cvv1alpha1.ClusterVersionSpec{DesiredVersion: "v2.6.0"},
Status: cvv1alpha1.ClusterVersionStatus{Phase: cvv1alpha1.ClusterVersionPhaseInstalling},
},
want: true,
},
{
name: "empty current",
cv: &cvv1alpha1.ClusterVersion{
Spec: cvv1alpha1.ClusterVersionSpec{DesiredVersion: "v2.6.0"},
Status: cvv1alpha1.ClusterVersionStatus{Phase: cvv1alpha1.ClusterVersionPhasePending},
},
want: true,
},
{
name: "ready_not_upgrading",
cv: &cvv1alpha1.ClusterVersion{
Spec: cvv1alpha1.ClusterVersionSpec{DesiredVersion: "v2.6.0"},
Status: cvv1alpha1.ClusterVersionStatus{
CurrentVersion: "v2.6.0",
Phase: cvv1alpha1.ClusterVersionPhaseReady,
},
},
want: true,
},
{
name: "upgrading",
cv: &cvv1alpha1.ClusterVersion{
Spec: cvv1alpha1.ClusterVersionSpec{DesiredVersion: "v2.7.0"},
Status: cvv1alpha1.ClusterVersionStatus{
CurrentVersion: "v2.6.0",
Phase: cvv1alpha1.ClusterVersionPhaseUpgrading,
},
},
want: false,
},
{
name: "ready_pending_hop",
cv: &cvv1alpha1.ClusterVersion{
Spec: cvv1alpha1.ClusterVersionSpec{DesiredVersion: "v2.7.0"},
Status: cvv1alpha1.ClusterVersionStatus{
CurrentVersion: "v2.6.0",
Phase: cvv1alpha1.ClusterVersionPhaseReady,
},
},
want: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := NeedsInstallCompletion(tt.cv); got != tt.want {
t.Fatalf("NeedsInstallCompletion() = %v, want %v", got, tt.want)
}
})
}
}
func TestApplyInstallCompleteStatus(t *testing.T) {
cv := &cvv1alpha1.ClusterVersion{
ObjectMeta: metav1.ObjectMeta{Name: "c1", Namespace: "ns"},
Spec: cvv1alpha1.ClusterVersionSpec{DesiredVersion: "v2.6.0"},
Status: cvv1alpha1.ClusterVersionStatus{Phase: cvv1alpha1.ClusterVersionPhaseInstalling},
}
ApplyInstallCompleteStatus(cv, "v2.6.0")
if cv.Status.CurrentVersion != "v2.6.0" {
t.Fatalf("current %q", cv.Status.CurrentVersion)
}
if cv.Status.Phase != cvv1alpha1.ClusterVersionPhaseReady {
t.Fatalf("phase %q", cv.Status.Phase)
}
if len(cv.Status.Conditions) != 1 || cv.Status.Conditions[0].Reason != "InstallComplete" {
t.Fatalf("conditions %+v", cv.Status.Conditions)
}
}