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  }