fleet/server/datastore/mysql/delete_test.go
2023-07-07 09:05:51 -04:00

93 lines
2.5 KiB
Go

package mysql
import (
"context"
"testing"
"time"
"github.com/fleetdm/fleet/v4/server/fleet"
"github.com/fleetdm/fleet/v4/server/ptr"
"github.com/fleetdm/fleet/v4/server/test"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestDelete(t *testing.T) {
ds := CreateMySQLDS(t)
cases := []struct {
name string
fn func(t *testing.T, ds *Datastore)
}{
{"Entity", testDeleteEntity},
{"EntityByName", testDeleteEntityByName},
{"Entities", testDeleteEntities},
}
for _, c := range cases {
t.Run(c.name, func(t *testing.T) {
c.fn(t, ds)
})
}
}
func testDeleteEntity(t *testing.T, ds *Datastore) {
defer TruncateTables(t, ds)
host, err := ds.NewHost(context.Background(), &fleet.Host{
DetailUpdatedAt: time.Now(),
LabelUpdatedAt: time.Now(),
PolicyUpdatedAt: time.Now(),
SeenTime: time.Now(),
NodeKey: ptr.String(t.Name() + "1"),
UUID: t.Name() + "1",
OsqueryHostID: ptr.String(t.Name()),
Hostname: t.Name() + "foo.local",
PrimaryIP: "192.168.1.1",
PrimaryMac: "30-65-EC-6F-C4-58",
})
require.NoError(t, err)
require.NotNil(t, host)
require.NoError(t, ds.deleteEntity(context.Background(), hostsTable, host.ID))
host, err = ds.Host(context.Background(), host.ID)
require.Error(t, err)
assert.Nil(t, host)
}
func testDeleteEntityByName(t *testing.T, ds *Datastore) {
defer TruncateTables(t, ds)
query1 := test.NewQuery(t, ds, nil, t.Name()+"time", "select * from time", 0, true)
require.NoError(t, ds.deleteEntityByName(context.Background(), queriesTable, query1.Name))
gotQ, err := ds.Query(context.Background(), query1.ID)
require.Error(t, err)
assert.Nil(t, gotQ)
}
func testDeleteEntities(t *testing.T, ds *Datastore) {
defer TruncateTables(t, ds)
query1 := test.NewQuery(t, ds, nil, t.Name()+"time1", "select * from time", 0, true)
query2 := test.NewQuery(t, ds, nil, t.Name()+"time2", "select * from time", 0, true)
query3 := test.NewQuery(t, ds, nil, t.Name()+"time3", "select * from time", 0, true)
count, err := ds.deleteEntities(context.Background(), queriesTable, []uint{query1.ID, query2.ID})
require.NoError(t, err)
assert.Equal(t, uint(2), count)
gotQ, err := ds.Query(context.Background(), query1.ID)
require.Error(t, err)
assert.Nil(t, gotQ)
gotQ, err = ds.Query(context.Background(), query2.ID)
require.Error(t, err)
assert.Nil(t, gotQ)
gotQ, err = ds.Query(context.Background(), query3.ID)
require.NoError(t, err)
assert.Equal(t, query3.ID, gotQ.ID)
}