github.com/argoproj/argo-cd/v3@v3.2.1/test/e2e/jsonnet_test.go (about)

     1  package e2e
     2  
     3  import (
     4  	"testing"
     5  
     6  	. "github.com/argoproj/gitops-engine/pkg/sync/common"
     7  	"github.com/argoproj/gitops-engine/pkg/utils/kube"
     8  	"github.com/stretchr/testify/assert"
     9  	"github.com/stretchr/testify/require"
    10  
    11  	. "github.com/argoproj/argo-cd/v3/pkg/apis/application/v1alpha1"
    12  	. "github.com/argoproj/argo-cd/v3/test/e2e/fixture"
    13  	. "github.com/argoproj/argo-cd/v3/test/e2e/fixture/app"
    14  	"github.com/argoproj/argo-cd/v3/util/errors"
    15  )
    16  
    17  func TestJsonnetAppliedCorrectly(t *testing.T) {
    18  	Given(t).
    19  		Path("jsonnet-tla").
    20  		When().
    21  		CreateApp().
    22  		Sync().
    23  		Then().
    24  		Expect(SyncStatusIs(SyncStatusCodeSynced)).
    25  		And(func(app *Application) {
    26  			manifests, err := RunCli("app", "manifests", app.Name, "--source", "live")
    27  			require.NoError(t, err)
    28  			resources, err := kube.SplitYAML([]byte(manifests))
    29  			require.NoError(t, err)
    30  
    31  			index := -1
    32  			for i := range resources {
    33  				if resources[i].GetKind() == kube.DeploymentKind {
    34  					index = i
    35  					break
    36  				}
    37  			}
    38  
    39  			assert.Greater(t, index, -1)
    40  
    41  			deployment := resources[index]
    42  			assert.Equal(t, "jsonnet-guestbook-ui", deployment.GetName())
    43  			assert.Equal(t, int64(1), *kube.GetDeploymentReplicas(deployment))
    44  		})
    45  }
    46  
    47  func TestJsonnetTlaParameterAppliedCorrectly(t *testing.T) {
    48  	Given(t).
    49  		Path("jsonnet-tla").
    50  		When().
    51  		CreateApp("--jsonnet-tla-str", "name=testing-tla", "--jsonnet-tla-code", "replicas=0").
    52  		Sync().
    53  		Then().
    54  		Expect(SyncStatusIs(SyncStatusCodeSynced)).
    55  		And(func(app *Application) {
    56  			manifests, err := RunCli("app", "manifests", app.Name, "--source", "live")
    57  			require.NoError(t, err)
    58  			resources, err := kube.SplitYAML([]byte(manifests))
    59  			require.NoError(t, err)
    60  
    61  			index := -1
    62  			for i := range resources {
    63  				if resources[i].GetKind() == kube.DeploymentKind {
    64  					index = i
    65  					break
    66  				}
    67  			}
    68  
    69  			assert.Greater(t, index, -1)
    70  
    71  			deployment := resources[index]
    72  			assert.Equal(t, "testing-tla", deployment.GetName())
    73  			assert.Equal(t, int64(0), *kube.GetDeploymentReplicas(deployment))
    74  		})
    75  }
    76  
    77  func TestJsonnetTlaEnv(t *testing.T) {
    78  	Given(t).
    79  		Path("jsonnet-tla-cm").
    80  		When().
    81  		CreateApp("--jsonnet-tla-str", "foo=$ARGOCD_APP_NAME", "--jsonnet-tla-code", "bar='$ARGOCD_APP_NAME'").
    82  		Sync().
    83  		Then().
    84  		Expect(OperationPhaseIs(OperationSucceeded)).
    85  		Expect(SyncStatusIs(SyncStatusCodeSynced)).
    86  		And(func(_ *Application) {
    87  			assert.Equal(t, Name(), errors.NewHandler(t).FailOnErr(Run(".", "kubectl", "-n", DeploymentNamespace(), "get", "cm", "my-map", "-o", "jsonpath={.data.foo}")).(string))
    88  			assert.Equal(t, Name(), errors.NewHandler(t).FailOnErr(Run(".", "kubectl", "-n", DeploymentNamespace(), "get", "cm", "my-map", "-o", "jsonpath={.data.bar}")).(string))
    89  		})
    90  }
    91  
    92  func TestJsonnetExtVarEnv(t *testing.T) {
    93  	Given(t).
    94  		Path("jsonnet-ext-var").
    95  		When().
    96  		CreateApp("--jsonnet-ext-var-str", "foo=$ARGOCD_APP_NAME", "--jsonnet-ext-var-code", "bar='$ARGOCD_APP_NAME'").
    97  		Sync().
    98  		Then().
    99  		Expect(OperationPhaseIs(OperationSucceeded)).
   100  		Expect(SyncStatusIs(SyncStatusCodeSynced)).
   101  		And(func(_ *Application) {
   102  			assert.Equal(t, Name(), errors.NewHandler(t).FailOnErr(Run(".", "kubectl", "-n", DeploymentNamespace(), "get", "cm", "my-map", "-o", "jsonpath={.data.foo}")).(string))
   103  			assert.Equal(t, Name(), errors.NewHandler(t).FailOnErr(Run(".", "kubectl", "-n", DeploymentNamespace(), "get", "cm", "my-map", "-o", "jsonpath={.data.bar}")).(string))
   104  		})
   105  }
   106  
   107  // Jsonnet file located in nested sub directory uses import
   108  func TestJsonnetNestedDirWithImports(t *testing.T) {
   109  	Given(t).
   110  		Path("jsonnet-nested-dir-with-imports/apps").
   111  		When().
   112  		CreateApp("--directory-recurse").
   113  		Sync().
   114  		Then().
   115  		Expect(OperationPhaseIs(OperationSucceeded)).
   116  		Expect(SyncStatusIs(SyncStatusCodeSynced)).
   117  		Expect(ResourceSyncStatusIs("Namespace", "hello-world", SyncStatusCodeSynced)).
   118  		Expect(ResourceSyncStatusIs("Namespace", "hello-root", SyncStatusCodeSynced))
   119  }