1 package store
2
3 import (
4 "context"
5 "path/filepath"
6 "testing"
7
8 ncproxynetworking "github.com/Microsoft/hcsshim/internal/ncproxy/networking"
9 bolt "go.etcd.io/bbolt"
10 )
11
12 func TestComputeAgentStore(t *testing.T) {
13 ctx := context.Background()
14 tempDir := t.TempDir()
15
16 db, err := bolt.Open(filepath.Join(tempDir, "networkproxy.db.test"), 0600, nil)
17 if err != nil {
18 t.Fatal(err)
19 }
20 defer db.Close()
21
22 store := NewComputeAgentStore(db)
23 containerID := "fake-container-id"
24 address := "123412341234"
25
26 if err := store.UpdateComputeAgent(ctx, containerID, address); err != nil {
27 t.Fatal(err)
28 }
29
30 actual, err := store.GetComputeAgent(ctx, containerID)
31 if err != nil {
32 t.Fatal(err)
33 }
34
35 if address != actual {
36 t.Fatalf("compute agent addresses are not equal, expected %v but got %v", address, actual)
37 }
38
39 if err := store.DeleteComputeAgent(ctx, containerID); err != nil {
40 t.Fatal(err)
41 }
42
43 value, err := store.GetComputeAgent(ctx, containerID)
44 if err == nil {
45 t.Fatalf("expected an error, instead found value %s", value)
46 }
47 }
48
49 func TestComputeAgentStore_GetComputeAgents(t *testing.T) {
50 ctx := context.Background()
51 tempDir := t.TempDir()
52
53 db, err := bolt.Open(filepath.Join(tempDir, "networkproxy.db.test"), 0600, nil)
54 if err != nil {
55 t.Fatal(err)
56 }
57 defer db.Close()
58
59 store := NewComputeAgentStore(db)
60
61 containerIDs := []string{"fake-container-id", "fake-container-id-2"}
62 addresses := []string{"123412341234", "234523452345"}
63
64 target := make(map[string]string)
65 for i := 0; i < len(containerIDs); i++ {
66 target[containerIDs[i]] = addresses[i]
67 if err := store.UpdateComputeAgent(ctx, containerIDs[i], addresses[i]); err != nil {
68 t.Fatal(err)
69 }
70 }
71
72 actual, err := store.GetComputeAgents(ctx)
73 if err != nil {
74 t.Fatal(err)
75 }
76
77 for k, v := range actual {
78 if target[k] != v {
79 t.Fatalf("expected to get %s for key %s, instead got %s", target[k], k, v)
80 }
81 }
82 }
83
84 func TestEndpointStore(t *testing.T) {
85 ctx := context.Background()
86 tempDir := t.TempDir()
87
88 db, err := bolt.Open(filepath.Join(tempDir, "networkproxy.db.test"), 0600, nil)
89 if err != nil {
90 t.Fatal(err)
91 }
92 defer db.Close()
93
94 store := NewNetworkingStore(db)
95 endpointName := "test-endpoint-name"
96 namespaceID := "test-namespace-id"
97
98 endpoint := &ncproxynetworking.Endpoint{
99 EndpointName: endpointName,
100 NamespaceID: namespaceID,
101 }
102
103 if err := store.CreatEndpoint(ctx, endpoint); err != nil {
104 t.Fatal(err)
105 }
106
107 actual, err := store.GetEndpointByName(ctx, endpointName)
108 if err != nil {
109 t.Fatal(err)
110 }
111
112 if actual.EndpointName != endpointName {
113 t.Fatalf("endpoint name is not equal, expected %v but got %v", endpointName, actual.EndpointName)
114 }
115
116 if actual.NamespaceID != namespaceID {
117 t.Fatalf("endpoint namespace id is not equal, expected %v but got %v", namespaceID, actual.NamespaceID)
118 }
119
120 if err := store.DeleteEndpoint(ctx, endpointName); err != nil {
121 t.Fatal(err)
122 }
123
124 actual, err = store.GetEndpointByName(ctx, endpointName)
125 if err == nil {
126 t.Fatalf("expected an error, instead found endpoint %v", actual)
127 }
128 }
129
130 func TestEndpointStore_GetAll(t *testing.T) {
131 ctx := context.Background()
132 tempDir := t.TempDir()
133
134 db, err := bolt.Open(filepath.Join(tempDir, "networkproxy.db.test"), 0600, nil)
135 if err != nil {
136 t.Fatal(err)
137 }
138 defer db.Close()
139
140 store := NewNetworkingStore(db)
141
142 endpoints := []*ncproxynetworking.Endpoint{
143 {
144 EndpointName: "endpoint-name-1",
145 },
146 {
147 EndpointName: "endpoint-name-2",
148 },
149 }
150
151 target := make(map[string]*ncproxynetworking.Endpoint)
152 for i := 0; i < len(endpoints); i++ {
153 target[endpoints[i].EndpointName] = endpoints[i]
154 if err := store.CreatEndpoint(ctx, endpoints[i]); err != nil {
155 t.Fatal(err)
156 }
157 }
158
159 actual, err := store.ListEndpoints(ctx)
160 if err != nil {
161 t.Fatal(err)
162 }
163
164 for _, e := range actual {
165 endpt, ok := target[e.EndpointName]
166 if !ok {
167 t.Fatalf("unexpected endpoint with name %v found", e.EndpointName)
168 }
169 if endpt.EndpointName != e.EndpointName {
170 t.Fatalf("expected found endpoint to have name %v, instead found %v", endpt.EndpointName, e.EndpointName)
171 }
172 }
173 }
174
175 func TestNetworkStore(t *testing.T) {
176 ctx := context.Background()
177 tempDir := t.TempDir()
178
179 db, err := bolt.Open(filepath.Join(tempDir, "networkproxy.db.test"), 0600, nil)
180 if err != nil {
181 t.Fatal(err)
182 }
183 defer db.Close()
184
185 store := NewNetworkingStore(db)
186 networkName := "test-network-name"
187
188 network := &ncproxynetworking.Network{
189 NetworkName: networkName,
190 }
191
192 if err := store.CreateNetwork(ctx, network); err != nil {
193 t.Fatal(err)
194 }
195
196 actual, err := store.GetNetworkByName(ctx, networkName)
197 if err != nil {
198 t.Fatal(err)
199 }
200
201 if actual.NetworkName != networkName {
202 t.Fatalf("network name is not equal, expected %v but got %v", networkName, actual.NetworkName)
203 }
204
205 if err := store.DeleteNetwork(ctx, networkName); err != nil {
206 t.Fatal(err)
207 }
208
209 actual, err = store.GetNetworkByName(ctx, networkName)
210 if err == nil {
211 t.Fatalf("expected an error, instead found network %v", actual)
212 }
213 }
214
215 func TestNetworkStore_GetAll(t *testing.T) {
216 ctx := context.Background()
217 tempDir := t.TempDir()
218
219 db, err := bolt.Open(filepath.Join(tempDir, "networkproxy.db.test"), 0600, nil)
220 if err != nil {
221 t.Fatal(err)
222 }
223 defer db.Close()
224
225 store := NewNetworkingStore(db)
226
227 networks := []*ncproxynetworking.Network{
228 {
229 NetworkName: "network-name-1",
230 },
231 {
232 NetworkName: "network-name-2",
233 },
234 }
235
236 target := make(map[string]*ncproxynetworking.Network)
237 for i := 0; i < len(networks); i++ {
238 target[networks[i].NetworkName] = networks[i]
239 if err := store.CreateNetwork(ctx, networks[i]); err != nil {
240 t.Fatal(err)
241 }
242 }
243
244 actual, err := store.ListNetworks(ctx)
245 if err != nil {
246 t.Fatal(err)
247 }
248
249 for _, n := range actual {
250 network, ok := target[n.NetworkName]
251 if !ok {
252 t.Fatalf("unexpected network with name %v found", n.NetworkName)
253 }
254 if network.NetworkName != n.NetworkName {
255 t.Fatalf("expected found network to have name %v, instead found %v", network.NetworkName, n.NetworkName)
256 }
257 }
258 }
259
View as plain text