github.com/iter8-tools/iter8@v1.1.2/driver/test_helpers.go (about) 1 package driver 2 3 import ( 4 "io" 5 6 "github.com/iter8-tools/iter8/base/log" 7 "helm.sh/helm/v3/pkg/action" 8 "helm.sh/helm/v3/pkg/chartutil" 9 "helm.sh/helm/v3/pkg/cli" 10 helmfake "helm.sh/helm/v3/pkg/kube/fake" 11 "helm.sh/helm/v3/pkg/registry" 12 "helm.sh/helm/v3/pkg/storage" 13 helmdriver "helm.sh/helm/v3/pkg/storage/driver" 14 corev1 "k8s.io/api/core/v1" 15 "k8s.io/apimachinery/pkg/runtime" 16 "k8s.io/client-go/kubernetes/fake" 17 ktesting "k8s.io/client-go/testing" 18 ) 19 20 // initKubeFake initialize the Kube clientset with a fake 21 func initKubeFake(kd *KubeDriver, objects ...runtime.Object) { 22 // secretDataReactor sets the secret.Data field based on the values from secret.StringData 23 // Credit: this function is adapted from https://github.com/creydr/go-k8s-utils 24 var secretDataReactor = func(action ktesting.Action) (bool, runtime.Object, error) { 25 secret, _ := action.(ktesting.CreateAction).GetObject().(*corev1.Secret) 26 27 if secret.Data == nil { 28 secret.Data = make(map[string][]byte) 29 } 30 31 for k, v := range secret.StringData { 32 secret.Data[k] = []byte(v) 33 } 34 35 return false, nil, nil 36 } 37 38 fc := fake.NewSimpleClientset(objects...) 39 fc.PrependReactor("create", "secrets", secretDataReactor) 40 fc.PrependReactor("update", "secrets", secretDataReactor) 41 kd.Clientset = fc 42 } 43 44 // initHelmFake initializes the Helm config with a fake 45 // Credit: this function is adapted from helm 46 // https://github.com/helm/helm/blob/e9abdc5efe11cdc23576c20c97011d452201cd92/pkg/action/action_test.go#L37 47 func initHelmFake(kd *KubeDriver) { 48 registryClient, err := registry.NewClient() 49 if err != nil { 50 log.Logger.Error(err) 51 return 52 } 53 54 kd.Configuration = &action.Configuration{ 55 Releases: storage.Init(helmdriver.NewMemory()), 56 KubeClient: &helmfake.FailingKubeClient{PrintingKubeClient: helmfake.PrintingKubeClient{Out: io.Discard}}, 57 Capabilities: chartutil.DefaultCapabilities, 58 RegistryClient: registryClient, 59 Log: log.Logger.Debugf, 60 } 61 } 62 63 // NewFakeKubeDriver creates and returns a new KubeDriver with fake clients 64 func NewFakeKubeDriver(s *cli.EnvSettings, objects ...runtime.Object) *KubeDriver { 65 kd := &KubeDriver{ 66 EnvSettings: s, 67 Test: DefaultTestName, 68 } 69 initKubeFake(kd, objects...) 70 initHelmFake(kd) 71 return kd 72 }