diff --git a/CODEOWNERS b/CODEOWNERS index ab8af77e34016..c72b2900ec389 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -92,6 +92,8 @@ extensions/filters/common/original_src @snowp @klarose /*/extensions/filters/network/wasm @PiotrSikora @lizan # webassembly common extension /*/extensions/common/wasm @PiotrSikora @lizan +# webassembly runtimes +/*/extensions/wasm_runtime/ @PiotrSikora @lizan # common matcher /*/extensions/common/matcher @mattklein123 @yangminzhu # common crypto extension diff --git a/api/envoy/extensions/wasm/v3/wasm.proto b/api/envoy/extensions/wasm/v3/wasm.proto index b42fb75a0bf7c..c6affb8106115 100644 --- a/api/envoy/extensions/wasm/v3/wasm.proto +++ b/api/envoy/extensions/wasm/v3/wasm.proto @@ -28,7 +28,29 @@ message VmConfig { // See ref: "TODO: add ref" for details. string vm_id = 1; - // The Wasm runtime type (either "v8" or "null" for code compiled into Envoy). + // The Wasm runtime type. + // Available Wasm runtime types are registered as extensions. The following runtimes are included + // in Envoy code base: + // + // .. _extension_envoy.wasm.runtime.null: + // + // **envoy.wasm.runtime.null**: Null sandbox, the Wasm module must be compiled and linked into the + // Envoy binary. The registered name is given in the *code* field as *inline_string*. + // + // .. _extension_envoy.wasm.runtime.v8: + // + // **envoy.wasm.runtime.v8**: `V8 `_-based WebAssembly runtime. + // + // .. _extension_envoy.wasm.runtime.wavm: + // + // **envoy.wasm.runtime.wavm**: `WAVM `_-based WebAssembly runtime. + // This runtime is not enabled in the official build. + // + // .. _extension_envoy.wasm.runtime.wasmtime: + // + // **envoy.wasm.runtime.wasmtime**: `Wasmtime `_-based WebAssembly runtime. + // This runtime is not enabled in the official build. + // string runtime = 2 [(validate.rules).string = {min_len: 1}]; // The Wasm code that Envoy will execute. diff --git a/bazel/repository_locations.bzl b/bazel/repository_locations.bzl index ecb74393ffea1..88621c1feeec2 100644 --- a/bazel/repository_locations.bzl +++ b/bazel/repository_locations.bzl @@ -593,6 +593,9 @@ REPOSITORY_LOCATIONS_SPEC = dict( "envoy.filters.http.wasm", "envoy.filters.network.wasm", "envoy.stat_sinks.wasm", + "envoy.wasm.runtime.v8", + "envoy.wasm.runtime.wavm", + "envoy.wasm.runtime.wasmtime", ], cpe = "cpe:2.3:a:llvm:*:*", ), @@ -612,6 +615,9 @@ REPOSITORY_LOCATIONS_SPEC = dict( "envoy.filters.http.wasm", "envoy.filters.network.wasm", "envoy.stat_sinks.wasm", + "envoy.wasm.runtime.v8", + "envoy.wasm.runtime.wavm", + "envoy.wasm.runtime.wasmtime", ], cpe = "cpe:2.3:a:webassembly_virtual_machine_project:webassembly_virtual_machine:*", ), @@ -631,6 +637,9 @@ REPOSITORY_LOCATIONS_SPEC = dict( "envoy.filters.http.wasm", "envoy.filters.network.wasm", "envoy.stat_sinks.wasm", + "envoy.wasm.runtime.v8", + "envoy.wasm.runtime.wavm", + "envoy.wasm.runtime.wasmtime", ], cpe = "cpe:2.3:a:webassembly_virtual_machine_project:webassembly_virtual_machine:*", ), @@ -652,6 +661,9 @@ REPOSITORY_LOCATIONS_SPEC = dict( "envoy.filters.http.wasm", "envoy.filters.network.wasm", "envoy.stat_sinks.wasm", + "envoy.wasm.runtime.v8", + "envoy.wasm.runtime.wavm", + "envoy.wasm.runtime.wasmtime", ], cpe = "N/A", ), @@ -703,6 +715,9 @@ REPOSITORY_LOCATIONS_SPEC = dict( "envoy.filters.http.wasm", "envoy.filters.network.wasm", "envoy.stat_sinks.wasm", + "envoy.wasm.runtime.v8", + "envoy.wasm.runtime.wavm", + "envoy.wasm.runtime.wasmtime", ], release_date = "2020-10-27", cpe = "cpe:2.3:a:google:v8:*", @@ -750,6 +765,10 @@ REPOSITORY_LOCATIONS_SPEC = dict( "envoy.filters.network.rbac", "envoy.filters.network.wasm", "envoy.stat_sinks.wasm", + "envoy.wasm.runtime.null", + "envoy.wasm.runtime.v8", + "envoy.wasm.runtime.wavm", + "envoy.wasm.runtime.wasmtime", ], release_date = "2020-07-14", cpe = "N/A", @@ -769,6 +788,10 @@ REPOSITORY_LOCATIONS_SPEC = dict( "envoy.filters.http.wasm", "envoy.filters.network.wasm", "envoy.stat_sinks.wasm", + "envoy.wasm.runtime.null", + "envoy.wasm.runtime.v8", + "envoy.wasm.runtime.wavm", + "envoy.wasm.runtime.wasmtime", ], release_date = "2020-04-02", cpe = "N/A", @@ -862,6 +885,10 @@ REPOSITORY_LOCATIONS_SPEC = dict( "envoy.filters.http.wasm", "envoy.filters.network.wasm", "envoy.stat_sinks.wasm", + "envoy.wasm.runtime.null", + "envoy.wasm.runtime.v8", + "envoy.wasm.runtime.wavm", + "envoy.wasm.runtime.wasmtime", ], release_date = "2020-10-22", cpe = "N/A", @@ -881,6 +908,10 @@ REPOSITORY_LOCATIONS_SPEC = dict( "envoy.filters.http.wasm", "envoy.filters.network.wasm", "envoy.stat_sinks.wasm", + "envoy.wasm.runtime.null", + "envoy.wasm.runtime.v8", + "envoy.wasm.runtime.wavm", + "envoy.wasm.runtime.wasmtime", ], release_date = "2020-11-10", cpe = "N/A", @@ -911,6 +942,10 @@ REPOSITORY_LOCATIONS_SPEC = dict( "envoy.filters.http.wasm", "envoy.filters.network.wasm", "envoy.stat_sinks.wasm", + "envoy.wasm.runtime.null", + "envoy.wasm.runtime.v8", + "envoy.wasm.runtime.wavm", + "envoy.wasm.runtime.wasmtime", ], release_date = "2020-10-21", cpe = "N/A", @@ -931,6 +966,9 @@ REPOSITORY_LOCATIONS_SPEC = dict( "envoy.filters.http.wasm", "envoy.filters.network.wasm", "envoy.stat_sinks.wasm", + "envoy.wasm.runtime.v8", + "envoy.wasm.runtime.wavm", + "envoy.wasm.runtime.wasmtime", ], release_date = "2019-06-21", cpe = "N/A", @@ -950,6 +988,9 @@ REPOSITORY_LOCATIONS_SPEC = dict( "envoy.filters.http.wasm", "envoy.filters.network.wasm", "envoy.stat_sinks.wasm", + "envoy.wasm.runtime.v8", + "envoy.wasm.runtime.wavm", + "envoy.wasm.runtime.wasmtime", ], release_date = "2018-12-18", cpe = "N/A", diff --git a/generated_api_shadow/envoy/extensions/wasm/v3/wasm.proto b/generated_api_shadow/envoy/extensions/wasm/v3/wasm.proto index b42fb75a0bf7c..c6affb8106115 100644 --- a/generated_api_shadow/envoy/extensions/wasm/v3/wasm.proto +++ b/generated_api_shadow/envoy/extensions/wasm/v3/wasm.proto @@ -28,7 +28,29 @@ message VmConfig { // See ref: "TODO: add ref" for details. string vm_id = 1; - // The Wasm runtime type (either "v8" or "null" for code compiled into Envoy). + // The Wasm runtime type. + // Available Wasm runtime types are registered as extensions. The following runtimes are included + // in Envoy code base: + // + // .. _extension_envoy.wasm.runtime.null: + // + // **envoy.wasm.runtime.null**: Null sandbox, the Wasm module must be compiled and linked into the + // Envoy binary. The registered name is given in the *code* field as *inline_string*. + // + // .. _extension_envoy.wasm.runtime.v8: + // + // **envoy.wasm.runtime.v8**: `V8 `_-based WebAssembly runtime. + // + // .. _extension_envoy.wasm.runtime.wavm: + // + // **envoy.wasm.runtime.wavm**: `WAVM `_-based WebAssembly runtime. + // This runtime is not enabled in the official build. + // + // .. _extension_envoy.wasm.runtime.wasmtime: + // + // **envoy.wasm.runtime.wasmtime**: `Wasmtime `_-based WebAssembly runtime. + // This runtime is not enabled in the official build. + // string runtime = 2 [(validate.rules).string = {min_len: 1}]; // The Wasm code that Envoy will execute. diff --git a/source/extensions/common/wasm/BUILD b/source/extensions/common/wasm/BUILD index 02eb727951c1b..d1938a6ff1c71 100644 --- a/source/extensions/common/wasm/BUILD +++ b/source/extensions/common/wasm/BUILD @@ -16,6 +16,16 @@ envoy_cc_library( ], ) +envoy_cc_library( + name = "wasm_runtime_factory_interface", + hdrs = [ + "wasm_runtime_factory.h", + ], + deps = [ + ":wasm_hdr", + ], +) + # NB: Used to break the circular dependency between wasm_lib and null_plugin_lib. envoy_cc_library( name = "wasm_hdr", @@ -84,6 +94,7 @@ envoy_cc_library( deps = [ ":wasm_hdr", ":wasm_interoperation_lib", + ":wasm_runtime_factory_interface", "//external:abseil_base", "//external:abseil_node_hash_map", "//include/envoy/server:lifecycle_notifier_interface", diff --git a/source/extensions/common/wasm/wasm_runtime_factory.h b/source/extensions/common/wasm/wasm_runtime_factory.h new file mode 100644 index 0000000000000..de00551b44439 --- /dev/null +++ b/source/extensions/common/wasm/wasm_runtime_factory.h @@ -0,0 +1,26 @@ +#pragma once + +#include + +#include "extensions/common/wasm/wasm_vm.h" + +namespace Envoy { +namespace Extensions { +namespace Common { +namespace Wasm { + +class WasmRuntimeFactory { +public: + virtual ~WasmRuntimeFactory() = default; + virtual WasmVmPtr createWasmVm() PURE; + + virtual absl::string_view name() PURE; + virtual absl::string_view shortName() PURE; + + std::string category() { return "envoy.wasm.runtime"; } +}; + +} // namespace Wasm +} // namespace Common +} // namespace Extensions +} // namespace Envoy diff --git a/source/extensions/common/wasm/wasm_vm.cc b/source/extensions/common/wasm/wasm_vm.cc index 5b482e6bb8470..b7b8ec0c67349 100644 --- a/source/extensions/common/wasm/wasm_vm.cc +++ b/source/extensions/common/wasm/wasm_vm.cc @@ -6,21 +6,11 @@ #include "extensions/common/wasm/context.h" #include "extensions/common/wasm/ext/envoy_null_vm_wasm_api.h" #include "extensions/common/wasm/wasm_extension.h" +#include "extensions/common/wasm/wasm_runtime_factory.h" #include "extensions/common/wasm/well_known_names.h" -#include "include/proxy-wasm/null.h" #include "include/proxy-wasm/null_plugin.h" -#if defined(ENVOY_WASM_V8) -#include "include/proxy-wasm/v8.h" -#endif -#if defined(ENVOY_WASM_WAVM) -#include "include/proxy-wasm/wavm.h" -#endif -#if defined(ENVOY_WASM_WASMTIME) -#include "include/proxy-wasm/wasmtime.h" -#endif - using ContextBase = proxy_wasm::ContextBase; using Word = proxy_wasm::Word; @@ -70,36 +60,21 @@ WasmVmPtr createWasmVm(absl::string_view runtime, const Stats::ScopeSharedPtr& s ENVOY_LOG_TO_LOGGER(Envoy::Logger::Registry::getLog(Envoy::Logger::Id::wasm), warn, "Failed to create Wasm VM with unspecified runtime"); return nullptr; - } else if (runtime == WasmRuntimeNames::get().Null) { - auto wasm = proxy_wasm::createNullVm(); - wasm->integration() = getWasmExtension()->createEnvoyWasmVmIntegration(scope, runtime, "null"); - return wasm; -#if defined(ENVOY_WASM_V8) - } else if (runtime == WasmRuntimeNames::get().V8) { - auto wasm = proxy_wasm::createV8Vm(); - wasm->integration() = getWasmExtension()->createEnvoyWasmVmIntegration(scope, runtime, "v8"); - return wasm; -#endif -#if defined(ENVOY_WASM_WAVM) - } else if (runtime == WasmRuntimeNames::get().Wavm) { - auto wasm = proxy_wasm::createWavmVm(); - wasm->integration() = getWasmExtension()->createEnvoyWasmVmIntegration(scope, runtime, "wavm"); - return wasm; -#endif -#if defined(ENVOY_WASM_WASMTIME) - } else if (runtime == WasmRuntimeNames::get().Wasmtime) { - auto wasm = proxy_wasm::createWasmtimeVm(); - wasm->integration() = - getWasmExtension()->createEnvoyWasmVmIntegration(scope, runtime, "wasmtime"); - return wasm; -#endif - } else { + } + + auto runtime_factory = Registry::FactoryRegistry::getFactory(runtime); + if (runtime_factory == nullptr) { ENVOY_LOG_TO_LOGGER( Envoy::Logger::Registry::getLog(Envoy::Logger::Id::wasm), warn, "Failed to create Wasm VM using {} runtime. Envoy was compiled without support for it", runtime); return nullptr; } + + auto wasm = runtime_factory->createWasmVm(); + wasm->integration() = getWasmExtension()->createEnvoyWasmVmIntegration( + scope, runtime_factory->name(), runtime_factory->shortName()); + return wasm; } } // namespace Wasm diff --git a/source/extensions/extensions_build_config.bzl b/source/extensions/extensions_build_config.bzl index 664b561fb0d21..8a48fb6782644 100644 --- a/source/extensions/extensions_build_config.bzl +++ b/source/extensions/extensions_build_config.bzl @@ -214,8 +214,17 @@ EXTENSIONS = { # # Watchdog actions # + "envoy.watchdog.profile_action": "//source/extensions/watchdog/profile_action:config", + # + # WebAssembly runtimes + # + + "envoy.wasm.runtime.null": "//source/extensions/wasm_runtime/null:config", + "envoy.wasm.runtime.v8": "//source/extensions/wasm_runtime/v8:config", + "envoy.wasm.runtime.wavm": "//source/extensions/wasm_runtime/wavm:config", + "envoy.wasm.runtime.wasmtime": "//source/extensions/wasm_runtime/wasmtime:config", } # These can be changed to ["//visibility:public"], for downstream builds which diff --git a/source/extensions/wasm_runtime/null/BUILD b/source/extensions/wasm_runtime/null/BUILD new file mode 100644 index 0000000000000..fce183d760323 --- /dev/null +++ b/source/extensions/wasm_runtime/null/BUILD @@ -0,0 +1,21 @@ +load( + "//bazel:envoy_build_system.bzl", + "envoy_cc_extension", + "envoy_extension_package", +) + +licenses(["notice"]) # Apache 2 + +envoy_extension_package() + +envoy_cc_extension( + name = "config", + srcs = ["config.cc"], + security_posture = "unknown", + status = "alpha", + deps = [ + "//include/envoy/registry", + "//source/extensions/common/wasm:wasm_hdr", + "//source/extensions/common/wasm:wasm_runtime_factory_interface", + ], +) diff --git a/source/extensions/wasm_runtime/null/config.cc b/source/extensions/wasm_runtime/null/config.cc new file mode 100644 index 0000000000000..3515c9462ce17 --- /dev/null +++ b/source/extensions/wasm_runtime/null/config.cc @@ -0,0 +1,25 @@ +#include "envoy/registry/registry.h" + +#include "extensions/common/wasm/wasm_runtime_factory.h" + +#include "include/proxy-wasm/null.h" + +namespace Envoy { +namespace Extensions { +namespace Common { +namespace Wasm { + +class NullRuntimeFactory : public WasmRuntimeFactory { +public: + WasmVmPtr createWasmVm() override { return proxy_wasm::createNullVm(); } + + absl::string_view name() override { return "envoy.wasm.runtime.null"; } + absl::string_view shortName() override { return "null"; } +}; + +REGISTER_FACTORY(NullRuntimeFactory, WasmRuntimeFactory); + +} // namespace Wasm +} // namespace Common +} // namespace Extensions +} // namespace Envoy diff --git a/source/extensions/wasm_runtime/v8/BUILD b/source/extensions/wasm_runtime/v8/BUILD new file mode 100644 index 0000000000000..55d14af61a576 --- /dev/null +++ b/source/extensions/wasm_runtime/v8/BUILD @@ -0,0 +1,20 @@ +load( + "//bazel:envoy_build_system.bzl", + "envoy_cc_extension", + "envoy_extension_package", +) + +licenses(["notice"]) # Apache 2 + +envoy_extension_package() + +envoy_cc_extension( + name = "config", + srcs = ["config.cc"], + security_posture = "unknown", + status = "alpha", + deps = [ + "//include/envoy/registry", + "//source/extensions/common/wasm:wasm_lib", + ], +) diff --git a/source/extensions/wasm_runtime/v8/config.cc b/source/extensions/wasm_runtime/v8/config.cc new file mode 100644 index 0000000000000..1061b17b2b9df --- /dev/null +++ b/source/extensions/wasm_runtime/v8/config.cc @@ -0,0 +1,27 @@ +#include "envoy/registry/registry.h" + +#include "extensions/common/wasm/wasm_runtime_factory.h" + +#include "include/proxy-wasm/v8.h" + +namespace Envoy { +namespace Extensions { +namespace Common { +namespace Wasm { + +class V8RuntimeFactory : public WasmRuntimeFactory { +public: + WasmVmPtr createWasmVm() override { return proxy_wasm::createV8Vm(); } + + absl::string_view name() override { return "envoy.wasm.runtime.v8"; } + absl::string_view shortName() override { return "v8"; } +}; + +#if defined(ENVOY_WASM_V8) +REGISTER_FACTORY(V8RuntimeFactory, WasmRuntimeFactory); +#endif + +} // namespace Wasm +} // namespace Common +} // namespace Extensions +} // namespace Envoy diff --git a/source/extensions/wasm_runtime/wasmtime/BUILD b/source/extensions/wasm_runtime/wasmtime/BUILD new file mode 100644 index 0000000000000..55d14af61a576 --- /dev/null +++ b/source/extensions/wasm_runtime/wasmtime/BUILD @@ -0,0 +1,20 @@ +load( + "//bazel:envoy_build_system.bzl", + "envoy_cc_extension", + "envoy_extension_package", +) + +licenses(["notice"]) # Apache 2 + +envoy_extension_package() + +envoy_cc_extension( + name = "config", + srcs = ["config.cc"], + security_posture = "unknown", + status = "alpha", + deps = [ + "//include/envoy/registry", + "//source/extensions/common/wasm:wasm_lib", + ], +) diff --git a/source/extensions/wasm_runtime/wasmtime/config.cc b/source/extensions/wasm_runtime/wasmtime/config.cc new file mode 100644 index 0000000000000..a407d847bdfdc --- /dev/null +++ b/source/extensions/wasm_runtime/wasmtime/config.cc @@ -0,0 +1,27 @@ +#include "envoy/registry/registry.h" + +#include "extensions/common/wasm/wasm_runtime_factory.h" + +#include "include/proxy-wasm/wasmtime.h" + +namespace Envoy { +namespace Extensions { +namespace Common { +namespace Wasm { + +class WasmtimeRuntimeFactory : public WasmRuntimeFactory { +public: + WasmVmPtr createWasmVm() override { return proxy_wasm::createWasmtimeVm(); } + + absl::string_view name() override { return "envoy.wasm.runtime.wasmtime"; } + absl::string_view shortName() override { return "wasmtime"; } +}; + +#if defined(ENVOY_WASM_WASMTIME) +REGISTER_FACTORY(WasmtimeRuntimeFactory, WasmRuntimeFactory); +#endif + +} // namespace Wasm +} // namespace Common +} // namespace Extensions +} // namespace Envoy diff --git a/source/extensions/wasm_runtime/wavm/BUILD b/source/extensions/wasm_runtime/wavm/BUILD new file mode 100644 index 0000000000000..55d14af61a576 --- /dev/null +++ b/source/extensions/wasm_runtime/wavm/BUILD @@ -0,0 +1,20 @@ +load( + "//bazel:envoy_build_system.bzl", + "envoy_cc_extension", + "envoy_extension_package", +) + +licenses(["notice"]) # Apache 2 + +envoy_extension_package() + +envoy_cc_extension( + name = "config", + srcs = ["config.cc"], + security_posture = "unknown", + status = "alpha", + deps = [ + "//include/envoy/registry", + "//source/extensions/common/wasm:wasm_lib", + ], +) diff --git a/source/extensions/wasm_runtime/wavm/config.cc b/source/extensions/wasm_runtime/wavm/config.cc new file mode 100644 index 0000000000000..d50119cf784d1 --- /dev/null +++ b/source/extensions/wasm_runtime/wavm/config.cc @@ -0,0 +1,27 @@ +#include "envoy/registry/registry.h" + +#include "extensions/common/wasm/wasm_runtime_factory.h" + +#include "include/proxy-wasm/wavm.h" + +namespace Envoy { +namespace Extensions { +namespace Common { +namespace Wasm { + +class WavmRuntimeFactory : public WasmRuntimeFactory { +public: + WasmVmPtr createWasmVm() override { return proxy_wasm::createWavmVm(); } + + absl::string_view name() override { return "envoy.wasm.runtime.wavm"; } + absl::string_view shortName() override { return "wavm"; } +}; + +#if defined(ENVOY_WASM_WAVM) +REGISTER_FACTORY(WavmRuntimeFactory, WasmRuntimeFactory); +#endif + +} // namespace Wasm +} // namespace Common +} // namespace Extensions +} // namespace Envoy diff --git a/test/extensions/access_loggers/wasm/BUILD b/test/extensions/access_loggers/wasm/BUILD index 54ab90482a917..fc56bc9b7c396 100644 --- a/test/extensions/access_loggers/wasm/BUILD +++ b/test/extensions/access_loggers/wasm/BUILD @@ -25,6 +25,7 @@ envoy_extension_cc_test( deps = [ "//source/extensions/access_loggers/wasm:config", "//test/extensions/access_loggers/wasm/test_data:test_cpp_plugin", + "//test/extensions/common/wasm:wasm_runtime", "//test/mocks/server:server_mocks", "//test/test_common:environment_lib", "//test/test_common:utility_lib", diff --git a/test/extensions/access_loggers/wasm/config_test.cc b/test/extensions/access_loggers/wasm/config_test.cc index 744f074fdb8cd..fb570453db308 100644 --- a/test/extensions/access_loggers/wasm/config_test.cc +++ b/test/extensions/access_loggers/wasm/config_test.cc @@ -9,6 +9,7 @@ #include "extensions/access_loggers/well_known_names.h" #include "extensions/common/wasm/wasm.h" +#include "test/extensions/common/wasm/wasm_runtime.h" #include "test/mocks/server/mocks.h" #include "test/test_common/environment.h" #include "test/test_common/printers.h" @@ -39,20 +40,8 @@ class TestFactoryContext : public NiceMock {}; -// NB: this is required by VC++ which can not handle the use of macros in the macro definitions -// used by INSTANTIATE_TEST_SUITE_P. -auto testing_values = testing::Values( -#if defined(ENVOY_WASM_V8) - "v8", -#endif -#if defined(ENVOY_WASM_WAVM) - "wavm", -#endif -#if defined(ENVOY_WASM_WASMTIME) - "wasmtime", -#endif - "null"); -INSTANTIATE_TEST_SUITE_P(Runtimes, WasmAccessLogConfigTest, testing_values); +INSTANTIATE_TEST_SUITE_P(Runtimes, WasmAccessLogConfigTest, + Envoy::Extensions::Common::Wasm::runtime_values); TEST_P(WasmAccessLogConfigTest, CreateWasmFromEmpty) { auto factory = diff --git a/test/extensions/bootstrap/wasm/BUILD b/test/extensions/bootstrap/wasm/BUILD index 6a6488e2b63b8..b9c8282420c30 100644 --- a/test/extensions/bootstrap/wasm/BUILD +++ b/test/extensions/bootstrap/wasm/BUILD @@ -37,6 +37,7 @@ envoy_extension_cc_test( "//source/extensions/bootstrap/wasm:config", "//source/extensions/common/wasm:wasm_lib", "//test/extensions/bootstrap/wasm/test_data:stats_cpp_plugin", + "//test/extensions/common/wasm:wasm_runtime", "//test/mocks/server:server_mocks", "//test/mocks/upstream:upstream_mocks", "//test/test_common:environment_lib", @@ -58,6 +59,7 @@ envoy_extension_cc_test( "//source/extensions/bootstrap/wasm:config", "//source/extensions/common/wasm:wasm_lib", "//test/extensions/bootstrap/wasm/test_data:start_cpp_plugin", + "//test/extensions/common/wasm:wasm_runtime", "//test/mocks/event:event_mocks", "//test/mocks/server:server_mocks", "//test/mocks/thread_local:thread_local_mocks", @@ -85,6 +87,7 @@ envoy_extension_cc_test_binary( "//source/extensions/bootstrap/wasm:config", "//source/extensions/common/wasm:wasm_lib", "//test/extensions/bootstrap/wasm/test_data:speed_cpp_plugin", + "//test/extensions/common/wasm:wasm_runtime", "//test/mocks/server:server_mocks", "//test/mocks/upstream:upstream_mocks", "//test/test_common:environment_lib", diff --git a/test/extensions/bootstrap/wasm/config_test.cc b/test/extensions/bootstrap/wasm/config_test.cc index bd5d4b9471662..a0b7274e53fd2 100644 --- a/test/extensions/bootstrap/wasm/config_test.cc +++ b/test/extensions/bootstrap/wasm/config_test.cc @@ -6,6 +6,7 @@ #include "extensions/bootstrap/wasm/config.h" +#include "test/extensions/common/wasm/wasm_runtime.h" #include "test/mocks/event/mocks.h" #include "test/mocks/server/mocks.h" #include "test/mocks/thread_local/mocks.h" @@ -67,20 +68,8 @@ class WasmFactoryTest : public testing::TestWithParam { Server::BootstrapExtensionPtr extension_; }; -// NB: this is required by VC++ which can not handle the use of macros in the macro definitions -// used by INSTANTIATE_TEST_SUITE_P. -auto testing_values = testing::Values( -#if defined(ENVOY_WASM_V8) - "v8", -#endif -#if defined(ENVOY_WASM_WAVM) - "wavm", -#endif -#if defined(ENVOY_WASM_WASMTIME) - "wasmtime", -#endif - "null"); -INSTANTIATE_TEST_SUITE_P(Runtimes, WasmFactoryTest, testing_values); +INSTANTIATE_TEST_SUITE_P(Runtimes, WasmFactoryTest, + Envoy::Extensions::Common::Wasm::runtime_values); TEST_P(WasmFactoryTest, CreateWasmFromWasm) { auto factory = std::make_unique(); diff --git a/test/extensions/bootstrap/wasm/wasm_test.cc b/test/extensions/bootstrap/wasm/wasm_test.cc index fdfdd9536557e..f3a5daf579ff4 100644 --- a/test/extensions/bootstrap/wasm/wasm_test.cc +++ b/test/extensions/bootstrap/wasm/wasm_test.cc @@ -3,6 +3,7 @@ #include "extensions/common/wasm/wasm.h" +#include "test/extensions/common/wasm/wasm_runtime.h" #include "test/mocks/server/mocks.h" #include "test/mocks/upstream/mocks.h" #include "test/test_common/environment.h" @@ -73,34 +74,14 @@ class WasmTestBase { std::shared_ptr wasm_; }; -#if defined(ENVOY_WASM_V8) || defined(ENVOY_WASM_WAVM) || defined(ENVOY_WASM_WASMTIME) class WasmTest : public WasmTestBase, public testing::TestWithParam { public: void createWasm() { WasmTestBase::createWasm(GetParam()); } }; -// NB: this is required by VC++ which can not handle the use of macros in the macro definitions -// used by INSTANTIATE_TEST_SUITE_P. -auto testing_values = testing::Values( -#if defined(ENVOY_WASM_V8) - "v8" -#endif -#if defined(ENVOY_WASM_V8) && (defined(ENVOY_WASM_WAVM) || defined(ENVOY_WASM_WASMTIME)) - , -#endif -#if defined(ENVOY_WASM_WAVM) - "wavm" -#endif -#if (defined(ENVOY_WASM_V8) || defined(ENVOY_WASM_WAVM)) && defined(ENVOY_WASM_WASMTIME) - , -#endif -#if defined(ENVOY_WASM_WASMTIME) - "wasmtime" -#endif -); - -INSTANTIATE_TEST_SUITE_P(Runtimes, WasmTest, testing_values); -#endif +INSTANTIATE_TEST_SUITE_P(Runtimes, WasmTest, + Envoy::Extensions::Common::Wasm::sandbox_runtime_values); +GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(WasmTest); class WasmNullTest : public WasmTestBase, public testing::TestWithParam { public: @@ -116,22 +97,8 @@ class WasmNullTest : public WasmTestBase, public testing::TestWithParam> { public: @@ -151,24 +118,9 @@ class WasmTestMatrix : public WasmTestBase, }; INSTANTIATE_TEST_SUITE_P(RuntimesAndLanguages, WasmTestMatrix, - testing::Combine(testing::Values( -#if defined(ENVOY_WASM_V8) - "v8" -#endif -#if defined(ENVOY_WASM_V8) && (defined(ENVOY_WASM_WAVM) || defined(ENVOY_WASM_WASMTIME)) - , -#endif -#if defined(ENVOY_WASM_WAVM) - "wavm" -#endif -#if (defined(ENVOY_WASM_V8) || defined(ENVOY_WASM_WAVM)) && defined(ENVOY_WASM_WASMTIME) - , -#endif -#if defined(ENVOY_WASM_WASMTIME) - "wasmtime" -#endif - ), + testing::Combine(Envoy::Extensions::Common::Wasm::sandbox_runtime_values, testing::Values("cpp", "rust"))); +GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(WasmTestMatrix); TEST_P(WasmTestMatrix, Logging) { plugin_configuration_ = "configure-test"; @@ -202,9 +154,7 @@ TEST_P(WasmTestMatrix, Logging) { dispatcher_->run(Event::Dispatcher::RunType::NonBlock); dispatcher_->clearDeferredDeleteList(); } -#endif -#if defined(ENVOY_WASM_V8) || defined(ENVOY_WASM_WAVM) || defined(ENVOY_WASM_WASMTIME) TEST_P(WasmTest, BadSignature) { createWasm(); const auto code = TestEnvironment::readFileToStringForTest(TestEnvironment::substitute( @@ -266,7 +216,6 @@ TEST_P(WasmTest, Asm2Wasm) { EXPECT_CALL(*context, log_(spdlog::level::info, Eq("out 0 0 0"))); EXPECT_TRUE(wasm_->configure(context, plugin_)); } -#endif TEST_P(WasmNullTest, Stats) { createWasm(); diff --git a/test/extensions/common/wasm/BUILD b/test/extensions/common/wasm/BUILD index 4e586cb7902f3..b26be4cdb7e51 100644 --- a/test/extensions/common/wasm/BUILD +++ b/test/extensions/common/wasm/BUILD @@ -2,6 +2,7 @@ load( "//bazel:envoy_build_system.bzl", "envoy_cc_test", "envoy_cc_test_binary", + "envoy_cc_test_library", "envoy_package", ) load( @@ -21,6 +22,7 @@ envoy_cc_test( ]), deps = [ "//source/extensions/common/wasm:wasm_lib", + "//test/extensions/common/wasm:wasm_runtime", "//test/test_common:environment_lib", "//test/test_common:registry_lib", "//test/test_common:utility_lib", @@ -44,6 +46,7 @@ envoy_cc_test( "//source/common/stats:stats_lib", "//source/extensions/common/crypto:utility_lib", "//source/extensions/common/wasm:wasm_lib", + "//test/extensions/common/wasm:wasm_runtime", "//test/extensions/common/wasm/test_data:test_context_cpp_plugin", "//test/extensions/common/wasm/test_data:test_cpp_plugin", "//test/mocks/server:server_mocks", @@ -63,8 +66,21 @@ envoy_cc_test_binary( deps = [ "//source/common/event:dispatcher_lib", "//source/extensions/common/wasm:wasm_lib", + "//test/extensions/common/wasm:wasm_runtime", "//test/mocks/server:server_mocks", "//test/mocks/upstream:upstream_mocks", "//test/test_common:environment_lib", ], ) + +envoy_cc_test_library( + name = "wasm_runtime", + srcs = ["wasm_runtime.cc"], + hdrs = ["wasm_runtime.h"], + deps = [ + "//source/extensions/wasm_runtime/null:config", + "//source/extensions/wasm_runtime/v8:config", + "//source/extensions/wasm_runtime/wasmtime:config", + "//source/extensions/wasm_runtime/wavm:config", + ], +) diff --git a/test/extensions/common/wasm/wasm_runtime.cc b/test/extensions/common/wasm/wasm_runtime.cc new file mode 100644 index 0000000000000..a8451c70df642 --- /dev/null +++ b/test/extensions/common/wasm/wasm_runtime.cc @@ -0,0 +1,41 @@ +#include "test/extensions/common/wasm/wasm_runtime.h" + +namespace Envoy { +namespace Extensions { +namespace Common { +namespace Wasm { + +std::vector runtimes() { + std::vector runtimes = sandboxRuntimes(); + runtimes.push_back("null"); + return runtimes; +} + +std::vector sandboxRuntimes() { + std::vector runtimes; +#if defined(ENVOY_WASM_V8) + runtimes.push_back("v8"); +#endif +#if defined(ENVOY_WASM_WAVM) + runtimes.push_back("wavm"); +#endif +#if defined(ENVOY_WASM_WASMTIME) + runtimes.push_back("wasmtime"); +#endif + return runtimes; +} + +std::vector> runtimesAndLanguages() { + std::vector> values; + for (const auto& runtime : sandboxRuntimes()) { + values.push_back(std::make_tuple(runtime, "cpp")); + values.push_back(std::make_tuple(runtime, "rust")); + } + values.push_back(std::make_tuple("null", "cpp")); + return values; +} + +} // namespace Wasm +} // namespace Common +} // namespace Extensions +} // namespace Envoy diff --git a/test/extensions/common/wasm/wasm_runtime.h b/test/extensions/common/wasm/wasm_runtime.h new file mode 100644 index 0000000000000..ef248d85310b2 --- /dev/null +++ b/test/extensions/common/wasm/wasm_runtime.h @@ -0,0 +1,26 @@ +#pragma once + +#include "gtest/gtest.h" + +namespace Envoy { +namespace Extensions { +namespace Common { +namespace Wasm { + +// All WASM runtimes. +std::vector runtimes(); + +// All sandboxed WASM runtimes. +std::vector sandboxRuntimes(); + +// Testable runtime and language combinations +std::vector> runtimesAndLanguages(); + +inline auto runtime_values = testing::ValuesIn(runtimes()); +inline auto sandbox_runtime_values = testing::ValuesIn(sandboxRuntimes()); +inline auto runtime_and_language_values = testing::ValuesIn(runtimesAndLanguages()); + +} // namespace Wasm +} // namespace Common +} // namespace Extensions +} // namespace Envoy diff --git a/test/extensions/common/wasm/wasm_test.cc b/test/extensions/common/wasm/wasm_test.cc index 110f7f720eec4..9f48455b65b7f 100644 --- a/test/extensions/common/wasm/wasm_test.cc +++ b/test/extensions/common/wasm/wasm_test.cc @@ -6,6 +6,7 @@ #include "extensions/common/wasm/wasm.h" +#include "test/extensions/common/wasm/wasm_runtime.h" #include "test/mocks/server/mocks.h" #include "test/mocks/stats/mocks.h" #include "test/mocks/upstream/mocks.h" @@ -89,20 +90,7 @@ class WasmCommonTest : public testing::TestWithParam { } }; -// NB: this is required by VC++ which can not handle the use of macros in the macro definitions -// used by INSTANTIATE_TEST_SUITE_P. -auto test_values = testing::Values( -#if defined(ENVOY_WASM_V8) - "v8", -#endif -#if defined(ENVOY_WASM_WAVM) - "wavm", -#endif -#if defined(ENVOY_WASM_WASMTIME) - "wasmtime", -#endif - "null"); -INSTANTIATE_TEST_SUITE_P(Runtimes, WasmCommonTest, test_values); +INSTANTIATE_TEST_SUITE_P(Runtimes, WasmCommonTest, Envoy::Extensions::Common::Wasm::runtime_values); TEST_P(WasmCommonTest, EnvoyWasm) { auto envoy_wasm = std::make_unique(); @@ -956,7 +944,8 @@ class WasmCommonContextTest std::unique_ptr context_; }; -INSTANTIATE_TEST_SUITE_P(Runtimes, WasmCommonContextTest, test_values); +INSTANTIATE_TEST_SUITE_P(Runtimes, WasmCommonContextTest, + Envoy::Extensions::Common::Wasm::runtime_values); TEST_P(WasmCommonContextTest, OnDnsResolve) { std::string code; diff --git a/test/extensions/filters/http/wasm/BUILD b/test/extensions/filters/http/wasm/BUILD index 579903b311fda..32aea02c255f3 100644 --- a/test/extensions/filters/http/wasm/BUILD +++ b/test/extensions/filters/http/wasm/BUILD @@ -33,6 +33,7 @@ envoy_extension_cc_test( deps = [ "//source/common/http:message_lib", "//source/extensions/filters/http/wasm:wasm_filter_lib", + "//test/extensions/common/wasm:wasm_runtime", "//test/extensions/filters/http/wasm/test_data:test_cpp_plugin", "//test/mocks/network:connection_mocks", "//test/mocks/router:router_mocks", @@ -57,6 +58,7 @@ envoy_extension_cc_test( "//source/extensions/common/crypto:utility_lib", "//source/extensions/common/wasm:wasm_lib", "//source/extensions/filters/http/wasm:config", + "//test/extensions/common/wasm:wasm_runtime", "//test/mocks/server:server_mocks", "//test/test_common:environment_lib", "@envoy_api//envoy/extensions/filters/http/wasm/v3:pkg_cc_proto", diff --git a/test/extensions/filters/http/wasm/config_test.cc b/test/extensions/filters/http/wasm/config_test.cc index 552aa61a9387a..5d5d92afb6b58 100644 --- a/test/extensions/filters/http/wasm/config_test.cc +++ b/test/extensions/filters/http/wasm/config_test.cc @@ -11,6 +11,7 @@ #include "extensions/common/wasm/wasm.h" #include "extensions/filters/http/wasm/config.h" +#include "test/extensions/common/wasm/wasm_runtime.h" #include "test/mocks/http/mocks.h" #include "test/mocks/server/mocks.h" #include "test/test_common/environment.h" @@ -29,7 +30,6 @@ using Common::Wasm::WasmException; namespace HttpFilters { namespace Wasm { -#if defined(ENVOY_WASM_V8) || defined(ENVOY_WASM_WAVM) || defined(ENVOY_WASM_WASMTIME) class WasmFilterConfigTest : public Event::TestUsingSimulatedTime, public testing::TestWithParam { protected: @@ -65,27 +65,9 @@ class WasmFilterConfigTest : public Event::TestUsingSimulatedTime, Event::TimerCb retry_timer_cb_; }; -// NB: this is required by VC++ which can not handle the use of macros in the macro definitions -// used by INSTANTIATE_TEST_SUITE_P. -auto testing_values = testing::Values( -#if defined(ENVOY_WASM_V8) - "v8" -#endif -#if defined(ENVOY_WASM_V8) && (defined(ENVOY_WASM_WAVM) || defined(ENVOY_WASM_WASMTIME)) - , -#endif -#if defined(ENVOY_WASM_WAVM) - "wavm" -#endif -#if (defined(ENVOY_WASM_V8) || defined(ENVOY_WASM_WAVM)) && defined(ENVOY_WASM_WASMTIME) - , -#endif -#if defined(ENVOY_WASM_WASMTIME) - "wasmtime" -#endif -); - -INSTANTIATE_TEST_SUITE_P(Runtimes, WasmFilterConfigTest, testing_values); +INSTANTIATE_TEST_SUITE_P(Runtimes, WasmFilterConfigTest, + Envoy::Extensions::Common::Wasm::sandbox_runtime_values); +GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(WasmFilterConfigTest); TEST_P(WasmFilterConfigTest, JsonLoadFromFileWasm) { const std::string json = TestEnvironment::substitute(absl::StrCat(R"EOF( @@ -832,7 +814,6 @@ TEST_P(WasmFilterConfigTest, YamlLoadFromRemoteSuccessBadcodeFailOpen) { // The filter is not registered. cb(filter_callback); } -#endif } // namespace Wasm } // namespace HttpFilters diff --git a/test/extensions/filters/http/wasm/wasm_filter_test.cc b/test/extensions/filters/http/wasm/wasm_filter_test.cc index 9d3cda60b6ec1..b9c0b5b69ff24 100644 --- a/test/extensions/filters/http/wasm/wasm_filter_test.cc +++ b/test/extensions/filters/http/wasm/wasm_filter_test.cc @@ -2,6 +2,7 @@ #include "extensions/filters/http/wasm/wasm_filter.h" +#include "test/extensions/common/wasm/wasm_runtime.h" #include "test/mocks/network/connection.h" #include "test/mocks/router/mocks.h" #include "test/test_common/wasm_base.h" @@ -94,20 +95,8 @@ class WasmHttpFilterTest : public Common::Wasm::WasmHttpFilterTestBase< Grpc::MockAsyncClientManager async_client_manager_; }; -// NB: this is required by VC++ which can not handle the use of macros in the macro definitions -// used by INSTANTIATE_TEST_SUITE_P. -auto testing_values = testing::Values( -#if defined(ENVOY_WASM_V8) - std::make_tuple("v8", "cpp"), std::make_tuple("v8", "rust"), -#endif -#if defined(ENVOY_WASM_WAVM) - std::make_tuple("wavm", "cpp"), std::make_tuple("wavm", "rust"), -#endif -#if defined(ENVOY_WASM_WASMTIME) - std::make_tuple("wasmtime", "cpp"), std::make_tuple("wasmtime", "rust"), -#endif - std::make_tuple("null", "cpp")); -INSTANTIATE_TEST_SUITE_P(RuntimesAndLanguages, WasmHttpFilterTest, testing_values); +INSTANTIATE_TEST_SUITE_P(RuntimesAndLanguages, WasmHttpFilterTest, + Envoy::Extensions::Common::Wasm::runtime_and_language_values); // Bad code in initial config. TEST_P(WasmHttpFilterTest, BadCode) { @@ -1210,9 +1199,11 @@ TEST_P(WasmHttpFilterTest, GrpcStreamOpenAtShutdown) { } // Test metadata access including CEL expressions. -// TODO: re-enable this on Windows if and when the CEL `Antlr` parser compiles on Windows. -#if defined(ENVOY_WASM_V8) || defined(ENVOY_WASM_WAVM) || defined(ENVOY_WASM_WASMTIME) TEST_P(WasmHttpFilterTest, Metadata) { +#ifdef WIN32 + // TODO: re-enable this on Windows if and when the CEL `Antlr` parser compiles on Windows. + GTEST_SKIP() << "Skipping on Windows"; +#endif setupTest("", "metadata"); setupFilter(); envoy::config::core::v3::Node node_data; @@ -1266,7 +1257,6 @@ TEST_P(WasmHttpFilterTest, Metadata) { filter().onDestroy(); filter().onDestroy(); // Does nothing. } -#endif TEST_P(WasmHttpFilterTest, Property) { if (std::get<1>(GetParam()) == "rust") { diff --git a/test/extensions/filters/network/wasm/BUILD b/test/extensions/filters/network/wasm/BUILD index d21eba6c08534..bfbd34124d5fa 100644 --- a/test/extensions/filters/network/wasm/BUILD +++ b/test/extensions/filters/network/wasm/BUILD @@ -29,6 +29,7 @@ envoy_extension_cc_test( "//source/extensions/common/crypto:utility_lib", "//source/extensions/common/wasm:wasm_lib", "//source/extensions/filters/network/wasm:config", + "//test/extensions/common/wasm:wasm_runtime", "//test/extensions/filters/network/wasm/test_data:test_cpp_plugin", "//test/mocks/server:server_mocks", "//test/test_common:environment_lib", @@ -46,6 +47,7 @@ envoy_extension_cc_test( extension_name = "envoy.filters.network.wasm", deps = [ "//source/extensions/filters/network/wasm:wasm_filter_lib", + "//test/extensions/common/wasm:wasm_runtime", "//test/extensions/filters/network/wasm/test_data:test_cpp_plugin", "//test/mocks/network:network_mocks", "//test/mocks/server:server_mocks", diff --git a/test/extensions/filters/network/wasm/config_test.cc b/test/extensions/filters/network/wasm/config_test.cc index f1507071ef781..a56738b940352 100644 --- a/test/extensions/filters/network/wasm/config_test.cc +++ b/test/extensions/filters/network/wasm/config_test.cc @@ -8,6 +8,7 @@ #include "extensions/filters/network/wasm/config.h" #include "extensions/filters/network/wasm/wasm_filter.h" +#include "test/extensions/common/wasm/wasm_runtime.h" #include "test/mocks/server/mocks.h" #include "test/test_common/environment.h" @@ -56,20 +57,8 @@ class WasmNetworkFilterConfigTest : public testing::TestWithParam { Event::TimerCb retry_timer_cb_; }; -// NB: this is required by VC++ which can not handle the use of macros in the macro definitions -// used by INSTANTIATE_TEST_SUITE_P. -auto testing_values = testing::Values( -#if defined(ENVOY_WASM_V8) - "v8", -#endif -#if defined(ENVOY_WASM_WAVM) - "wavm", -#endif -#if defined(ENVOY_WASM_WASMTIME) - "wasmtime", -#endif - "null"); -INSTANTIATE_TEST_SUITE_P(Runtimes, WasmNetworkFilterConfigTest, testing_values); +INSTANTIATE_TEST_SUITE_P(Runtimes, WasmNetworkFilterConfigTest, + Envoy::Extensions::Common::Wasm::runtime_values); TEST_P(WasmNetworkFilterConfigTest, YamlLoadFromFileWasm) { if (GetParam() == "null") { diff --git a/test/extensions/filters/network/wasm/wasm_filter_test.cc b/test/extensions/filters/network/wasm/wasm_filter_test.cc index dd3a2e29a0c2a..c3b15622c0bcc 100644 --- a/test/extensions/filters/network/wasm/wasm_filter_test.cc +++ b/test/extensions/filters/network/wasm/wasm_filter_test.cc @@ -3,6 +3,7 @@ #include "extensions/common/wasm/wasm.h" #include "extensions/filters/network/wasm/wasm_filter.h" +#include "test/extensions/common/wasm/wasm_runtime.h" #include "test/mocks/network/mocks.h" #include "test/mocks/server/mocks.h" #include "test/test_common/wasm_base.h" @@ -82,20 +83,8 @@ class WasmNetworkFilterTest : public Common::Wasm::WasmNetworkFilterTestBase< std::string code_; }; -// NB: this is required by VC++ which can not handle the use of macros in the macro definitions -// used by INSTANTIATE_TEST_SUITE_P. -auto testing_values = testing::Values( -#if defined(ENVOY_WASM_V8) - std::make_tuple("v8", "cpp"), std::make_tuple("v8", "rust"), -#endif -#if defined(ENVOY_WASM_WAVM) - std::make_tuple("wavm", "cpp"), std::make_tuple("wavm", "rust"), -#endif -#if defined(ENVOY_WASM_WASMTIME) - std::make_tuple("wasmtime", "cpp"), std::make_tuple("wasmtime", "rust"), -#endif - std::make_tuple("null", "cpp")); -INSTANTIATE_TEST_SUITE_P(RuntimesAndLanguages, WasmNetworkFilterTest, testing_values); +INSTANTIATE_TEST_SUITE_P(RuntimesAndLanguages, WasmNetworkFilterTest, + Envoy::Extensions::Common::Wasm::runtime_and_language_values); // Bad code in initial config. TEST_P(WasmNetworkFilterTest, BadCode) { diff --git a/test/extensions/stats_sinks/wasm/BUILD b/test/extensions/stats_sinks/wasm/BUILD index 6135c8cfcf0a4..b0911d7aaa9f6 100644 --- a/test/extensions/stats_sinks/wasm/BUILD +++ b/test/extensions/stats_sinks/wasm/BUILD @@ -24,6 +24,7 @@ envoy_extension_cc_test( extension_name = "envoy.stat_sinks.wasm", deps = [ "//source/extensions/stat_sinks/wasm:config", + "//test/extensions/common/wasm:wasm_runtime", "//test/extensions/stats_sinks/wasm/test_data:test_context_cpp_plugin", "//test/mocks/server:server_mocks", "@envoy_api//envoy/extensions/stat_sinks/wasm/v3:pkg_cc_proto", @@ -41,6 +42,7 @@ envoy_extension_cc_test( deps = [ "//source/common/stats:stats_lib", "//source/extensions/common/wasm:wasm_lib", + "//test/extensions/common/wasm:wasm_runtime", "//test/extensions/stats_sinks/wasm/test_data:test_context_cpp_plugin", "//test/mocks/stats:stats_mocks", "//test/test_common:wasm_lib", diff --git a/test/extensions/stats_sinks/wasm/config_test.cc b/test/extensions/stats_sinks/wasm/config_test.cc index d9b1263215afd..012f4ecc2c982 100644 --- a/test/extensions/stats_sinks/wasm/config_test.cc +++ b/test/extensions/stats_sinks/wasm/config_test.cc @@ -8,6 +8,7 @@ #include "extensions/stat_sinks/wasm/wasm_stat_sink_impl.h" #include "extensions/stat_sinks/well_known_names.h" +#include "test/extensions/common/wasm/wasm_runtime.h" #include "test/mocks/server/mocks.h" #include "test/test_common/environment.h" #include "test/test_common/printers.h" @@ -65,20 +66,8 @@ class WasmStatSinkConfigTest : public testing::TestWithParam { Stats::SinkPtr sink_; }; -// NB: this is required by VC++ which can not handle the use of macros in the macro definitions -// used by INSTANTIATE_TEST_SUITE_P. -auto testing_values = testing::Values( -#if defined(ENVOY_WASM_V8) - "v8", -#endif -#if defined(ENVOY_WASM_WAVM) - "wavm", -#endif -#if defined(ENVOY_WASM_WASMTIME) - "wasmtime", -#endif - "null"); -INSTANTIATE_TEST_SUITE_P(Runtimes, WasmStatSinkConfigTest, testing_values); +INSTANTIATE_TEST_SUITE_P(Runtimes, WasmStatSinkConfigTest, + Envoy::Extensions::Common::Wasm::runtime_values); TEST_P(WasmStatSinkConfigTest, CreateWasmFromEmpty) { envoy::extensions::stat_sinks::wasm::v3::Wasm config; diff --git a/test/extensions/stats_sinks/wasm/wasm_stat_sink_test.cc b/test/extensions/stats_sinks/wasm/wasm_stat_sink_test.cc index 716925bfd12fc..db9f4108aedd5 100644 --- a/test/extensions/stats_sinks/wasm/wasm_stat_sink_test.cc +++ b/test/extensions/stats_sinks/wasm/wasm_stat_sink_test.cc @@ -2,6 +2,7 @@ #include "extensions/common/wasm/wasm.h" +#include "test/extensions/common/wasm/wasm_runtime.h" #include "test/mocks/upstream/mocks.h" #include "test/test_common/wasm_base.h" @@ -54,20 +55,8 @@ class WasmCommonContextTest std::unique_ptr context_; }; -// NB: this is required by VC++ which can not handle the use of macros in the macro definitions -// used by INSTANTIATE_TEST_SUITE_P. -auto testing_values = testing::Values( -#if defined(ENVOY_WASM_V8) - "v8", -#endif -#if defined(ENVOY_WASM_WAVM) - "wavm", -#endif -#if defined(ENVOY_WASM_WASMTIME) - "wasmtime", -#endif - "null"); -INSTANTIATE_TEST_SUITE_P(Runtimes, WasmCommonContextTest, testing_values); +INSTANTIATE_TEST_SUITE_P(Runtimes, WasmCommonContextTest, + Envoy::Extensions::Common::Wasm::runtime_values); TEST_P(WasmCommonContextTest, OnStat) { std::string code; diff --git a/test/per_file_coverage.sh b/test/per_file_coverage.sh index 13526f0eebb2c..8de0092d29819 100755 --- a/test/per_file_coverage.sh +++ b/test/per_file_coverage.sh @@ -67,6 +67,9 @@ declare -a KNOWN_LOW_COVERAGE=( "source/extensions/transport_sockets/tls:94.2" "source/extensions/transport_sockets/tls/ocsp:95.3" "source/extensions/transport_sockets/tls/private_key:76.9" +"source/extensions/wasm_runtime:50.0" +"source/extensions/wasm_runtime/wasmtime:0.0" # Not enabled in coverage build +"source/extensions/wasm_runtime/wavm:0.0" # Noe enabled in coverage build "source/extensions/watchdog:69.6" # Death tests within extensions "source/extensions/watchdog/profile_action:84.9" "source/server:94.6"