github.com/nais/knorten@v0.0.0-20240104110906-55926958e361/pkg/user/compute_test.go (about) 1 package user 2 3 import ( 4 "context" 5 "database/sql" 6 "errors" 7 "testing" 8 9 "github.com/google/go-cmp/cmp" 10 "github.com/nais/knorten/pkg/database" 11 "github.com/nais/knorten/pkg/database/gensql" 12 "github.com/sirupsen/logrus" 13 ) 14 15 func TestCompute(t *testing.T) { 16 ctx := context.Background() 17 computeInstance := gensql.ComputeInstance{ 18 Owner: "dummy@nav.no", 19 Name: "compute-dummy", 20 } 21 t.Cleanup(func() { 22 instance, err := repo.ComputeInstanceGet(ctx, computeInstance.Owner) 23 if err != nil && !errors.Is(err, sql.ErrNoRows) { 24 t.Error(err) 25 } 26 if err := repo.ComputeInstanceDelete(ctx, instance.Owner); err != nil { 27 t.Error(err) 28 } 29 }) 30 type args struct { 31 instance gensql.ComputeInstance 32 } 33 type want struct { 34 instance gensql.ComputeInstance 35 err error 36 } 37 38 operation := func(ctx context.Context, eventType database.EventType, instance gensql.ComputeInstance, client *Client) bool { 39 switch eventType { 40 case database.EventTypeCreateCompute: 41 return client.CreateComputeInstance(ctx, instance, logrus.NewEntry(logrus.StandardLogger())) 42 case database.EventTypeDeleteCompute: 43 return client.DeleteComputeInstance(ctx, instance.Owner, logrus.NewEntry(logrus.StandardLogger())) 44 } 45 46 return true 47 } 48 49 teamTests := []struct { 50 name string 51 eventType database.EventType 52 args args 53 want want 54 }{ 55 { 56 name: "Create compute instance", 57 eventType: database.EventTypeCreateCompute, 58 args: args{ 59 instance: computeInstance, 60 }, 61 want: want{ 62 instance: computeInstance, 63 }, 64 }, 65 { 66 name: "Delete compute instance", 67 eventType: database.EventTypeDeleteCompute, 68 args: args{ 69 instance: computeInstance, 70 }, 71 want: want{ 72 instance: gensql.ComputeInstance{}, 73 err: sql.ErrNoRows, 74 }, 75 }, 76 } 77 78 for _, tt := range teamTests { 79 t.Run(tt.name, func(t *testing.T) { 80 client := NewClient(repo, "", "", "", true) 81 82 if retry := operation(context.Background(), tt.eventType, tt.args.instance, client); retry { 83 t.Errorf("%v failed, got retry return for instance %v", tt.eventType, tt.args.instance.Name) 84 } 85 86 instance, err := repo.ComputeInstanceGet(context.Background(), tt.args.instance.Owner) 87 if !errors.Is(err, tt.want.err) { 88 t.Error(err) 89 } 90 91 if diff := cmp.Diff(instance, tt.want.instance); diff != "" { 92 t.Errorf("mismatch (-want +got):\n%s", diff) 93 } 94 }) 95 } 96 }