github.com/grafana/synthetic-monitoring-agent@v0.64.2/cmd/test-api/internal/db/db_test.go (about)

     1  package db
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  	"time"
     7  
     8  	"github.com/grafana/synthetic-monitoring-agent/pkg/pb/synthetic_monitoring"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  func TestNew(t *testing.T) {
    13  	db := New()
    14  	require.NotNil(t, db)
    15  }
    16  
    17  func TestTenantOps(t *testing.T) {
    18  	db := New()
    19  	require.NotNil(t, db)
    20  
    21  	ctx, cancel := testContext(t)
    22  	t.Cleanup(cancel)
    23  
    24  	var tenant synthetic_monitoring.Tenant
    25  
    26  	require.NoError(t, db.AddTenant(ctx, &tenant))
    27  	require.NotZero(t, tenant.Id)
    28  	require.NotZero(t, tenant.Created)
    29  	require.NotZero(t, tenant.Modified)
    30  
    31  	tenants, err := db.ListTenants(ctx)
    32  	require.NoError(t, err)
    33  	require.Len(t, tenants, 1)
    34  	require.Equal(t, tenant, tenants[0])
    35  
    36  	newTenant, err := db.UpdateTenant(ctx, &tenant)
    37  	require.NoError(t, err)
    38  	require.Greater(t, newTenant.Modified, newTenant.Created)
    39  
    40  	tenants, err = db.ListTenants(ctx)
    41  	require.NoError(t, err)
    42  	require.Len(t, tenants, 1)
    43  	require.Equal(t, *newTenant, tenants[0])
    44  
    45  	require.NoError(t, db.DeleteTenant(ctx, tenant.Id))
    46  
    47  	tenants, err = db.ListTenants(ctx)
    48  	require.NoError(t, err)
    49  	require.Len(t, tenants, 0)
    50  }
    51  
    52  func TestProbeOps(t *testing.T) {
    53  	db := New()
    54  	require.NotNil(t, db)
    55  
    56  	ctx, cancel := testContext(t)
    57  	t.Cleanup(cancel)
    58  
    59  	var tenant synthetic_monitoring.Tenant
    60  
    61  	require.NoError(t, db.AddTenant(ctx, &tenant))
    62  
    63  	probe := synthetic_monitoring.Probe{
    64  		Name:     "test",
    65  		TenantId: tenant.Id,
    66  	}
    67  	token := []byte("123")
    68  
    69  	require.NoError(t, db.AddProbe(ctx, &probe, token))
    70  	require.NotZero(t, probe.Id)
    71  	require.NotZero(t, probe.Created)
    72  	require.NotZero(t, probe.Modified)
    73  
    74  	aProbe, err := db.FindProbeByID(ctx, probe.Id)
    75  	require.NoError(t, err)
    76  	require.NotNil(t, aProbe)
    77  	require.Equal(t, probe, *aProbe)
    78  
    79  	aId, err := db.FindProbeIDByToken(ctx, token)
    80  	require.NoError(t, err)
    81  	require.Equal(t, probe.Id, aId)
    82  
    83  	probes, err := db.ListProbes(ctx)
    84  	require.NoError(t, err)
    85  	require.Len(t, probes, 1)
    86  	require.Equal(t, probe, probes[0])
    87  
    88  	probe.Public = true
    89  	newProbe, err := db.UpdateProbe(ctx, &probe)
    90  	require.NoError(t, err)
    91  	require.Equal(t, probe.Created, newProbe.Created)
    92  	require.Greater(t, newProbe.Modified, newProbe.Created)
    93  	require.Greater(t, newProbe.Modified, probe.Modified)
    94  	probe.Modified = newProbe.Modified // Modified should be the only field that is different
    95  	require.Equal(t, probe, *newProbe)
    96  
    97  	probes, err = db.ListProbes(ctx)
    98  	require.NoError(t, err)
    99  	require.Len(t, probes, 1)
   100  	require.Equal(t, probe, probes[0])
   101  
   102  	require.NoError(t, db.DeleteProbe(ctx, probe.Id))
   103  
   104  	probes, err = db.ListProbes(ctx)
   105  	require.NoError(t, err)
   106  	require.Len(t, probes, 0)
   107  }
   108  
   109  func TestCheckOps(t *testing.T) {
   110  	db := New()
   111  	require.NotNil(t, db)
   112  
   113  	ctx, cancel := testContext(t)
   114  	t.Cleanup(cancel)
   115  
   116  	var tenant synthetic_monitoring.Tenant
   117  
   118  	require.NoError(t, db.AddTenant(ctx, &tenant))
   119  
   120  	probe := synthetic_monitoring.Probe{
   121  		Name:     "test",
   122  		TenantId: tenant.Id,
   123  	}
   124  	token := []byte("123")
   125  
   126  	require.NoError(t, db.AddProbe(ctx, &probe, token))
   127  
   128  	check := synthetic_monitoring.Check{
   129  		TenantId:  tenant.Id,
   130  		Probes:    []int64{probe.Id},
   131  		Target:    "127.0.0.1",
   132  		Job:       "test",
   133  		Frequency: 2000,
   134  		Timeout:   2000,
   135  		Settings: synthetic_monitoring.CheckSettings{
   136  			Ping: &synthetic_monitoring.PingSettings{},
   137  		},
   138  	}
   139  
   140  	require.NoError(t, db.AddCheck(ctx, &check))
   141  	require.NotZero(t, check.Id)
   142  	require.NotZero(t, check.Created)
   143  	require.NotZero(t, check.Modified)
   144  
   145  	aCheck, err := db.GetCheck(ctx, check.Id)
   146  	require.NoError(t, err)
   147  	require.NotNil(t, aCheck)
   148  	require.Equal(t, check, *aCheck)
   149  
   150  	checks, err := db.ListChecks(ctx)
   151  	require.NoError(t, err)
   152  	require.Len(t, checks, 1)
   153  	require.Equal(t, check, checks[0])
   154  
   155  	check.Frequency = 4000
   156  	oldCheck, err := db.UpdateCheck(ctx, &check)
   157  	require.NoError(t, err)
   158  	require.Equal(t, check.Created, oldCheck.Created)
   159  	require.Equal(t, oldCheck.Modified, oldCheck.Created)
   160  	require.Greater(t, check.Modified, oldCheck.Modified)
   161  	oldCheck.Frequency = check.Frequency
   162  	oldCheck.Modified = check.Modified
   163  	require.Equal(t, check, *oldCheck)
   164  
   165  	checks, err = db.ListChecks(ctx)
   166  	require.NoError(t, err)
   167  	require.Len(t, checks, 1)
   168  	require.Equal(t, check, checks[0])
   169  
   170  	require.NoError(t, db.DeleteCheck(ctx, check.Id))
   171  
   172  	checks, err = db.ListChecks(ctx)
   173  	require.NoError(t, err)
   174  	require.Len(t, checks, 0)
   175  }
   176  
   177  func testContext(t *testing.T) (context.Context, func()) {
   178  	if deadline, ok := t.Deadline(); ok {
   179  		return context.WithDeadline(context.Background(), deadline)
   180  	}
   181  
   182  	return context.WithTimeout(context.Background(), 10*time.Second)
   183  }