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
17
18 cEarly := store.Cursor()
19
20 assert.NoError(t, store.UpsertFile("testdata/TestStore.yaml"))
21
22
23
24 cLate := store.Cursor()
25
26
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
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
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
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
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
69 assert.NoError(t, store.Delete("Mapping", "default", "foo"))
70
71
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
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
88
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
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
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
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