| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386 |
- package workflow
- import (
- "context"
- "reflect"
- "testing"
- "github.com/external-secrets/external-secrets/apis/externalsecrets/v1alpha1"
- "github.com/external-secrets/external-secrets/apis/externalsecrets/v1beta1"
- "github.com/go-logr/logr"
- corev1 "k8s.io/api/core/v1"
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
- "k8s.io/apimachinery/pkg/runtime"
- "sigs.k8s.io/controller-runtime/pkg/client/fake"
- )
- func TestWorkflowRunner_Run(t *testing.T) {
- tests := []struct {
- name string
- workflows []v1alpha1.WorkflowItem
- expected map[string]interface{}
- }{
- {
- name: "SingleStepWorkflow",
- workflows: []v1alpha1.WorkflowItem{
- {
- Name: "workflow1",
- Steps: []v1alpha1.WorkflowStep{
- {
- Name: "step1",
- Pull: &v1alpha1.WorkflowStepPull{
- Source: v1beta1.StoreSourceRef{
- SecretStoreRef: v1beta1.SecretStoreRef{
- Name: "store1",
- },
- },
- Data: []v1beta1.ExternalSecretData{
- {
- SecretKey: "key1",
- RemoteRef: v1beta1.ExternalSecretDataRemoteRef{
- Key: "key1",
- },
- },
- },
- },
- },
- },
- },
- },
- expected: map[string]interface{}{
- "workflow": map[string]interface{}{
- "data": map[string]string{
- "key1": "value1",
- },
- "metadata": map[string]map[string]string{
- "annotations": {},
- "labels": {},
- },
- },
- "workflows": map[string]interface{}{
- "workflow1": map[string]interface{}{
- "data": map[string]string{
- "key1": "value1",
- },
- "metadata": map[string]map[string]string{
- "annotations": {},
- "labels": {},
- },
- },
- },
- },
- },
- {
- name: "MultipleStepWorkflow",
- workflows: []v1alpha1.WorkflowItem{
- {
- Name: "workflow1",
- Steps: []v1alpha1.WorkflowStep{
- {
- Name: "step1",
- Pull: &v1alpha1.WorkflowStepPull{
- Source: v1beta1.StoreSourceRef{
- SecretStoreRef: v1beta1.SecretStoreRef{
- Name: "store1",
- },
- },
- Data: []v1beta1.ExternalSecretData{
- {
- SecretKey: "key1",
- RemoteRef: v1beta1.ExternalSecretDataRemoteRef{
- Key: "key1",
- },
- },
- },
- },
- },
- {
- Name: "step2",
- Pull: &v1alpha1.WorkflowStepPull{
- Source: v1beta1.StoreSourceRef{
- SecretStoreRef: v1beta1.SecretStoreRef{
- Name: "store1",
- },
- },
- Data: []v1beta1.ExternalSecretData{
- {
- SecretKey: "key2",
- RemoteRef: v1beta1.ExternalSecretDataRemoteRef{
- Key: "key2",
- },
- },
- },
- },
- },
- },
- },
- },
- expected: map[string]interface{}{
- "workflow": map[string]interface{}{
- "data": map[string]string{
- "key1": "value1",
- "key2": "value2",
- },
- "metadata": map[string]map[string]string{
- "annotations": {},
- "labels": {},
- },
- },
- "workflows": map[string]interface{}{
- "workflow1": map[string]interface{}{
- "data": map[string]string{
- "key1": "value1",
- "key2": "value2",
- },
- "metadata": map[string]map[string]string{
- "annotations": {},
- "labels": {},
- },
- },
- },
- },
- },
- {
- name: "MultipleWorkflows",
- workflows: []v1alpha1.WorkflowItem{
- {
- Name: "workflow1",
- Steps: []v1alpha1.WorkflowStep{
- {
- Name: "step1",
- Pull: &v1alpha1.WorkflowStepPull{
- Source: v1beta1.StoreSourceRef{
- SecretStoreRef: v1beta1.SecretStoreRef{
- Name: "store1",
- },
- },
- Data: []v1beta1.ExternalSecretData{
- {
- SecretKey: "key1",
- RemoteRef: v1beta1.ExternalSecretDataRemoteRef{
- Key: "key1",
- },
- },
- },
- },
- },
- },
- },
- {
- Name: "workflow2",
- Steps: []v1alpha1.WorkflowStep{
- {
- Name: "step1",
- Pull: &v1alpha1.WorkflowStepPull{
- Source: v1beta1.StoreSourceRef{
- SecretStoreRef: v1beta1.SecretStoreRef{
- Name: "store1",
- },
- },
- Data: []v1beta1.ExternalSecretData{
- {
- SecretKey: "key2",
- RemoteRef: v1beta1.ExternalSecretDataRemoteRef{
- Key: "key2",
- },
- },
- },
- },
- },
- },
- },
- },
- expected: map[string]interface{}{
- "workflow": map[string]interface{}{
- "data": map[string]string{
- "key2": "value2",
- },
- "metadata": map[string]map[string]string{
- "annotations": {},
- "labels": {},
- },
- },
- "workflows": map[string]interface{}{
- "workflow1": map[string]interface{}{
- "data": map[string]string{
- "key1": "value1",
- },
- "metadata": map[string]map[string]string{
- "annotations": {},
- "labels": {},
- },
- },
- "workflow2": map[string]interface{}{
- "data": map[string]string{
- "key2": "value2",
- },
- "metadata": map[string]map[string]string{
- "annotations": {},
- "labels": {},
- },
- },
- },
- },
- },
- {
- name: "ChainWorkflows",
- workflows: []v1alpha1.WorkflowItem{
- {
- Name: "workflow1",
- Steps: []v1alpha1.WorkflowStep{
- {
- Name: "step1",
- Pull: &v1alpha1.WorkflowStepPull{
- Source: v1beta1.StoreSourceRef{
- SecretStoreRef: v1beta1.SecretStoreRef{
- Name: "store1",
- },
- },
- Data: []v1beta1.ExternalSecretData{
- {
- SecretKey: "key1",
- RemoteRef: v1beta1.ExternalSecretDataRemoteRef{
- Key: "key1",
- },
- },
- },
- },
- },
- },
- },
- {
- Name: "workflow2",
- Steps: []v1alpha1.WorkflowStep{
- {
- Name: "step1",
- Pull: &v1alpha1.WorkflowStepPull{
- Source: v1beta1.StoreSourceRef{
- SecretStoreRef: v1beta1.SecretStoreRef{
- Name: "store1",
- },
- },
- Data: []v1beta1.ExternalSecretData{
- {
- SecretKey: "key2",
- RemoteRef: v1beta1.ExternalSecretDataRemoteRef{
- Key: "key2",
- },
- },
- },
- },
- },
- },
- },
- {
- Name: "workflow3",
- Steps: []v1alpha1.WorkflowStep{
- {
- Name: "step1",
- Template: &v1alpha1.WorkflowTemplate{
- Data: map[string]string{
- "aggregated": "{{ .workflows.workflow1.data.key1 }} and {{ .workflows.workflow2.data.key2 }}",
- },
- },
- },
- },
- },
- },
- expected: map[string]interface{}{
- "workflow": map[string]interface{}{
- "data": map[string]string{
- "aggregated": "value1 and value2",
- },
- "metadata": map[string]map[string]string{
- "annotations": {},
- "labels": {},
- },
- },
- "workflows": map[string]interface{}{
- "workflow1": map[string]interface{}{
- "data": map[string]string{
- "key1": "value1",
- },
- "metadata": map[string]map[string]string{
- "annotations": {},
- "labels": {},
- },
- },
- "workflow2": map[string]interface{}{
- "data": map[string]string{
- "key2": "value2",
- },
- "metadata": map[string]map[string]string{
- "annotations": {},
- "labels": {},
- },
- },
- "workflow3": map[string]interface{}{
- "data": map[string]string{
- "aggregated": "value1 and value2",
- },
- "metadata": map[string]map[string]string{
- "annotations": {},
- "labels": {},
- },
- },
- },
- },
- },
- }
- ctx := context.TODO()
- scheme := runtime.NewScheme()
- v1alpha1.AddToScheme(scheme)
- v1beta1.AddToScheme(scheme)
- namespace := "test-namespace"
- store1 := &v1beta1.SecretStore{
- ObjectMeta: metav1.ObjectMeta{
- Name: "store1",
- Namespace: namespace,
- },
- Status: v1beta1.SecretStoreStatus{
- Conditions: []v1beta1.SecretStoreStatusCondition{
- {
- Type: v1beta1.SecretStoreReady,
- Status: corev1.ConditionTrue,
- },
- },
- },
- Spec: v1beta1.SecretStoreSpec{
- Provider: &v1beta1.SecretStoreProvider{
- Fake: &v1beta1.FakeProvider{
- Data: []v1beta1.FakeProviderData{
- {
- Key: "key1",
- Value: "value1",
- },
- {
- Key: "key2",
- Value: "value2",
- },
- },
- },
- },
- },
- }
- client := fake.NewClientBuilder().WithScheme(scheme).WithObjects(store1).Build()
- log := logr.Discard()
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- runner := NewWorkflowRunner(ctx, client, namespace, tt.workflows, log)
- err := runner.Run()
- if err != nil {
- t.Errorf("unexpected error: %v", err)
- }
- if !reflect.DeepEqual(runner.inputs.ToMap(), tt.expected) {
- t.Errorf("unexpected result: got %v, want %v", runner.inputs.ToMap(), tt.expected)
- }
- })
- }
- }
|