github.com/argoproj-labs/argocd-operator@v0.10.0/controllers/argoutil/env_test.go (about)

     1  package argoutil
     2  
     3  import (
     4  	"reflect"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  	corev1 "k8s.io/api/core/v1"
     9  )
    10  
    11  func Test_EnvMerge(t *testing.T) {
    12  	t.Run("Merge non-existing env", func(t *testing.T) {
    13  		e := []corev1.EnvVar{
    14  			{
    15  				Name:  "FOO",
    16  				Value: "BAR",
    17  			},
    18  			{
    19  				Name:  "BAR",
    20  				Value: "FOO",
    21  			},
    22  		}
    23  		r := EnvMerge(e, []corev1.EnvVar{{Name: "BAZ", Value: "BAZ"}}, false)
    24  		// New element
    25  		assert.Len(t, r, 3)
    26  		assert.Contains(t, r, corev1.EnvVar{Name: "BAZ", Value: "BAZ"})
    27  	})
    28  	t.Run("Merge multiple non-existing and existing env", func(t *testing.T) {
    29  		e := []corev1.EnvVar{
    30  			{
    31  				Name:  "FOO",
    32  				Value: "BAR",
    33  			},
    34  			{
    35  				Name:  "BAR",
    36  				Value: "FOO",
    37  			},
    38  		}
    39  		r := EnvMerge(e, []corev1.EnvVar{{Name: "BAZ", Value: "BAZ"}, {Name: "FOO", Value: "FOO"}}, false)
    40  		// New element
    41  		assert.Equal(t, len(r), 3)
    42  		// New variable should be the one we added
    43  		assert.Contains(t, r, corev1.EnvVar{Name: "BAR", Value: "FOO"})
    44  		assert.Contains(t, r, corev1.EnvVar{Name: "FOO", Value: "BAR"})
    45  		assert.Contains(t, r, corev1.EnvVar{Name: "BAZ", Value: "BAZ"})
    46  		assert.NotContains(t, r, corev1.EnvVar{Name: "FOO", Value: "FOO"})
    47  	})
    48  	t.Run("Merge existing env with override", func(t *testing.T) {
    49  		e := []corev1.EnvVar{
    50  			{
    51  				Name:  "FOO",
    52  				Value: "BAR",
    53  			},
    54  			{
    55  				Name:  "BAR",
    56  				Value: "FOO",
    57  			},
    58  		}
    59  		r := EnvMerge(e, []corev1.EnvVar{{Name: "FOO", Value: "FOO"}}, true)
    60  		// No new element
    61  		assert.Equal(t, len(r), 2)
    62  		// Variable has been overwritten
    63  		assert.Contains(t, r, corev1.EnvVar{Name: "FOO", Value: "FOO"})
    64  		assert.Contains(t, r, corev1.EnvVar{Name: "BAR", Value: "FOO"})
    65  	})
    66  	t.Run("Merge existing env without override", func(t *testing.T) {
    67  		e := []corev1.EnvVar{
    68  			{
    69  				Name:  "FOO",
    70  				Value: "BAR",
    71  			},
    72  			{
    73  				Name:  "BAR",
    74  				Value: "FOO",
    75  			},
    76  		}
    77  		r := EnvMerge(e, []corev1.EnvVar{{Name: "FOO", Value: "FOO"}}, false)
    78  		// No new element
    79  		assert.Equal(t, len(r), 2)
    80  		// Variable has not been changed
    81  		assert.Contains(t, r, corev1.EnvVar{Name: "FOO", Value: "BAR"})
    82  		assert.Contains(t, r, corev1.EnvVar{Name: "BAR", Value: "FOO"})
    83  	})
    84  }
    85  
    86  func Test_EnvMerge_testSorted(t *testing.T) {
    87  	t.Run("Merge non-existing env", func(t *testing.T) {
    88  		e := []corev1.EnvVar{
    89  			{
    90  				Name:  "FOO",
    91  				Value: "BAR",
    92  			},
    93  			{
    94  				Name:  "BAR",
    95  				Value: "FOO",
    96  			},
    97  		}
    98  		r := EnvMerge(e, []corev1.EnvVar{{Name: "BAZ", Value: "BAZ"}}, false)
    99  
   100  		// verify if the Env Vars are sorted by names
   101  		s := []corev1.EnvVar{
   102  			{
   103  				Name:  "BAR",
   104  				Value: "FOO",
   105  			},
   106  			{
   107  				Name:  "BAZ",
   108  				Value: "BAZ",
   109  			},
   110  			{
   111  				Name:  "FOO",
   112  				Value: "BAR",
   113  			},
   114  		}
   115  		if !reflect.DeepEqual(r, s) {
   116  			assert.Fail(t, "environmental variables are not sorted")
   117  		}
   118  	})
   119  	t.Run("Merge multiple non-existing and existing env", func(t *testing.T) {
   120  		e := []corev1.EnvVar{
   121  			{
   122  				Name:  "FOO",
   123  				Value: "BAR",
   124  			},
   125  			{
   126  				Name:  "BAR",
   127  				Value: "FOO",
   128  			},
   129  		}
   130  		r := EnvMerge(e, []corev1.EnvVar{{Name: "BAZ", Value: "BAZ"}, {Name: "FOO", Value: "FOO"}}, true)
   131  
   132  		// verify if the Env Vars are sorted by names
   133  		s := []corev1.EnvVar{
   134  			{
   135  				Name:  "BAR",
   136  				Value: "FOO",
   137  			},
   138  			{
   139  				Name:  "BAZ",
   140  				Value: "BAZ",
   141  			},
   142  			{
   143  				Name:  "FOO",
   144  				Value: "FOO",
   145  			},
   146  		}
   147  		// New variable should be the one we added
   148  		if !reflect.DeepEqual(r, s) {
   149  			assert.Fail(t, "environmental variables are not sorted")
   150  		}
   151  	})
   152  }