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 }