Merged in feature/docresult (pull request #105)

Document Result Endpoint

* testing

* cleantesting

* progress

* query

* lint

* readme

* dockerclient

* api

* passtest

* tests

* test
This commit is contained in:
Michael McGuinness
2025-03-17 18:14:15 +00:00
parent f7c41c4ef3
commit 555b6d420b
105 changed files with 3276 additions and 2484 deletions
+58 -58
View File
@@ -2,16 +2,14 @@ package endtoend_test
import (
"context"
"fmt"
"strings"
"testing"
"time"
"queryorchestration/internal/serviceconfig"
"queryorchestration/internal/serviceconfig/objectstore"
"queryorchestration/internal/test"
queryservicetest "queryorchestration/internal/test/queryService"
queryservice "queryorchestration/pkg/queryService"
queryapitest "queryorchestration/internal/test/queryAPI"
queryapi "queryorchestration/pkg/queryAPI"
"github.com/oapi-codegen/runtime/types"
"github.com/stretchr/testify/assert"
@@ -32,23 +30,23 @@ func TestProcess(t *testing.T) {
net, clean := test.CreateFullNetwork(t, ctx, cfg)
defer clean()
client := queryservicetest.CreateClientWithSync(t, ctx, net.Client)
client := queryapitest.CreateClientWithSync(t, ctx, net.Client)
contextQueryRes, err := net.Client.CreateQueryWithResponse(ctx, queryservice.QueryCreate{
Type: queryservice.CONTEXTFULL,
contextQueryRes, err := net.Client.CreateQueryWithResponse(ctx, queryapi.QueryCreate{
Type: queryapi.CONTEXTFULL,
})
require.NoError(t, err)
jcfg := `{"path":"keyone"}`
jsonQueryRes, err := net.Client.CreateQueryWithResponse(ctx, queryservice.QueryCreate{
Type: queryservice.JSONEXTRACTOR,
jsonQueryRes, err := net.Client.CreateQueryWithResponse(ctx, queryapi.QueryCreate{
Type: queryapi.JSONEXTRACTOR,
Config: &jcfg,
RequiredQueries: &[]types.UUID{contextQueryRes.JSON201.Id},
})
require.NoError(t, err)
newActiveVersion := int32(1)
_, err = net.Client.SetCollectorByClientIdWithResponse(ctx, client.Id, queryservice.CollectorSet{
_, err = net.Client.SetCollectorByClientIdWithResponse(ctx, client.Id, queryapi.CollectorSet{
ActiveVersion: &newActiveVersion,
Fields: &[]queryservice.CollectorField{
Fields: &[]queryapi.CollectorField{
{
Name: "JSON_QUERY",
QueryId: jsonQueryRes.JSON201.Id,
@@ -57,71 +55,73 @@ func TestProcess(t *testing.T) {
})
require.NoError(t, err)
WaitForClientStatus(t, ctx, net.Client, client.Id, queryservice.INSYNC)
queryapitest.WaitForClientStatus(t, ctx, net.Client, client.Id, queryapi.INSYNC)
body := strings.NewReader(pdfHelloWorld)
location := test.PutObject(t, ctx, cfg, client.Uid, net.Dependencies.BucketName, "object_name", body)
test.PutObject(t, ctx, cfg, client.Uid, net.Dependencies.BucketName, "object_name", body)
WaitForClientStatus(t, ctx, net.Client, client.Id, queryservice.NOTSYNCED)
WaitForClientStatus(t, ctx, net.Client, client.Id, queryservice.INSYNC)
queryapitest.WaitForClientStatus(t, ctx, net.Client, client.Id, queryapi.NOTSYNCED)
queryapitest.WaitForClientStatus(t, ctx, net.Client, client.Id, queryapi.INSYNC)
docs, err := net.Client.ListDocumentsByClientIdWithResponse(ctx, client.Id)
assert.NoError(t, err)
require.NoError(t, err)
assert.Len(t, *docs.JSON200, 1)
doc := (*docs.JSON200)[0]
assert.Equal(t, net.Dependencies.BucketName, doc.Bucket)
assert.Equal(t, location, doc.Key)
testRes, err := net.Client.TestQueryWithResponse(ctx, jsonQueryRes.JSON201.Id, queryservice.QueryTestRequest{
expectedDoc := queryapi.Document{
Id: doc.Id,
Hash: doc.Hash,
ClientId: client.Id,
Fields: map[string]interface{}{
"JSON_QUERY": "valueone",
},
}
docRes, err := net.Client.GetDocumentWithResponse(ctx, doc.Id)
require.NoError(t, err)
require.NotNil(t, docRes)
require.NotNil(t, docRes.JSON200)
fullDoc := *docRes.JSON200
assert.EqualExportedValues(t, expectedDoc, fullDoc)
jcfg = `{"path":"keytwo"}`
av := int32(2)
_, err = net.Client.UpdateQueryWithResponse(ctx, jsonQueryRes.JSON201.Id, queryapi.QueryUpdate{
ActiveVersion: &av,
Config: &jcfg,
})
require.NoError(t, err)
expectedDoc.Fields = map[string]interface{}{
"JSON_QUERY": "valuetwo",
}
queryapitest.WaitForClientStatus(t, ctx, net.Client, client.Id, queryapi.NOTSYNCED)
queryapitest.WaitForClientStatus(t, ctx, net.Client, client.Id, queryapi.INSYNC)
docRes, err = net.Client.GetDocumentWithResponse(ctx, doc.Id)
require.NoError(t, err)
require.NotNil(t, docRes)
require.NotNil(t, docRes.JSON200)
assert.EqualExportedValues(t, expectedDoc, *docRes.JSON200)
testRes, err := net.Client.TestQueryWithResponse(ctx, jsonQueryRes.JSON201.Id, queryapi.QueryTestRequest{
QueryVersion: 1,
DocumentId: doc.Id,
})
assert.NoError(t, err)
require.NoError(t, err)
assert.Equal(t, "valueone", testRes.JSON200.Value)
aV := int32(2)
jcfg = `{"path":"keytwo"}`
res, err := net.Client.UpdateQueryWithResponse(ctx, jsonQueryRes.JSON201.Id, queryservice.QueryUpdate{
ActiveVersion: &aV,
Config: &jcfg,
})
assert.NoError(t, err)
assert.NotNil(t, res)
WaitForClientStatus(t, ctx, net.Client, client.Id, queryservice.NOTSYNCED)
WaitForClientStatus(t, ctx, net.Client, client.Id, queryservice.INSYNC)
testRes, err = net.Client.TestQueryWithResponse(ctx, jsonQueryRes.JSON201.Id, queryservice.QueryTestRequest{
testRes, err = net.Client.TestQueryWithResponse(ctx, jsonQueryRes.JSON201.Id, queryapi.QueryTestRequest{
QueryVersion: 2,
DocumentId: doc.Id,
})
assert.NoError(t, err)
assert.Equal(t, "valuetwo", testRes.JSON200.Value)
}
func WaitForClientStatus(t testing.TB, ctx context.Context, service *queryservice.ClientWithResponses, id string, status queryservice.ClientStatus) {
t.Helper()
timeout := time.After(30 * time.Second)
ticker := time.NewTicker(500 * 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 {
assert.NoError(t, err)
}
if jRes.JSON200.Status == status {
assert.Equal(t, status, jRes.JSON200.Status)
return
}
}
}
docRes, err = net.Client.GetDocumentWithResponse(ctx, doc.Id)
require.NoError(t, err)
require.NotNil(t, docRes)
require.NotNil(t, docRes.JSON200)
assert.EqualExportedValues(t, expectedDoc, *docRes.JSON200)
}
const pdfHelloWorld = `%PDF-1.4