15
)
16
17
>
func RunNexusEndpointTestSuite(t *testing.T, store persistence.NexusEndpointStore, tableVersion *atomic.Int64) {
nexus_endpoint_suite.go
18
>
// NB: These tests cannot be run in parallel because of concurrent updates to the table version by different tests
19
>
t.Run("TestNexusEndpointsSteadyState", func(t *testing.T) {
21
>
})
23
testCreateOrUpdateNexusEndpointExpectedErrors(t, store, tableVersion)
24
})
26
testListNexusEndpointsExpectedErrors(t, store, tableVersion)
27
})
29
testDeleteNexusEndpointExpectedErrors(t, store, tableVersion)
30
})
31
}
32
34
>
tableVersion := atomic.Int64{}
35
>
t.Run("Generic", func(t *testing.T) {
36
>
store, err := factory.NewNexusEndpointStore()
37
>
require.NoError(t, err)
38
>
RunNexusEndpointTestSuite(t, store, &tableVersion)
39
>
})
40
}
41
42
>
func testNexusEndpointsStoreSteadyState(t *testing.T, store persistence.NexusEndpointStore, tableVersion *atomic.Int64) {
nexus_endpoint_suite.go
43
>
t.Run("SteadyState", func(t *testing.T) {
44
>
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
45
>
defer cancel()
46
>
47
>
data := &commonpb.DataBlob{
48
>
Data: []byte("dummy endpoint data"),
49
>
EncodingType: enumspb.ENCODING_TYPE_PROTO3,
50
>
}
51
>
52
>
// Get endpoint by ID when table is empty
53
>
endpoint, err := store.GetNexusEndpoint(ctx, &persistence.GetNexusEndpointRequest{ID: uuid.NewString()})
54
>
require.ErrorContains(t, err, "not found")
55
>
require.Nil(t, endpoint)
56
>
57
>
// List when table is empty
58
>
resp, err := store.ListNexusEndpoints(ctx, &persistence.ListNexusEndpointsRequest{PageSize: 10})
59
>
require.NoError(t, err)
60
>
require.Empty(t, resp.Endpoints)
61
>
require.Equal(t, tableVersion.Load(), resp.TableVersion)
62
>
63
>
// Create an endpoint
64
>
firstEndpoint := persistence.InternalNexusEndpoint{ID: uuid.NewString(), Version: 0, Data: data}
65
>
err = store.CreateOrUpdateNexusEndpoint(ctx, &persistence.InternalCreateOrUpdateNexusEndpointRequest{
66
>
LastKnownTableVersion: tableVersion.Load(),
67
>
Endpoint: firstEndpoint,
68
>
})
69
>
require.NoError(t, err)
70
>
tableVersion.Add(1)
71
>
firstEndpoint.Version++
72
>
73
>
// Get endpoint by ID
74
>
endpoint, err = store.GetNexusEndpoint(ctx, &persistence.GetNexusEndpointRequest{ID: firstEndpoint.ID})
75
>
require.NoError(t, err)
76
>
require.Equal(t, firstEndpoint.ID, endpoint.ID)
77
>
require.Equal(t, firstEndpoint.Version, endpoint.Version)
78
>
79
>
// List one
80
>
resp, err = store.ListNexusEndpoints(ctx, &persistence.ListNexusEndpointsRequest{PageSize: 10})
81
>
require.NoError(t, err)
82
>
require.Contains(t, resp.Endpoints, firstEndpoint)
83
>
require.Equal(t, resp.TableVersion, tableVersion.Load())
84
>
85
>
// Create a second endpoint
86
>
secondEndpoint := persistence.InternalNexusEndpoint{ID: uuid.NewString(), Version: 0, Data: data}
87
>
err = store.CreateOrUpdateNexusEndpoint(ctx, &persistence.InternalCreateOrUpdateNexusEndpointRequest{
88
>
LastKnownTableVersion: tableVersion.Load(),
89
>
Endpoint: secondEndpoint,
90
>
})
91
>
require.NoError(t, err)
92
>
tableVersion.Add(1)
93
>
secondEndpoint.Version++
94
>
95
>
// List multiple
96
>
resp, err = store.ListNexusEndpoints(ctx, &persistence.ListNexusEndpointsRequest{PageSize: 10})
97
>
require.NoError(t, err)
98
>
require.Contains(t, resp.Endpoints, firstEndpoint)
99
>
require.Contains(t, resp.Endpoints, secondEndpoint)
100
>
require.Equal(t, resp.TableVersion, tableVersion.Load())
101
>
102
>
// Create a third endpoints
103
>
thirdEndpointID := uuid.New().String()
104
>
err = store.CreateOrUpdateNexusEndpoint(ctx, &persistence.InternalCreateOrUpdateNexusEndpointRequest{
105
>
LastKnownTableVersion: tableVersion.Load(),
106
>
Endpoint: persistence.InternalNexusEndpoint{ID: thirdEndpointID, Data: data},
107
>
})
108
>
require.NoError(t, err)
109
>
tableVersion.Add(1)
110
>
111
>
// Update an endpoint
112
>
err = store.CreateOrUpdateNexusEndpoint(ctx, &persistence.InternalCreateOrUpdateNexusEndpointRequest{
113
>
LastKnownTableVersion: tableVersion.Load(),
114
>
Endpoint: persistence.InternalNexusEndpoint{ID: thirdEndpointID, Version: 1, Data: data},
115
>
})
116
>
require.NoError(t, err)
117
>
tableVersion.Add(1)
118
>
119
>
// List in pages (page 1)
120
>
resp, err = store.ListNexusEndpoints(ctx, &persistence.ListNexusEndpointsRequest{PageSize: 2})
121
>
require.NoError(t, err)
122
>
require.Len(t, resp.Endpoints, 2)
123
>
require.Equal(t, resp.TableVersion, tableVersion.Load())
124
>
require.NotNil(t, resp.NextPageToken)
125
>
126
>
// List in pages (page 2)
127
>
resp, err = store.ListNexusEndpoints(ctx, &persistence.ListNexusEndpointsRequest{
128
>
PageSize: 2,
129
>
NextPageToken: resp.NextPageToken,
130
>
LastKnownTableVersion: resp.TableVersion,
131
>
})
132
>
require.NoError(t, err)
133
>
require.Len(t, resp.Endpoints, 1)
134
>
require.Equal(t, resp.TableVersion, tableVersion.Load())
135
>
require.Nil(t, resp.NextPageToken)
136
>
137
>
// Delete an endpoint
138
>
err = store.DeleteNexusEndpoint(ctx, &persistence.DeleteNexusEndpointRequest{
139
>
ID: firstEndpoint.ID,
140
>
LastKnownTableVersion: tableVersion.Load(),
141
>
})
142
>
require.NoError(t, err)
143
>
tableVersion.Add(1)
144
>
145
>
// List endpoints with table version
146
>
resp, err = store.ListNexusEndpoints(ctx, &persistence.ListNexusEndpointsRequest{
147
>
PageSize: 10,
148
>
NextPageToken: nil,
149
>
LastKnownTableVersion: tableVersion.Load(),
150
>
})
151
>
require.NoError(t, err)
152
>
require.Len(t, resp.Endpoints, 2)
153
>
154
>
// Delete remaining endpoints
155
>
err = store.DeleteNexusEndpoint(ctx, &persistence.DeleteNexusEndpointRequest{
156
>
ID: secondEndpoint.ID,
157
>
LastKnownTableVersion: tableVersion.Load(),
158
>
})
159
>
require.NoError(t, err)
160
>
tableVersion.Add(1)
161
>
err = store.DeleteNexusEndpoint(ctx, &persistence.DeleteNexusEndpointRequest{
162
>
ID: thirdEndpointID,
163
>
LastKnownTableVersion: tableVersion.Load(),
164
>
})
165
>
require.NoError(t, err)
166
>
tableVersion.Add(1)
167
>
168
>
// List endpoints when table empty and expected version non-zero
169
>
resp, err = store.ListNexusEndpoints(ctx, &persistence.ListNexusEndpointsRequest{
170
>
PageSize: 10,
171
>
NextPageToken: nil,
172
>
LastKnownTableVersion: tableVersion.Load(),
173
>
})
174
>
require.NoError(t, err)
175
>
require.Empty(t, resp.Endpoints)
176
>
})
177
}
178