1 package services
2
3 import (
4 "context"
5 "errors"
6 "testing"
7 "time"
8
9 "github.com/DATA-DOG/go-sqlmock"
10 "github.com/google/uuid"
11 "github.com/stretchr/testify/assert"
12
13 "edge-infra.dev/pkg/edge/api/bsl/types"
14 "edge-infra.dev/pkg/edge/api/graph/model"
15 "edge-infra.dev/pkg/edge/api/middleware"
16 sqlquery "edge-infra.dev/pkg/edge/api/sql"
17 edgetypes "edge-infra.dev/pkg/edge/api/types"
18 "edge-infra.dev/pkg/edge/bsl"
19 "edge-infra.dev/pkg/edge/constants/api/banner"
20 "edge-infra.dev/pkg/edge/controllers/util/edgedb"
21 )
22
23 var defaultCfg = &edgetypes.Config{}
24
25 func TestBannerSQLEntry(t *testing.T) {
26 db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
27 if err != nil {
28 t.Fatalf("an error '%s' was not expected when opening a stub database connection", err)
29 }
30 defer db.Close()
31
32 mock.MatchExpectationsInOrder(false)
33 mock.ExpectQuery(sqlquery.GetTenantByOrgNameQuery).
34 WithArgs(testOrganization).
35 WillReturnRows(mock.NewRows([]string{"tenant_id"}).
36 AddRow(1))
37 mock.ExpectExec(sqlquery.BannerInsertQuery).
38 WithArgs("euid", testOrganization, "org", projectID, "1", "uuid", "description").
39 WillReturnResult(sqlmock.NewResult(1, 1))
40 mock.ExpectExec(sqlquery.DeleteBannerQuery).WithArgs("uuid").
41 WillReturnResult(sqlmock.NewResult(1, 1))
42 bslClient := bsl.NewBSLClient(types.BSPConfig{})
43 organizationService := NewBannerService(nil, nil, bslClient, "", db, defaultCfg)
44 contextWithAuth := middleware.NewContext(context.Background(), &types.AuthUser{
45 Username: testUsername,
46 Token: testBSLToken,
47 Organization: testOrganization,
48 })
49
50 err = organizationService.CreateBannerSQLEntry(contextWithAuth, projectID, testOrganization, "org", "euid", "uuid", "description")
51 assert.NoError(t, err)
52 err = organizationService.DeleteBannerSQLEntry(contextWithAuth, "uuid")
53 assert.NoError(t, err)
54 if err := mock.ExpectationsWereMet(); err != nil {
55 t.Errorf("there were unfulfilled expectations: %s", err)
56 }
57 }
58
59 func TestGetPathEntry(t *testing.T) {
60 db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
61 if err != nil {
62 t.Fatalf("an error '%s' was not expected when opening a stub database connection", err)
63 }
64 defer db.Close()
65
66 mock.MatchExpectationsInOrder(false)
67 mock.ExpectQuery(sqlquery.GetBannerInfraInfo).
68 WithArgs().WillReturnError(errors.New("bad req"))
69
70 mock.ExpectQuery(sqlquery.GetBannerInfraInfo).
71 WithArgs().
72 WillReturnRows(mock.NewRows([]string{"clusterEdgeID", "clusterName", "projectID", "active"}).
73 AddRow("edge_id_path", "&clusterName", "&projectID", true))
74
75 organizationService := NewBannerService(nil, nil, nil, "", db, defaultCfg)
76 contextWithAuth := middleware.NewContext(context.Background(), &types.AuthUser{
77 Username: testUsername,
78 Token: testBSLToken,
79 Organization: testOrganization,
80 })
81
82 path, err := organizationService.GetBannerInfraBucketPath(contextWithAuth)
83 assert.Error(t, err)
84 assert.Equal(t, "", path)
85 path, err = organizationService.GetBannerInfraBucketPath(contextWithAuth)
86 assert.NoError(t, err)
87 assert.Equal(t, "edge_id_path", path)
88 if err := mock.ExpectationsWereMet(); err != nil {
89 t.Errorf("there were unfulfilled expectations: %s", err)
90 }
91 }
92
93 func TestUpdateBannerSQLEntry(t *testing.T) {
94 db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
95 if err != nil {
96 t.Fatalf("an error '%s' was not expected when opening a stub database connection", err)
97 }
98 defer db.Close()
99 desc := "test-desc"
100 mock.ExpectExec(sqlquery.UpdateBanner).WithArgs("test-name", desc, "test-uuid").
101 WillReturnResult(sqlmock.NewResult(1, 1))
102 bslClient := bsl.NewBSLClient(types.BSPConfig{})
103 organizationService := NewBannerService(nil, nil, bslClient, "", db, defaultCfg)
104 err = organizationService.UpdateBannerSQL(context.Background(), &model.Banner{BannerEdgeID: "test-uuid", Name: "test-name", Description: &desc})
105 assert.NoError(t, err)
106 if err := mock.ExpectationsWereMet(); err != nil {
107 t.Errorf("there were unfulfilled expectations: %s", err)
108 }
109 }
110
111 func TestCreateBannerCr(t *testing.T) {
112 bslClient := bsl.NewBSLClient(types.BSPConfig{})
113 organizationService := NewBannerService(nil, nil, bslClient, "", nil, defaultCfg)
114 contextWithAuth := middleware.NewContext(context.Background(), &types.AuthUser{
115 Username: testUsername,
116 Token: testBSLToken,
117 Organization: testOrganization,
118 })
119 caps := []string{"cap1", "cap2"}
120 bannerCRD, err := organizationService.CreateBannerCr(contextWithAuth, uuid.NewString(), projectID, testOrganization, "euid", caps)
121 assert.NoError(t, err)
122 assert.NotEmpty(t, bannerCRD)
123 }
124
125 func TestBannerProjectID(t *testing.T) {
126 db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
127 if err != nil {
128 t.Fatalf("an error '%s' was not expected when opening a stub database connection", err)
129 }
130 defer db.Close()
131 mock.ExpectQuery(sqlquery.GetProjectIDByBanner).
132 WithArgs(testOrganization).
133 WillReturnRows(mock.NewRows([]string{"project_id"}).
134 AddRow(projectID))
135 bslClient := bsl.NewBSLClient(types.BSPConfig{})
136 organizationService := NewBannerService(nil, nil, bslClient, "", db, defaultCfg)
137 p, err := organizationService.GetBannerProjectID(context.Background(), testOrganization)
138 assert.NoError(t, err)
139 assert.Equal(t, p, projectID)
140 }
141
142 func TestBannerFromEdgeID(t *testing.T) {
143 db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
144 if err != nil {
145 t.Fatalf("an error '%s' was not expected when opening a stub database connection", err)
146 }
147 defer db.Close()
148 mock.ExpectQuery(sqlquery.GetBannerByID).
149 WithArgs(testOrgID).
150 WillReturnRows(mock.NewRows([]string{"banner_edge_id", "banner_bsl_id", "banner_name", "banner_type", "project_id", "tenant_edge_id", "description", "edge_sec_opt_in_compliance"}).
151 AddRow(testOrgID, testOrg, testOrg, "eu", projectID, "tenant", "desc", "true"))
152 bslClient := bsl.NewBSLClient(types.BSPConfig{})
153 organizationService := NewBannerService(nil, nil, bslClient, "", db, defaultCfg)
154 b, err := organizationService.GetBannerByEdgeID(context.Background(), testOrgID)
155 assert.NoError(t, err)
156 assert.Equal(t, b.BannerEdgeID, testOrgID)
157 assert.Equal(t, b.Name, testOrg)
158 assert.Equal(t, b.BannerType, "eu")
159 assert.Equal(t, b.BannerBSLId, testOrg)
160 assert.Equal(t, *b.Description, "desc")
161 assert.Equal(t, b.TenantEdgeID, "tenant")
162 assert.True(t, b.OptInEdgeSecurityCompliance)
163 }
164
165 func TestGetBannerTypeFromID(t *testing.T) {
166 db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
167 if err != nil {
168 t.Fatalf("an error '%s' was not expected when opening a stub database connection", err)
169 }
170 defer db.Close()
171 mock.ExpectQuery(sqlquery.GetBannerTypeFromIDQuery).
172 WithArgs(testBannerID).
173 WillReturnRows(mock.NewRows([]string{"banner_type"}).
174 AddRow("eu"))
175 bslClient := bsl.NewBSLClient(types.BSPConfig{})
176 organizationService := NewBannerService(nil, nil, bslClient, "", db, defaultCfg)
177 bannerType, err := organizationService.GetBannerTypeFromID(context.Background(), testBannerID)
178 assert.NoError(t, err)
179 assert.Equal(t, banner.EU, bannerType)
180 }
181
182 func TestGetBannerTypeFromUUID(t *testing.T) {
183 db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
184 if err != nil {
185 t.Fatalf("an error '%s' was not expected when opening a stub database connection", err)
186 }
187 defer db.Close()
188 mock.ExpectQuery(sqlquery.GetBannerTypeFromUUIDQuery).
189 WithArgs(testBanner).
190 WillReturnRows(mock.NewRows([]string{"banner_type"}).
191 AddRow("org"))
192 bslClient := bsl.NewBSLClient(types.BSPConfig{})
193 organizationService := NewBannerService(nil, nil, bslClient, "", db, defaultCfg)
194 bannerType, err := organizationService.GetBannerTypeFromUUID(context.Background(), testBanner)
195 assert.NoError(t, err)
196 assert.Equal(t, banner.Org, bannerType)
197 }
198
199 func TestGetBannerTenantInfo(t *testing.T) {
200 db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
201 if err != nil {
202 t.Fatalf("an error '%s' was not expected when opening a stub database connection", err)
203 }
204 defer db.Close()
205 mock.ExpectQuery(sqlquery.GetBannerTenantByOrgName).
206 WithArgs("test-org").
207 WillReturnRows(mock.NewRows([]string{"uuid", "org_id", "org_name"}).
208 AddRow("uuid", "test-org-id", "test-org"))
209 bslClient := bsl.NewBSLClient(types.BSPConfig{})
210 organizationService := NewBannerService(nil, nil, bslClient, "", db, defaultCfg)
211 tenantInfo, err := organizationService.GetBannerTenantInfo(context.Background(), "test-org")
212 assert.NoError(t, err)
213 assert.Equal(t, tenantInfo.TenantEdgeID, "uuid")
214 assert.Equal(t, tenantInfo.TenantBSLId, "test-org-id")
215 assert.Equal(t, tenantInfo.OrgName, "test-org")
216 }
217
218 func TestGetBannerInfoNoBanner(t *testing.T) {
219 db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
220 if err != nil {
221 t.Fatalf("an error '%s' was not expected when opening a stub database connection", err)
222 }
223 defer db.Close()
224 mock.ExpectQuery(sqlquery.GetBannerByBSLID).
225 WithArgs("test-bsl-id").
226 WillReturnRows(mock.NewRows([]string{"banner_edge_id", "banner_bsl_id", "banner_name", "banner_type", "project_id", "tenant_edge_id", "description"}))
227 bslClient := bsl.NewBSLClient(types.BSPConfig{})
228 organizationService := NewBannerService(nil, nil, bslClient, "", db, defaultCfg)
229 banner := &model.Banner{Name: "test-banner", BannerBSLId: "test-bsl-id"}
230 bannerInfo := organizationService.GetEdgeBannerInfo(context.Background(), []*model.Banner{banner})
231 assert.Equal(t, bannerInfo, []*model.Banner{})
232 }
233
234 func TestGetClusterInfraInfo(t *testing.T) {
235 db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
236 if err != nil {
237 t.Fatalf("an error '%s' was not expected when opening a stub database connection", err)
238 }
239 defer db.Close()
240 active := true
241 mock.ExpectQuery(sqlquery.GetClusterInfraInfo).
242 WithArgs("test-banner-edge-id").
243 WillReturnRows(mock.NewRows([]string{"cluster_edge_id", "cluster_name", "project_id", "active"}).
244 AddRow("test-cluster-edge-id", "test=cluster", testOrg, &active))
245 bslClient := bsl.NewBSLClient(types.BSPConfig{})
246 organizationService := NewBannerService(nil, nil, bslClient, "", db, defaultCfg)
247 cluster, err := organizationService.GetClusterInfraInfo(context.Background(), "test-banner-edge-id")
248 assert.NoError(t, err)
249 assert.Equal(t, cluster.ClusterEdgeID, "test-cluster-edge-id")
250 assert.Equal(t, *cluster.Active, true)
251 assert.Equal(t, cluster.BannerEdgeID, "test-banner-edge-id")
252 }
253
254 func TestDeleteClusterSQLEntryForBanner(t *testing.T) {
255 db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
256 if err != nil {
257 t.Fatalf("an error '%s' was not expected when opening a stub database connection", err)
258 }
259 defer db.Close()
260 mock.ExpectExec(sqlquery.DeleteClusterQuery).WithArgs("test-cluster-id").WillReturnResult(sqlmock.NewResult(0, 0))
261 bslClient := bsl.NewBSLClient(types.BSPConfig{})
262 organizationService := NewBannerService(nil, nil, bslClient, "", db, defaultCfg)
263 err = organizationService.DeleteClusterSQLEntry(context.Background(), "test-cluster-id")
264 assert.NoError(t, err)
265 }
266
267 func TestDeleteOrgBanner(t *testing.T) {
268 srv := getMockBspServer(t)
269 defer srv.Close()
270 appConfig := edgetypes.Config{
271 BSP: types.BSPConfig{
272 Endpoint: srv.URL,
273 },
274 }
275 bslClient := bsl.NewBSLClient(appConfig.BSP)
276 organizationService := NewBannerService(nil, nil, bslClient, "", nil, defaultCfg)
277 contextWithAuth := middleware.NewContext(context.Background(), &types.AuthUser{
278 Username: testUsername,
279 Token: testBSLToken,
280 Organization: testOrganization,
281 })
282 deleted, err := organizationService.DeleteOrgBanner(contextWithAuth, testBannerID)
283 assert.Nil(t, err)
284 assert.Equal(t, deleted, true)
285 }
286
287 func TestDeleteEUBanner(t *testing.T) {
288 srv := getMockBspServer(t)
289 defer srv.Close()
290 appConfig := edgetypes.Config{
291 BSP: types.BSPConfig{
292 Endpoint: srv.URL,
293 },
294 }
295 bslClient := bsl.NewBSLClient(appConfig.BSP)
296 organizationService := NewBannerService(nil, nil, bslClient, "", nil, defaultCfg)
297 contextWithAuth := middleware.NewContext(context.Background(), &types.AuthUser{
298 Username: testUsername,
299 Token: testBSLToken,
300 Organization: testOrganization,
301 })
302 deleted, err := organizationService.DeleteEUBanner(contextWithAuth, testBanner, testBannerID)
303 assert.Nil(t, err)
304 assert.Equal(t, deleted, true)
305 }
306
307 func TestUpdateOrgBanner(t *testing.T) {
308 srv := getMockBspServer(t)
309 defer srv.Close()
310 appConfig := edgetypes.Config{
311 BSP: types.BSPConfig{
312 Endpoint: srv.URL,
313 },
314 }
315 bslClient := bsl.NewBSLClient(appConfig.BSP)
316 organizationService := NewBannerService(nil, nil, bslClient, "", nil, defaultCfg)
317 contextWithAuth := middleware.NewContext(context.Background(), &types.AuthUser{
318 Username: testUsername,
319 Token: testBSLToken,
320 Organization: testOrganization,
321 })
322 desc := "new-description"
323 err := organizationService.UpdateOrgBanner(contextWithAuth, &model.Banner{BannerBSLId: "banner-edge-id", Name: "new-name", Description: &desc})
324 assert.Nil(t, err)
325 }
326
327 func TestUpdateEUBanner(t *testing.T) {
328 srv := getMockBspServer(t)
329 defer srv.Close()
330 appConfig := edgetypes.Config{
331 BSP: types.BSPConfig{
332 Endpoint: srv.URL,
333 },
334 }
335 bslClient := bsl.NewBSLClient(appConfig.BSP)
336 organizationService := NewBannerService(nil, nil, bslClient, "", nil, defaultCfg)
337 contextWithAuth := middleware.NewContext(context.Background(), &types.AuthUser{
338 Username: testUsername,
339 Token: testBSLToken,
340 Organization: testOrganization,
341 })
342 desc := "new-description"
343 err := organizationService.UpdateEUBanner(contextWithAuth, &model.Banner{BannerBSLId: "test-banner", Name: "new-name", Description: &desc})
344 assert.Nil(t, err)
345 }
346
347 func TestGetUserAssignedBanner(t *testing.T) {
348 db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
349 if err != nil {
350 t.Fatalf("an error '%s' was not expected when opening a stub database connection", err)
351 }
352 defer db.Close()
353 mock.ExpectQuery(sqlquery.GetBannerByBSLID).WithArgs("test-org-id").
354 WillReturnRows(sqlmock.NewRows([]string{"banner_edge_id", "banner_bsl_id", "banner_name", "banner_type", "project_id", "tenant_edge_id", "description", "bsl_data_synced", "bsl_entity_types", "edge_sec_opt_in_compliance"}).
355 AddRow("test-org-id", "test-org-banner", "eu-banner-bsl-id2", "EU", "eu-banner-bsl-id3", "eu-banner-bsl-id4", "eu-banner-bsl-id5", false, nil, true))
356 mock.ExpectQuery(sqlquery.GetBannerByBSLID).WithArgs("test-org-banner").
357 WillReturnRows(sqlmock.NewRows([]string{"banner_edge_id", "banner_bsl_id", "banner_name", "banner_type", "project_id", "tenant_edge_id", "description", "bsl_data_synced", "bsl_entity_types", "edge_sec_opt_in_compliance"}).
358 AddRow("test-org-banner", "test-org-banner", "eu-banner-bsl-id2", "EU", "eu-banner-bsl-id3", "eu-banner-bsl-id4", "eu-banner-bsl-id5", false, nil, true))
359 mock.ExpectQuery(sqlquery.GetBannerByBSLID).WithArgs("eu-banner-bsl-id").
360 WillReturnRows(sqlmock.NewRows([]string{"banner_edge_id", "banner_bsl_id", "banner_name", "banner_type", "project_id", "tenant_edge_id", "description", "bsl_data_synced", "bsl_entity_types", "edge_sec_opt_in_compliance"}).
361 AddRow("eu-banner-bsl-id", "test-org-banner", "eu-banner-bsl-id2", "EU", "eu-banner-bsl-id3", "eu-banner-bsl-id4", "eu-banner-bsl-id5", false, nil, true))
362
363 srv := getMockBspServer(t)
364 defer srv.Close()
365 appConfig := edgetypes.Config{
366 BSP: types.BSPConfig{
367 Endpoint: srv.URL,
368 },
369 }
370 bslClient := bsl.NewBSLClient(appConfig.BSP)
371 organizationService := NewBannerService(nil, nil, bslClient, "", db, defaultCfg)
372 contextWithAuth := middleware.NewContext(context.Background(), &types.AuthUser{
373 Username: testUsername,
374 Token: testBSLToken,
375 Organization: testOrganization,
376 })
377 username := "test"
378 _, err = organizationService.GetUserAssignedBanners(contextWithAuth, username)
379 assert.NoError(t, err)
380 }
381
382 func TestUpdateBannerRemoteAccessIP(t *testing.T) {
383 db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
384 if err != nil {
385 t.Fatalf("an error '%s' was not expected when opening a stub database connection", err)
386 }
387 defer db.Close()
388 remoteAccessIP := "34.123.45.68"
389 bannerEdgeID := "3396a52c-6a22-4049-9593-5a63b596a101"
390 mock.ExpectExec(sqlquery.UpdateBannerRemoteAccessIP).
391 WithArgs(remoteAccessIP, bannerEdgeID).
392 WillReturnResult(sqlmock.NewResult(1, 1))
393 organizationService := NewBannerService(nil, nil, nil, "", db, defaultCfg)
394 err = organizationService.UpdateBannerRemoteAccessIP(context.Background(), remoteAccessIP, bannerEdgeID)
395 assert.NoError(t, err)
396 assert.NoError(t, mock.ExpectationsWereMet())
397 }
398
399 func TestGetBannerInfraStatus(t *testing.T) {
400 db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
401 if err != nil {
402 t.Fatalf("an error '%s' was not expected when opening a stub database connection", err)
403 }
404 defer db.Close()
405
406 currTime := time.Now().Format(time.RFC3339)
407 testCases := []struct {
408 name string
409 expectedStatusReason string
410 expectedStatusMessage string
411 isReady bool
412 sqlMock func() *sqlmock.ExpectedQuery
413 }{
414 {
415 name: "READY infra status",
416 expectedStatusReason: ProvisionedStatus,
417 expectedStatusMessage: "ProvisionSucceeded: banner reconciled successfully",
418 isReady: true,
419 sqlMock: func() *sqlmock.ExpectedQuery {
420 return mock.ExpectQuery(sqlquery.GetBannerInfraStatusByBannerEdgeID).
421 WithArgs(testBanner).
422 WillReturnRows(mock.NewRows([]string{"infra_status", "infra_status_details", "infra_status_updated_at"}).
423 AddRow(string(edgedb.InfraStatusReady), "ProvisionSucceeded: banner reconciled successfully", currTime))
424 },
425 },
426 {
427 name: "ERROR infra status",
428 expectedStatusReason: string(edgedb.InfraStatusProvisioning),
429 expectedStatusMessage: "ProjectNotReady: project is not ready: UpdateFailed",
430 isReady: false,
431 sqlMock: func() *sqlmock.ExpectedQuery {
432 return mock.ExpectQuery(sqlquery.GetBannerInfraStatusByBannerEdgeID).
433 WithArgs(testBanner).
434 WillReturnRows(mock.NewRows([]string{"infra_status", "infra_status_details", "infra_status_updated_at"}).
435 AddRow(string(edgedb.InfraStatusError), "ProjectNotReady: project is not ready: UpdateFailed", currTime))
436 },
437 },
438 {
439 name: "PROVISIONING infra status",
440 expectedStatusReason: string(edgedb.InfraStatusProvisioning),
441 expectedStatusMessage: "Ready condition not found",
442 isReady: false,
443 sqlMock: func() *sqlmock.ExpectedQuery {
444 return mock.ExpectQuery(sqlquery.GetBannerInfraStatusByBannerEdgeID).
445 WithArgs(testBanner).
446 WillReturnRows(mock.NewRows([]string{"infra_status", "infra_status_details", "infra_status_updated_at"}).
447 AddRow(string(edgedb.InfraStatusProvisioning), "Ready condition not found", currTime))
448 },
449 },
450 {
451 name: "No/Empty infra status",
452 expectedStatusReason: string(edgedb.InfraStatusProvisioning),
453 expectedStatusMessage: ProvisioningStatusMessage,
454 isReady: false,
455 sqlMock: func() *sqlmock.ExpectedQuery {
456 return mock.ExpectQuery(sqlquery.GetBannerInfraStatusByBannerEdgeID).
457 WithArgs(testBanner).
458 WillReturnRows(mock.NewRows([]string{"infra_status", "infra_status_details", "infra_status_updated_at"}).
459 AddRow("", "", ""))
460 },
461 },
462 }
463
464 bannerService := NewBannerService(nil, nil, nil, "", db, defaultCfg)
465 for _, tc := range testCases {
466 tc := tc
467 t.Run(tc.name, func(t *testing.T) {
468 tc.sqlMock()
469 status, err := bannerService.GetBannerInfraStatus(context.Background(), testBanner)
470 assert.NoError(t, err)
471 assert.NotEmpty(t, status)
472 assert.Equal(t, tc.expectedStatusReason, status.Reason)
473 assert.Equal(t, tc.expectedStatusMessage, status.Message)
474 assert.Equal(t, tc.isReady, status.Ready)
475 assert.NotEmpty(t, status.LastUpdatedAt)
476
477 _, err = time.Parse(time.RFC3339, status.LastUpdatedAt)
478 assert.NoError(t, err)
479 })
480 }
481
482 err = mock.ExpectationsWereMet()
483 assert.NoError(t, err)
484 }
485
View as plain text