...

Source file src/github.com/emissary-ingress/emissary/v3/cmd/entrypoint/testutil_fake_k8s_store_test_test.go

Documentation: github.com/emissary-ingress/emissary/v3/cmd/entrypoint

     1  package entrypoint_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  	"github.com/stretchr/testify/require"
     8  
     9  	"github.com/emissary-ingress/emissary/v3/cmd/entrypoint"
    10  	"github.com/emissary-ingress/emissary/v3/pkg/kates"
    11  )
    12  
    13  func TestStore(t *testing.T) {
    14  	store := entrypoint.NewK8sStore()
    15  
    16  	// This cursor, the early cursor starts before we load the file, so we should naturally see
    17  	// deltas for all the objects in the file.
    18  	cEarly := store.Cursor()
    19  	// The file has two mappings, one named foo, and one named bar.
    20  	assert.NoError(t, store.UpsertFile("testdata/TestStore.yaml"))
    21  
    22  	// This cursor, the late cursor starts after we load the file so we should see the synthetically
    23  	// generated deltas to catch it up, and then the actual deltas.
    24  	cLate := store.Cursor()
    25  
    26  	// Make sure we see the natural deltas.
    27  	resourcesEarly, deltasEarly, err := cEarly.Get()
    28  	require.NoError(t, err)
    29  	assert.Equal(t, 2, len(resourcesEarly))
    30  	require.Equal(t, 2, len(deltasEarly))
    31  	assert.Equal(t, kates.ObjectAdd, deltasEarly[0].DeltaType)
    32  	assert.Equal(t, "bar", deltasEarly[0].Name)
    33  	assert.Equal(t, kates.ObjectAdd, deltasEarly[1].DeltaType)
    34  	assert.Equal(t, "foo", deltasEarly[1].Name)
    35  
    36  	// Make sure we see the synthetic deltas.
    37  	resourcesLate, deltasLate, err := cLate.Get()
    38  	require.NoError(t, err)
    39  	assert.Equal(t, 2, len(resourcesLate))
    40  	require.Equal(t, 2, len(deltasLate))
    41  	assert.Equal(t, kates.ObjectAdd, deltasLate[0].DeltaType)
    42  	assert.Equal(t, "bar", deltasLate[0].Name)
    43  	assert.Equal(t, kates.ObjectAdd, deltasLate[1].DeltaType)
    44  	assert.Equal(t, "foo", deltasLate[1].Name)
    45  
    46  	// Now let's update an object.
    47  	fooKey := entrypoint.K8sKey{"Mapping", "default", "foo"}
    48  	foo := resourcesEarly[fooKey]
    49  	require.NotNil(t, foo)
    50  	assert.NoError(t, store.Upsert(foo))
    51  
    52  	// Make sure we see the update for the original cursor.
    53  	resourcesEarly, deltasEarly, err = cEarly.Get()
    54  	require.NoError(t, err)
    55  	assert.Equal(t, 2, len(resourcesEarly))
    56  	require.Equal(t, 1, len(deltasEarly))
    57  	assert.Equal(t, kates.ObjectUpdate, deltasEarly[0].DeltaType)
    58  	assert.Equal(t, "foo", deltasEarly[0].Name)
    59  
    60  	// Make sure we see the update for the late cursor.
    61  	resourcesLate, deltasLate, err = cLate.Get()
    62  	require.NoError(t, err)
    63  	assert.Equal(t, 2, len(resourcesLate))
    64  	require.Equal(t, 1, len(deltasLate))
    65  	assert.Equal(t, kates.ObjectUpdate, deltasLate[0].DeltaType)
    66  	assert.Equal(t, "foo", deltasLate[0].Name)
    67  
    68  	// Now let's delete an object.
    69  	assert.NoError(t, store.Delete("Mapping", "default", "foo"))
    70  
    71  	// Observe the delete from the early cursor.
    72  	resourcesEarly, deltasEarly, err = cEarly.Get()
    73  	require.NoError(t, err)
    74  	assert.Equal(t, 1, len(resourcesEarly))
    75  	require.Equal(t, 1, len(deltasEarly))
    76  	assert.Equal(t, kates.ObjectDelete, deltasEarly[0].DeltaType)
    77  	assert.Equal(t, "foo", deltasEarly[0].Name)
    78  
    79  	// Observe the delete from the late cursor.
    80  	resourcesLate, deltasLate, err = cLate.Get()
    81  	require.NoError(t, err)
    82  	assert.Equal(t, 1, len(resourcesLate))
    83  	require.Equal(t, 1, len(deltasLate))
    84  	assert.Equal(t, kates.ObjectDelete, deltasLate[0].DeltaType)
    85  	assert.Equal(t, "foo", deltasLate[0].Name)
    86  
    87  	// Now that we have had a whole bunch of deltas, lets create another cursor and make sure we
    88  	// don't get the full history, just the synthetic Add deltas.
    89  	c := store.Cursor()
    90  	resources, deltas, err := c.Get()
    91  	require.NoError(t, err)
    92  	assert.Equal(t, 1, len(resources))
    93  	require.Equal(t, 1, len(deltas))
    94  	assert.Equal(t, kates.ObjectAdd, deltas[0].DeltaType)
    95  	assert.Equal(t, "bar", deltas[0].Name)
    96  
    97  	// Now lets add back foo and check all three cursors.
    98  	assert.NoError(t, store.Upsert(foo))
    99  	resources, deltas, err = c.Get()
   100  	require.NoError(t, err)
   101  	assert.Equal(t, 2, len(resources))
   102  	require.Equal(t, 1, len(deltas))
   103  	assert.Equal(t, kates.ObjectAdd, deltas[0].DeltaType)
   104  	assert.Equal(t, "foo", deltas[0].Name)
   105  
   106  	// Observe the add back from the early cursor.
   107  	resourcesEarly, deltasEarly, err = cEarly.Get()
   108  	require.NoError(t, err)
   109  	assert.Equal(t, 2, len(resourcesEarly))
   110  	require.Equal(t, 1, len(deltasEarly))
   111  	assert.Equal(t, kates.ObjectAdd, deltasEarly[0].DeltaType)
   112  	assert.Equal(t, "foo", deltasEarly[0].Name)
   113  
   114  	// Observe the add back from the late cursor.
   115  	resourcesLate, deltasLate, err = cLate.Get()
   116  	require.NoError(t, err)
   117  	assert.Equal(t, 2, len(resourcesLate))
   118  	require.Equal(t, 1, len(deltasLate))
   119  	assert.Equal(t, kates.ObjectAdd, deltasLate[0].DeltaType)
   120  	assert.Equal(t, "foo", deltasLate[0].Name)
   121  }
   122  
   123  func TestNamespaceDefault(t *testing.T) {
   124  	store := entrypoint.NewK8sStore()
   125  	assert.NoError(t, store.UpsertFile("testdata/NamespaceDefault.yaml"))
   126  	c := store.Cursor()
   127  	resources, _, err := c.Get()
   128  	require.NoError(t, err)
   129  	assert.NotEmpty(t, resources)
   130  	for _, r := range resources {
   131  		assert.Equal(t, "default", r.GetNamespace())
   132  	}
   133  }
   134  

View as plain text