From 1897b7adfa6c471b2de8f47cc835f083d338bfdd Mon Sep 17 00:00:00 2001 From: Thomas Ubensee <34603111+tomuben@users.noreply.github.com> Date: Fri, 25 Oct 2024 11:28:05 -0300 Subject: [PATCH] #990: Forward jar options without changing order (#470) related to exasol/script-languages-release#990 --------- Co-authored-by: Torsten Kilias --- .github/workflows/check_bazel_tests.yml | 24 ++++++------- .../base/javacontainer/javacontainer_impl.cc | 4 +-- .../javacontainer/script_options/converter.h | 12 +++++-- .../script_options/converter_legacy.cc | 6 ++++ .../script_options/converter_legacy.h | 9 +++-- .../script_options/converter_v2.cc | 8 ++++- .../script_options/converter_v2.h | 12 ++++--- .../javacontainer/script_options/extractor.h | 30 ++++++++++++++-- .../script_options/extractor_impl.cc | 6 ++-- .../script_options/extractor_impl.h | 6 +++- .../script_options/test/converter_test.cc | 34 ++++++++++-------- exaudfclient/base/javacontainer/test/BUILD | 10 +++--- ....cc => javacontainer_extractor_v2_test.cc} | 3 ++ .../test/cpp/javacontainer_test.cc | 33 +++++++++++++++-- .../javacontainer/test/cpp/javavm_test.cc | 2 +- .../java_script_options_parser.drawio.png | Bin 0 -> 88339 bytes 16 files changed, 143 insertions(+), 56 deletions(-) rename exaudfclient/base/javacontainer/test/cpp/{javacontainer_ctpg_test.cc => javacontainer_extractor_v2_test.cc} (98%) create mode 100644 exaudfclient/docs/java_script_options_parser.drawio.png diff --git a/.github/workflows/check_bazel_tests.yml b/.github/workflows/check_bazel_tests.yml index 9d0e28dc2..4f3e183ce 100644 --- a/.github/workflows/check_bazel_tests.yml +++ b/.github/workflows/check_bazel_tests.yml @@ -34,10 +34,10 @@ jobs: include: - test: "//base/javacontainer/test:ExaStackTraceCleanerTest" name: "ExaStackTraceCleanerTest" - - test: "//base/javacontainer/test:javacontainer-test-legacy-parser" - name: "javacontainer-test-legacy-parser" - - test: "//base/javacontainer/test:javacontainer-test-ctpg-parser" - name: "javacontainer-test-ctpg-parser" + - test: "//base/javacontainer/test:javacontainer-test-extractor-legacy" + name: "javacontainer-test-extractor-legacy" + - test: "//base/javacontainer/test:javacontainer-test-extractor-v2" + name: "javacontainer-test-extractor-v2" - test: "//base/javacontainer/script_options/..." name: "javacontainer-script_options" - test: "//base/exaudflib/test/..." @@ -46,18 +46,18 @@ jobs: name: "script_options_parser_ctpg" - test: "//base/script_options_parser/legacy/..." name: "script_options_parser_legacy" - - test: "--run_under='valgrind --leak-check=yes' --config=valgrind //base/javacontainer/test:javacontainer-test-legacy-parser" - name: "javacontainer-test-legacy-parser-with-valgrind" - - test: "--run_under='valgrind --leak-check=yes' --config=valgrind //base/javacontainer/test:javacontainer-test-ctpg-parser" - name: "javacontainer-test-ctpg-parser-with-valgrind" + - test: "--run_under='valgrind --leak-check=yes' --config=valgrind //base/javacontainer/test:javacontainer-test-extractor-legacy" + name: "javacontainer-test-extractor-legacy-with-valgrind" + - test: "--run_under='valgrind --leak-check=yes' --config=valgrind //base/javacontainer/test:javacontainer-test-extractor-v2" + name: "javacontainer-test-extractor-v2-with-valgrind" - test: "--run_under='valgrind --leak-check=yes' --config=valgrind //base/script_options_parser/ctpg/..." name: "script_options_parser_ctpg_with_valgrind" - test: "--run_under='valgrind --leak-check=yes' --config=valgrind //base/script_options_parser/legacy/..." name: "script_options_parser_legacy_with_valgrind" - - test: "--config=asan //base/javacontainer/test:javacontainer-test-legacy-parser" - name: "javacontainer-test-legacy-parser-with-asan" - - test: "--config=asan //base/javacontainer/test:javacontainer-test-ctpg-parser" - name: "javacontainer-test-ctpg-parser-with-asan" + - test: "--config=asan //base/javacontainer/test:javacontainer-test-extractor-legacy" + name: "javacontainer-test-extractor-legacy-with-asan" + - test: "--config=asan //base/javacontainer/test:javacontainer-test-extractor-v2" + name: "javacontainer-test-extractor-v2-with-asan" - test: "--config=asan //base/script_options_parser/ctpg/..." name: "script_options_parser_ctpg_with_asan" - test: "--config=asan //base/script_options_parser/legacy/..." diff --git a/exaudfclient/base/javacontainer/javacontainer_impl.cc b/exaudfclient/base/javacontainer/javacontainer_impl.cc index 1235d297a..9405ddb7d 100644 --- a/exaudfclient/base/javacontainer/javacontainer_impl.cc +++ b/exaudfclient/base/javacontainer/javacontainer_impl.cc @@ -56,9 +56,7 @@ void JavaVMImpl::parseScriptOptions(std::unique_ptrmoveJvmOptions()); - for (const auto & jar : extractor->getJarPaths()) { - addJarToClasspath(jar); - } + extractor->iterateJarPaths([&](const std::string& s) { addJarToClasspath(s);}); } void JavaVMImpl::shutdown() { diff --git a/exaudfclient/base/javacontainer/script_options/converter.h b/exaudfclient/base/javacontainer/script_options/converter.h index f2e5de3e4..1d0e39ded 100644 --- a/exaudfclient/base/javacontainer/script_options/converter.h +++ b/exaudfclient/base/javacontainer/script_options/converter.h @@ -3,15 +3,22 @@ #include #include -#include +#include namespace SWIGVMContainers { namespace JavaScriptOptions { +/** + * This class retrieves the raw Java script option values (scriptclass, jvmoption, jar) + * and converts them to the proper format expected by the JvmContainerImpl class. + * Besides the converter functions it provides methods to access the converted values. + */ class Converter { public: + typedef std::function tJarIteratorCallback; + Converter(); void convertScriptClassName(const std::string & value); @@ -24,8 +31,7 @@ class Converter { virtual void convertExternalJar(const std::string & value) = 0; - virtual const std::set & getJarPaths() const = 0; - + virtual void iterateJarPaths(tJarIteratorCallback callback) const = 0; private: diff --git a/exaudfclient/base/javacontainer/script_options/converter_legacy.cc b/exaudfclient/base/javacontainer/script_options/converter_legacy.cc index 0dfbf9f78..23e84f5c5 100644 --- a/exaudfclient/base/javacontainer/script_options/converter_legacy.cc +++ b/exaudfclient/base/javacontainer/script_options/converter_legacy.cc @@ -2,6 +2,7 @@ #include "base/javacontainer/script_options/string_ops.h" #include #include +#include namespace SWIGVMContainers { @@ -20,6 +21,11 @@ void ConverterLegacy::convertExternalJar(const std::string& value) { } } +void ConverterLegacy::iterateJarPaths(Converter::tJarIteratorCallback callback) const { + std::for_each(m_jarPaths.begin(), m_jarPaths.end(), callback); +} + + } //namespace JavaScriptOptions diff --git a/exaudfclient/base/javacontainer/script_options/converter_legacy.h b/exaudfclient/base/javacontainer/script_options/converter_legacy.h index bddd9151d..90aa2a0d4 100644 --- a/exaudfclient/base/javacontainer/script_options/converter_legacy.h +++ b/exaudfclient/base/javacontainer/script_options/converter_legacy.h @@ -14,6 +14,11 @@ namespace SWIGVMContainers { namespace JavaScriptOptions { +/** + * This class is a specialization for the generic converter class. + * It implements conversion of the jar option according to the requirements in the old + * parser implementation. + */ class ConverterLegacy : public Converter { public: @@ -21,9 +26,7 @@ class ConverterLegacy : public Converter { void convertExternalJar(const std::string & value); - const std::set & getJarPaths() const { - return m_jarPaths; - } + void iterateJarPaths(tJarIteratorCallback callback) const override; private: diff --git a/exaudfclient/base/javacontainer/script_options/converter_v2.cc b/exaudfclient/base/javacontainer/script_options/converter_v2.cc index 4c78e7dcf..e41e07a32 100644 --- a/exaudfclient/base/javacontainer/script_options/converter_v2.cc +++ b/exaudfclient/base/javacontainer/script_options/converter_v2.cc @@ -2,6 +2,7 @@ #include "base/javacontainer/script_options/string_ops.h" #include #include +#include namespace SWIGVMContainers { @@ -16,10 +17,15 @@ void ConverterV2::convertExternalJar(const std::string & value) { std::string jar; while (std::getline(stream, jar, ':')) { - m_jarPaths.insert(jar); + m_jarPaths.push_back(jar); } } +void ConverterV2::iterateJarPaths(Converter::tJarIteratorCallback callback) const { + std::for_each(m_jarPaths.begin(), m_jarPaths.end(), callback); +} + + } //namespace JavaScriptOptions } //namespace SWIGVMContainers diff --git a/exaudfclient/base/javacontainer/script_options/converter_v2.h b/exaudfclient/base/javacontainer/script_options/converter_v2.h index a5f135de9..c829c7330 100644 --- a/exaudfclient/base/javacontainer/script_options/converter_v2.h +++ b/exaudfclient/base/javacontainer/script_options/converter_v2.h @@ -3,7 +3,6 @@ #include #include -#include #include #include "base/javacontainer/script_options/converter.h" @@ -14,6 +13,11 @@ namespace SWIGVMContainers { namespace JavaScriptOptions { +/** + * This class is a specialization for the generic converter class. + * It implements conversion of the jar option according to the requirements in the new + * parser implementation. + */ class ConverterV2 : public Converter { public: @@ -21,13 +25,11 @@ class ConverterV2 : public Converter { void convertExternalJar(const std::string & value); - const std::set & getJarPaths() const { - return m_jarPaths; - } + void iterateJarPaths(tJarIteratorCallback callback) const override; private: - std::set m_jarPaths; + std::vector m_jarPaths; }; diff --git a/exaudfclient/base/javacontainer/script_options/extractor.h b/exaudfclient/base/javacontainer/script_options/extractor.h index 2db401b98..8d1f66902 100644 --- a/exaudfclient/base/javacontainer/script_options/extractor.h +++ b/exaudfclient/base/javacontainer/script_options/extractor.h @@ -3,20 +3,46 @@ #include #include -#include +#include namespace SWIGVMContainers { namespace JavaScriptOptions { +/** + * Abstract interface for the Extractor class. + * Defines methods to extract the Java options from the script code. + * The extraction process searches for the known Java Options and handles them appropriatly. + * The script code is then modified, where the found options are removed. + * The interface defines methods to access the found Jar- and JvmOption options. + * The scriptclass and import options are processed internally by the respective extractor implementation. + */ struct Extractor { + + typedef std::function tJarIteratorCallback; + virtual ~Extractor() {} - virtual const std::set & getJarPaths() const = 0; + /** + * Access the found Jar paths. For each found jar path the given callback function is called with the jar option as argument. + */ + virtual void iterateJarPaths(tJarIteratorCallback callback) const = 0; + /** + * Access the Jvm option options. The extractor implementations must store the found Jvm Options in a std::vector. + * The vector is returned as rvalue. + */ virtual std::vector&& moveJvmOptions() = 0; + /** + * Run the extraction. This will: + * 1. Add the first `scriptclass` option to the list of Jvm options. + * 2. Replace and (nested) reference of an `import` script + * 3. Find and store all Jar options + * 4. Find and store all `jvmoption` options + * 5. Remove `scriptclass`, `jar`, `import` and `jvmoption` from the script code. The behavior is implementation specific. + */ virtual void extract(std::string & scriptCode) = 0; }; diff --git a/exaudfclient/base/javacontainer/script_options/extractor_impl.cc b/exaudfclient/base/javacontainer/script_options/extractor_impl.cc index 842911e9b..d5273aa69 100644 --- a/exaudfclient/base/javacontainer/script_options/extractor_impl.cc +++ b/exaudfclient/base/javacontainer/script_options/extractor_impl.cc @@ -16,12 +16,12 @@ ExtractorImpl::ExtractorImpl(std::unique_ptr s , m_converter() {} template -inline const std::set & ExtractorImpl::getJarPaths() const { - return m_converter.getJarPaths(); +void ExtractorImpl::iterateJarPaths(Extractor::tJarIteratorCallback callback) const { + return m_converter.iterateJarPaths(callback); } template -inline std::vector&& ExtractorImpl::moveJvmOptions() { +std::vector&& ExtractorImpl::moveJvmOptions() { return std::move(m_converter.moveJvmOptions()); } diff --git a/exaudfclient/base/javacontainer/script_options/extractor_impl.h b/exaudfclient/base/javacontainer/script_options/extractor_impl.h index 849faa311..ef7520c3e 100644 --- a/exaudfclient/base/javacontainer/script_options/extractor_impl.h +++ b/exaudfclient/base/javacontainer/script_options/extractor_impl.h @@ -17,6 +17,10 @@ namespace SWIGVMContainers { namespace JavaScriptOptions { +/** + * Concrete implementation for the Extractor class. + * Given template parameter TParser and TConverter define concrete behavior. + */ template class ExtractorImpl : public Extractor { @@ -24,7 +28,7 @@ class ExtractorImpl : public Extractor { ExtractorImpl(std::unique_ptr swigFactory); - const std::set & getJarPaths() const override; + virtual void iterateJarPaths(tJarIteratorCallback callback) const override; std::vector&& moveJvmOptions() override; void extract(std::string & scriptCode); diff --git a/exaudfclient/base/javacontainer/script_options/test/converter_test.cc b/exaudfclient/base/javacontainer/script_options/test/converter_test.cc index 04b8b00e9..dc2725bc8 100644 --- a/exaudfclient/base/javacontainer/script_options/test/converter_test.cc +++ b/exaudfclient/base/javacontainer/script_options/test/converter_test.cc @@ -7,22 +7,24 @@ using namespace SWIGVMContainers::JavaScriptOptions; -class LegacyConverterJarTest : public ::testing::TestWithParam>> {}; +class LegacyConverterJarTest : public ::testing::TestWithParam>> {}; TEST_P(LegacyConverterJarTest, jar) { - const std::pair> option_value = GetParam(); + const std::pair> option_value = GetParam(); const std::string jar_option_value = option_value.first; ConverterLegacy converter; converter.convertExternalJar(option_value.first); - ASSERT_EQ(converter.getJarPaths(), option_value.second); + std::vector result; + converter.iterateJarPaths([&](auto jar) {result.push_back(jar);}); + ASSERT_EQ(result, option_value.second); } -const std::vector>> jar_strings = +const std::vector>> jar_strings = { - std::make_pair("test.jar:test2.jar", std::set({"test.jar", "test2.jar"})), - std::make_pair("\"test.jar:test2.jar\"", std::set({"\"test.jar", "test2.jar\""})), - std::make_pair("t\\:est.jar:test2.jar", std::set({"t\\", "est.jar", "test2.jar"})), + std::make_pair("test.jar:test2.jar", std::vector({"test.jar", "test2.jar"})), //basic splitting + std::make_pair("test.jar:test.jar", std::vector({"test.jar"})), //filter duplicates + std::make_pair("testDEF.jar:testABC.jar", std::vector({"testABC.jar", "testDEF.jar"})), //alphabetical order }; INSTANTIATE_TEST_SUITE_P( @@ -33,27 +35,29 @@ INSTANTIATE_TEST_SUITE_P( -class ConverterV2JarTest : public ::testing::TestWithParam>> {}; +class ConverterV2JarTest : public ::testing::TestWithParam>> {}; TEST_P(ConverterV2JarTest, jar) { - const std::pair> option_value = GetParam(); + const std::pair> option_value = GetParam(); const std::string jar_option_value = option_value.first; std::cerr << "DEBUG: " << jar_option_value << std::endl; ConverterV2 converter; converter.convertExternalJar(option_value.first); - ASSERT_EQ(converter.getJarPaths(), option_value.second); + std::vector result; + converter.iterateJarPaths([&](auto jar) {result.push_back(jar);}); + ASSERT_EQ(result, option_value.second); } -const std::vector>> jar_escape_sequences = +const std::vector>> jar_strings_v2 = { - std::make_pair("test.jar:test2.jar", std::set({"test.jar", "test2.jar"})), - std::make_pair("\"test.jar:test2.jar\"", std::set({"\"test.jar", "test2.jar\""})), - std::make_pair("t\\:est.jar:test2.jar", std::set({"t\\", "est.jar", "test2.jar"})), + std::make_pair("test.jar:test2.jar", std::vector({"test.jar", "test2.jar"})), //basic splitting + std::make_pair("test.jar:test.jar", std::vector({"test.jar", "test.jar"})), //keep duplicates + std::make_pair("testDEF.jar:testABC.jar", std::vector({"testDEF.jar", "testABC.jar"})), //maintain order }; INSTANTIATE_TEST_SUITE_P( Converter, ConverterV2JarTest, - ::testing::ValuesIn(jar_escape_sequences) + ::testing::ValuesIn(jar_strings_v2) ); diff --git a/exaudfclient/base/javacontainer/test/BUILD b/exaudfclient/base/javacontainer/test/BUILD index 36fb36203..a3ff25cc7 100644 --- a/exaudfclient/base/javacontainer/test/BUILD +++ b/exaudfclient/base/javacontainer/test/BUILD @@ -17,7 +17,7 @@ JAVACONTAINER_PERF_TEST_SRCS = ["cpp/javacontainer_perf_test.cc", "cpp/exaudf_wr "cpp/swig_factory_test.h", "cpp/swig_factory_test.cc"] cc_test( - name = "javacontainer-test-legacy-parser", + name = "javacontainer-test-extractor-legacy", srcs = JAVACONTAINER_TEST_SRCS, deps = [ "//base/javacontainer:javacontainer", @@ -27,13 +27,13 @@ cc_test( ) cc_test( - name = "javacontainer-test-ctpg-parser", - srcs = JAVACONTAINER_TEST_SRCS + ["cpp/javacontainer_ctpg_test.cc"], + name = "javacontainer-test-extractor-v2", + srcs = JAVACONTAINER_TEST_SRCS + ["cpp/javacontainer_extractor_v2_test.cc"], deps = [ "//base/javacontainer:javacontainer", "@googletest//:gtest_main", ], - defines = ["USE_CTPG_PARSER"], + defines = ["USE_EXTRACTOR_V2"], data = ["test.jar", "other_test.jar"] ) @@ -55,6 +55,6 @@ cc_test( "//base/javacontainer:javacontainer", "@googletest//:gtest_main", ], - defines = ["USE_CTPG_PARSER"], + defines = ["USE_EXTRACTOR_V2"], data = ["test.jar", "other_test.jar"] ) diff --git a/exaudfclient/base/javacontainer/test/cpp/javacontainer_ctpg_test.cc b/exaudfclient/base/javacontainer/test/cpp/javacontainer_extractor_v2_test.cc similarity index 98% rename from exaudfclient/base/javacontainer/test/cpp/javacontainer_ctpg_test.cc rename to exaudfclient/base/javacontainer/test/cpp/javacontainer_extractor_v2_test.cc index e66168e50..ec615b637 100644 --- a/exaudfclient/base/javacontainer/test/cpp/javacontainer_ctpg_test.cc +++ b/exaudfclient/base/javacontainer/test/cpp/javacontainer_extractor_v2_test.cc @@ -3,9 +3,12 @@ #include "gmock/gmock.h" #include "base/javacontainer/test/cpp/javavm_test.h" #include "base/javacontainer/test/cpp/swig_factory_test.h" +#include "base/javacontainer/javacontainer.h" #include #include +using ::testing::MatchesRegex; + class JavaContainerEscapeSequenceTest : public ::testing::TestWithParam> {}; TEST_P(JavaContainerEscapeSequenceTest, quoted_jvm_option) { diff --git a/exaudfclient/base/javacontainer/test/cpp/javacontainer_test.cc b/exaudfclient/base/javacontainer/test/cpp/javacontainer_test.cc index 3ea3a28ce..88de7e0d4 100644 --- a/exaudfclient/base/javacontainer/test/cpp/javacontainer_test.cc +++ b/exaudfclient/base/javacontainer/test/cpp/javacontainer_test.cc @@ -49,7 +49,7 @@ TEST(JavaContainer, basic_jar_script_class_with_white_spaces) { TEST(JavaContainer, basic_jar_with_white_spaces) { const std::string script_code = "%jar base/javacontainer/test/test.jar \t ;"; -#ifndef USE_CTPG_PARSER //The parsers behave differently: The legacy parser removes trailing white spaces. +#ifndef USE_EXTRACTOR_V2 //The parsers behave differently: The legacy parser removes trailing white spaces. JavaVMTest vm(script_code); EXPECT_EQ(vm.getJavaVMInternalStatus().m_classpath, "/exaudf/base/javacontainer/exaudf_deploy.jar:base/javacontainer/test/test.jar"); #else @@ -67,6 +67,35 @@ TEST(JavaContainer, basic_jar_with_white_spaces) { #endif } +TEST(JavaContainer, basic_jars_ordering) { + /* + * This test validates correct behavior of collecting the %jar options in Extractor V1/V2. + * Both jar files referenced in `script_code` do not exist. + * The JavaVM will throw an exception with the first JAR file it gets from Extractor. + * For extractor V1: Our assumption is that the exception will be for `base/javacontainer/test/abc.jar` + * as this is alphabetically the first JAR file. (re-ordering) + * For extractor V2: Our assumption is that the exception will be for `base/javacontainer/test/test1.jar` + * as this is the first JAR file. (no re-ordering) + */ + const std::string script_code = "%jar base/javacontainer/test/test1.jar:base/javacontainer/test/abc.jar;"; + +#ifndef USE_EXTRACTOR_V2 + const char* regexExpectedException = "^.*Java VM cannot find 'base/javacontainer/test/abc\\.jar': No such file or directory$"; +#else + const char* regexExpectedException = "^.*Java VM cannot find 'base/javacontainer/test/test1\\.jar': No such file or directory$"; +#endif + EXPECT_THROW({ + try + { + JavaVMTest vm(script_code); + } + catch( const SWIGVMContainers::JavaVMach::exception& e ) + { + EXPECT_THAT( e.what(), MatchesRegex(regexExpectedException)); + throw; + } + }, SWIGVMContainers::JavaVMach::exception ); +} TEST(JavaContainer, basic_inline) { const std::string script_code = "import java.time.LocalDateTime;" @@ -495,7 +524,7 @@ TEST(JavaContainer, import_script_script_class_option_ignored) { EXPECT_EQ(vm.getJavaVMInternalStatus().m_localClasspath, "/tmp"); const std::string expected_script_code = "package com.exasol;\r\n" -#ifndef USE_CTPG_PARSER //The parsers behave differently: The legacy parser incorrectly keeps imported scriptclass options +#ifndef USE_EXTRACTOR_V2 //The parsers behave differently: The legacy parser incorrectly keeps imported scriptclass options "%scriptclass com.exasol.udf_profiling.UdfProfiler;" #endif "\n" diff --git a/exaudfclient/base/javacontainer/test/cpp/javavm_test.cc b/exaudfclient/base/javacontainer/test/cpp/javavm_test.cc index fd2b89b1a..b1f17f785 100644 --- a/exaudfclient/base/javacontainer/test/cpp/javavm_test.cc +++ b/exaudfclient/base/javacontainer/test/cpp/javavm_test.cc @@ -18,7 +18,7 @@ JavaVMTest::JavaVMTest(std::string scriptCode, std::unique_ptr swigFactory) { SWIGVMContainers::SWIGVM_params->script_code = scriptCode.data(); -#ifndef USE_CTPG_PARSER +#ifndef USE_EXTRACTOR_V2 std::unique_ptr extractor = std::make_unique(std::move(swigFactory)); #else diff --git a/exaudfclient/docs/java_script_options_parser.drawio.png b/exaudfclient/docs/java_script_options_parser.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..c51fac44e96eae1efddc33693be4fb083f3c007c GIT binary patch literal 88339 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