Files
query-orchestration/internal/database/repository/collector_test.go
T
Michael McGuinness ee776d2681 Merged in feature/mockserver (pull request #135)
Single Mock Server

* mockserver

* mockserver

* reqs

* mockserver

* slowrunner

* someoptimisedqueries

* passedfullsuite

* passedfullsuite
2025-05-06 01:59:52 +00:00

268 lines
7.0 KiB
Go

package repository_test
import (
"context"
"fmt"
"testing"
"queryorchestration/internal/database/repository"
"queryorchestration/internal/serviceconfig"
"queryorchestration/internal/test"
"github.com/google/uuid"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestCollector(t *testing.T) {
t.Parallel()
if testing.Short() {
t.SkipNow()
}
ctx := context.Background()
cfg := &serviceconfig.BaseConfig{}
net := test.GetNetwork(t)
test.CreateDB(t, cfg, net, &test.CreateDatabaseConfig{})
queries := cfg.GetDBQueries()
contextId, err := queries.CreateQuery(ctx, repository.QuerytypeContextFull)
require.NoError(t, err)
jsonId, err := queries.CreateQuery(ctx, repository.QuerytypeJsonExtractor)
require.NoError(t, err)
version, err := queries.AddLatestQueryVersion(ctx, jsonId)
require.NoError(t, err)
err = queries.AddActiveQueryVersion(ctx, &repository.AddActiveQueryVersionParams{
Queryid: jsonId,
Versionid: version,
})
require.NoError(t, err)
assert.Equal(t, int32(1), version)
err = queries.AddRequiredQuery(ctx, &repository.AddRequiredQueryParams{
Queryid: jsonId,
Requiredqueryid: contextId,
Addedversion: version,
})
require.NoError(t, err)
clientId := "EXAMPLE"
err = queries.CreateClient(ctx, &repository.CreateClientParams{
Name: "example_client",
Clientid: clientId,
})
require.NoError(t, err)
minCleanVersion := int64(2)
minTextVersion := int64(4)
coll, err := queries.GetCollectorByClientID(ctx, clientId)
require.NoError(t, err)
assert.EqualExportedValues(t, &repository.Fullactivecollector{
Clientid: clientId,
Mincleanversion: 0,
Mintextversion: 0,
Activeversion: 0,
Latestversion: 0,
}, coll)
version, err = queries.AddLatestCollectorVersion(ctx, clientId)
require.NoError(t, err)
assert.Equal(t, int32(1), version)
coll, err = queries.GetCollectorByClientID(ctx, clientId)
require.NoError(t, err)
assert.EqualExportedValues(t, &repository.Fullactivecollector{
Clientid: clientId,
Mincleanversion: 0,
Mintextversion: 0,
Activeversion: 0,
Latestversion: 1,
}, coll)
err = queries.SetActiveCollectorVersion(ctx, &repository.SetActiveCollectorVersionParams{
Versionid: 1,
Clientid: clientId,
})
require.NoError(t, err)
coll, err = queries.GetCollectorByClientID(ctx, clientId)
require.NoError(t, err)
assert.EqualExportedValues(t, &repository.Fullactivecollector{
Clientid: clientId,
Mincleanversion: 0,
Mintextversion: 0,
Activeversion: 1,
Latestversion: 1,
}, coll)
err = queries.AddCollectorQuery(ctx, &repository.AddCollectorQueryParams{
Clientid: clientId,
Queryid: jsonId,
Addedversion: 1,
Name: "example_key",
})
require.NoError(t, err)
err = queries.SetCollectorTextVersion(ctx, &repository.SetCollectorTextVersionParams{
Clientid: clientId,
Addedversion: 1,
Versionid: minTextVersion,
})
require.NoError(t, err)
coll, err = queries.GetCollectorByClientID(ctx, clientId)
require.NoError(t, err)
assert.EqualExportedValues(t, &repository.Fullactivecollector{
Clientid: clientId,
Mincleanversion: 0,
Mintextversion: minTextVersion,
Activeversion: 1,
Latestversion: 1,
Fields: []byte(fmt.Sprintf("{\"example_key\": \"%s\"}", jsonId.String())),
}, coll)
err = queries.SetCollectorCleanVersion(ctx, &repository.SetCollectorCleanVersionParams{
Clientid: clientId,
Addedversion: 1,
Versionid: minCleanVersion,
})
require.NoError(t, err)
coll, err = queries.GetCollectorByClientID(ctx, clientId)
require.NoError(t, err)
assert.EqualExportedValues(t, &repository.Fullactivecollector{
Clientid: clientId,
Mincleanversion: minCleanVersion,
Mintextversion: minTextVersion,
Activeversion: 1,
Latestversion: 1,
Fields: []byte(fmt.Sprintf("{\"example_key\": \"%s\"}", jsonId.String())),
}, coll)
qs, err := queries.ListCollectorQueries(ctx, clientId)
require.NoError(t, err)
assert.Len(t, qs, 2)
jsonV := int32(1)
contextV := int32(0)
assert.ElementsMatch(t, []*repository.ListCollectorQueriesRow{
{
Clientid: &clientId,
Queryid: &jsonId,
Queryversion: &jsonV,
Querytype: repository.NullQuerytype{
Querytype: repository.QuerytypeJsonExtractor,
Valid: true,
},
Requiredids: []uuid.UUID{contextId},
},
{
Clientid: &clientId,
Queryid: &contextId,
Queryversion: &contextV,
Querytype: repository.NullQuerytype{
Querytype: repository.QuerytypeContextFull,
Valid: true,
},
Requiredids: []uuid.UUID{},
},
}, qs)
version, err = queries.AddLatestCollectorVersion(ctx, clientId)
require.NoError(t, err)
assert.Equal(t, int32(2), version)
err = queries.RemoveCollectorQuery(ctx, &repository.RemoveCollectorQueryParams{
Clientid: clientId,
Queryid: jsonId,
Removedversion: &version,
})
require.NoError(t, err)
err = queries.SetActiveCollectorVersion(ctx, &repository.SetActiveCollectorVersionParams{
Versionid: 2,
Clientid: clientId,
})
require.NoError(t, err)
err = queries.SetCollectorTextVersion(ctx, &repository.SetCollectorTextVersionParams{
Clientid: clientId,
Versionid: minTextVersion + 1,
Addedversion: version,
})
require.NoError(t, err)
coll, err = queries.GetCollectorByClientID(ctx, clientId)
require.NoError(t, err)
assert.EqualExportedValues(t, &repository.Fullactivecollector{
Clientid: clientId,
Mincleanversion: minCleanVersion,
Mintextversion: minTextVersion + 1,
Activeversion: 2,
Latestversion: 2,
Fields: nil,
}, coll)
err = queries.SetCollectorCleanVersion(ctx, &repository.SetCollectorCleanVersionParams{
Clientid: clientId,
Versionid: minCleanVersion + 1,
Addedversion: version,
})
require.NoError(t, err)
coll, err = queries.GetCollectorByClientID(ctx, clientId)
require.NoError(t, err)
assert.EqualExportedValues(t, &repository.Fullactivecollector{
Clientid: clientId,
Mincleanversion: minCleanVersion + 1,
Mintextversion: minTextVersion + 1,
Activeversion: 2,
Latestversion: 2,
Fields: nil,
}, coll)
}
func BenchmarkListCollectorQueries(b *testing.B) {
ctx := context.Background()
cfg := &serviceconfig.BaseConfig{}
net := test.GetNetwork(b)
test.CreateDB(b, cfg, net, &test.CreateDatabaseConfig{})
queries := cfg.GetDBQueries()
clientId := "EXAMPLE"
err := queries.CreateClient(ctx, &repository.CreateClientParams{
Name: "example_client",
Clientid: clientId,
})
require.NoError(b, err)
b.ResetTimer()
for b.Loop() {
_, _ = queries.ListCollectorQueries(ctx, clientId)
}
}
func BenchmarkGetCollectorByClientID(b *testing.B) {
ctx := context.Background()
cfg := &serviceconfig.BaseConfig{}
net := test.GetNetwork(b)
test.CreateDB(b, cfg, net, &test.CreateDatabaseConfig{})
queries := cfg.GetDBQueries()
clientId := "EXAMPLE"
err := queries.CreateClient(ctx, &repository.CreateClientParams{
Name: "example_client",
Clientid: clientId,
})
require.NoError(b, err)
b.ResetTimer()
for b.Loop() {
_, _ = queries.GetCollectorByClientID(ctx, clientId)
}
}