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"