Skip to content

Commit 7c0d915

Browse files
chore: sel tests
1 parent 8f093c7 commit 7c0d915

File tree

3 files changed

+983
-0
lines changed

3 files changed

+983
-0
lines changed

apps/workspace-engine/pkg/db/deployments_test.go

Lines changed: 293 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,3 +365,296 @@ func TestDBDeployments_NonexistentSystemThrowsError(t *testing.T) {
365365
// Keep workspaceID to avoid "declared but not used" error
366366
_ = workspaceID
367367
}
368+
369+
func TestDBDeployments_WithJsonResourceSelector(t *testing.T) {
370+
workspaceID, conn := setupTestWithWorkspace(t)
371+
372+
tx, err := conn.Begin(t.Context())
373+
if err != nil {
374+
t.Fatalf("failed to begin tx: %v", err)
375+
}
376+
defer tx.Rollback(t.Context())
377+
378+
// Create a system first
379+
systemID := uuid.New().String()
380+
systemDescription := fmt.Sprintf("desc-%s", systemID[:8])
381+
sys := &oapi.System{
382+
Id: systemID,
383+
WorkspaceId: workspaceID,
384+
Name: fmt.Sprintf("test-system-%s", systemID[:8]),
385+
Description: &systemDescription,
386+
}
387+
err = writeSystem(t.Context(), sys, tx)
388+
if err != nil {
389+
t.Fatalf("failed to create system: %v", err)
390+
}
391+
392+
// Create deployment with JSON resource selector
393+
deploymentID := uuid.New().String()
394+
description := "test deployment with JSON selector"
395+
396+
// Create a JSON selector
397+
resourceSelector := &oapi.Selector{}
398+
err = resourceSelector.FromJsonSelector(oapi.JsonSelector{
399+
Json: map[string]interface{}{
400+
"type": "name",
401+
"operator": "equals",
402+
"value": "test-resource",
403+
},
404+
})
405+
if err != nil {
406+
t.Fatalf("failed to create JSON selector: %v", err)
407+
}
408+
409+
deployment := &oapi.Deployment{
410+
Id: deploymentID,
411+
Name: fmt.Sprintf("test-deployment-%s", deploymentID[:8]),
412+
Slug: fmt.Sprintf("test-deployment-%s", deploymentID[:8]),
413+
SystemId: systemID,
414+
Description: &description,
415+
JobAgentConfig: map[string]interface{}{},
416+
ResourceSelector: resourceSelector,
417+
}
418+
419+
err = writeDeployment(t.Context(), deployment, tx)
420+
if err != nil {
421+
t.Fatalf("expected no errors, got %v", err)
422+
}
423+
424+
err = tx.Commit(t.Context())
425+
if err != nil {
426+
t.Fatalf("failed to commit: %v", err)
427+
}
428+
429+
// Read back and validate
430+
actualDeployments, err := getDeployments(t.Context(), workspaceID)
431+
if err != nil {
432+
t.Fatalf("expected no errors, got %v", err)
433+
}
434+
435+
if len(actualDeployments) != 1 {
436+
t.Fatalf("expected 1 deployment, got %d", len(actualDeployments))
437+
}
438+
439+
actualDeployment := actualDeployments[0]
440+
if actualDeployment.ResourceSelector == nil {
441+
t.Fatalf("expected resource selector to be non-nil")
442+
}
443+
444+
// Validate the selector content
445+
jsonSelector, err := actualDeployment.ResourceSelector.AsJsonSelector()
446+
if err != nil {
447+
t.Fatalf("expected JSON selector, got error: %v", err)
448+
}
449+
450+
expectedJson := map[string]interface{}{
451+
"type": "name",
452+
"operator": "equals",
453+
"value": "test-resource",
454+
}
455+
456+
if jsonSelector.Json["type"] != expectedJson["type"] {
457+
t.Fatalf("expected type %v, got %v", expectedJson["type"], jsonSelector.Json["type"])
458+
}
459+
if jsonSelector.Json["operator"] != expectedJson["operator"] {
460+
t.Fatalf("expected operator %v, got %v", expectedJson["operator"], jsonSelector.Json["operator"])
461+
}
462+
if jsonSelector.Json["value"] != expectedJson["value"] {
463+
t.Fatalf("expected value %v, got %v", expectedJson["value"], jsonSelector.Json["value"])
464+
}
465+
}
466+
467+
func TestDBDeployments_WithCelResourceSelector(t *testing.T) {
468+
workspaceID, conn := setupTestWithWorkspace(t)
469+
470+
tx, err := conn.Begin(t.Context())
471+
if err != nil {
472+
t.Fatalf("failed to begin tx: %v", err)
473+
}
474+
defer tx.Rollback(t.Context())
475+
476+
// Create a system first
477+
systemID := uuid.New().String()
478+
systemDescription := fmt.Sprintf("desc-%s", systemID[:8])
479+
sys := &oapi.System{
480+
Id: systemID,
481+
WorkspaceId: workspaceID,
482+
Name: fmt.Sprintf("test-system-%s", systemID[:8]),
483+
Description: &systemDescription,
484+
}
485+
err = writeSystem(t.Context(), sys, tx)
486+
if err != nil {
487+
t.Fatalf("failed to create system: %v", err)
488+
}
489+
490+
// Create deployment with CEL resource selector
491+
deploymentID := uuid.New().String()
492+
description := "test deployment with CEL selector"
493+
494+
// Create a CEL selector
495+
resourceSelector := &oapi.Selector{}
496+
celExpression := "resource.metadata.environment == 'production'"
497+
err = resourceSelector.FromCelSelector(oapi.CelSelector{
498+
Cel: celExpression,
499+
})
500+
if err != nil {
501+
t.Fatalf("failed to create CEL selector: %v", err)
502+
}
503+
504+
deployment := &oapi.Deployment{
505+
Id: deploymentID,
506+
Name: fmt.Sprintf("test-deployment-%s", deploymentID[:8]),
507+
Slug: fmt.Sprintf("test-deployment-%s", deploymentID[:8]),
508+
SystemId: systemID,
509+
Description: &description,
510+
JobAgentConfig: map[string]interface{}{},
511+
ResourceSelector: resourceSelector,
512+
}
513+
514+
err = writeDeployment(t.Context(), deployment, tx)
515+
if err != nil {
516+
t.Fatalf("expected no errors, got %v", err)
517+
}
518+
519+
err = tx.Commit(t.Context())
520+
if err != nil {
521+
t.Fatalf("failed to commit: %v", err)
522+
}
523+
524+
// Read back and validate
525+
actualDeployments, err := getDeployments(t.Context(), workspaceID)
526+
if err != nil {
527+
t.Fatalf("expected no errors, got %v", err)
528+
}
529+
530+
if len(actualDeployments) != 1 {
531+
t.Fatalf("expected 1 deployment, got %d", len(actualDeployments))
532+
}
533+
534+
actualDeployment := actualDeployments[0]
535+
if actualDeployment.ResourceSelector == nil {
536+
t.Fatalf("expected resource selector to be non-nil")
537+
}
538+
539+
// Validate the selector content
540+
celSelector, err := actualDeployment.ResourceSelector.AsCelSelector()
541+
if err != nil {
542+
t.Fatalf("expected CEL selector, got error: %v", err)
543+
}
544+
545+
if celSelector.Cel != celExpression {
546+
t.Fatalf("expected CEL expression %s, got %s", celExpression, celSelector.Cel)
547+
}
548+
}
549+
550+
func TestDBDeployments_UpdateResourceSelector(t *testing.T) {
551+
workspaceID, conn := setupTestWithWorkspace(t)
552+
553+
tx, err := conn.Begin(t.Context())
554+
if err != nil {
555+
t.Fatalf("failed to begin tx: %v", err)
556+
}
557+
defer tx.Rollback(t.Context())
558+
559+
// Create a system first
560+
systemID := uuid.New().String()
561+
systemDescription := fmt.Sprintf("desc-%s", systemID[:8])
562+
sys := &oapi.System{
563+
Id: systemID,
564+
WorkspaceId: workspaceID,
565+
Name: fmt.Sprintf("test-system-%s", systemID[:8]),
566+
Description: &systemDescription,
567+
}
568+
err = writeSystem(t.Context(), sys, tx)
569+
if err != nil {
570+
t.Fatalf("failed to create system: %v", err)
571+
}
572+
573+
// Create deployment with JSON selector
574+
deploymentID := uuid.New().String()
575+
description := "test deployment"
576+
577+
initialSelector := &oapi.Selector{}
578+
err = initialSelector.FromJsonSelector(oapi.JsonSelector{
579+
Json: map[string]interface{}{
580+
"type": "name",
581+
"value": "initial",
582+
},
583+
})
584+
if err != nil {
585+
t.Fatalf("failed to create initial JSON selector: %v", err)
586+
}
587+
588+
deployment := &oapi.Deployment{
589+
Id: deploymentID,
590+
Name: fmt.Sprintf("test-deployment-%s", deploymentID[:8]),
591+
Slug: fmt.Sprintf("test-deployment-%s", deploymentID[:8]),
592+
SystemId: systemID,
593+
Description: &description,
594+
JobAgentConfig: map[string]interface{}{},
595+
ResourceSelector: initialSelector,
596+
}
597+
598+
err = writeDeployment(t.Context(), deployment, tx)
599+
if err != nil {
600+
t.Fatalf("expected no errors, got %v", err)
601+
}
602+
603+
err = tx.Commit(t.Context())
604+
if err != nil {
605+
t.Fatalf("failed to commit: %v", err)
606+
}
607+
608+
// Update with CEL selector
609+
tx, err = conn.Begin(t.Context())
610+
if err != nil {
611+
t.Fatalf("failed to begin tx: %v", err)
612+
}
613+
defer tx.Rollback(t.Context())
614+
615+
updatedSelector := &oapi.Selector{}
616+
celExpression := "resource.kind == 'pod'"
617+
err = updatedSelector.FromCelSelector(oapi.CelSelector{
618+
Cel: celExpression,
619+
})
620+
if err != nil {
621+
t.Fatalf("failed to create CEL selector: %v", err)
622+
}
623+
624+
deployment.ResourceSelector = updatedSelector
625+
626+
err = writeDeployment(t.Context(), deployment, tx)
627+
if err != nil {
628+
t.Fatalf("expected no errors, got %v", err)
629+
}
630+
631+
err = tx.Commit(t.Context())
632+
if err != nil {
633+
t.Fatalf("failed to commit: %v", err)
634+
}
635+
636+
// Verify update
637+
actualDeployments, err := getDeployments(t.Context(), workspaceID)
638+
if err != nil {
639+
t.Fatalf("expected no errors, got %v", err)
640+
}
641+
642+
if len(actualDeployments) != 1 {
643+
t.Fatalf("expected 1 deployment, got %d", len(actualDeployments))
644+
}
645+
646+
actualDeployment := actualDeployments[0]
647+
if actualDeployment.ResourceSelector == nil {
648+
t.Fatalf("expected resource selector to be non-nil")
649+
}
650+
651+
// Validate it's now a CEL selector
652+
celSelector, err := actualDeployment.ResourceSelector.AsCelSelector()
653+
if err != nil {
654+
t.Fatalf("expected CEL selector, got error: %v", err)
655+
}
656+
657+
if celSelector.Cel != celExpression {
658+
t.Fatalf("expected CEL expression %s, got %s", celExpression, celSelector.Cel)
659+
}
660+
}

0 commit comments

Comments
 (0)