* Copyright (c) 2025 Huawei Technologies Co., Ltd.
* openFuyao 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 a 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 installer
import (
"testing"
"github.com/agiledragon/gomonkey/v2"
"github.com/stretchr/testify/assert"
"k8s.io/client-go/dynamic"
"k8s.io/client-go/kubernetes"
k8sfake "k8s.io/client-go/kubernetes/fake"
"k8s.io/client-go/rest"
"installer-service/pkg/zlog"
)
func TestNewInstallerOperation(t *testing.T) {
cfg, dyn, cli := &rest.Config{}, &dynamic.DynamicClient{}, &kubernetes.Clientset{}
patches := gomonkey.ApplyFunc(zlog.Error, func(args ...interface{}) {
})
defer patches.Reset()
tests := []struct {
name string
newDyn func(*rest.Config) (dynamic.Interface, error)
newCli func(*rest.Config) (*kubernetes.Clientset, error)
wantErr bool
}{
{"cli failed", func(_ *rest.Config) (dynamic.Interface, error) { return dyn, nil },
func(_ *rest.Config) (*kubernetes.Clientset, error) { return nil, assert.AnError }, true},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
p := gomonkey.NewPatches()
if tt.newDyn != nil {
p.ApplyFunc(dynamic.NewForConfig, tt.newDyn)
}
if tt.newCli != nil {
p.ApplyFunc(kubernetes.NewForConfig, tt.newCli)
}
defer p.Reset()
op, err := NewInstallerOperation(cfg)
assert.Equal(t, tt.wantErr, err != nil)
if !tt.wantErr {
c, _ := op.(*installerClient)
assert.Equal(t, cfg, c.kubeConfig)
assert.Equal(t, dyn, c.dynamicClient)
assert.Equal(t, cli, c.clientset)
}
})
}
}
func TestNewInstallerOperationWithClients(t *testing.T) {
cs := k8sfake.NewSimpleClientset()
dyn := &dynamic.DynamicClient{}
op, err := NewInstallerOperationWithClients(cs, dyn)
assert.NoError(t, err)
client, ok := op.(*installerClient)
assert.True(t, ok)
assert.Equal(t, cs, client.GetClientSet())
assert.Equal(t, dyn, client.GetDynamicClient())
}