diff --git a/tests/IResearch/ExpressionFilter-test.cpp b/tests/IResearch/ExpressionFilter-test.cpp index 5aa10654ba..d253dae730 100644 --- a/tests/IResearch/ExpressionFilter-test.cpp +++ b/tests/IResearch/ExpressionFilter-test.cpp @@ -359,9 +359,8 @@ TEST_CASE("IResearchExpressionFilterTest", "[iresearch][iresearch-expression-fil arangodb::velocypack::Builder testData; { irs::utf8_path resource; - resource/=irs::string_ref(IResearch_test_resource_dir); + resource/=irs::string_ref(arangodb::tests::testResourceDir); resource/=irs::string_ref("simple_sequential.json"); - testData = arangodb::basics::VelocyPackHelper::velocyPackFromFile(resource.utf8()); } auto testDataRoot = testData.slice(); diff --git a/tests/IResearch/IResearchIndex-test.cpp b/tests/IResearch/IResearchIndex-test.cpp index b473f3413c..1cfa207b56 100644 --- a/tests/IResearch/IResearchIndex-test.cpp +++ b/tests/IResearch/IResearchIndex-test.cpp @@ -543,7 +543,7 @@ SECTION("test_async_index") { try { irs::utf8_path resource; - resource/=irs::string_ref(IResearch_test_resource_dir); + resource/=irs::string_ref(arangodb::tests::testResourceDir); resource/=irs::string_ref("simple_sequential.json"); builder = arangodb::basics::VelocyPackHelper::velocyPackFromFile(resource.utf8()); } catch (...) { @@ -581,7 +581,7 @@ SECTION("test_async_index") { try { irs::utf8_path resource; - resource/=irs::string_ref(IResearch_test_resource_dir); + resource/=irs::string_ref(arangodb::tests::testResourceDir); resource/=irs::string_ref("simple_sequential.json"); builder = arangodb::basics::VelocyPackHelper::velocyPackFromFile(resource.utf8()); } catch (...) { diff --git a/tests/IResearch/IResearchQueryAggregate-test.cpp b/tests/IResearch/IResearchQueryAggregate-test.cpp index ea77dfda2c..de111ddb4b 100644 --- a/tests/IResearch/IResearchQueryAggregate-test.cpp +++ b/tests/IResearch/IResearchQueryAggregate-test.cpp @@ -215,7 +215,7 @@ TEST_CASE("IResearchQueryTestAggregate", "[iresearch][iresearch-query]") { REQUIRE((nullptr != collection)); irs::utf8_path resource; - resource/=irs::string_ref(IResearch_test_resource_dir); + resource/=irs::string_ref(arangodb::tests::testResourceDir); resource/=irs::string_ref("simple_sequential.json"); auto builder = arangodb::basics::VelocyPackHelper::velocyPackFromFile(resource.utf8()); diff --git a/tests/IResearch/IResearchQueryAnd-test.cpp b/tests/IResearch/IResearchQueryAnd-test.cpp index 04ab4eebcf..58ca20091b 100644 --- a/tests/IResearch/IResearchQueryAnd-test.cpp +++ b/tests/IResearch/IResearchQueryAnd-test.cpp @@ -238,7 +238,7 @@ TEST_CASE("IResearchQueryTestAnd", "[iresearch][iresearch-query]") { REQUIRE((nullptr != collection)); irs::utf8_path resource; - resource/=irs::string_ref(IResearch_test_resource_dir); + resource/=irs::string_ref(arangodb::tests::testResourceDir); resource/=irs::string_ref("simple_sequential.json"); auto builder = arangodb::basics::VelocyPackHelper::velocyPackFromFile(resource.utf8()); diff --git a/tests/IResearch/IResearchQueryComplexBoolean-test.cpp b/tests/IResearch/IResearchQueryComplexBoolean-test.cpp index ad61e6336c..5e962d33e2 100644 --- a/tests/IResearch/IResearchQueryComplexBoolean-test.cpp +++ b/tests/IResearch/IResearchQueryComplexBoolean-test.cpp @@ -250,7 +250,7 @@ TEST_CASE("IResearchQueryTestComplexBoolean", "[iresearch][iresearch-query]") { REQUIRE((nullptr != collection)); irs::utf8_path resource; - resource/=irs::string_ref(IResearch_test_resource_dir); + resource/=irs::string_ref(arangodb::tests::testResourceDir); resource/=irs::string_ref("simple_sequential.json"); auto builder = arangodb::basics::VelocyPackHelper::velocyPackFromFile(resource.utf8()); diff --git a/tests/IResearch/IResearchQueryExists-test.cpp b/tests/IResearch/IResearchQueryExists-test.cpp index 60d3099a3c..903045a61f 100644 --- a/tests/IResearch/IResearchQueryExists-test.cpp +++ b/tests/IResearch/IResearchQueryExists-test.cpp @@ -239,7 +239,7 @@ TEST_CASE("IResearchQueryTestExists", "[iresearch][iresearch-query]") { REQUIRE((nullptr != collection)); irs::utf8_path resource; - resource/=irs::string_ref(IResearch_test_resource_dir); + resource/=irs::string_ref(arangodb::tests::testResourceDir); resource/=irs::string_ref("simple_sequential.json"); auto builder = arangodb::basics::VelocyPackHelper::velocyPackFromFile(resource.utf8()); @@ -1497,7 +1497,7 @@ TEST_CASE("IResearchQueryTestExistsStoreMaskPartially", "[iresearch][iresearch-q REQUIRE((nullptr != collection)); irs::utf8_path resource; - resource/=irs::string_ref(IResearch_test_resource_dir); + resource/=irs::string_ref(arangodb::tests::testResourceDir); resource/=irs::string_ref("simple_sequential.json"); auto builder = arangodb::basics::VelocyPackHelper::velocyPackFromFile(resource.utf8()); diff --git a/tests/IResearch/IResearchQueryIn-test.cpp b/tests/IResearch/IResearchQueryIn-test.cpp index 6028092a97..498d21ab16 100644 --- a/tests/IResearch/IResearchQueryIn-test.cpp +++ b/tests/IResearch/IResearchQueryIn-test.cpp @@ -218,7 +218,7 @@ TEST_CASE("IResearchQueryTestIn", "[iresearch][iresearch-query]") { REQUIRE((nullptr != collection)); irs::utf8_path resource; - resource/=irs::string_ref(IResearch_test_resource_dir); + resource/=irs::string_ref(arangodb::tests::testResourceDir); resource/=irs::string_ref("simple_sequential.json"); auto builder = arangodb::basics::VelocyPackHelper::velocyPackFromFile(resource.utf8()); diff --git a/tests/IResearch/IResearchQueryInRange-test.cpp b/tests/IResearch/IResearchQueryInRange-test.cpp index d4281e1965..2288f89c49 100644 --- a/tests/IResearch/IResearchQueryInRange-test.cpp +++ b/tests/IResearch/IResearchQueryInRange-test.cpp @@ -254,7 +254,7 @@ TEST_CASE("IResearchQueryInRange", "[iresearch][iresearch-query]") { collection1 = collection; irs::utf8_path resource; - resource/=irs::string_ref(IResearch_test_resource_dir); + resource/=irs::string_ref(arangodb::tests::testResourceDir); resource/=irs::string_ref("simple_sequential.json"); auto builder = arangodb::basics::VelocyPackHelper::velocyPackFromFile(resource.utf8()); diff --git a/tests/IResearch/IResearchQueryJoin-test.cpp b/tests/IResearch/IResearchQueryJoin-test.cpp index 72d25e784e..d053cb6ddf 100644 --- a/tests/IResearch/IResearchQueryJoin-test.cpp +++ b/tests/IResearch/IResearchQueryJoin-test.cpp @@ -482,7 +482,7 @@ TEST_CASE("IResearchQueryTestJoinDuplicateDataSource", "[iresearch][iresearch-qu // insert into collections { irs::utf8_path resource; - resource/=irs::string_ref(IResearch_test_resource_dir); + resource/=irs::string_ref(arangodb::tests::testResourceDir); resource/=irs::string_ref("simple_sequential.json"); auto builder = arangodb::basics::VelocyPackHelper::velocyPackFromFile(resource.utf8()); @@ -508,7 +508,7 @@ TEST_CASE("IResearchQueryTestJoinDuplicateDataSource", "[iresearch][iresearch-qu { irs::utf8_path resource; - resource/=irs::string_ref(IResearch_test_resource_dir); + resource/=irs::string_ref(arangodb::tests::testResourceDir); resource/=irs::string_ref("simple_sequential_order.json"); auto builder = arangodb::basics::VelocyPackHelper::velocyPackFromFile(resource.utf8()); @@ -631,7 +631,7 @@ TEST_CASE("IResearchQueryTestJoin", "[iresearch][iresearch-query]") { // insert into collections { irs::utf8_path resource; - resource/=irs::string_ref(IResearch_test_resource_dir); + resource/=irs::string_ref(arangodb::tests::testResourceDir); resource/=irs::string_ref("simple_sequential.json"); auto builder = arangodb::basics::VelocyPackHelper::velocyPackFromFile(resource.utf8()); @@ -657,7 +657,7 @@ TEST_CASE("IResearchQueryTestJoin", "[iresearch][iresearch-query]") { { irs::utf8_path resource; - resource/=irs::string_ref(IResearch_test_resource_dir); + resource/=irs::string_ref(arangodb::tests::testResourceDir); resource/=irs::string_ref("simple_sequential_order.json"); auto builder = arangodb::basics::VelocyPackHelper::velocyPackFromFile(resource.utf8()); diff --git a/tests/IResearch/IResearchQueryNumericTerm-test.cpp b/tests/IResearch/IResearchQueryNumericTerm-test.cpp index 6b65c929cd..35354528a3 100644 --- a/tests/IResearch/IResearchQueryNumericTerm-test.cpp +++ b/tests/IResearch/IResearchQueryNumericTerm-test.cpp @@ -255,7 +255,7 @@ TEST_CASE("IResearchQueryTestNumericTerm", "[iresearch][iresearch-query]") { // insert into collections { irs::utf8_path resource; - resource/=irs::string_ref(IResearch_test_resource_dir); + resource/=irs::string_ref(arangodb::tests::testResourceDir); resource/=irs::string_ref("simple_sequential.json"); auto builder = arangodb::basics::VelocyPackHelper::velocyPackFromFile(resource.utf8()); diff --git a/tests/IResearch/IResearchQueryOptions-test.cpp b/tests/IResearch/IResearchQueryOptions-test.cpp index bf5ebf928d..2e2f0431d3 100644 --- a/tests/IResearch/IResearchQueryOptions-test.cpp +++ b/tests/IResearch/IResearchQueryOptions-test.cpp @@ -283,7 +283,7 @@ TEST_CASE("IResearchQueryTestOptionsCollections", "[iresearch][iresearch-query]" // insert into collections { irs::utf8_path resource; - resource/=irs::string_ref(IResearch_test_resource_dir); + resource/=irs::string_ref(arangodb::tests::testResourceDir); resource/=irs::string_ref("simple_sequential.json"); auto builder = arangodb::basics::VelocyPackHelper::velocyPackFromFile(resource.utf8()); @@ -942,7 +942,7 @@ TEST_CASE("IResearchQueryTestOptionsWaitForSync", "[iresearch][iresearch-query]" // insert into collections { irs::utf8_path resource; - resource/=irs::string_ref(IResearch_test_resource_dir); + resource/=irs::string_ref(arangodb::tests::testResourceDir); resource/=irs::string_ref("simple_sequential.json"); auto builder = arangodb::basics::VelocyPackHelper::velocyPackFromFile(resource.utf8()); diff --git a/tests/IResearch/IResearchQueryOr-test.cpp b/tests/IResearch/IResearchQueryOr-test.cpp index c3eac2fb1b..494df7b6a0 100644 --- a/tests/IResearch/IResearchQueryOr-test.cpp +++ b/tests/IResearch/IResearchQueryOr-test.cpp @@ -279,7 +279,7 @@ TEST_CASE("IResearchQueryTestOr", "[iresearch][iresearch-query]") { // insert into collections { irs::utf8_path resource; - resource/=irs::string_ref(IResearch_test_resource_dir); + resource/=irs::string_ref(arangodb::tests::testResourceDir); resource/=irs::string_ref("simple_sequential.json"); auto builder = arangodb::basics::VelocyPackHelper::velocyPackFromFile(resource.utf8()); diff --git a/tests/IResearch/IResearchQueryPhrase-test.cpp b/tests/IResearch/IResearchQueryPhrase-test.cpp index cfb2147ebd..c3ba535df9 100644 --- a/tests/IResearch/IResearchQueryPhrase-test.cpp +++ b/tests/IResearch/IResearchQueryPhrase-test.cpp @@ -250,7 +250,7 @@ TEST_CASE("IResearchQueryTestPhrase", "[iresearch][iresearch-query]") { REQUIRE((nullptr != collection)); irs::utf8_path resource; - resource/=irs::string_ref(IResearch_test_resource_dir); + resource/=irs::string_ref(arangodb::tests::testResourceDir); resource/=irs::string_ref("simple_sequential.json"); auto builder = arangodb::basics::VelocyPackHelper::velocyPackFromFile(resource.utf8()); diff --git a/tests/IResearch/IResearchQueryScorer-test.cpp b/tests/IResearch/IResearchQueryScorer-test.cpp index c3353314cd..4a3c175429 100644 --- a/tests/IResearch/IResearchQueryScorer-test.cpp +++ b/tests/IResearch/IResearchQueryScorer-test.cpp @@ -317,7 +317,7 @@ TEST_CASE("IResearchQueryScorer", "[iresearch][iresearch-query]") { // insert into collections { irs::utf8_path resource; - resource/=irs::string_ref(IResearch_test_resource_dir); + resource/=irs::string_ref(arangodb::tests::testResourceDir); resource/=irs::string_ref("simple_sequential.json"); auto builder = arangodb::basics::VelocyPackHelper::velocyPackFromFile(resource.utf8()); @@ -343,7 +343,7 @@ TEST_CASE("IResearchQueryScorer", "[iresearch][iresearch-query]") { { irs::utf8_path resource; - resource/=irs::string_ref(IResearch_test_resource_dir); + resource/=irs::string_ref(arangodb::tests::testResourceDir); resource/=irs::string_ref("simple_sequential_order.json"); auto builder = arangodb::basics::VelocyPackHelper::velocyPackFromFile(resource.utf8()); diff --git a/tests/IResearch/IResearchQueryStartsWith-test.cpp b/tests/IResearch/IResearchQueryStartsWith-test.cpp index 23b6af692b..5939e452d6 100644 --- a/tests/IResearch/IResearchQueryStartsWith-test.cpp +++ b/tests/IResearch/IResearchQueryStartsWith-test.cpp @@ -244,7 +244,7 @@ TEST_CASE("IResearchQueryTestStartsWith", "[iresearch][iresearch-query]") { // insert into collections { irs::utf8_path resource; - resource/=irs::string_ref(IResearch_test_resource_dir); + resource/=irs::string_ref(arangodb::tests::testResourceDir); resource/=irs::string_ref("simple_sequential.json"); auto builder = arangodb::basics::VelocyPackHelper::velocyPackFromFile(resource.utf8()); diff --git a/tests/IResearch/IResearchQueryStringTerm-test.cpp b/tests/IResearch/IResearchQueryStringTerm-test.cpp index 4bd1663659..e1e47f2803 100644 --- a/tests/IResearch/IResearchQueryStringTerm-test.cpp +++ b/tests/IResearch/IResearchQueryStringTerm-test.cpp @@ -285,7 +285,7 @@ TEST_CASE("IResearchQueryTestStringTerm", "[iresearch][iresearch-query]") { // insert into collections { irs::utf8_path resource; - resource/=irs::string_ref(IResearch_test_resource_dir); + resource/=irs::string_ref(arangodb::tests::testResourceDir); resource/=irs::string_ref("simple_sequential.json"); auto builder = arangodb::basics::VelocyPackHelper::velocyPackFromFile(resource.utf8()); diff --git a/tests/IResearch/IResearchQueryTokens-test.cpp b/tests/IResearch/IResearchQueryTokens-test.cpp index b2c9874af1..f5409a2f65 100644 --- a/tests/IResearch/IResearchQueryTokens-test.cpp +++ b/tests/IResearch/IResearchQueryTokens-test.cpp @@ -244,7 +244,7 @@ TEST_CASE("IResearchQueryTestTokens", "[iresearch][iresearch-query]") { REQUIRE((nullptr != collection)); irs::utf8_path resource; - resource/=irs::string_ref(IResearch_test_resource_dir); + resource/=irs::string_ref(arangodb::tests::testResourceDir); resource/=irs::string_ref("simple_sequential.json"); auto builder = arangodb::basics::VelocyPackHelper::velocyPackFromFile(resource.utf8()); diff --git a/tests/IResearch/IResearchQueryTraversal-test.cpp b/tests/IResearch/IResearchQueryTraversal-test.cpp index cdff8edde1..62094ce175 100644 --- a/tests/IResearch/IResearchQueryTraversal-test.cpp +++ b/tests/IResearch/IResearchQueryTraversal-test.cpp @@ -218,7 +218,7 @@ TEST_CASE("IResearchQueryTestTraversal", "[iresearch][iresearch-query]") { REQUIRE((nullptr != collection)); irs::utf8_path resource; - resource/=irs::string_ref(IResearch_test_resource_dir); + resource/=irs::string_ref(arangodb::tests::testResourceDir); resource/=irs::string_ref("simple_sequential.json"); auto builder = arangodb::basics::VelocyPackHelper::velocyPackFromFile(resource.utf8()); diff --git a/tests/IResearch/IResearchQueryValue-test.cpp b/tests/IResearch/IResearchQueryValue-test.cpp index 951cb8121b..95c5b46a8a 100644 --- a/tests/IResearch/IResearchQueryValue-test.cpp +++ b/tests/IResearch/IResearchQueryValue-test.cpp @@ -215,7 +215,7 @@ TEST_CASE("IResearchQueryTestValue", "[iresearch][iresearch-query]") { REQUIRE((nullptr != collection)); irs::utf8_path resource; - resource/=irs::string_ref(IResearch_test_resource_dir); + resource/=irs::string_ref(arangodb::tests::testResourceDir); resource/=irs::string_ref("simple_sequential.json"); auto builder = arangodb::basics::VelocyPackHelper::velocyPackFromFile(resource.utf8()); diff --git a/tests/IResearch/common.cpp b/tests/IResearch/common.cpp index af059eac21..511dacb6d7 100644 --- a/tests/IResearch/common.cpp +++ b/tests/IResearch/common.cpp @@ -32,9 +32,10 @@ #include "Aql/ExpressionContext.h" #include "Aql/Ast.h" #include "Aql/IResearchViewNode.h" +#include "Basics/files.h" +#include "Basics/FileUtils.h" #include "ClusterEngine/ClusterEngine.h" #include "Random/RandomGenerator.h" -#include "Basics/files.h" #include "RestServer/DatabasePathFeature.h" #include "V8/v8-utils.h" #include "VocBase/KeyGenerator.h" @@ -50,6 +51,8 @@ #include "search/boolean_filter.hpp" +#include "3rdParty/iresearch/tests/tests_config.hpp" + #include #include @@ -252,10 +255,46 @@ REGISTER_SCORER_JSON(CustomScorer, CustomScorer::make); namespace arangodb { namespace tests { +std::string testResourceDir; + +static void findIResearchTestResources() { + std::string toBeFound = basics::FileUtils::buildFilename("3rdParty", "iresearch", "tests", "resources"); + + // peek into environment variable first + char const* dir = getenv("IRESEARCH_TEST_RESOURCE_DIR"); + if (dir != nullptr) { + // environment variable set, so use it + testResourceDir = std::string(dir); + } else { + // environment variable not set, so try to auto-detect the location + testResourceDir = "."; + do { + if (basics::FileUtils::isDirectory(basics::FileUtils::buildFilename(testResourceDir, toBeFound))) { + testResourceDir = basics::FileUtils::buildFilename(testResourceDir, toBeFound); + return; + } + testResourceDir = basics::FileUtils::buildFilename(testResourceDir, ".."); + if (!basics::FileUtils::isDirectory(testResourceDir)) { + testResourceDir = IResearch_test_resource_dir; + break; + } + } while (true); + } + + if (!basics::FileUtils::isDirectory(testResourceDir)) { + LOG_TOPIC("45f9d", ERR, Logger::FIXME) << "unable to find directory for IResearch test resources. use environment variable IRESEARCH_TEST_RESOURCE_DIR to set it"; + } +} + void init(bool withICU /*= false*/) { arangodb::transaction::Methods::clearDataSourceRegistrationCallbacks(); ClusterEngine::Mocking = true; arangodb::RandomGenerator::initialize(arangodb::RandomGenerator::RandomType::MERSENNE); + + // try to locate directory for iresearch test resource files + if (testResourceDir.empty()) { + findIResearchTestResources(); + } } // @Note: once V8 is initialized all 'CATCH' errors will result in SIGILL diff --git a/tests/IResearch/common.h b/tests/IResearch/common.h index 8cc532e67e..5fb15aac28 100644 --- a/tests/IResearch/common.h +++ b/tests/IResearch/common.h @@ -62,6 +62,8 @@ class ByExpression; namespace tests { +extern std::string testResourceDir; + void init(bool withICU = false); template