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  }