ARO-RP/pkg/cluster/samples_test.go

106 строки
3.6 KiB
Go

package cluster
// Copyright (c) Microsoft Corporation.
// Licensed under the Apache License 2.0.
import (
"context"
"errors"
"testing"
operatorv1 "github.com/openshift/api/operator/v1"
samplesv1 "github.com/openshift/api/samples/v1"
"go.uber.org/mock/gomock"
kerrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime/schema"
"github.com/Azure/ARO-RP/pkg/api"
mock_env "github.com/Azure/ARO-RP/pkg/util/mocks/env"
mock_samples "github.com/Azure/ARO-RP/pkg/util/mocks/samples"
mock_samplesclient "github.com/Azure/ARO-RP/pkg/util/mocks/samplesclient"
utilerror "github.com/Azure/ARO-RP/test/util/error"
)
func Test_manager_disableSamples(t *testing.T) {
ctx := context.Background()
samplesConfig := &samplesv1.Config{
TypeMeta: metav1.TypeMeta{},
ObjectMeta: metav1.ObjectMeta{},
Spec: samplesv1.ConfigSpec{},
Status: samplesv1.ConfigStatus{},
}
tests := []struct {
name string
samplesConfig *samplesv1.Config
samplesCRGetError error
samplesCRUpdateError error
expectedMinNumberOfGetCalls int
expectedMaxNumberOfGetCalls int
wantErr string
}{
{
name: "samples cr is found and updated",
samplesConfig: samplesConfig,
expectedMinNumberOfGetCalls: 1,
expectedMaxNumberOfGetCalls: 1,
wantErr: "",
},
{
name: "samples cr is not found and retried",
samplesCRGetError: kerrors.NewNotFound(schema.GroupResource{}, "samples"),
expectedMinNumberOfGetCalls: 2,
expectedMaxNumberOfGetCalls: 15,
wantErr: " \"samples\" not found",
},
{
name: "samples cr update is conflicting and retried",
samplesConfig: samplesConfig,
expectedMinNumberOfGetCalls: 2,
expectedMaxNumberOfGetCalls: 15,
samplesCRUpdateError: kerrors.NewConflict(schema.GroupResource{}, "samples", errors.New("conflict")),
wantErr: "Operation cannot be fulfilled on \"samples\": conflict",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
controller := gomock.NewController(t)
defer controller.Finish()
env := mock_env.NewMockInterface(controller)
samplescli := mock_samplesclient.NewMockInterface(controller)
samplesInterface := mock_samples.NewMockSamplesV1Interface(controller)
configInterface := mock_samples.NewMockConfigInterface(controller)
env.EXPECT().IsLocalDevelopmentMode().Return(false)
samplescli.EXPECT().SamplesV1().AnyTimes().Return(samplesInterface)
samplesInterface.EXPECT().Configs().AnyTimes().Return(configInterface)
configInterface.EXPECT().Get(gomock.Any(), "cluster", metav1.GetOptions{}).
MinTimes(tt.expectedMinNumberOfGetCalls).
MaxTimes(tt.expectedMaxNumberOfGetCalls).
Return(tt.samplesConfig, tt.samplesCRGetError)
if tt.samplesConfig != nil {
samplesConfig.Spec.ManagementState = operatorv1.Removed
configInterface.EXPECT().Update(gomock.Any(), samplesConfig, metav1.UpdateOptions{}).AnyTimes().Return(samplesConfig, tt.samplesCRUpdateError)
}
m := &manager{
env: env,
doc: &api.OpenShiftClusterDocument{
OpenShiftCluster: &api.OpenShiftCluster{
Properties: api.OpenShiftClusterProperties{
ClusterProfile: api.ClusterProfile{
ResourceGroupID: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clusterRGName",
},
},
},
},
samplescli: samplescli,
}
err := m.disableSamples(ctx)
utilerror.AssertErrorMessage(t, err, tt.wantErr)
})
}
}