2025-02-03 17:30:50 +00:00
|
|
|
package queryrunner_test
|
2025-01-10 19:17:20 +00:00
|
|
|
|
|
|
|
|
import (
|
2025-02-11 15:22:59 +00:00
|
|
|
"fmt"
|
2025-05-23 00:20:01 +00:00
|
|
|
"regexp"
|
2025-03-05 12:05:46 +00:00
|
|
|
"testing"
|
2025-05-23 00:20:01 +00:00
|
|
|
"time"
|
2025-03-05 12:05:46 +00:00
|
|
|
|
2025-02-11 15:22:59 +00:00
|
|
|
queryrunner "queryorchestration/api/queryRunner"
|
2025-01-10 19:17:20 +00:00
|
|
|
"queryorchestration/internal/database/repository"
|
2025-01-23 14:56:20 +00:00
|
|
|
"queryorchestration/internal/query"
|
2025-01-29 11:52:37 +00:00
|
|
|
"queryorchestration/internal/query/result"
|
2025-02-11 15:22:59 +00:00
|
|
|
resultset "queryorchestration/internal/query/result/set"
|
2025-02-14 10:56:24 +00:00
|
|
|
resultsync "queryorchestration/internal/query/result/sync"
|
2025-02-11 15:22:59 +00:00
|
|
|
"queryorchestration/internal/server/runner"
|
2025-05-23 00:20:01 +00:00
|
|
|
"queryorchestration/internal/serviceconfig/objectstore"
|
|
|
|
|
"queryorchestration/internal/serviceconfig/queue"
|
2025-02-11 15:22:59 +00:00
|
|
|
queryc "queryorchestration/internal/serviceconfig/queue/query"
|
2025-05-23 00:20:01 +00:00
|
|
|
"queryorchestration/internal/test"
|
2025-01-10 19:17:20 +00:00
|
|
|
|
2025-05-23 00:20:01 +00:00
|
|
|
"github.com/jackc/pgx/v5/pgtype"
|
2025-01-10 19:17:20 +00:00
|
|
|
"github.com/stretchr/testify/assert"
|
2025-03-04 15:51:03 +00:00
|
|
|
"github.com/stretchr/testify/require"
|
2025-01-10 19:17:20 +00:00
|
|
|
)
|
|
|
|
|
|
2025-02-11 15:22:59 +00:00
|
|
|
type QueryConfig struct {
|
2025-04-02 18:50:03 +00:00
|
|
|
runner.BaseConfig[queryrunner.Body]
|
2025-02-11 15:22:59 +00:00
|
|
|
queryc.QueryConfig
|
2025-05-23 00:20:01 +00:00
|
|
|
queue.QueueConfig
|
|
|
|
|
objectstore.ObjectStoreConfig
|
2025-02-11 15:22:59 +00:00
|
|
|
}
|
|
|
|
|
|
2025-01-10 19:17:20 +00:00
|
|
|
func TestQueryRunner(t *testing.T) {
|
2025-02-11 15:22:59 +00:00
|
|
|
cfg := &QueryConfig{}
|
2025-05-23 00:20:01 +00:00
|
|
|
test.CreateDB(t, cfg)
|
|
|
|
|
acfg := test.CreateAWSContainer(t, cfg)
|
|
|
|
|
|
|
|
|
|
test.SetQueueClient(t, t.Context(), cfg, acfg.ExternalEndpoint)
|
|
|
|
|
cfg.QueryURL = test.CreateQueue(t, cfg, test.QueryRunnerName)
|
2025-01-31 13:43:55 +00:00
|
|
|
|
2025-02-11 15:22:59 +00:00
|
|
|
que := query.New(cfg)
|
2025-04-22 14:40:16 +00:00
|
|
|
runner := queryrunner.New(&queryrunner.Services{
|
2025-02-11 15:22:59 +00:00
|
|
|
ResultSet: resultset.New(cfg, &resultset.Services{
|
|
|
|
|
Query: que,
|
|
|
|
|
Result: result.New(cfg, &result.Services{
|
|
|
|
|
Query: que,
|
|
|
|
|
}),
|
2025-02-14 10:56:24 +00:00
|
|
|
Sync: resultsync.New(cfg),
|
2025-02-11 15:22:59 +00:00
|
|
|
}),
|
2025-01-24 16:12:25 +00:00
|
|
|
})
|
2025-01-10 19:17:20 +00:00
|
|
|
|
2025-05-23 00:20:01 +00:00
|
|
|
err := cfg.GetDBQueries().CreateClient(t.Context(), &repository.CreateClientParams{
|
|
|
|
|
Clientid: "client_one",
|
|
|
|
|
Name: "name_one",
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
docId, err := cfg.GetDBQueries().CreateDocument(t.Context(), &repository.CreateDocumentParams{
|
|
|
|
|
Clientid: "client_one",
|
|
|
|
|
Hash: "hash",
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
fill := "fill"
|
|
|
|
|
cleanId, err := cfg.GetDBQueries().AddDocumentClean(t.Context(), &repository.AddDocumentCleanParams{
|
|
|
|
|
Documentid: docId,
|
|
|
|
|
Bucket: &fill,
|
|
|
|
|
Key: &fill,
|
|
|
|
|
Hash: &fill,
|
|
|
|
|
Mimetype: repository.NullCleanmimetype{
|
|
|
|
|
Valid: true,
|
|
|
|
|
Cleanmimetype: repository.CleanmimetypeApplicationPdf,
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
err = cfg.GetDBQueries().AddDocumentCleanEntry(t.Context(), &repository.AddDocumentCleanEntryParams{
|
|
|
|
|
Cleanid: cleanId,
|
|
|
|
|
Version: 1,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
textId, err := cfg.GetDBQueries().AddDocumentText(t.Context(), &repository.AddDocumentTextParams{
|
|
|
|
|
Cleanid: cleanId,
|
|
|
|
|
Bucket: fill,
|
|
|
|
|
Key: fill,
|
|
|
|
|
Hash: fill,
|
|
|
|
|
Createdat: pgtype.Timestamp{
|
|
|
|
|
Time: time.Now(),
|
|
|
|
|
Valid: true,
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
err = cfg.GetDBQueries().AddDocumentTextEntry(t.Context(), &repository.AddDocumentTextEntryParams{
|
|
|
|
|
Textid: textId,
|
|
|
|
|
Version: 1,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
2025-01-10 19:17:20 +00:00
|
|
|
|
2025-05-23 00:20:01 +00:00
|
|
|
contextQueryId, err := cfg.GetDBQueries().CreateQuery(t.Context(), repository.QuerytypeContextFull)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
version, err := cfg.GetDBQueries().AddLatestQueryVersion(t.Context(), contextQueryId)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
err = cfg.GetDBQueries().AddActiveQueryVersion(t.Context(), &repository.AddActiveQueryVersionParams{
|
|
|
|
|
Versionid: version,
|
|
|
|
|
Queryid: contextQueryId,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
queryId, err := cfg.GetDBQueries().CreateQuery(t.Context(), repository.QuerytypeJsonExtractor)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
version, err = cfg.GetDBQueries().AddLatestQueryVersion(t.Context(), queryId)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
err = cfg.GetDBQueries().AddActiveQueryVersion(t.Context(), &repository.AddActiveQueryVersionParams{
|
|
|
|
|
Versionid: version,
|
|
|
|
|
Queryid: queryId,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
err = cfg.GetDBQueries().AddRequiredQuery(t.Context(), &repository.AddRequiredQueryParams{
|
|
|
|
|
Queryid: queryId,
|
|
|
|
|
Requiredqueryid: contextQueryId,
|
|
|
|
|
Addedversion: version,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
collectorOneVersion, err := cfg.GetDBQueries().AddLatestCollectorVersion(t.Context(), "client_one")
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
err = cfg.GetDBQueries().SetActiveCollectorVersion(t.Context(), &repository.SetActiveCollectorVersionParams{
|
|
|
|
|
Versionid: version,
|
|
|
|
|
Clientid: "client_one",
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
err = cfg.GetDBQueries().AddCollectorQuery(t.Context(), &repository.AddCollectorQueryParams{
|
|
|
|
|
Queryid: queryId,
|
|
|
|
|
Clientid: "client_one",
|
|
|
|
|
Name: "EXAMPLE_ONE",
|
|
|
|
|
Addedversion: collectorOneVersion,
|
|
|
|
|
})
|
|
|
|
|
require.NoError(t, err)
|
2025-02-11 15:22:59 +00:00
|
|
|
|
2025-05-23 00:20:01 +00:00
|
|
|
doc := queryrunner.Body{
|
|
|
|
|
DocumentID: docId,
|
|
|
|
|
QueryID: contextQueryId,
|
|
|
|
|
}
|
2025-02-11 15:22:59 +00:00
|
|
|
|
2025-05-23 00:20:01 +00:00
|
|
|
assert.True(t, runner.Process(t.Context(), doc))
|
2025-01-10 19:17:20 +00:00
|
|
|
|
2025-05-23 00:20:01 +00:00
|
|
|
test.AssertMessageBody(t, cfg, cfg.GetQueryURL(), regexp.MustCompile(fmt.Sprintf("{\"document_id\":\"%s\",\"query_id\":\"%s\"}", docId, queryId)))
|
2025-01-10 19:17:20 +00:00
|
|
|
}
|