Files
query-orchestration/internal/test/queryAPI/service.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

99 lines
2.7 KiB
Go

package queryapitest
import (
"context"
"fmt"
"log/slog"
"net/http"
"testing"
"time"
queryapi "queryorchestration/pkg/queryAPI"
"github.com/google/uuid"
"github.com/oapi-codegen/runtime/types"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func CreateClientWithSync(t testing.TB, client queryapi.ClientWithResponsesInterface) queryapi.ClientID {
t.Helper()
clientCreateRes, err := client.CreateClientWithResponse(t.Context(), queryapi.ClientCreate{
Name: "example_name",
Id: "ID",
})
require.NoError(t, err)
canSync := true
_, err = client.UpdateClientWithResponse(t.Context(), clientCreateRes.JSON201.Id, queryapi.ClientUpdate{
CanSync: &canSync,
})
require.NoError(t, err)
return clientCreateRes.JSON201.Id
}
func SetQueryForClient(t testing.TB, client queryapi.ClientWithResponsesInterface, clientId queryapi.ClientID, queryId uuid.UUID) {
t.Helper()
newActiveVersion := int32(1)
_, err := client.SetCollectorByClientIdWithResponse(t.Context(), clientId, queryapi.CollectorSet{
ActiveVersion: &newActiveVersion,
Fields: &[]queryapi.CollectorField{
{
Name: "JSON_QUERY",
QueryId: queryId,
},
},
})
require.NoError(t, err)
}
func WaitForClientStatus(t testing.TB, ctx context.Context, service queryapi.ClientWithResponsesInterface, id string, status queryapi.ClientStatus) {
t.Helper()
timeout := time.After(60 * time.Second)
ticker := time.NewTicker(100 * time.Millisecond)
defer ticker.Stop()
for {
select {
case <-timeout:
require.NoError(t, fmt.Errorf("Timeout waiting for client status to become %s", status))
case <-ticker.C:
jRes, err := service.GetStatusByClientIdWithResponse(ctx, id)
if err != nil {
slog.Error("error getting status", "error", err.Error())
require.NoError(t, err)
}
if jRes.JSON200.Status == status {
assert.Equal(t, status, jRes.JSON200.Status)
slog.Info("returned client status", "status", jRes.JSON200.Status)
return
}
slog.Error("unexpected status", "status", jRes.JSON200.Status)
}
}
}
func CreateDependentQueries(t testing.TB, client *queryapi.ClientWithResponses) (uuid.UUID, uuid.UUID) {
contextQueryRes, err := client.CreateQueryWithResponse(t.Context(), queryapi.QueryCreate{
Type: queryapi.CONTEXTFULL,
})
require.NoError(t, err)
require.Equal(t, http.StatusCreated, contextQueryRes.StatusCode())
jcfg := `{"path":"keyone"}`
jsonQueryRes, err := client.CreateQueryWithResponse(t.Context(), queryapi.QueryCreate{
Type: queryapi.JSONEXTRACTOR,
Config: &jcfg,
RequiredQueries: &[]types.UUID{contextQueryRes.JSON201.Id},
})
require.NoError(t, err)
require.Equal(t, http.StatusCreated, jsonQueryRes.StatusCode())
return contextQueryRes.JSON201.Id, jsonQueryRes.JSON201.Id
}