aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--client/js/app/yarn.lock166
-rw-r--r--container-core/src/main/java/com/yahoo/restapi/RestApi.java17
-rw-r--r--container-core/src/main/java/com/yahoo/restapi/RestApiImpl.java1
-rw-r--r--dependency-versions/pom.xml6
-rw-r--r--messagebus/src/tests/routing/CMakeLists.txt1
-rw-r--r--messagebus/src/tests/routing/routing.cpp579
-rw-r--r--messagebus/src/tests/routingcontext/CMakeLists.txt1
-rw-r--r--messagebus/src/tests/routingcontext/routingcontext.cpp74
-rw-r--r--messagebus/src/tests/routingspec/CMakeLists.txt1
-rw-r--r--messagebus/src/tests/routingspec/routingspec.cpp206
-rw-r--r--messagebus/src/tests/sourcesession/CMakeLists.txt1
-rw-r--r--messagebus/src/tests/sourcesession/sourcesession.cpp56
-rw-r--r--messagebus/src/tests/throttling/CMakeLists.txt1
-rw-r--r--messagebus/src/tests/throttling/throttling.cpp114
-rw-r--r--messagebus/src/tests/timeout/CMakeLists.txt1
-rw-r--r--messagebus/src/tests/timeout/timeout.cpp38
-rw-r--r--metrics/src/main/java/ai/vespa/metrics/set/InfrastructureMetricSet.java10
-rw-r--r--parent/pom.xml2
-rw-r--r--searchcore/src/tests/proton/attribute/CMakeLists.txt1
-rw-r--r--searchcore/src/tests/proton/attribute/attributeflush_test.cpp228
-rw-r--r--searchcore/src/tests/proton/feed_and_search/feed_and_search_test.cpp59
-rw-r--r--searchcore/src/tests/proton/feedtoken/CMakeLists.txt1
-rw-r--r--searchcore/src/tests/proton/feedtoken/feedtoken_test.cpp39
-rw-r--r--searchcore/src/tests/proton/index/CMakeLists.txt2
-rw-r--r--searchcore/src/tests/proton/index/diskindexcleaner_test.cpp72
-rw-r--r--searchcore/src/tests/proton/index/fusionrunner_test.cpp143
-rw-r--r--searchlib/src/tests/attribute/guard/CMakeLists.txt1
-rw-r--r--searchlib/src/tests/attribute/guard/attributeguard_test.cpp20
-rw-r--r--vespaclient-java/src/main/java/com/yahoo/vespa/feed/perf/SimpleFeeder.java22
-rw-r--r--vespaclient-java/src/test/java/com/yahoo/vespa/feed/perf/SimpleFeederTest.java14
30 files changed, 793 insertions, 1084 deletions
diff --git a/client/js/app/yarn.lock b/client/js/app/yarn.lock
index 192f246f2d9..aa0d5f40b8d 100644
--- a/client/js/app/yarn.lock
+++ b/client/js/app/yarn.lock
@@ -1320,70 +1320,70 @@
resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.15.3.tgz#d2509048d69dbb72d5389a14945339f1430b2d3c"
integrity sha512-Oy8rmScVrVxWZVOpEF57ovlnhpZ8CCPlnIIumVcV9nFdiSIrus99+Lw78ekXyGvVDlIsFJbSfmSovJUhCWYV3w==
-"@rollup/rollup-android-arm-eabi@4.12.0":
- version "4.12.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz#38c3abd1955a3c21d492af6b1a1dca4bb1d894d6"
- integrity sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==
-
-"@rollup/rollup-android-arm64@4.12.0":
- version "4.12.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz#3822e929f415627609e53b11cec9a4be806de0e2"
- integrity sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==
-
-"@rollup/rollup-darwin-arm64@4.12.0":
- version "4.12.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz#6c082de71f481f57df6cfa3701ab2a7afde96f69"
- integrity sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==
-
-"@rollup/rollup-darwin-x64@4.12.0":
- version "4.12.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz#c34ca0d31f3c46a22c9afa0e944403eea0edcfd8"
- integrity sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==
-
-"@rollup/rollup-linux-arm-gnueabihf@4.12.0":
- version "4.12.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz#48e899c1e438629c072889b824a98787a7c2362d"
- integrity sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==
-
-"@rollup/rollup-linux-arm64-gnu@4.12.0":
- version "4.12.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz#788c2698a119dc229062d40da6ada8a090a73a68"
- integrity sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==
-
-"@rollup/rollup-linux-arm64-musl@4.12.0":
- version "4.12.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz#3882a4e3a564af9e55804beeb67076857b035ab7"
- integrity sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==
-
-"@rollup/rollup-linux-riscv64-gnu@4.12.0":
- version "4.12.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz#0c6ad792e1195c12bfae634425a3d2aa0fe93ab7"
- integrity sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==
-
-"@rollup/rollup-linux-x64-gnu@4.12.0":
- version "4.12.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz#9d62485ea0f18d8674033b57aa14fb758f6ec6e3"
- integrity sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==
-
-"@rollup/rollup-linux-x64-musl@4.12.0":
- version "4.12.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz#50e8167e28b33c977c1f813def2b2074d1435e05"
- integrity sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==
-
-"@rollup/rollup-win32-arm64-msvc@4.12.0":
- version "4.12.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz#68d233272a2004429124494121a42c4aebdc5b8e"
- integrity sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==
-
-"@rollup/rollup-win32-ia32-msvc@4.12.0":
- version "4.12.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz#366ca62221d1689e3b55a03f4ae12ae9ba595d40"
- integrity sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==
-
-"@rollup/rollup-win32-x64-msvc@4.12.0":
- version "4.12.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz#9ffdf9ed133a7464f4ae187eb9e1294413fab235"
- integrity sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==
+"@rollup/rollup-android-arm-eabi@4.13.0":
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz#b98786c1304b4ff8db3a873180b778649b5dff2b"
+ integrity sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==
+
+"@rollup/rollup-android-arm64@4.13.0":
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz#8833679af11172b1bf1ab7cb3bad84df4caf0c9e"
+ integrity sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==
+
+"@rollup/rollup-darwin-arm64@4.13.0":
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz#ef02d73e0a95d406e0eb4fd61a53d5d17775659b"
+ integrity sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==
+
+"@rollup/rollup-darwin-x64@4.13.0":
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz#3ce5b9bcf92b3341a5c1c58a3e6bcce0ea9e7455"
+ integrity sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==
+
+"@rollup/rollup-linux-arm-gnueabihf@4.13.0":
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz#3d3d2c018bdd8e037c6bfedd52acfff1c97e4be4"
+ integrity sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==
+
+"@rollup/rollup-linux-arm64-gnu@4.13.0":
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz#5fc8cc978ff396eaa136d7bfe05b5b9138064143"
+ integrity sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==
+
+"@rollup/rollup-linux-arm64-musl@4.13.0":
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz#f2ae7d7bed416ffa26d6b948ac5772b520700eef"
+ integrity sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==
+
+"@rollup/rollup-linux-riscv64-gnu@4.13.0":
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz#303d57a328ee9a50c85385936f31cf62306d30b6"
+ integrity sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==
+
+"@rollup/rollup-linux-x64-gnu@4.13.0":
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz#f672f6508f090fc73f08ba40ff76c20b57424778"
+ integrity sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==
+
+"@rollup/rollup-linux-x64-musl@4.13.0":
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz#d2f34b1b157f3e7f13925bca3288192a66755a89"
+ integrity sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==
+
+"@rollup/rollup-win32-arm64-msvc@4.13.0":
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz#8ffecc980ae4d9899eb2f9c4ae471a8d58d2da6b"
+ integrity sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==
+
+"@rollup/rollup-win32-ia32-msvc@4.13.0":
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz#a7505884f415662e088365b9218b2b03a88fc6f2"
+ integrity sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==
+
+"@rollup/rollup-win32-x64-msvc@4.13.0":
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz#6abd79db7ff8d01a58865ba20a63cfd23d9e2a10"
+ integrity sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==
"@sinclair/typebox@^0.27.8":
version "0.27.8"
@@ -4813,25 +4813,25 @@ rimraf@^3.0.2:
glob "^7.1.3"
rollup@^4.2.0:
- version "4.12.0"
- resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.12.0.tgz#0b6d1e5f3d46bbcf244deec41a7421dc54cc45b5"
- integrity sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.13.0.tgz#dd2ae144b4cdc2ea25420477f68d4937a721237a"
+ integrity sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==
dependencies:
"@types/estree" "1.0.5"
optionalDependencies:
- "@rollup/rollup-android-arm-eabi" "4.12.0"
- "@rollup/rollup-android-arm64" "4.12.0"
- "@rollup/rollup-darwin-arm64" "4.12.0"
- "@rollup/rollup-darwin-x64" "4.12.0"
- "@rollup/rollup-linux-arm-gnueabihf" "4.12.0"
- "@rollup/rollup-linux-arm64-gnu" "4.12.0"
- "@rollup/rollup-linux-arm64-musl" "4.12.0"
- "@rollup/rollup-linux-riscv64-gnu" "4.12.0"
- "@rollup/rollup-linux-x64-gnu" "4.12.0"
- "@rollup/rollup-linux-x64-musl" "4.12.0"
- "@rollup/rollup-win32-arm64-msvc" "4.12.0"
- "@rollup/rollup-win32-ia32-msvc" "4.12.0"
- "@rollup/rollup-win32-x64-msvc" "4.12.0"
+ "@rollup/rollup-android-arm-eabi" "4.13.0"
+ "@rollup/rollup-android-arm64" "4.13.0"
+ "@rollup/rollup-darwin-arm64" "4.13.0"
+ "@rollup/rollup-darwin-x64" "4.13.0"
+ "@rollup/rollup-linux-arm-gnueabihf" "4.13.0"
+ "@rollup/rollup-linux-arm64-gnu" "4.13.0"
+ "@rollup/rollup-linux-arm64-musl" "4.13.0"
+ "@rollup/rollup-linux-riscv64-gnu" "4.13.0"
+ "@rollup/rollup-linux-x64-gnu" "4.13.0"
+ "@rollup/rollup-linux-x64-musl" "4.13.0"
+ "@rollup/rollup-win32-arm64-msvc" "4.13.0"
+ "@rollup/rollup-win32-ia32-msvc" "4.13.0"
+ "@rollup/rollup-win32-x64-msvc" "4.13.0"
fsevents "~2.3.2"
rsvp@^4.8.4:
@@ -5452,9 +5452,9 @@ v8-to-istanbul@^9.0.1:
convert-source-map "^1.6.0"
vite@^5.0.5:
- version "5.1.5"
- resolved "https://registry.yarnpkg.com/vite/-/vite-5.1.5.tgz#bdbc2b15e8000d9cc5172f059201178f9c9de5fb"
- integrity sha512-BdN1xh0Of/oQafhU+FvopafUp6WaYenLU/NFoL5WyJL++GxkNfieKzBhM24H3HVsPQrlAqB7iJYTHabzaRed5Q==
+ version "5.1.6"
+ resolved "https://registry.yarnpkg.com/vite/-/vite-5.1.6.tgz#706dae5fab9e97f57578469eef1405fc483943e4"
+ integrity sha512-yYIAZs9nVfRJ/AiOLCA91zzhjsHUgMjB+EigzFb6W2XTLO8JixBCKCjvhKZaye+NKYHCrkv3Oh50dH9EdLU2RA==
dependencies:
esbuild "^0.19.3"
postcss "^8.4.35"
diff --git a/container-core/src/main/java/com/yahoo/restapi/RestApi.java b/container-core/src/main/java/com/yahoo/restapi/RestApi.java
index ee5628988c9..69cbf48cb1b 100644
--- a/container-core/src/main/java/com/yahoo/restapi/RestApi.java
+++ b/container-core/src/main/java/com/yahoo/restapi/RestApi.java
@@ -15,12 +15,11 @@ import com.yahoo.security.tls.ConnectionAuthContext;
import javax.net.ssl.SSLSession;
import java.io.InputStream;
+import java.math.BigDecimal;
import java.net.InetSocketAddress;
import java.security.Principal;
import java.util.List;
import java.util.Optional;
-import java.util.OptionalDouble;
-import java.util.OptionalLong;
/**
* Rest API routing and response serialization
@@ -149,6 +148,8 @@ public interface RestApi {
/** Scheme, domain and port, for the original request. <em>Use this only for generating resources links, not for custom routing!</em> */
// TODO: this needs to include path and query as well, to be useful for generating resource links that need not be rewritten.
HttpURL baseRequestURL();
+ /** Full URL of the request */
+ HttpURL url();
AclMapping.Action aclAction();
Optional<Principal> userPrincipal();
Principal userPrincipalOrThrow();
@@ -161,14 +162,14 @@ public interface RestApi {
String getStringOrThrow(String name);
default Optional<Boolean> getBoolean(String name) { return getString(name).map(Boolean::valueOf);}
default boolean getBooleanOrThrow(String name) { return Boolean.parseBoolean(getStringOrThrow(name)); }
- default OptionalLong getLong(String name) {
- return getString(name).map(Long::parseLong).map(OptionalLong::of).orElseGet(OptionalLong::empty);
- }
+ default Optional<Long> getLong(String name) { return getString(name).map(Long::parseLong); }
default long getLongOrThrow(String name) { return Long.parseLong(getStringOrThrow(name)); }
- default OptionalDouble getDouble(String name) {
- return getString(name).map(Double::parseDouble).map(OptionalDouble::of).orElseGet(OptionalDouble::empty);
- }
+ default Optional<Double> getDouble(String name) { return getString(name).map(Double::parseDouble); }
+ default int getIntegerOrThrow(String name) { return Integer.parseInt(getStringOrThrow(name)); }
+ default Optional<Integer> getInteger(String name) { return getString(name).map(Integer::parseInt); }
default double getDoubleOrThrow(String name) { return Double.parseDouble(getStringOrThrow(name)); }
+ default BigDecimal getBigDecimalOrThrow(String name) { return new BigDecimal(getStringOrThrow(name)); }
+ default Optional<BigDecimal> getBigDecimal(String name) { return getString(name).map(BigDecimal::new); }
}
interface PathParameters extends Parameters {
diff --git a/container-core/src/main/java/com/yahoo/restapi/RestApiImpl.java b/container-core/src/main/java/com/yahoo/restapi/RestApiImpl.java
index a381fd3c9a6..56e7f4e3098 100644
--- a/container-core/src/main/java/com/yahoo/restapi/RestApiImpl.java
+++ b/container-core/src/main/java/com/yahoo/restapi/RestApiImpl.java
@@ -479,6 +479,7 @@ class RestApiImpl implements RestApi {
}
return HttpURL.from(URI.create(sb.toString()));
}
+ @Override public HttpURL url() { return HttpURL.from(request.getUri()); }
@Override public AclMapping.Action aclAction() { return aclAction; }
@Override public Optional<Principal> userPrincipal() {
return Optional.ofNullable(request.getJDiscRequest().getUserPrincipal());
diff --git a/dependency-versions/pom.xml b/dependency-versions/pom.xml
index c0dcfde9f10..ea055e97476 100644
--- a/dependency-versions/pom.xml
+++ b/dependency-versions/pom.xml
@@ -33,7 +33,7 @@
<!-- DO NOT UPGRADE THESE TO A NEW MAJOR VERSION WITHOUT CHECKING FOR BINARY COMPATIBILITY -->
<aopalliance.vespa.version>1.0</aopalliance.vespa.version>
- <error-prone-annotations.vespa.version>2.25.0</error-prone-annotations.vespa.version>
+ <error-prone-annotations.vespa.version>2.26.0</error-prone-annotations.vespa.version>
<guava.vespa.version>33.0.0-jre</guava.vespa.version>
<guice.vespa.version>6.0.0</guice.vespa.version>
<jackson2.vespa.version>2.16.2</jackson2.vespa.version>
@@ -65,7 +65,7 @@
<assertj.vespa.version>3.25.3</assertj.vespa.version>
<!-- Athenz dependencies. Make sure these dependencies match those in Vespa's internal repositories -->
- <aws-sdk.vespa.version>1.12.676</aws-sdk.vespa.version>
+ <aws-sdk.vespa.version>1.12.677</aws-sdk.vespa.version>
<athenz.vespa.version>1.11.53</athenz.vespa.version>
<!-- Athenz END -->
@@ -166,7 +166,7 @@
<maven-deploy-plugin.vespa.version>3.1.1</maven-deploy-plugin.vespa.version>
<maven-enforcer-plugin.vespa.version>3.4.1</maven-enforcer-plugin.vespa.version>
<maven-failsafe-plugin.vespa.version>3.2.5</maven-failsafe-plugin.vespa.version>
- <maven-gpg-plugin.vespa.version>3.1.0</maven-gpg-plugin.vespa.version>
+ <maven-gpg-plugin.vespa.version>3.2.0</maven-gpg-plugin.vespa.version>
<maven-install-plugin.vespa.version>3.1.1</maven-install-plugin.vespa.version>
<maven-jar-plugin.vespa.version>3.3.0</maven-jar-plugin.vespa.version>
<maven-javadoc-plugin.vespa.version>3.6.3</maven-javadoc-plugin.vespa.version>
diff --git a/messagebus/src/tests/routing/CMakeLists.txt b/messagebus/src/tests/routing/CMakeLists.txt
index 68e466ceff6..6b013f7b9cc 100644
--- a/messagebus/src/tests/routing/CMakeLists.txt
+++ b/messagebus/src/tests/routing/CMakeLists.txt
@@ -5,5 +5,6 @@ vespa_add_executable(messagebus_routing_test_app TEST
DEPENDS
messagebus_messagebus-test
messagebus
+ GTest::gtest
)
vespa_add_test(NAME messagebus_routing_test_app COMMAND messagebus_routing_test_app)
diff --git a/messagebus/src/tests/routing/routing.cpp b/messagebus/src/tests/routing/routing.cpp
index b459f093e4c..f37032e18e7 100644
--- a/messagebus/src/tests/routing/routing.cpp
+++ b/messagebus/src/tests/routing/routing.cpp
@@ -11,7 +11,7 @@
#include <vespa/messagebus/testlib/slobrok.h>
#include <vespa/messagebus/testlib/testserver.h>
#include <vespa/vespalib/component/vtag.h>
-#include <vespa/vespalib/testkit/testapp.h>
+#include <vespa/vespalib/gtest/gtest.h>
#include <vespa/log/log.h>
@@ -330,59 +330,59 @@ public:
mergeFromChild, mergeError, mergeException);
}
- static MyPolicyFactory::SP
- newSelectAndMerge(const string &select)
+ static MyPolicyFactory::SP
+ newSelectAndMerge(const string &select)
{
return newInstance(select, ErrorCode::NONE, false, true, ErrorCode::NONE, false);
}
- static MyPolicyFactory::SP
- newEmptySelection()
+ static MyPolicyFactory::SP
+ newEmptySelection()
{
return newInstance("", ErrorCode::NONE, false, false, ErrorCode::NONE, false);
}
- static MyPolicyFactory::SP
+ static MyPolicyFactory::SP
newSelectError(uint32_t errCode)
{
return newInstance("", errCode, false, false, ErrorCode::NONE, false);
}
- static MyPolicyFactory::SP
- newSelectException()
+ static MyPolicyFactory::SP
+ newSelectException()
{
return newInstance("", ErrorCode::NONE, true, false, ErrorCode::NONE, false);
}
- static MyPolicyFactory::SP
- newSelectAndThrow(const string &select)
+ static MyPolicyFactory::SP
+ newSelectAndThrow(const string &select)
{
return newInstance(select, ErrorCode::NONE, true, false, ErrorCode::NONE, false);
}
- static MyPolicyFactory::SP
- newEmptyMerge(const string &select)
+ static MyPolicyFactory::SP
+ newEmptyMerge(const string &select)
{
return newInstance(select, ErrorCode::NONE, false, false, ErrorCode::NONE, false);
}
- static MyPolicyFactory::SP
- newMergeError(const string &select, int errCode)
+ static MyPolicyFactory::SP
+ newMergeError(const string &select, int errCode)
{
return newInstance(select, ErrorCode::NONE, false, false, errCode, false);
}
- static MyPolicyFactory::SP
- newMergeException(const string &select)
+ static MyPolicyFactory::SP
+ newMergeException(const string &select)
{
return newInstance(select, ErrorCode::NONE, false, false, ErrorCode::NONE, true);
}
- static MyPolicyFactory::SP
+ static MyPolicyFactory::SP
newMergeAndThrow(const string &select)
{
return newInstance(select, ErrorCode::NONE, false, true, ErrorCode::NONE, true);
- }
+ }
};
MyPolicyFactory::MyPolicyFactory(const string &selectRoute, uint32_t &selectError, bool selectException,
@@ -400,7 +400,7 @@ MyPolicyFactory::~MyPolicyFactory() = default;
class MyPolicy : public IRoutingPolicy {
private:
const MyPolicyFactory &_parent;
-
+
public:
explicit MyPolicy(const MyPolicyFactory &parent) :
_parent(parent)
@@ -465,76 +465,6 @@ public:
bool start();
};
-class Test : public vespalib::TestApp {
-private:
- Message::UP createMessage(const string &msg, uint32_t level = 9);
- void setupRouting(TestData &data, RoutingTableSpec && spec);
- void setupPolicy(TestData &data, const string &policyName,
- SimpleProtocol::IPolicyFactory::SP policy);
- static bool testAcknowledge(TestData &data);
- bool testSend(TestData &data, const string &route, uint32_t level = 9);
- bool testTrace(TestData &data, const std::vector<string> &expected);
- bool testTrace(const std::vector<string> &expected, const Trace &trace);
-
- static const duration RECEPTOR_TIMEOUT;
-
-public:
- int Main() override;
- void testNoRoutingTable(TestData &data);
- void testUnknownRoute(TestData &data);
- void testNoRoute(TestData &data);
- void testRecognizeHopName(TestData &data);
- void testRecognizeRouteDirective(TestData &data);
- void testRecognizeRouteName(TestData &data);
- void testHopResolutionOverflow(TestData &data);
- void testRouteResolutionOverflow(TestData &data);
- void testInsertRoute(TestData &data);
- void testErrorDirective(TestData &data);
- void testSelectError(TestData &data);
- void testSelectNone(TestData &data);
- void testSelectOne(TestData &data);
- void testResend1(TestData &data);
- void testResend2(TestData &data);
- void testNoResend(TestData &data);
- void testSelectOnResend(TestData &data);
- void testNoSelectOnResend(TestData &data);
- void testCanConsumeError(TestData &data);
- void testCantConsumeError(TestData &data);
- void testNestedPolicies(TestData &data);
- void testRemoveReply(TestData &data);
- void testSetReply(TestData &data);
- void testResendSetAndReuseReply(TestData &data);
- void testResendSetAndRemoveReply(TestData &data);
- void testHopIgnoresReply(TestData &data);
- void testHopBlueprintIgnoresReply(TestData &data);
- void testAcceptEmptyRoute(TestData &data);
- void testAbortOnlyActiveNodes(TestData &data);
- void testTimeout(TestData &data);
- void testUnknownPolicy(TestData &data);
- void testSelectException(TestData &data);
- void testMergeException(TestData &data);
-
- void requireThatIgnoreFlagPersistsThroughHopLookup(TestData &data);
- void requireThatIgnoreFlagPersistsThroughRouteLookup(TestData &data);
- void requireThatIgnoreFlagPersistsThroughPolicySelect(TestData &data);
- void requireThatIgnoreFlagIsSerializedWithMessage(TestData &data);
- void requireThatIgnoreFlagDoesNotInterfere(TestData &data);
- void requireThatEmptySelectionCanBeIgnored(TestData &data);
- void requireThatSelectErrorCanBeIgnored(TestData &data);
- void requireThatSelectExceptionCanBeIgnored(TestData &data);
- void requireThatSelectAndThrowCanBeIgnored(TestData &data);
- void requireThatEmptyMergeCanBeIgnored(TestData &data);
- void requireThatMergeErrorCanBeIgnored(TestData &data);
- void requireThatMergeExceptionCanBeIgnored(TestData &data);
- void requireThatMergeAndThrowCanBeIgnored(TestData &data);
- void requireThatAllocServiceCanBeIgnored(TestData &data);
- void requireThatDepthLimitCanBeIgnored(TestData &data);
-};
-
-const duration Test::RECEPTOR_TIMEOUT = 120s;
-
-TEST_APPHOOK(Test);
-
TestData::TestData() :
_slobrok(),
_retryPolicy(std::make_shared<RetryTransientErrorsPolicy>()),
@@ -577,22 +507,81 @@ TestData::start()
return true;
}
+class RoutingTest : public testing::Test {
+protected:
+ static const duration RECEPTOR_TIMEOUT;
+ static std::shared_ptr<TestData> _data;
+ static bool _force_teardown;
+ RoutingTest();
+ ~RoutingTest() override;
+ static void SetUpTestSuite();
+ static void TearDownTestSuite();
+ void SetUp() override;
+ void TearDown() override;
+ static Message::UP createMessage(const string &msg, uint32_t level = 9);
+ static void setupRouting(TestData &data, RoutingTableSpec && spec);
+ static void setupPolicy(TestData &data, const string &policyName,
+ SimpleProtocol::IPolicyFactory::SP policy);
+ static bool testAcknowledge(TestData &data);
+ static bool testSend(TestData &data, const string &route, uint32_t level = 9);
+ static bool testTrace(TestData &data, const std::vector<string> &expected);
+ static bool testTrace(const std::vector<string> &expected, const Trace &trace);
+};
+
+const duration RoutingTest::RECEPTOR_TIMEOUT = 120s;
+std::shared_ptr<TestData> RoutingTest::_data;
+bool RoutingTest::_force_teardown = false;
+
+RoutingTest::RoutingTest() = default;
+RoutingTest::~RoutingTest() = default;
+
+void
+RoutingTest::SetUpTestSuite()
+{
+ _data = std::make_shared<TestData>();
+ ASSERT_TRUE(_data->start());
+}
+
+void
+RoutingTest::TearDownTestSuite()
+{
+ _data.reset();
+}
+
+void
+RoutingTest::SetUp()
+{
+ if (!_data) {
+ _data = std::make_shared<TestData>();
+ ASSERT_TRUE(_data->start());
+ }
+}
+
+void
+RoutingTest::TearDown()
+{
+ if (_force_teardown) {
+ _force_teardown = false;
+ _data.reset();
+ }
+}
+
Message::UP
-Test::createMessage(const string &msg, uint32_t level)
+RoutingTest::createMessage(const string &msg, uint32_t level)
{
auto ret = std::make_unique<SimpleMessage>(msg);
ret->getTrace().setLevel(level);
return ret;
}
-void
-Test::setupRouting(TestData &data, RoutingTableSpec && spec)
+void
+RoutingTest::setupRouting(TestData &data, RoutingTableSpec && spec)
{
data._srcServer.mb.setupRouting(RoutingSpec().addTable(std::move(spec)));
}
-void
-Test::setupPolicy(TestData &data, const string &policyName,
+void
+RoutingTest::setupPolicy(TestData &data, const string &policyName,
SimpleProtocol::IPolicyFactory::SP policy)
{
auto protocol = std::make_shared<SimpleProtocol>();
@@ -600,40 +589,45 @@ Test::setupPolicy(TestData &data, const string &policyName,
data._srcServer.mb.putProtocol(protocol);
}
-bool
-Test::testAcknowledge(TestData &data)
+bool
+RoutingTest::testAcknowledge(TestData &data)
{
Message::UP msg = data._dstHandler.getMessage(RECEPTOR_TIMEOUT);
- if (!EXPECT_TRUE(msg)) {
+ bool failed = false;
+ EXPECT_TRUE(msg) << (failed = true, "");
+ if (failed) {
return false;
}
data._dstSession->acknowledge(std::move(msg));
return true;
}
-
-bool
-Test::testSend(TestData &data, const string &route, uint32_t level)
+
+bool
+RoutingTest::testSend(TestData &data, const string &route, uint32_t level)
{
Message::UP msg = createMessage("msg", level);
msg->setRoute(Route::parse(route));
return data._srcSession->send(std::move(msg)).isAccepted();
}
-bool
-Test::testTrace(TestData &data, const std::vector<string> &expected)
+bool
+RoutingTest::testTrace(TestData &data, const std::vector<string> &expected)
{
Reply::UP reply = data._srcHandler.getReply(RECEPTOR_TIMEOUT);
- if (!EXPECT_TRUE(reply)) {
+ bool failed = false;
+ EXPECT_TRUE(reply) << (failed = true, "");
+ if (failed) {
return false;
}
- if (!EXPECT_FALSE(reply->hasErrors())) {
+ EXPECT_FALSE(reply->hasErrors()) << (failed = true, "");
+ if (failed) {
return false;
}
return testTrace(expected, reply->getTrace());
}
bool
-Test::testTrace(const std::vector<string> &expected, const Trace &trace)
+RoutingTest::testTrace(const std::vector<string> &expected, const Trace &trace)
{
const string& version = vespalib::Vtag::currentVersion.toString();
string actual = trace.toString();
@@ -646,13 +640,17 @@ Test::testTrace(const std::vector<string> &expected, const Trace &trace)
}
if (line[0] == '-') {
string str = line.substr(1);
- if (!EXPECT_TRUE(actual.find(str, pos) == string::npos)) {
+ bool failed = false;
+ EXPECT_TRUE(actual.find(str, pos) == string::npos) << (failed = true, "");
+ if (failed) {
LOG(error, "Line %d '%s' not expected.", i, str.c_str());
return false;
}
} else {
pos = actual.find(line, pos);
- if (!EXPECT_TRUE(pos != string::npos)) {
+ bool failed = false;
+ EXPECT_TRUE(pos != string::npos) << (failed = true, "");
+ if (failed) {
LOG(error, "Line %d '%s' missing.", i, line.c_str());
return false;
}
@@ -662,110 +660,47 @@ Test::testTrace(const std::vector<string> &expected, const Trace &trace)
return true;
}
-int
-Test::Main()
-{
- TEST_INIT("routing_test");
-
- TestData data;
- ASSERT_TRUE(data.start());
-
- testNoRoutingTable(data); TEST_FLUSH();
- testUnknownRoute(data); TEST_FLUSH();
- testNoRoute(data); TEST_FLUSH();
- testRecognizeHopName(data); TEST_FLUSH();
- testRecognizeRouteDirective(data); TEST_FLUSH();
- testRecognizeRouteName(data); TEST_FLUSH();
- testHopResolutionOverflow(data); TEST_FLUSH();
- testRouteResolutionOverflow(data); TEST_FLUSH();
- testInsertRoute(data); TEST_FLUSH();
- testErrorDirective(data); TEST_FLUSH();
- testSelectError(data); TEST_FLUSH();
- testSelectNone(data); TEST_FLUSH();
- testSelectOne(data); TEST_FLUSH();
- testResend1(data); TEST_FLUSH();
- testResend2(data); TEST_FLUSH();
- testNoResend(data); TEST_FLUSH();
- testSelectOnResend(data); TEST_FLUSH();
- testNoSelectOnResend(data); TEST_FLUSH();
- testCanConsumeError(data); TEST_FLUSH();
- testCantConsumeError(data); TEST_FLUSH();
- testNestedPolicies(data); TEST_FLUSH();
- testRemoveReply(data); TEST_FLUSH();
- testSetReply(data); TEST_FLUSH();
- testResendSetAndReuseReply(data); TEST_FLUSH();
- testResendSetAndRemoveReply(data); TEST_FLUSH();
- testHopIgnoresReply(data); TEST_FLUSH();
- testHopBlueprintIgnoresReply(data); TEST_FLUSH();
- testAcceptEmptyRoute(data); TEST_FLUSH();
- testAbortOnlyActiveNodes(data); TEST_FLUSH();
- testUnknownPolicy(data); TEST_FLUSH();
- testSelectException(data); TEST_FLUSH();
- testMergeException(data); TEST_FLUSH();
-
- requireThatIgnoreFlagPersistsThroughHopLookup(data); TEST_FLUSH();
- requireThatIgnoreFlagPersistsThroughRouteLookup(data); TEST_FLUSH();
- requireThatIgnoreFlagPersistsThroughPolicySelect(data); TEST_FLUSH();
- requireThatIgnoreFlagIsSerializedWithMessage(data); TEST_FLUSH();
- requireThatIgnoreFlagDoesNotInterfere(data); TEST_FLUSH();
- requireThatEmptySelectionCanBeIgnored(data); TEST_FLUSH();
- requireThatSelectErrorCanBeIgnored(data); TEST_FLUSH();
- requireThatSelectExceptionCanBeIgnored(data); TEST_FLUSH();
- requireThatSelectAndThrowCanBeIgnored(data); TEST_FLUSH();
- requireThatEmptyMergeCanBeIgnored(data); TEST_FLUSH();
- requireThatMergeErrorCanBeIgnored(data); TEST_FLUSH();
- requireThatMergeExceptionCanBeIgnored(data); TEST_FLUSH();
- requireThatMergeAndThrowCanBeIgnored(data); TEST_FLUSH();
- requireThatAllocServiceCanBeIgnored(data); TEST_FLUSH();
- requireThatDepthLimitCanBeIgnored(data); TEST_FLUSH();
-
- // This needs to be last because it changes timeouts:
- testTimeout(data); TEST_FLUSH();
-
- TEST_DONE();
-}
-
////////////////////////////////////////////////////////////////////////////////
//
// Tests
//
////////////////////////////////////////////////////////////////////////////////
-void
-Test::testNoRoutingTable(TestData &data)
+TEST_F(RoutingTest, test_no_routing_table)
{
+ auto& data = *_data;
Result res = data._srcSession->send(createMessage("msg"), "foo");
EXPECT_FALSE(res.isAccepted());
- EXPECT_EQUAL((uint32_t)ErrorCode::ILLEGAL_ROUTE, res.getError().getCode());
+ EXPECT_EQ((uint32_t)ErrorCode::ILLEGAL_ROUTE, res.getError().getCode());
Message::UP msg = res.getMessage();
EXPECT_TRUE(msg);
}
-void
-Test::testUnknownRoute(TestData &data)
+TEST_F(RoutingTest, test_unknown_route)
{
+ auto& data = *_data;
data._srcServer.mb.setupRouting(RoutingSpec().addTable(RoutingTableSpec(SimpleProtocol::NAME)
.addHop(HopSpec("foo", "bar"))));
Result res = data._srcSession->send(createMessage("msg"), "baz");
EXPECT_FALSE(res.isAccepted());
- EXPECT_EQUAL((uint32_t)ErrorCode::ILLEGAL_ROUTE, res.getError().getCode());
+ EXPECT_EQ((uint32_t)ErrorCode::ILLEGAL_ROUTE, res.getError().getCode());
Message::UP msg = res.getMessage();
EXPECT_TRUE(msg);
}
-void
-Test::testNoRoute(TestData &data)
+TEST_F(RoutingTest, test_no_route)
{
+ auto& data = *_data;
EXPECT_TRUE(data._srcSession->send(createMessage("msg"), Route()).isAccepted());
Reply::UP reply = data._srcHandler.getReply(RECEPTOR_TIMEOUT);
ASSERT_TRUE(reply);
- EXPECT_EQUAL(1u, reply->getNumErrors());
- EXPECT_EQUAL((uint32_t)ErrorCode::ILLEGAL_ROUTE, reply->getError(0).getCode());
+ EXPECT_EQ(1u, reply->getNumErrors());
+ EXPECT_EQ((uint32_t)ErrorCode::ILLEGAL_ROUTE, reply->getError(0).getCode());
}
-void
-Test::testRecognizeHopName(TestData &data)
+TEST_F(RoutingTest, test_recognize_hop_name)
{
+ auto& data = *_data;
data._srcServer.mb.setupRouting(RoutingSpec().addTable(RoutingTableSpec(SimpleProtocol::NAME)
.addHop(HopSpec("dst", "dst/session"))));
EXPECT_TRUE(data._srcSession->send(createMessage("msg"), Route::parse("dst")).isAccepted());
@@ -777,9 +712,9 @@ Test::testRecognizeHopName(TestData &data)
EXPECT_FALSE(reply->hasErrors());
}
-void
-Test::testRecognizeRouteDirective(TestData &data)
+TEST_F(RoutingTest, test_recognize_route_directive)
{
+ auto& data = *_data;
data._srcServer.mb.setupRouting(RoutingSpec().addTable(RoutingTableSpec(SimpleProtocol::NAME)
.addRoute(RouteSpec("dst").addHop("dst/session"))
.addHop(HopSpec("dir", "route:dst"))));
@@ -792,9 +727,9 @@ Test::testRecognizeRouteDirective(TestData &data)
EXPECT_FALSE(reply->hasErrors());
}
-void
-Test::testRecognizeRouteName(TestData &data)
+TEST_F(RoutingTest, test_recognize_route_name)
{
+ auto& data = *_data;
data._srcServer.mb.setupRouting(RoutingSpec().addTable(RoutingTableSpec(SimpleProtocol::NAME)
.addRoute(RouteSpec("dst").addHop("dst/session"))));
EXPECT_TRUE(data._srcSession->send(createMessage("msg"), Route::parse("dst")).isAccepted());
@@ -806,64 +741,64 @@ Test::testRecognizeRouteName(TestData &data)
EXPECT_FALSE(reply->hasErrors());
}
-void
-Test::testHopResolutionOverflow(TestData &data)
+TEST_F(RoutingTest, test_hop_resolution_overflow)
{
+ auto& data = *_data;
data._srcServer.mb.setupRouting(RoutingSpec().addTable(RoutingTableSpec(SimpleProtocol::NAME)
.addHop(HopSpec("foo", "bar"))
.addHop(HopSpec("bar", "foo"))));
EXPECT_TRUE(data._srcSession->send(createMessage("msg"), Route::parse("foo")).isAccepted());
Reply::UP reply = data._srcHandler.getReply(RECEPTOR_TIMEOUT);
ASSERT_TRUE(reply);
- EXPECT_EQUAL(1u, reply->getNumErrors());
- EXPECT_EQUAL((uint32_t)ErrorCode::ILLEGAL_ROUTE, reply->getError(0).getCode());
+ EXPECT_EQ(1u, reply->getNumErrors());
+ EXPECT_EQ((uint32_t)ErrorCode::ILLEGAL_ROUTE, reply->getError(0).getCode());
}
-void
-Test::testRouteResolutionOverflow(TestData &data)
+TEST_F(RoutingTest, test_route_resolution_overflow)
{
+ auto& data = *_data;
data._srcServer.mb.setupRouting(RoutingSpec().addTable(RoutingTableSpec(SimpleProtocol::NAME)
.addRoute(RouteSpec("foo").addHop("route:foo"))));
EXPECT_TRUE(data._srcSession->send(createMessage("msg"), "foo").isAccepted());
Reply::UP reply = data._srcHandler.getReply(RECEPTOR_TIMEOUT);
ASSERT_TRUE(reply);
- EXPECT_EQUAL(1u, reply->getNumErrors());
- EXPECT_EQUAL((uint32_t)ErrorCode::ILLEGAL_ROUTE, reply->getError(0).getCode());
+ EXPECT_EQ(1u, reply->getNumErrors());
+ EXPECT_EQ((uint32_t)ErrorCode::ILLEGAL_ROUTE, reply->getError(0).getCode());
}
-void
-Test::testInsertRoute(TestData &data)
+TEST_F(RoutingTest, test_insert_route)
{
+ auto& data = *_data;
data._srcServer.mb.setupRouting(RoutingSpec().addTable(RoutingTableSpec(SimpleProtocol::NAME)
.addRoute(RouteSpec("foo").addHop("dst/session").addHop("bar"))));
EXPECT_TRUE(data._srcSession->send(createMessage("msg"), Route::parse("route:foo baz")).isAccepted());
Message::UP msg = data._dstHandler.getMessage(RECEPTOR_TIMEOUT);
ASSERT_TRUE(msg);
- EXPECT_EQUAL(2u, msg->getRoute().getNumHops());
- EXPECT_EQUAL("bar", msg->getRoute().getHop(0).toString());
- EXPECT_EQUAL("baz", msg->getRoute().getHop(1).toString());
+ EXPECT_EQ(2u, msg->getRoute().getNumHops());
+ EXPECT_EQ("bar", msg->getRoute().getHop(0).toString());
+ EXPECT_EQ("baz", msg->getRoute().getHop(1).toString());
data._dstSession->acknowledge(std::move(msg));
Reply::UP reply = data._srcHandler.getReply(RECEPTOR_TIMEOUT);
ASSERT_TRUE(reply);
EXPECT_FALSE(reply->hasErrors());
}
-void
-Test::testErrorDirective(TestData &data)
+TEST_F(RoutingTest, test_error_directive)
{
+ auto& data = *_data;
Route route = Route::parse("foo/bar/baz");
route.getHop(0).setDirective(1, std::make_shared<ErrorDirective>("err"));
EXPECT_TRUE(data._srcSession->send(createMessage("msg"), route).isAccepted());
Reply::UP reply = data._srcHandler.getReply(RECEPTOR_TIMEOUT);
ASSERT_TRUE(reply);
- EXPECT_EQUAL(1u, reply->getNumErrors());
- EXPECT_EQUAL((uint32_t)ErrorCode::ILLEGAL_ROUTE, reply->getError(0).getCode());
- EXPECT_EQUAL("err", reply->getError(0).getMessage());
+ EXPECT_EQ(1u, reply->getNumErrors());
+ EXPECT_EQ((uint32_t)ErrorCode::ILLEGAL_ROUTE, reply->getError(0).getCode());
+ EXPECT_EQ("err", reply->getError(0).getMessage());
}
-void
-Test::testSelectError(TestData &data)
+TEST_F(RoutingTest, test_select_error)
{
+ auto& data = *_data;
auto protocol = std::make_shared<SimpleProtocol>();
protocol->addPolicyFactory("Custom", std::make_shared<CustomPolicyFactory>());
data._srcServer.mb.putProtocol(protocol);
@@ -872,26 +807,26 @@ Test::testSelectError(TestData &data)
ASSERT_TRUE(reply);
LOG(info, "testSelectError trace=%s", reply->getTrace().toString().c_str());
LOG(info, "testSelectError error=%s", reply->getError(0).toString().c_str());
- EXPECT_EQUAL(1u, reply->getNumErrors());
- EXPECT_EQUAL((uint32_t)ErrorCode::ILLEGAL_ROUTE, reply->getError(0).getCode());
+ EXPECT_EQ(1u, reply->getNumErrors());
+ EXPECT_EQ((uint32_t)ErrorCode::ILLEGAL_ROUTE, reply->getError(0).getCode());
}
-void
-Test::testSelectNone(TestData &data)
+TEST_F(RoutingTest, test_select_none)
{
+ auto& data = *_data;
auto protocol = std::make_shared<SimpleProtocol>();
protocol->addPolicyFactory("Custom", std::make_shared<CustomPolicyFactory>());
data._srcServer.mb.putProtocol(protocol);
EXPECT_TRUE(data._srcSession->send(createMessage("msg"), Route::parse("[Custom]")).isAccepted());
Reply::UP reply = data._srcHandler.getReply(RECEPTOR_TIMEOUT);
ASSERT_TRUE(reply);
- EXPECT_EQUAL(1u, reply->getNumErrors());
- EXPECT_EQUAL((uint32_t)ErrorCode::NO_SERVICES_FOR_ROUTE, reply->getError(0).getCode());
+ EXPECT_EQ(1u, reply->getNumErrors());
+ EXPECT_EQ((uint32_t)ErrorCode::NO_SERVICES_FOR_ROUTE, reply->getError(0).getCode());
}
-void
-Test::testSelectOne(TestData &data)
+TEST_F(RoutingTest, test_select_one)
{
+ auto& data = *_data;
auto protocol = std::make_shared<SimpleProtocol>();
protocol->addPolicyFactory("Custom", std::make_shared<CustomPolicyFactory>());
data._srcServer.mb.putProtocol(protocol);
@@ -904,9 +839,9 @@ Test::testSelectOne(TestData &data)
EXPECT_FALSE(reply->hasErrors());
}
-void
-Test::testResend1(TestData &data)
+TEST_F(RoutingTest, test_resend_1)
{
+ auto& data = *_data;
data._retryPolicy->setEnabled(true);
EXPECT_TRUE(data._srcSession->send(createMessage("msg"), Route::parse("dst/session")).isAccepted());
Message::UP msg = data._dstHandler.getMessage(RECEPTOR_TIMEOUT);
@@ -935,9 +870,9 @@ Test::testResend1(TestData &data)
reply->getTrace()));
}
-void
-Test::testResend2(TestData &data)
+TEST_F(RoutingTest, test_resend_2)
{
+ auto& data = *_data;
auto protocol = std::make_shared<SimpleProtocol>();
protocol->addPolicyFactory("Custom", std::make_shared<CustomPolicyFactory>());
data._srcServer.mb.putProtocol(protocol);
@@ -1003,9 +938,9 @@ Test::testResend2(TestData &data)
reply->getTrace()));
}
-void
-Test::testNoResend(TestData &data)
+TEST_F(RoutingTest, test_no_resend)
{
+ auto& data = *_data;
data._retryPolicy->setEnabled(false);
EXPECT_TRUE(data._srcSession->send(createMessage("msg"), Route::parse("dst/session")).isAccepted());
Message::UP msg = data._dstHandler.getMessage(RECEPTOR_TIMEOUT);
@@ -1016,13 +951,13 @@ Test::testNoResend(TestData &data)
data._dstSession->reply(std::move(reply));
reply = data._srcHandler.getReply(RECEPTOR_TIMEOUT);
ASSERT_TRUE(reply);
- EXPECT_EQUAL(1u, reply->getNumErrors());
- EXPECT_EQUAL((uint32_t)ErrorCode::APP_TRANSIENT_ERROR, reply->getError(0).getCode());
+ EXPECT_EQ(1u, reply->getNumErrors());
+ EXPECT_EQ((uint32_t)ErrorCode::APP_TRANSIENT_ERROR, reply->getError(0).getCode());
}
-void
-Test::testSelectOnResend(TestData &data)
+TEST_F(RoutingTest, test_select_on_resend)
{
+ auto& data = *_data;
auto protocol = std::make_shared<SimpleProtocol>();
protocol->addPolicyFactory("Custom", std::make_shared<CustomPolicyFactory>());
data._srcServer.mb.putProtocol(protocol);
@@ -1051,9 +986,9 @@ Test::testSelectOnResend(TestData &data)
reply->getTrace()));
}
-void
-Test::testNoSelectOnResend(TestData &data)
+TEST_F(RoutingTest, test_no_select_on_resend)
{
+ auto& data = *_data;
auto protocol = std::make_shared<SimpleProtocol>();
protocol->addPolicyFactory("Custom", std::make_shared<CustomPolicyFactory>(false));
data._srcServer.mb.putProtocol(protocol);
@@ -1082,9 +1017,9 @@ Test::testNoSelectOnResend(TestData &data)
reply->getTrace()));
}
-void
-Test::testCanConsumeError(TestData &data)
+TEST_F(RoutingTest, test_can_consume_error)
{
+ auto& data = *_data;
auto protocol = std::make_shared<SimpleProtocol>();
protocol->addPolicyFactory("Custom", std::make_shared<CustomPolicyFactory>(true, ErrorCode::NO_ADDRESS_FOR_SERVICE));
data._srcServer.mb.putProtocol(protocol);
@@ -1095,8 +1030,8 @@ Test::testCanConsumeError(TestData &data)
data._dstSession->acknowledge(std::move(msg));
Reply::UP reply = data._srcHandler.getReply(RECEPTOR_TIMEOUT);
ASSERT_TRUE(reply);
- EXPECT_EQUAL(1u, reply->getNumErrors());
- EXPECT_EQUAL((uint32_t)ErrorCode::NO_ADDRESS_FOR_SERVICE, reply->getError(0).getCode());
+ EXPECT_EQ(1u, reply->getNumErrors());
+ EXPECT_EQ((uint32_t)ErrorCode::NO_ADDRESS_FOR_SERVICE, reply->getError(0).getCode());
EXPECT_TRUE(testTrace(StringList()
.add("Selecting { 'dst/session', 'dst/unknown' }.")
.add("[NO_ADDRESS_FOR_SERVICE @ localhost]")
@@ -1105,9 +1040,9 @@ Test::testCanConsumeError(TestData &data)
reply->getTrace()));
}
-void
-Test::testCantConsumeError(TestData &data)
+TEST_F(RoutingTest, test_cant_consume_error)
{
+ auto& data = *_data;
auto protocol = std::make_shared<SimpleProtocol>();
protocol->addPolicyFactory("Custom", std::make_shared<CustomPolicyFactory>());
data._srcServer.mb.putProtocol(protocol);
@@ -1116,8 +1051,8 @@ Test::testCantConsumeError(TestData &data)
Reply::UP reply = data._srcHandler.getReply(RECEPTOR_TIMEOUT);
ASSERT_TRUE(reply);
printf("%s", reply->getTrace().toString().c_str());
- EXPECT_EQUAL(1u, reply->getNumErrors());
- EXPECT_EQUAL((uint32_t)ErrorCode::NO_ADDRESS_FOR_SERVICE, reply->getError(0).getCode());
+ EXPECT_EQ(1u, reply->getNumErrors());
+ EXPECT_EQ((uint32_t)ErrorCode::NO_ADDRESS_FOR_SERVICE, reply->getError(0).getCode());
EXPECT_TRUE(testTrace(StringList()
.add("Selecting { 'dst/unknown' }.")
.add("[NO_ADDRESS_FOR_SERVICE @ localhost]")
@@ -1125,9 +1060,9 @@ Test::testCantConsumeError(TestData &data)
reply->getTrace()));
}
-void
-Test::testNestedPolicies(TestData &data)
+TEST_F(RoutingTest, test_nested_policies)
{
+ auto& data = *_data;
auto protocol = std::make_shared<SimpleProtocol>();
protocol->addPolicyFactory("Custom", std::make_shared<CustomPolicyFactory>(true, ErrorCode::NO_ADDRESS_FOR_SERVICE));
data._srcServer.mb.putProtocol(protocol);
@@ -1138,13 +1073,13 @@ Test::testNestedPolicies(TestData &data)
data._dstSession->acknowledge(std::move(msg));
Reply::UP reply = data._srcHandler.getReply(RECEPTOR_TIMEOUT);
ASSERT_TRUE(reply);
- EXPECT_EQUAL(1u, reply->getNumErrors());
- EXPECT_EQUAL((uint32_t)ErrorCode::NO_ADDRESS_FOR_SERVICE, reply->getError(0).getCode());
+ EXPECT_EQ(1u, reply->getNumErrors());
+ EXPECT_EQ((uint32_t)ErrorCode::NO_ADDRESS_FOR_SERVICE, reply->getError(0).getCode());
}
-void
-Test::testRemoveReply(TestData &data)
+TEST_F(RoutingTest, test_remove_reply)
{
+ auto& data = *_data;
auto protocol = std::make_shared<SimpleProtocol>();
protocol->addPolicyFactory("Custom", std::make_shared<RemoveReplyPolicyFactory>(true, UIntList().add(ErrorCode::NO_ADDRESS_FOR_SERVICE), 0));
data._srcServer.mb.putProtocol(protocol);
@@ -1164,9 +1099,9 @@ Test::testRemoveReply(TestData &data)
reply->getTrace()));
}
-void
-Test::testSetReply(TestData &data)
+TEST_F(RoutingTest, test_set_reply)
{
+ auto& data = *_data;
auto protocol = std::make_shared<SimpleProtocol>();
protocol->addPolicyFactory("Select", std::make_shared<CustomPolicyFactory>(true, ErrorCode::APP_FATAL_ERROR));
protocol->addPolicyFactory("SetReply", std::make_shared<SetReplyPolicyFactory>(true, UIntList().add(ErrorCode::APP_FATAL_ERROR)));
@@ -1178,14 +1113,14 @@ Test::testSetReply(TestData &data)
data._dstSession->acknowledge(std::move(msg));
Reply::UP reply = data._srcHandler.getReply(RECEPTOR_TIMEOUT);
ASSERT_TRUE(reply);
- EXPECT_EQUAL(1u, reply->getNumErrors());
- EXPECT_EQUAL((uint32_t)ErrorCode::APP_FATAL_ERROR, reply->getError(0).getCode());
- EXPECT_EQUAL("foo", reply->getError(0).getMessage());
+ EXPECT_EQ(1u, reply->getNumErrors());
+ EXPECT_EQ((uint32_t)ErrorCode::APP_FATAL_ERROR, reply->getError(0).getCode());
+ EXPECT_EQ("foo", reply->getError(0).getMessage());
}
-void
-Test::testResendSetAndReuseReply(TestData &data)
+TEST_F(RoutingTest, test_resend_set_and_reuse_reply)
{
+ auto& data = *_data;
auto protocol = std::make_shared<SimpleProtocol>();
protocol->addPolicyFactory("ReuseReply", std::make_shared<ReuseReplyPolicyFactory>(false, UIntList().add(ErrorCode::APP_FATAL_ERROR)));
protocol->addPolicyFactory("SetReply", std::make_shared<SetReplyPolicyFactory>(false, UIntList().add(ErrorCode::APP_FATAL_ERROR)));
@@ -1206,9 +1141,9 @@ Test::testResendSetAndReuseReply(TestData &data)
EXPECT_FALSE(reply->hasErrors());
}
-void
-Test::testResendSetAndRemoveReply(TestData &data)
+TEST_F(RoutingTest, test_resend_set_and_remove_reply)
{
+ auto& data = *_data;
auto protocol = std::make_shared<SimpleProtocol>();
protocol->addPolicyFactory("RemoveReply", std::make_shared<RemoveReplyPolicyFactory>(false, UIntList().add(ErrorCode::APP_TRANSIENT_ERROR), 0));
protocol->addPolicyFactory("SetReply", std::make_shared<SetReplyPolicyFactory>(false, UIntList().add(ErrorCode::APP_TRANSIENT_ERROR).add(ErrorCode::APP_FATAL_ERROR)));
@@ -1220,9 +1155,9 @@ Test::testResendSetAndRemoveReply(TestData &data)
data._dstSession->acknowledge(std::move(msg));
Reply::UP reply = data._srcHandler.getReply(RECEPTOR_TIMEOUT);
ASSERT_TRUE(reply);
- EXPECT_EQUAL(1u, reply->getNumErrors());
- EXPECT_EQUAL((uint32_t)ErrorCode::APP_FATAL_ERROR, reply->getError(0).getCode());
- EXPECT_EQUAL("foo", reply->getError(0).getMessage());
+ EXPECT_EQ(1u, reply->getNumErrors());
+ EXPECT_EQ((uint32_t)ErrorCode::APP_FATAL_ERROR, reply->getError(0).getCode());
+ EXPECT_EQ("foo", reply->getError(0).getMessage());
EXPECT_TRUE(testTrace(StringList()
.add("Resolving '[SetReply:foo]'.")
.add("Resolving 'dst/session'.")
@@ -1232,9 +1167,9 @@ Test::testResendSetAndRemoveReply(TestData &data)
reply->getTrace()));
}
-void
-Test::testHopIgnoresReply(TestData &data)
+TEST_F(RoutingTest, test_hop_ignores_reply)
{
+ auto& data = *_data;
EXPECT_TRUE(data._srcSession->send(createMessage("msg"), Route::parse("?dst/session")).isAccepted());
Message::UP msg = data._dstHandler.getMessage(RECEPTOR_TIMEOUT);
ASSERT_TRUE(msg);
@@ -1250,9 +1185,9 @@ Test::testHopIgnoresReply(TestData &data)
reply->getTrace()));
}
-void
-Test::testHopBlueprintIgnoresReply(TestData &data)
+TEST_F(RoutingTest, test_hop_blueprint_ignores_reply)
{
+ auto& data = *_data;
data._srcServer.mb.setupRouting(RoutingSpec().addTable(RoutingTableSpec(SimpleProtocol::NAME)
.addHop(std::move(HopSpec("foo", "dst/session").setIgnoreResult(true)))));
EXPECT_TRUE(data._srcSession->send(createMessage("msg"), Route::parse("foo")).isAccepted());
@@ -1270,22 +1205,22 @@ Test::testHopBlueprintIgnoresReply(TestData &data)
reply->getTrace()));
}
-void
-Test::testAcceptEmptyRoute(TestData &data)
+TEST_F(RoutingTest, test_accept_empty_route)
{
+ auto& data = *_data;
EXPECT_TRUE(data._srcSession->send(createMessage("msg"), Route::parse("dst/session")).isAccepted());
Message::UP msg = data._dstHandler.getMessage(RECEPTOR_TIMEOUT);
ASSERT_TRUE(msg);
const Route &route = msg->getRoute();
- EXPECT_EQUAL(0u, route.getNumHops());
+ EXPECT_EQ(0u, route.getNumHops());
data._dstSession->acknowledge(std::move(msg));
Reply::UP reply = data._srcHandler.getReply(RECEPTOR_TIMEOUT);
ASSERT_TRUE(reply);
}
-void
-Test::testAbortOnlyActiveNodes(TestData &data)
+TEST_F(RoutingTest, test_abort_only_active_nodes)
{
+ auto& data = *_data;
auto protocol = std::make_shared<SimpleProtocol>();
protocol->addPolicyFactory("Custom", std::make_shared<CustomPolicyFactory>(false));
protocol->addPolicyFactory("SetReply", std::make_shared<SetReplyPolicyFactory>(false,
@@ -1297,39 +1232,39 @@ Test::testAbortOnlyActiveNodes(TestData &data)
EXPECT_TRUE(data._srcSession->send(createMessage("msg"), Route::parse("[Custom:[SetReply:foo],?bar,dst/session]")).isAccepted());
Reply::UP reply = data._srcHandler.getReply(RECEPTOR_TIMEOUT);
ASSERT_TRUE(reply);
- EXPECT_EQUAL(2u, reply->getNumErrors());
- EXPECT_EQUAL((uint32_t)ErrorCode::APP_FATAL_ERROR, reply->getError(0).getCode());
- EXPECT_EQUAL((uint32_t)ErrorCode::SEND_ABORTED, reply->getError(1).getCode());
+ EXPECT_EQ(2u, reply->getNumErrors());
+ EXPECT_EQ((uint32_t)ErrorCode::APP_FATAL_ERROR, reply->getError(0).getCode());
+ EXPECT_EQ((uint32_t)ErrorCode::SEND_ABORTED, reply->getError(1).getCode());
}
-void
-Test::testUnknownPolicy(TestData &data)
+TEST_F(RoutingTest, test_unknown_policy)
{
+ auto& data = *_data;
EXPECT_TRUE(data._srcSession->send(createMessage("msg"), Route::parse("[Unknown]")).isAccepted());
Reply::UP reply = data._srcHandler.getReply(RECEPTOR_TIMEOUT);
ASSERT_TRUE(reply);
- EXPECT_EQUAL(1u, reply->getNumErrors());
- EXPECT_EQUAL((uint32_t)ErrorCode::UNKNOWN_POLICY, reply->getError(0).getCode());
+ EXPECT_EQ(1u, reply->getNumErrors());
+ EXPECT_EQ((uint32_t)ErrorCode::UNKNOWN_POLICY, reply->getError(0).getCode());
}
-void
-Test::testSelectException(TestData &data)
+TEST_F(RoutingTest, test_select_exception)
{
+ auto& data = *_data;
auto protocol = std::make_shared<SimpleProtocol>();
protocol->addPolicyFactory("SelectException", std::make_shared<SelectExceptionPolicyFactory>());
data._srcServer.mb.putProtocol(protocol);
EXPECT_TRUE(data._srcSession->send(createMessage("msg"), Route::parse("[SelectException]")).isAccepted());
Reply::UP reply = data._srcHandler.getReply(RECEPTOR_TIMEOUT);
ASSERT_TRUE(reply);
- EXPECT_EQUAL(1u, reply->getNumErrors());
- EXPECT_EQUAL((uint32_t)ErrorCode::POLICY_ERROR, reply->getError(0).getCode());
- EXPECT_EQUAL("Policy 'SelectException' threw an exception; {test exception}",
- reply->getError(0).getMessage());
+ EXPECT_EQ(1u, reply->getNumErrors());
+ EXPECT_EQ((uint32_t)ErrorCode::POLICY_ERROR, reply->getError(0).getCode());
+ EXPECT_EQ("Policy 'SelectException' threw an exception; {test exception}",
+ reply->getError(0).getMessage());
}
-void
-Test::testMergeException(TestData &data)
+TEST_F(RoutingTest, test_merge_exception)
{
+ auto& data = *_data;
auto protocol = std::make_shared<SimpleProtocol>();
protocol->addPolicyFactory("MergeException", std::make_shared<MergeExceptionPolicyFactory>());
data._srcServer.mb.putProtocol(protocol);
@@ -1340,157 +1275,161 @@ Test::testMergeException(TestData &data)
data._dstSession->acknowledge(std::move(msg));
Reply::UP reply = data._srcHandler.getReply(RECEPTOR_TIMEOUT);
ASSERT_TRUE(reply);
- EXPECT_EQUAL(1u, reply->getNumErrors());
- EXPECT_EQUAL((uint32_t)ErrorCode::POLICY_ERROR,
+ EXPECT_EQ(1u, reply->getNumErrors());
+ EXPECT_EQ((uint32_t)ErrorCode::POLICY_ERROR,
reply->getError(0).getCode());
- EXPECT_EQUAL("Policy 'MergeException' threw an exception; {test exception}",
- reply->getError(0).getMessage());
+ EXPECT_EQ("Policy 'MergeException' threw an exception; {test exception}",
+ reply->getError(0).getMessage());
}
-void
-Test::requireThatIgnoreFlagPersistsThroughHopLookup(TestData &data)
+TEST_F(RoutingTest, require_that_ignore_flag_persists_through_hop_lookup)
{
+ auto& data = *_data;
setupRouting(data, RoutingTableSpec(SimpleProtocol::NAME).addHop(HopSpec("foo", "dst/unknown")));
ASSERT_TRUE(testSend(data, "?foo"));
ASSERT_TRUE(testTrace(data, StringList().add("Ignoring errors in reply.")));
}
-void
-Test::requireThatIgnoreFlagPersistsThroughRouteLookup(TestData &data)
+TEST_F(RoutingTest, require_that_ignore_flag_persists_through_route_lookup)
{
+ auto& data = *_data;
setupRouting(data, RoutingTableSpec(SimpleProtocol::NAME).addRoute(RouteSpec("foo").addHop("dst/unknown")));
ASSERT_TRUE(testSend(data, "?foo"));
ASSERT_TRUE(testTrace(data, StringList().add("Ignoring errors in reply.")));
}
-void
-Test::requireThatIgnoreFlagPersistsThroughPolicySelect(TestData &data)
+TEST_F(RoutingTest, require_that_ignore_flag_persists_through_policy_select)
{
+ auto& data = *_data;
setupPolicy(data, "Custom", MyPolicyFactory::newSelectAndMerge("dst/unknown"));
ASSERT_TRUE(testSend(data, "?[Custom]"));
ASSERT_TRUE(testTrace(data, StringList().add("Ignoring errors in reply.")));
}
-void
-Test::requireThatIgnoreFlagIsSerializedWithMessage(TestData &data)
+TEST_F(RoutingTest, require_that_ignore_flag_is_serialized_with_message)
{
+ auto& data = *_data;
ASSERT_TRUE(testSend(data, "dst/session foo ?bar"));
Message::UP msg = data._dstHandler.getMessage(RECEPTOR_TIMEOUT);
ASSERT_TRUE(msg);
Route route = msg->getRoute();
- EXPECT_EQUAL(2u, route.getNumHops());
+ EXPECT_EQ(2u, route.getNumHops());
Hop hop = route.getHop(0);
- EXPECT_EQUAL("foo", hop.toString());
+ EXPECT_EQ("foo", hop.toString());
EXPECT_FALSE(hop.getIgnoreResult());
hop = route.getHop(1);
- EXPECT_EQUAL("?bar", hop.toString());
+ EXPECT_EQ("?bar", hop.toString());
EXPECT_TRUE(hop.getIgnoreResult());
data._dstSession->acknowledge(std::move(msg));
ASSERT_TRUE(testTrace(data, StringList().add("-Ignoring errors in reply.")));
}
-void
-Test::requireThatIgnoreFlagDoesNotInterfere(TestData &data)
+TEST_F(RoutingTest, require_that_ignore_flag_does_not_interfere)
{
+ auto& data = *_data;
setupPolicy(data, "Custom", MyPolicyFactory::newSelectAndMerge("dst/session"));
ASSERT_TRUE(testSend(data, "?[Custom]"));
ASSERT_TRUE(testTrace(data, StringList().add("-Ignoring errors in reply.")));
ASSERT_TRUE(testAcknowledge(data));
}
-
-void
-Test::requireThatEmptySelectionCanBeIgnored(TestData &data)
+
+TEST_F(RoutingTest, require_that_empty_selection_can_be_ignored)
{
+ auto& data = *_data;
setupPolicy(data, "Custom", MyPolicyFactory::newEmptySelection());
ASSERT_TRUE(testSend(data, "?[Custom]"));
ASSERT_TRUE(testTrace(data, StringList().add("Ignoring errors in reply.")));
}
-void
-Test::requireThatSelectErrorCanBeIgnored(TestData &data)
+TEST_F(RoutingTest, require_that_select_error_can_be_ignored)
{
+ auto& data = *_data;
setupPolicy(data, "Custom", MyPolicyFactory::newSelectError(ErrorCode::APP_FATAL_ERROR));
ASSERT_TRUE(testSend(data, "?[Custom]"));
ASSERT_TRUE(testTrace(data, StringList().add("Ignoring errors in reply.")));
}
-void
-Test::requireThatSelectExceptionCanBeIgnored(TestData &data)
+TEST_F(RoutingTest, require_that_select_exception_can_be_ignored)
{
+ auto& data = *_data;
setupPolicy(data, "Custom", MyPolicyFactory::newSelectException());
ASSERT_TRUE(testSend(data, "?[Custom]"));
ASSERT_TRUE(testTrace(data, StringList().add("Ignoring errors in reply.")));
}
-void
-Test::requireThatSelectAndThrowCanBeIgnored(TestData &data)
+TEST_F(RoutingTest, require_that_select_and_throw_can_be_ignored)
{
+ auto& data = *_data;
setupPolicy(data, "Custom", MyPolicyFactory::newSelectAndThrow("dst/session"));
ASSERT_TRUE(testSend(data, "?[Custom]"));
ASSERT_TRUE(testTrace(data, StringList().add("Ignoring errors in reply.")));
}
-void
-Test::requireThatEmptyMergeCanBeIgnored(TestData &data)
+TEST_F(RoutingTest, require_that_empty_merge_can_be_ignored)
{
+ auto& data = *_data;
setupPolicy(data, "Custom", MyPolicyFactory::newEmptyMerge("dst/session"));
ASSERT_TRUE(testSend(data, "?[Custom]"));
ASSERT_TRUE(testAcknowledge(data));
ASSERT_TRUE(testTrace(data, StringList().add("Ignoring errors in reply.")));
}
-void
-Test::requireThatMergeErrorCanBeIgnored(TestData &data)
+TEST_F(RoutingTest, require_that_merge_error_can_be_ignored)
{
+ auto& data = *_data;
setupPolicy(data, "Custom", MyPolicyFactory::newMergeError("dst/session", ErrorCode::APP_FATAL_ERROR));
ASSERT_TRUE(testSend(data, "?[Custom]"));
ASSERT_TRUE(testAcknowledge(data));
ASSERT_TRUE(testTrace(data, StringList().add("Ignoring errors in reply.")));
}
-void
-Test::requireThatMergeExceptionCanBeIgnored(TestData &data)
+TEST_F(RoutingTest, require_that_merge_exception_can_be_ignored)
{
+ auto& data = *_data;
setupPolicy(data, "Custom", MyPolicyFactory::newMergeException("dst/session"));
ASSERT_TRUE(testSend(data, "?[Custom]"));
ASSERT_TRUE(testAcknowledge(data));
ASSERT_TRUE(testTrace(data, StringList().add("Ignoring errors in reply.")));
}
-
-void
-Test::requireThatMergeAndThrowCanBeIgnored(TestData &data)
+
+TEST_F(RoutingTest, require_that_merge_and_throw_can_be_ignored)
{
+ auto& data = *_data;
setupPolicy(data, "Custom", MyPolicyFactory::newMergeAndThrow("dst/session"));
ASSERT_TRUE(testSend(data, "?[Custom]"));
ASSERT_TRUE(testAcknowledge(data));
ASSERT_TRUE(testTrace(data, StringList().add("Ignoring errors in reply.")));
}
-void
-Test::requireThatAllocServiceCanBeIgnored(TestData &data)
+TEST_F(RoutingTest, require_that_alloc_service_can_be_ignored)
{
+ auto& data = *_data;
ASSERT_TRUE(testSend(data, "?dst/unknown"));
ASSERT_TRUE(testTrace(data, StringList().add("Ignoring errors in reply.")));
}
-void
-Test::requireThatDepthLimitCanBeIgnored(TestData &data)
+TEST_F(RoutingTest, require_that_depth_limit_can_be_ignored)
{
+ auto& data = *_data;
setupPolicy(data, "Custom", MyPolicyFactory::newSelectAndMerge("[Custom]"));
ASSERT_TRUE(testSend(data, "?[Custom]", 0));
ASSERT_TRUE(testTrace(data, StringList()));
}
-void
-Test::testTimeout(TestData &data)
+TEST_F(RoutingTest, test_timeout)
{
+ auto& data = *_data;
+ // Force teardown after this test case since timeouts have been changed.
+ _force_teardown = true;
data._retryPolicy->setEnabled(true);
data._retryPolicy->setBaseDelay(0.01);
data._srcSession->setTimeout(500ms);
EXPECT_TRUE(data._srcSession->send(createMessage("msg"), Route::parse("dst/unknown")).isAccepted());
Reply::UP reply = data._srcHandler.getReply(RECEPTOR_TIMEOUT);
ASSERT_TRUE(reply);
- EXPECT_EQUAL(2u, reply->getNumErrors());
- EXPECT_EQUAL((uint32_t)ErrorCode::NO_ADDRESS_FOR_SERVICE, reply->getError(0).getCode());
- EXPECT_EQUAL((uint32_t)ErrorCode::TIMEOUT, reply->getError(1).getCode());
+ EXPECT_EQ(2u, reply->getNumErrors());
+ EXPECT_EQ((uint32_t)ErrorCode::NO_ADDRESS_FOR_SERVICE, reply->getError(0).getCode());
+ EXPECT_EQ((uint32_t)ErrorCode::TIMEOUT, reply->getError(1).getCode());
}
+
+GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/messagebus/src/tests/routingcontext/CMakeLists.txt b/messagebus/src/tests/routingcontext/CMakeLists.txt
index 96bf6dbe35e..932d0020a3e 100644
--- a/messagebus/src/tests/routingcontext/CMakeLists.txt
+++ b/messagebus/src/tests/routingcontext/CMakeLists.txt
@@ -5,5 +5,6 @@ vespa_add_executable(messagebus_routingcontext_test_app TEST
DEPENDS
messagebus_messagebus-test
messagebus
+ GTest::gtest
)
vespa_add_test(NAME messagebus_routingcontext_test_app COMMAND messagebus_routingcontext_test_app)
diff --git a/messagebus/src/tests/routingcontext/routingcontext.cpp b/messagebus/src/tests/routingcontext/routingcontext.cpp
index d81bada2bc6..c8bbc53a0df 100644
--- a/messagebus/src/tests/routingcontext/routingcontext.cpp
+++ b/messagebus/src/tests/routingcontext/routingcontext.cpp
@@ -9,7 +9,7 @@
#include <vespa/messagebus/testlib/simpleprotocol.h>
#include <vespa/messagebus/testlib/slobrok.h>
#include <vespa/messagebus/testlib/testserver.h>
-#include <vespa/vespalib/testkit/testapp.h>
+#include <vespa/vespalib/gtest/gtest.h>
#include <vespa/vespalib/util/stringfmt.h>
@@ -17,6 +17,8 @@ using namespace mbus;
using vespalib::make_string;
+namespace {
+
static const duration TIMEOUT = 120s;
class StringList : public std::vector<string> {
@@ -192,20 +194,6 @@ public:
bool start();
};
-class Test : public vespalib::TestApp {
-private:
- static Message::UP createMessage(const string &msg);
-
-public:
- int Main() override;
- void testSingleDirective(TestData &data);
- void testMoreDirectives(TestData &data);
- void testRecipientsRemain(TestData &data);
- void testConstRoute(TestData &data);
-};
-
-TEST_APPHOOK(Test);
-
TestData::TestData() :
_slobrok(),
_retryPolicy(std::make_shared<RetryTransientErrorsPolicy>()),
@@ -240,28 +228,33 @@ TestData::start()
return true;
}
-Message::UP
-Test::createMessage(const string &msg)
-{
- auto ret = std::make_unique<SimpleMessage>(msg);
- ret->getTrace().setLevel(9);
- return ret;
}
-int
-Test::Main()
-{
- TEST_INIT("routingcontext_test");
+class RoutingContextTest : public testing::Test {
+protected:
+ static std::shared_ptr<TestData> _data;
+ RoutingContextTest();
+ ~RoutingContextTest() override;
+ static void SetUpTestSuite();
+ static void TearDownTestSuite();
+};
- TestData data;
- ASSERT_TRUE(data.start());
+std::shared_ptr<TestData> RoutingContextTest::_data;
- testSingleDirective(data); TEST_FLUSH();
- testMoreDirectives(data); TEST_FLUSH();
- testRecipientsRemain(data); TEST_FLUSH();
- testConstRoute(data); TEST_FLUSH();
+RoutingContextTest::RoutingContextTest() = default;
+RoutingContextTest::~RoutingContextTest() = default;
- TEST_DONE();
+void
+RoutingContextTest::SetUpTestSuite()
+{
+ _data = std::make_shared<TestData>();
+ ASSERT_TRUE(_data->start());
+}
+
+void
+RoutingContextTest::TearDownTestSuite()
+{
+ _data.reset();
}
////////////////////////////////////////////////////////////////////////////////
@@ -270,9 +263,9 @@ Test::Main()
//
////////////////////////////////////////////////////////////////////////////////
-void
-Test::testSingleDirective(TestData &data)
+TEST_F(RoutingContextTest, test_single_directive)
{
+ auto& data = *_data;
IProtocol::SP protocol(new SimpleProtocol());
auto &simple = dynamic_cast<SimpleProtocol&>(*protocol);
simple.addPolicyFactory("Custom", SimpleProtocol::IPolicyFactory::SP(new CustomPolicyFactory(
@@ -295,9 +288,9 @@ Test::testSingleDirective(TestData &data)
}
}
-void
-Test::testMoreDirectives(TestData &data)
+TEST_F(RoutingContextTest, test_more_directives)
{
+ auto& data = *_data;
IProtocol::SP protocol(new SimpleProtocol());
auto &simple = dynamic_cast<SimpleProtocol&>(*protocol);
simple.addPolicyFactory("Custom", SimpleProtocol::IPolicyFactory::SP(new CustomPolicyFactory(
@@ -322,9 +315,9 @@ Test::testMoreDirectives(TestData &data)
}
}
-void
-Test::testRecipientsRemain(TestData &data)
+TEST_F(RoutingContextTest, test_recipients_remain)
{
+ auto& data = *_data;
auto protocol = std::make_shared<SimpleProtocol>();
auto &simple = dynamic_cast<SimpleProtocol&>(*protocol);
simple.addPolicyFactory("First", std::make_shared<CustomPolicyFactory>(true,
@@ -347,9 +340,9 @@ Test::testRecipientsRemain(TestData &data)
}
}
-void
-Test::testConstRoute(TestData &data)
+TEST_F(RoutingContextTest, test_const_route)
{
+ auto& data = *_data;
auto protocol = std::make_shared<SimpleProtocol>();
auto &simple = dynamic_cast<SimpleProtocol&>(*protocol);
simple.addPolicyFactory("DocumentRouteSelector",
@@ -371,3 +364,4 @@ Test::testConstRoute(TestData &data)
}
}
+GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/messagebus/src/tests/routingspec/CMakeLists.txt b/messagebus/src/tests/routingspec/CMakeLists.txt
index 7a2ba9d8fe4..c7115c16fd9 100644
--- a/messagebus/src/tests/routingspec/CMakeLists.txt
+++ b/messagebus/src/tests/routingspec/CMakeLists.txt
@@ -5,5 +5,6 @@ vespa_add_executable(messagebus_routingspec_test_app TEST
DEPENDS
messagebus_messagebus-test
messagebus
+ GTest::gtest
)
vespa_add_test(NAME messagebus_routingspec_test_app COMMAND messagebus_routingspec_test_app)
diff --git a/messagebus/src/tests/routingspec/routingspec.cpp b/messagebus/src/tests/routingspec/routingspec.cpp
index 40f3f293de3..eec19982b8e 100644
--- a/messagebus/src/tests/routingspec/routingspec.cpp
+++ b/messagebus/src/tests/routingspec/routingspec.cpp
@@ -3,9 +3,9 @@
#include <vespa/messagebus/configagent.h>
#include <vespa/messagebus/iconfighandler.h>
#include <vespa/messagebus/routing/routingspec.h>
-#include <vespa/vespalib/testkit/testapp.h>
#include <vespa/messagebus/config-messagebus.h>
#include <vespa/config/helper/configgetter.hpp>
+#include <vespa/vespalib/gtest/gtest.h>
using namespace mbus;
@@ -31,32 +31,19 @@ public:
}
};
-class Test : public vespalib::TestApp {
-private:
- bool testRouting(const RoutingSpec &spec);
- bool testConfig(const RoutingSpec &spec);
-
-public:
- void testConstructors();
- void testConfigGeneration();
- int Main() override;
+class RoutingSpecTest : public testing::Test {
+protected:
+ RoutingSpecTest();
+ ~RoutingSpecTest() override;
+ static void test_routing_helper(const RoutingSpec &spec, bool& success);
+ static bool testRouting(const RoutingSpec &spec);
+ static bool testConfig(const RoutingSpec &spec);
};
-TEST_APPHOOK(Test);
-
-int
-Test::Main()
-{
- TEST_INIT("routingspec_test");
-
- testConstructors(); TEST_FLUSH();
- testConfigGeneration(); TEST_FLUSH();
-
- TEST_DONE();
-}
+RoutingSpecTest::RoutingSpecTest() = default;
+RoutingSpecTest::~RoutingSpecTest() = default;
-void
-Test::testConstructors()
+TEST_F(RoutingSpecTest, test_constructors)
{
{
RoutingSpec spec;
@@ -126,57 +113,64 @@ Test::testConstructors()
}
}
+void
+RoutingSpecTest::test_routing_helper(const RoutingSpec &spec, bool& success)
+{
+ ASSERT_TRUE(spec.getNumTables() == 2);
+ ASSERT_TRUE(spec.getTable(0).getProtocol() == "foo");
+ ASSERT_TRUE(spec.getTable(0).getNumHops() == 2);
+ ASSERT_TRUE(spec.getTable(0).getHop(0).getName() == "foo-h1");
+ ASSERT_TRUE(spec.getTable(0).getHop(0).getSelector() == "foo-h1-sel");
+ ASSERT_TRUE(spec.getTable(0).getHop(0).getNumRecipients() == 2);
+ ASSERT_TRUE(spec.getTable(0).getHop(0).getRecipient(0) == "foo-h1-r1");
+ ASSERT_TRUE(spec.getTable(0).getHop(0).getRecipient(1) == "foo-h1-r2");
+ ASSERT_TRUE(spec.getTable(0).getHop(1).getName() == "foo-h2");
+ ASSERT_TRUE(spec.getTable(0).getHop(1).getSelector() == "foo-h2-sel");
+ ASSERT_TRUE(spec.getTable(0).getHop(1).getNumRecipients() == 2);
+ ASSERT_TRUE(spec.getTable(0).getHop(1).getRecipient(0) == "foo-h2-r1");
+ ASSERT_TRUE(spec.getTable(0).getHop(1).getRecipient(1) == "foo-h2-r2");
+ ASSERT_TRUE(spec.getTable(0).getNumRoutes() == 2);
+ ASSERT_TRUE(spec.getTable(0).getRoute(0).getName() == "foo-r1");
+ ASSERT_TRUE(spec.getTable(0).getRoute(0).getNumHops() == 2);
+ ASSERT_TRUE(spec.getTable(0).getRoute(0).getHop(0) == "foo-h1");
+ ASSERT_TRUE(spec.getTable(0).getRoute(0).getHop(1) == "foo-h2");
+ ASSERT_TRUE(spec.getTable(0).getRoute(1).getName() == "foo-r2");
+ ASSERT_TRUE(spec.getTable(0).getRoute(1).getNumHops() == 2);
+ ASSERT_TRUE(spec.getTable(0).getRoute(1).getHop(0) == "foo-h2");
+ ASSERT_TRUE(spec.getTable(0).getRoute(1).getHop(1) == "foo-h1");
+ ASSERT_TRUE(spec.getTable(1).getProtocol() == "bar");
+ ASSERT_TRUE(spec.getTable(1).getNumHops() == 2);
+ ASSERT_TRUE(spec.getTable(1).getHop(0).getName() == "bar-h1");
+ ASSERT_TRUE(spec.getTable(1).getHop(0).getSelector() == "bar-h1-sel");
+ ASSERT_TRUE(spec.getTable(1).getHop(0).getNumRecipients() == 2);
+ ASSERT_TRUE(spec.getTable(1).getHop(0).getRecipient(0) == "bar-h1-r1");
+ ASSERT_TRUE(spec.getTable(1).getHop(0).getRecipient(1) == "bar-h1-r2");
+ ASSERT_TRUE(spec.getTable(1).getHop(1).getName() == "bar-h2");
+ ASSERT_TRUE(spec.getTable(1).getHop(1).getSelector() == "bar-h2-sel");
+ ASSERT_TRUE(spec.getTable(1).getHop(1).getNumRecipients() == 2);
+ ASSERT_TRUE(spec.getTable(1).getHop(1).getRecipient(0) == "bar-h2-r1");
+ ASSERT_TRUE(spec.getTable(1).getHop(1).getRecipient(1) == "bar-h2-r2");
+ ASSERT_TRUE(spec.getTable(1).getNumRoutes() == 2);
+ ASSERT_TRUE(spec.getTable(1).getRoute(0).getName() == "bar-r1");
+ ASSERT_TRUE(spec.getTable(1).getRoute(0).getNumHops() == 2);
+ ASSERT_TRUE(spec.getTable(1).getRoute(0).getHop(0) == "bar-h1");
+ ASSERT_TRUE(spec.getTable(1).getRoute(0).getHop(1) == "bar-h2");
+ ASSERT_TRUE(spec.getTable(1).getRoute(1).getName() == "bar-r2");
+ ASSERT_TRUE(spec.getTable(1).getRoute(1).getNumHops() == 2);
+ ASSERT_TRUE(spec.getTable(1).getRoute(1).getHop(0) == "bar-h2");
+ ASSERT_TRUE(spec.getTable(1).getRoute(1).getHop(1) == "bar-h1");
+ success = true;
+}
+
bool
-Test::testRouting(const RoutingSpec &spec)
+RoutingSpecTest::testRouting(const RoutingSpec &spec)
{
- if (!ASSERT_TRUE(spec.getNumTables() == 2)) { return false; }
- if (!EXPECT_TRUE(spec.getTable(0).getProtocol() == "foo")) { return false; }
- if (!ASSERT_TRUE(spec.getTable(0).getNumHops() == 2)) { return false; }
- if (!EXPECT_TRUE(spec.getTable(0).getHop(0).getName() == "foo-h1")) { return false; }
- if (!EXPECT_TRUE(spec.getTable(0).getHop(0).getSelector() == "foo-h1-sel")) { return false; }
- if (!ASSERT_TRUE(spec.getTable(0).getHop(0).getNumRecipients() == 2)) { return false; }
- if (!EXPECT_TRUE(spec.getTable(0).getHop(0).getRecipient(0) == "foo-h1-r1")) { return false; }
- if (!EXPECT_TRUE(spec.getTable(0).getHop(0).getRecipient(1) == "foo-h1-r2")) { return false; }
- if (!EXPECT_TRUE(spec.getTable(0).getHop(1).getName() == "foo-h2")) { return false; }
- if (!EXPECT_TRUE(spec.getTable(0).getHop(1).getSelector() == "foo-h2-sel")) { return false; }
- if (!ASSERT_TRUE(spec.getTable(0).getHop(1).getNumRecipients() == 2)) { return false; }
- if (!EXPECT_TRUE(spec.getTable(0).getHop(1).getRecipient(0) == "foo-h2-r1")) { return false; }
- if (!EXPECT_TRUE(spec.getTable(0).getHop(1).getRecipient(1) == "foo-h2-r2")) { return false; }
- if (!ASSERT_TRUE(spec.getTable(0).getNumRoutes() == 2)) { return false; }
- if (!EXPECT_TRUE(spec.getTable(0).getRoute(0).getName() == "foo-r1")) { return false; }
- if (!ASSERT_TRUE(spec.getTable(0).getRoute(0).getNumHops() == 2)) { return false; }
- if (!EXPECT_TRUE(spec.getTable(0).getRoute(0).getHop(0) == "foo-h1")) { return false; }
- if (!EXPECT_TRUE(spec.getTable(0).getRoute(0).getHop(1) == "foo-h2")) { return false; }
- if (!EXPECT_TRUE(spec.getTable(0).getRoute(1).getName() == "foo-r2")) { return false; }
- if (!ASSERT_TRUE(spec.getTable(0).getRoute(1).getNumHops() == 2)) { return false; }
- if (!EXPECT_TRUE(spec.getTable(0).getRoute(1).getHop(0) == "foo-h2")) { return false; }
- if (!EXPECT_TRUE(spec.getTable(0).getRoute(1).getHop(1) == "foo-h1")) { return false; }
- if (!EXPECT_TRUE(spec.getTable(1).getProtocol() == "bar")) { return false; }
- if (!ASSERT_TRUE(spec.getTable(1).getNumHops() == 2)) { return false; }
- if (!EXPECT_TRUE(spec.getTable(1).getHop(0).getName() == "bar-h1")) { return false; }
- if (!EXPECT_TRUE(spec.getTable(1).getHop(0).getSelector() == "bar-h1-sel")) { return false; }
- if (!ASSERT_TRUE(spec.getTable(1).getHop(0).getNumRecipients() == 2)) { return false; }
- if (!EXPECT_TRUE(spec.getTable(1).getHop(0).getRecipient(0) == "bar-h1-r1")) { return false; }
- if (!EXPECT_TRUE(spec.getTable(1).getHop(0).getRecipient(1) == "bar-h1-r2")) { return false; }
- if (!EXPECT_TRUE(spec.getTable(1).getHop(1).getName() == "bar-h2")) { return false; }
- if (!EXPECT_TRUE(spec.getTable(1).getHop(1).getSelector() == "bar-h2-sel")) { return false; }
- if (!ASSERT_TRUE(spec.getTable(1).getHop(1).getNumRecipients() == 2)) { return false; }
- if (!EXPECT_TRUE(spec.getTable(1).getHop(1).getRecipient(0) == "bar-h2-r1")) { return false; }
- if (!EXPECT_TRUE(spec.getTable(1).getHop(1).getRecipient(1) == "bar-h2-r2")) { return false; }
- if (!ASSERT_TRUE(spec.getTable(1).getNumRoutes() == 2)) { return false; }
- if (!EXPECT_TRUE(spec.getTable(1).getRoute(0).getName() == "bar-r1")) { return false; }
- if (!ASSERT_TRUE(spec.getTable(1).getRoute(0).getNumHops() == 2)) { return false; }
- if (!EXPECT_TRUE(spec.getTable(1).getRoute(0).getHop(0) == "bar-h1")) { return false; }
- if (!EXPECT_TRUE(spec.getTable(1).getRoute(0).getHop(1) == "bar-h2")) { return false; }
- if (!EXPECT_TRUE(spec.getTable(1).getRoute(1).getName() == "bar-r2")) { return false; }
- if (!ASSERT_TRUE(spec.getTable(1).getRoute(1).getNumHops() == 2)) { return false; }
- if (!EXPECT_TRUE(spec.getTable(1).getRoute(1).getHop(0) == "bar-h2")) { return false; }
- if (!EXPECT_TRUE(spec.getTable(1).getRoute(1).getHop(1) == "bar-h1")) { return false; }
- return true;
+ bool success = false;
+ test_routing_helper(spec, success);
+ return success;
}
-void
-Test::testConfigGeneration()
+TEST_F(RoutingSpecTest, test_config_generation)
{
EXPECT_TRUE(testConfig(RoutingSpec()));
EXPECT_TRUE(testConfig(RoutingSpec().addTable(RoutingTableSpec("mytable1"))));
@@ -200,50 +194,52 @@ Test::testConfigGeneration()
.addRoute(RouteSpec("myroute12").addHop("myhop1").addHop("myhop2")))
.addTable(RoutingTableSpec("mytable2"))));
- EXPECT_EQUAL("routingtable[2]\n"
- "routingtable[0].protocol \"mytable1\"\n"
- "routingtable[1].protocol \"mytable2\"\n"
- "routingtable[1].hop[3]\n"
- "routingtable[1].hop[0].name \"myhop1\"\n"
- "routingtable[1].hop[0].selector \"myselector1\"\n"
- "routingtable[1].hop[1].name \"myhop2\"\n"
- "routingtable[1].hop[1].selector \"myselector2\"\n"
- "routingtable[1].hop[1].ignoreresult true\n"
- "routingtable[1].hop[2].name \"myhop1\"\n"
- "routingtable[1].hop[2].selector \"myselector3\"\n"
- "routingtable[1].hop[2].recipient[2]\n"
- "routingtable[1].hop[2].recipient[0] \"myrecipient1\"\n"
- "routingtable[1].hop[2].recipient[1] \"myrecipient2\"\n"
- "routingtable[1].route[1]\n"
- "routingtable[1].route[0].name \"myroute1\"\n"
- "routingtable[1].route[0].hop[1]\n"
- "routingtable[1].route[0].hop[0] \"myhop1\"\n",
- RoutingSpec()
- .addTable(RoutingTableSpec("mytable1"))
- .addTable(RoutingTableSpec("mytable2")
- .addHop(HopSpec("myhop1", "myselector1"))
- .addHop(std::move(HopSpec("myhop2", "myselector2").setIgnoreResult(true)))
- .addHop(HopSpec("myhop1", "myselector3")
- .addRecipient("myrecipient1")
- .addRecipient("myrecipient2"))
- .addRoute(RouteSpec("myroute1").addHop("myhop1"))).toString());
+ EXPECT_EQ("routingtable[2]\n"
+ "routingtable[0].protocol \"mytable1\"\n"
+ "routingtable[1].protocol \"mytable2\"\n"
+ "routingtable[1].hop[3]\n"
+ "routingtable[1].hop[0].name \"myhop1\"\n"
+ "routingtable[1].hop[0].selector \"myselector1\"\n"
+ "routingtable[1].hop[1].name \"myhop2\"\n"
+ "routingtable[1].hop[1].selector \"myselector2\"\n"
+ "routingtable[1].hop[1].ignoreresult true\n"
+ "routingtable[1].hop[2].name \"myhop1\"\n"
+ "routingtable[1].hop[2].selector \"myselector3\"\n"
+ "routingtable[1].hop[2].recipient[2]\n"
+ "routingtable[1].hop[2].recipient[0] \"myrecipient1\"\n"
+ "routingtable[1].hop[2].recipient[1] \"myrecipient2\"\n"
+ "routingtable[1].route[1]\n"
+ "routingtable[1].route[0].name \"myroute1\"\n"
+ "routingtable[1].route[0].hop[1]\n"
+ "routingtable[1].route[0].hop[0] \"myhop1\"\n",
+ RoutingSpec()
+ .addTable(RoutingTableSpec("mytable1"))
+ .addTable(RoutingTableSpec("mytable2")
+ .addHop(HopSpec("myhop1", "myselector1"))
+ .addHop(std::move(HopSpec("myhop2", "myselector2").setIgnoreResult(true)))
+ .addHop(HopSpec("myhop1", "myselector3")
+ .addRecipient("myrecipient1")
+ .addRecipient("myrecipient2"))
+ .addRoute(RouteSpec("myroute1").addHop("myhop1"))).toString());
}
bool
-Test::testConfig(const RoutingSpec &spec)
+RoutingSpecTest::testConfig(const RoutingSpec &spec)
{
- if (!EXPECT_TRUE(spec == spec)) {
+ bool failure = false;
+ EXPECT_TRUE(spec == spec) << (failure = true, "");
+ if (failure) {
return false;
}
- if (!EXPECT_TRUE(spec == RoutingSpec(spec))) {
+ EXPECT_TRUE(spec == RoutingSpec(spec)) << (failure = true, "");
+ if (failure) {
return false;
}
ConfigStore store;
ConfigAgent agent(store);
agent.configure(ConfigGetter<MessagebusConfig>().getConfig("", RawSpec(spec.toString())));
- if (!EXPECT_TRUE(store.getRoutingSpec() == spec)) {
- return false;
- }
- return true;
+ EXPECT_TRUE(store.getRoutingSpec() == spec) << (failure = true, "");
+ return !failure;
}
+GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/messagebus/src/tests/sourcesession/CMakeLists.txt b/messagebus/src/tests/sourcesession/CMakeLists.txt
index 067b281939a..6f8b14667ee 100644
--- a/messagebus/src/tests/sourcesession/CMakeLists.txt
+++ b/messagebus/src/tests/sourcesession/CMakeLists.txt
@@ -5,5 +5,6 @@ vespa_add_executable(messagebus_sourcesession_test_app TEST
DEPENDS
messagebus_messagebus-test
messagebus
+ GTest::gtest
)
vespa_add_test(NAME messagebus_sourcesession_test_app COMMAND messagebus_sourcesession_test_app)
diff --git a/messagebus/src/tests/sourcesession/sourcesession.cpp b/messagebus/src/tests/sourcesession/sourcesession.cpp
index 5d1a8e8ad24..d642209d816 100644
--- a/messagebus/src/tests/sourcesession/sourcesession.cpp
+++ b/messagebus/src/tests/sourcesession/sourcesession.cpp
@@ -15,7 +15,7 @@
#include <vespa/messagebus/testlib/simpleprotocol.h>
#include <vespa/messagebus/testlib/slobrok.h>
#include <vespa/messagebus/testlib/testserver.h>
-#include <vespa/vespalib/testkit/testapp.h>
+#include <vespa/vespalib/gtest/gtest.h>
#include <thread>
using namespace mbus;
@@ -64,21 +64,7 @@ bool waitQueueSize(RoutableQueue &queue, uint32_t size) {
return false;
}
-class Test : public vespalib::TestApp
-{
-public:
- void testSequencing();
- void testResendError();
- void testResendConnDown();
- void testIllegalRoute();
- void testNoServices();
- void testBlockingClose();
- void testNonBlockingClose();
- int Main() override;
-};
-
-void
-Test::testSequencing()
+TEST(SourceSessionTest, test_sequencing)
{
Slobrok slobrok;
TestServer src(Identity(""), getRouting(), slobrok);
@@ -111,8 +97,7 @@ Test::testSequencing()
ASSERT_TRUE(waitQueueSize(dstQ, 0));
}
-void
-Test::testResendError()
+TEST(SourceSessionTest, test_resend_error)
{
Slobrok slobrok;
auto retryPolicy = std::make_shared<RetryTransientErrorsPolicy>();
@@ -172,8 +157,7 @@ Test::testResendError()
}
}
-void
-Test::testResendConnDown()
+TEST(SourceSessionTest, test_resend_conn_down)
{
Slobrok slobrok;
auto retryPolicy = std::make_shared<RetryTransientErrorsPolicy>();
@@ -218,8 +202,7 @@ Test::testResendConnDown()
fprintf(stderr, "\nTRACE DUMP:\n%s\n\n", trace.c_str());
}
-void
-Test::testIllegalRoute()
+TEST(SourceSessionTest, test_illegal_route)
{
Slobrok slobrok;
TestServer src(MessageBusParams()
@@ -243,16 +226,15 @@ Test::testIllegalRoute()
Routable::UP routable = srcQ.dequeue();
ASSERT_TRUE(routable->isReply());
Reply::UP r(dynamic_cast<Reply*>(routable.release()));
- EXPECT_EQUAL(1u, r->getNumErrors());
- EXPECT_EQUAL((uint32_t)ErrorCode::NO_ADDRESS_FOR_SERVICE, r->getError(0).getCode());
+ EXPECT_EQ(1u, r->getNumErrors());
+ EXPECT_EQ((uint32_t)ErrorCode::NO_ADDRESS_FOR_SERVICE, r->getError(0).getCode());
string trace = r->getTrace().toString();
fprintf(stderr, "\nTRACE DUMP:\n%s\n\n", trace.c_str());
}
}
}
-void
-Test::testNoServices()
+TEST(SourceSessionTest, test_no_services)
{
Slobrok slobrok;
TestServer src(MessageBusParams()
@@ -283,8 +265,7 @@ Test::testNoServices()
}
}
-void
-Test::testBlockingClose()
+TEST(SourceSessionTest, test_blocking_close)
{
Slobrok slobrok;
TestServer src(Identity(""), getRouting(), slobrok);
@@ -304,8 +285,7 @@ Test::testBlockingClose()
EXPECT_TRUE(routable->isReply());
}
-void
-Test::testNonBlockingClose()
+TEST(SourceSessionTest, test_non_blocking_close)
{
Slobrok slobrok;
TestServer src(Identity(""), getRouting(), slobrok);
@@ -317,18 +297,4 @@ Test::testNonBlockingClose()
ss->close(); // this should not hang
}
-int
-Test::Main()
-{
- TEST_INIT("sourcesession_test");
- testSequencing(); TEST_FLUSH();
- testResendError(); TEST_FLUSH();
- testResendConnDown(); TEST_FLUSH();
- testIllegalRoute(); TEST_FLUSH();
- testNoServices(); TEST_FLUSH();
- testBlockingClose(); TEST_FLUSH();
- testNonBlockingClose(); TEST_FLUSH();
- TEST_DONE();
-}
-
-TEST_APPHOOK(Test);
+GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/messagebus/src/tests/throttling/CMakeLists.txt b/messagebus/src/tests/throttling/CMakeLists.txt
index 95df4c6d873..3ad0662d13b 100644
--- a/messagebus/src/tests/throttling/CMakeLists.txt
+++ b/messagebus/src/tests/throttling/CMakeLists.txt
@@ -5,5 +5,6 @@ vespa_add_executable(messagebus_throttling_test_app TEST
DEPENDS
messagebus_messagebus-test
messagebus
+ GTest::gtest
)
vespa_add_test(NAME messagebus_throttling_test_app COMMAND messagebus_throttling_test_app)
diff --git a/messagebus/src/tests/throttling/throttling.cpp b/messagebus/src/tests/throttling/throttling.cpp
index 73f4366e5d7..5b372334dcf 100644
--- a/messagebus/src/tests/throttling/throttling.cpp
+++ b/messagebus/src/tests/throttling/throttling.cpp
@@ -1,6 +1,5 @@
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include <vespa/vespalib/testkit/testapp.h>
#include <vespa/messagebus/destinationsession.h>
#include <vespa/messagebus/dynamicthrottlepolicy.h>
#include <vespa/messagebus/routablequeue.h>
@@ -12,6 +11,7 @@
#include <vespa/messagebus/testlib/simplemessage.h>
#include <vespa/messagebus/testlib/simplereply.h>
#include <vespa/messagebus/testlib/testserver.h>
+#include <vespa/vespalib/gtest/gtest.h>
#include <thread>
using namespace mbus;
@@ -65,46 +65,31 @@ bool waitPending(SourceSession& session, uint32_t size)
return false;
}
-////////////////////////////////////////////////////////////////////////////////
-//
-// Setup
-//
-////////////////////////////////////////////////////////////////////////////////
-
-class Test : public vespalib::TestApp {
-private:
- uint32_t getWindowSize(DynamicThrottlePolicy &policy, DynamicTimer &timer, uint32_t maxPending);
-
-protected:
- void testMaxPendingCount();
- void testMaxPendingSize();
- void testMinOne();
- void testDynamicWindowSize();
- void testIdleTimePeriod();
- void testMinWindowSize();
- void testMaxWindowSize();
-
-public:
- int Main() override;
-};
-
-int
-Test::Main()
+uint32_t
+getWindowSize(DynamicThrottlePolicy &policy, DynamicTimer &timer, uint32_t maxPending)
{
- TEST_INIT("throttling_test");
+ SimpleMessage msg("foo");
+ SimpleReply reply("bar");
+ reply.setContext(mbus::Context(uint64_t(1))); // To offset pending size bump in static policy
- testMaxPendingCount(); TEST_FLUSH();
- testMaxPendingSize(); TEST_FLUSH();
- testMinOne(); TEST_FLUSH();
- testDynamicWindowSize(); TEST_FLUSH();
- testIdleTimePeriod(); TEST_FLUSH();
- testMinWindowSize(); TEST_FLUSH();
- testMaxWindowSize(); TEST_FLUSH();
+ for (uint32_t i = 0; i < 999; ++i) {
+ uint32_t numPending = 0;
+ while (policy.canSend(msg, numPending)) {
+ policy.processMessage(msg);
+ ++numPending;
+ }
- TEST_DONE();
-}
+ uint64_t tripTime = (numPending < maxPending) ? 1000 : 1000 + (numPending - maxPending) * 1000;
+ timer._millis += tripTime;
-TEST_APPHOOK(Test);
+ for( ; numPending > 0 ; --numPending) {
+ policy.processReply(reply);
+ }
+ }
+ uint32_t ret = policy.getMaxPendingCount();
+ fprintf(stderr, "getWindowSize() = %u\n", ret);
+ return ret;
+}
////////////////////////////////////////////////////////////////////////////////
//
@@ -112,8 +97,7 @@ TEST_APPHOOK(Test);
//
////////////////////////////////////////////////////////////////////////////////
-void
-Test::testMaxPendingCount()
+TEST(ThrottlingTest, test_max_pending_count)
{
Slobrok slobrok;
TestServer src(Identity(""), getRouting(), slobrok);
@@ -165,8 +149,7 @@ Test::testMaxPendingCount()
ASSERT_TRUE(waitQueueSize(dstQ, 0));
}
-void
-Test::testMaxPendingSize()
+TEST(ThrottlingTest, test_max_pending_size)
{
ASSERT_TRUE(SimpleMessage("1234567890").getApproxSize() == 10);
ASSERT_TRUE(SimpleMessage("123456").getApproxSize() == 6);
@@ -191,8 +174,8 @@ Test::testMaxPendingSize()
DestinationSession::UP ds = dst.mb.createDestinationSession("session", true, dstQ);
ASSERT_TRUE(src.waitSlobrok("dst/session"));
- EXPECT_EQUAL(1u, SimpleMessage("1").getApproxSize());
- EXPECT_EQUAL(2u, SimpleMessage("12").getApproxSize());
+ EXPECT_EQ(1u, SimpleMessage("1").getApproxSize());
+ EXPECT_EQ(2u, SimpleMessage("12").getApproxSize());
EXPECT_TRUE(ss->send(Message::UP(new SimpleMessage("1")), "dst").isAccepted());
EXPECT_TRUE(waitQueueSize(dstQ, 1));
@@ -214,8 +197,7 @@ Test::testMaxPendingSize()
ASSERT_TRUE(waitQueueSize(srcQ, 3));
}
-void
-Test::testMinOne()
+TEST(ThrottlingTest, test_min_one)
{
ASSERT_TRUE(SimpleMessage("1234567890").getApproxSize() == 10);
ASSERT_TRUE(SimpleMessage("").getApproxSize() == 0);
@@ -248,8 +230,7 @@ Test::testMinOne()
}
-void
-Test::testDynamicWindowSize()
+TEST(ThrottlingTest, test_dynamic_window_size)
{
auto ptr = std::make_unique<DynamicTimer>();
auto* timer = ptr.get();
@@ -274,8 +255,7 @@ Test::testDynamicWindowSize()
ASSERT_TRUE(windowSize >= 90 && windowSize <= 115);
}
-void
-Test::testIdleTimePeriod()
+TEST(ThrottlingTest, test_idle_time_period)
{
auto ptr = std::make_unique<DynamicTimer>();
auto* timer = ptr.get();
@@ -295,15 +275,14 @@ Test::testIdleTimePeriod()
timer->_millis += 60001;
ASSERT_TRUE(policy.canSend(msg, 50));
- EXPECT_EQUAL(55u, policy.getMaxPendingCount());
+ EXPECT_EQ(55u, policy.getMaxPendingCount());
timer->_millis += 60001;
ASSERT_TRUE(policy.canSend(msg, 0));
- EXPECT_EQUAL(5u, policy.getMaxPendingCount());
+ EXPECT_EQ(5u, policy.getMaxPendingCount());
}
-void
-Test::testMinWindowSize()
+TEST(ThrottlingTest, test_min_window_size)
{
auto ptr = std::make_unique<DynamicTimer>();
auto* timer = ptr.get();
@@ -317,8 +296,7 @@ Test::testMinWindowSize()
ASSERT_TRUE(windowSize >= 150 && windowSize <= 210);
}
-void
-Test::testMaxWindowSize()
+TEST(ThrottlingTest, test_max_window_size)
{
auto ptr = std::make_unique<DynamicTimer>();
auto* timer = ptr.get();
@@ -337,28 +315,4 @@ Test::testMaxWindowSize()
}
-uint32_t
-Test::getWindowSize(DynamicThrottlePolicy &policy, DynamicTimer &timer, uint32_t maxPending)
-{
- SimpleMessage msg("foo");
- SimpleReply reply("bar");
- reply.setContext(mbus::Context(uint64_t(1))); // To offset pending size bump in static policy
-
- for (uint32_t i = 0; i < 999; ++i) {
- uint32_t numPending = 0;
- while (policy.canSend(msg, numPending)) {
- policy.processMessage(msg);
- ++numPending;
- }
-
- uint64_t tripTime = (numPending < maxPending) ? 1000 : 1000 + (numPending - maxPending) * 1000;
- timer._millis += tripTime;
-
- for( ; numPending > 0 ; --numPending) {
- policy.processReply(reply);
- }
- }
- uint32_t ret = policy.getMaxPendingCount();
- fprintf(stderr, "getWindowSize() = %u\n", ret);
- return ret;
-}
+GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/messagebus/src/tests/timeout/CMakeLists.txt b/messagebus/src/tests/timeout/CMakeLists.txt
index 2292b6d649f..4aa3458cb14 100644
--- a/messagebus/src/tests/timeout/CMakeLists.txt
+++ b/messagebus/src/tests/timeout/CMakeLists.txt
@@ -5,5 +5,6 @@ vespa_add_executable(messagebus_timeout_test_app TEST
DEPENDS
messagebus_messagebus-test
messagebus
+ GTest::gtest
)
vespa_add_test(NAME messagebus_timeout_test_app COMMAND messagebus_timeout_test_app)
diff --git a/messagebus/src/tests/timeout/timeout.cpp b/messagebus/src/tests/timeout/timeout.cpp
index 2ffdab11c40..497af9c5c0e 100644
--- a/messagebus/src/tests/timeout/timeout.cpp
+++ b/messagebus/src/tests/timeout/timeout.cpp
@@ -1,6 +1,5 @@
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include <vespa/vespalib/testkit/testapp.h>
#include <vespa/messagebus/errorcode.h>
#include <vespa/messagebus/emptyreply.h>
#include <vespa/messagebus/sourcesession.h>
@@ -11,33 +10,13 @@
#include <vespa/messagebus/testlib/simplemessage.h>
#include <vespa/messagebus/testlib/slobrok.h>
#include <vespa/messagebus/testlib/testserver.h>
+#include <vespa/vespalib/gtest/gtest.h>
using namespace mbus;
using namespace std::chrono_literals;
-class Test : public vespalib::TestApp {
-public:
- int Main() override;
- void testZeroTimeout();
- void testMessageExpires();
-};
-
-TEST_APPHOOK(Test);
-
-int
-Test::Main()
-{
- TEST_INIT("timeout_test");
-
- testZeroTimeout(); TEST_FLUSH();
- testMessageExpires(); TEST_FLUSH();
-
- TEST_DONE();
-}
-
-void
-Test::testZeroTimeout()
+TEST(TimeoutTest, test_zero_timeout)
{
Slobrok slobrok;
TestServer srcServer(Identity("src"), RoutingSpec(), slobrok);
@@ -53,12 +32,11 @@ Test::testZeroTimeout()
Reply::UP reply = srcHandler.getReply();
ASSERT_TRUE(reply);
- EXPECT_EQUAL(1u, reply->getNumErrors());
- EXPECT_EQUAL((uint32_t)ErrorCode::TIMEOUT, reply->getError(0).getCode());
+ EXPECT_EQ(1u, reply->getNumErrors());
+ EXPECT_EQ((uint32_t)ErrorCode::TIMEOUT, reply->getError(0).getCode());
}
-void
-Test::testMessageExpires()
+TEST(TimeoutTest, test_message_expires)
{
Slobrok slobrok;
TestServer srcServer(Identity("src"), RoutingSpec(), slobrok);
@@ -73,11 +51,13 @@ Test::testMessageExpires()
Reply::UP reply = srcHandler.getReply();
ASSERT_TRUE(reply);
- EXPECT_EQUAL(1u, reply->getNumErrors());
- EXPECT_EQUAL((uint32_t)ErrorCode::TIMEOUT, reply->getError(0).getCode());
+ EXPECT_EQ(1u, reply->getNumErrors());
+ EXPECT_EQ((uint32_t)ErrorCode::TIMEOUT, reply->getError(0).getCode());
Message::UP msg = dstHandler.getMessage(1s);
if (msg) {
msg->discard();
}
}
+
+GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/metrics/src/main/java/ai/vespa/metrics/set/InfrastructureMetricSet.java b/metrics/src/main/java/ai/vespa/metrics/set/InfrastructureMetricSet.java
index 61ab8cea941..38a1b252df9 100644
--- a/metrics/src/main/java/ai/vespa/metrics/set/InfrastructureMetricSet.java
+++ b/metrics/src/main/java/ai/vespa/metrics/set/InfrastructureMetricSet.java
@@ -68,11 +68,11 @@ public class InfrastructureMetricSet {
addMetric(metrics, ConfigServerMetrics.CLUSTER_LOAD_IDEAL_MEMORY.max());
addMetric(metrics, ConfigServerMetrics.CLUSTER_LOAD_IDEAL_DISK.max());
addMetric(metrics, ConfigServerMetrics.NODES_EMPTY_EXCLUSIVE.max());
- addMetric(metrics, ConfigServerMetrics.NODES_EXPIRED_DEPROVISIONED.sum());
- addMetric(metrics, ConfigServerMetrics.NODES_EXPIRED_DIRTY.sum());
- addMetric(metrics, ConfigServerMetrics.NODES_EXPIRED_INACTIVE.sum());
- addMetric(metrics, ConfigServerMetrics.NODES_EXPIRED_PROVISIONED.sum());
- addMetric(metrics, ConfigServerMetrics.NODES_EXPIRED_RESERVED.sum());
+ addMetric(metrics, ConfigServerMetrics.NODES_EXPIRED_DEPROVISIONED.count());
+ addMetric(metrics, ConfigServerMetrics.NODES_EXPIRED_DIRTY.count());
+ addMetric(metrics, ConfigServerMetrics.NODES_EXPIRED_INACTIVE.count());
+ addMetric(metrics, ConfigServerMetrics.NODES_EXPIRED_PROVISIONED.count());
+ addMetric(metrics, ConfigServerMetrics.NODES_EXPIRED_RESERVED.count());
addMetric(metrics, ConfigServerMetrics.WANT_TO_REBOOT.max());
addMetric(metrics, ConfigServerMetrics.WANT_TO_RESTART.max());
addMetric(metrics, ConfigServerMetrics.WANT_TO_RETIRE.max());
diff --git a/parent/pom.xml b/parent/pom.xml
index 780d05241be..cb6e4c1d433 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -317,7 +317,7 @@
-->
<groupId>org.openrewrite.maven</groupId>
<artifactId>rewrite-maven-plugin</artifactId>
- <version>5.23.3</version>
+ <version>5.24.0</version>
<configuration>
<activeRecipes>
<recipe>org.openrewrite.java.testing.junit5.JUnit5BestPractices</recipe>
diff --git a/searchcore/src/tests/proton/attribute/CMakeLists.txt b/searchcore/src/tests/proton/attribute/CMakeLists.txt
index 911268bd92a..88b30df608f 100644
--- a/searchcore/src/tests/proton/attribute/CMakeLists.txt
+++ b/searchcore/src/tests/proton/attribute/CMakeLists.txt
@@ -21,6 +21,7 @@ vespa_add_executable(searchcore_attributeflush_test_app TEST
searchcore_attribute
searchcore_flushengine
searchcore_pcommon
+ GTest::gtest
)
vespa_add_test(NAME searchcore_attributeflush_test_app COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/attributeflush_test.sh
DEPENDS searchcore_attributeflush_test_app)
diff --git a/searchcore/src/tests/proton/attribute/attributeflush_test.cpp b/searchcore/src/tests/proton/attribute/attributeflush_test.cpp
index a621451bf3b..6969032535c 100644
--- a/searchcore/src/tests/proton/attribute/attributeflush_test.cpp
+++ b/searchcore/src/tests/proton/attribute/attributeflush_test.cpp
@@ -14,7 +14,7 @@
#include <vespa/searchlib/index/dummyfileheadercontext.h>
#include <vespa/searchlib/test/directory_handler.h>
#include <vespa/searchcommon/attribute/config.h>
-#include <vespa/vespalib/testkit/testapp.h>
+#include <vespa/vespalib/gtest/gtest.h>
#include <vespa/vespalib/util/foreground_thread_executor.h>
#include <vespa/vespalib/util/foregroundtaskexecutor.h>
#include <vespa/vespalib/util/idestructorcallback.h>
@@ -209,46 +209,6 @@ AVConfig getInt32ArrayConfig()
return AVConfig(AVBasicType::INT32, AVCollectionType::ARRAY);
}
-class Test : public vespalib::TestApp
-{
-private:
- void
- requireThatUpdaterAndFlusherCanRunConcurrently();
-
- void
- requireThatFlushableAttributeReportsMemoryUsage();
-
- void
- requireThatFlushableAttributeManagesSyncTokenInfo();
-
- void
- requireThatFlushTargetsCanBeRetrieved();
-
- void
- requireThatCleanUpIsPerformedAfterFlush();
-
- void
- requireThatFlushStatsAreUpdated();
-
- void
- requireThatOnlyOneFlusherCanRunAtTheSameTime();
-
- void
- requireThatLastFlushTimeIsReported();
-
- void
- requireThatShrinkWorks();
-
- void requireThatFlushedAttributeCanBeLoaded(const HwInfo &hwInfo);
- void requireThatFlushedAttributeCanBeLoaded();
-
- void requireThatFlushFailurePreventsSyncTokenUpdate();
-public:
- int
- Main() override;
-};
-
-
const string test_dir = "flush";
struct BaseFixture
@@ -325,9 +285,7 @@ struct Fixture : public BaseFixture, public AttributeManagerFixture
Fixture::~Fixture() = default;
-
-void
-Test::requireThatUpdaterAndFlusherCanRunConcurrently()
+TEST(AttributeFlushTest, require_that_updater_and_flusher_can_run_concurrently)
{
Fixture f;
AttributeManager &am = f._m;
@@ -352,14 +310,12 @@ Test::requireThatUpdaterAndFlusherCanRunConcurrently()
AttributeFactory::createAttribute(baseFileName,
getInt32Config());
EXPECT_TRUE(attr->load());
- EXPECT_EQUAL((uint32_t)snap.syncToken + 1, attr->getNumDocs());
+ EXPECT_EQ((uint32_t)snap.syncToken + 1, attr->getNumDocs());
}
}
}
-
-void
-Test::requireThatFlushableAttributeReportsMemoryUsage()
+TEST(AttributeFlushTest, require_that_flushable_attribute_reports_memory_usage)
{
Fixture f;
AttributeManager &am = f._m;
@@ -368,16 +324,14 @@ Test::requireThatFlushableAttributeReportsMemoryUsage()
av->commit();
IFlushTarget::SP fa = am.getFlushable("a2");
EXPECT_TRUE(av->getStatus().getAllocated() >= 100u * sizeof(int32_t));
- EXPECT_EQUAL(av->getStatus().getUsed(),
- fa->getApproxMemoryGain().getBefore()+0lu);
+ EXPECT_EQ(av->getStatus().getUsed(),
+ fa->getApproxMemoryGain().getBefore()+0lu);
// attributes stay in memory
- EXPECT_EQUAL(fa->getApproxMemoryGain().getBefore(),
- fa->getApproxMemoryGain().getAfter());
+ EXPECT_EQ(fa->getApproxMemoryGain().getBefore(),
+ fa->getApproxMemoryGain().getAfter());
}
-
-void
-Test::requireThatFlushableAttributeManagesSyncTokenInfo()
+TEST(AttributeFlushTest, require_that_flushable_attribute_manages_sync_token_info)
{
Fixture f;
AttributeManager &am = f._m;
@@ -386,49 +340,45 @@ Test::requireThatFlushableAttributeManagesSyncTokenInfo()
IFlushTarget::SP fa = am.getFlushable("a3");
IndexMetaInfo info("flush/a3");
- EXPECT_EQUAL(0u, fa->getFlushedSerialNum());
+ EXPECT_EQ(0u, fa->getFlushedSerialNum());
EXPECT_TRUE(fa->initFlush(0, std::make_shared<search::FlushToken>()).get() == NULL);
EXPECT_TRUE(!info.load());
av->commit(CommitParam(10)); // last sync token = 10
- EXPECT_EQUAL(0u, fa->getFlushedSerialNum());
+ EXPECT_EQ(0u, fa->getFlushedSerialNum());
EXPECT_TRUE(fa->initFlush(10, std::make_shared<search::FlushToken>()).get() != NULL);
fa->initFlush(10, std::make_shared<search::FlushToken>())->run();
- EXPECT_EQUAL(10u, fa->getFlushedSerialNum());
+ EXPECT_EQ(10u, fa->getFlushedSerialNum());
EXPECT_TRUE(info.load());
- EXPECT_EQUAL(1u, info.snapshots().size());
+ EXPECT_EQ(1u, info.snapshots().size());
EXPECT_TRUE(info.snapshots()[0].valid);
- EXPECT_EQUAL(10u, info.snapshots()[0].syncToken);
+ EXPECT_EQ(10u, info.snapshots()[0].syncToken);
av->commit(CommitParam(20)); // last sync token = 20
- EXPECT_EQUAL(10u, fa->getFlushedSerialNum());
+ EXPECT_EQ(10u, fa->getFlushedSerialNum());
fa->initFlush(20, std::make_shared<search::FlushToken>())->run();
- EXPECT_EQUAL(20u, fa->getFlushedSerialNum());
+ EXPECT_EQ(20u, fa->getFlushedSerialNum());
EXPECT_TRUE(info.load());
- EXPECT_EQUAL(1u, info.snapshots().size()); // snapshot 10 removed
+ EXPECT_EQ(1u, info.snapshots().size()); // snapshot 10 removed
EXPECT_TRUE(info.snapshots()[0].valid);
- EXPECT_EQUAL(20u, info.snapshots()[0].syncToken);
+ EXPECT_EQ(20u, info.snapshots()[0].syncToken);
}
-
-void
-Test::requireThatFlushTargetsCanBeRetrieved()
+TEST(AttributeFlushTest, require_that_flush_targets_can_be_retrieved)
{
Fixture f;
AttributeManager &am = f._m;
f.addAttribute("a4");
f.addAttribute("a5");
std::vector<IFlushTarget::SP> ftl = am.getFlushTargets();
- EXPECT_EQUAL(4u, ftl.size());
- EXPECT_EQUAL(am.getFlushable("a4").get(), ftl[0].get());
- EXPECT_EQUAL(am.getShrinker("a4").get(), ftl[1].get());
- EXPECT_EQUAL(am.getFlushable("a5").get(), ftl[2].get());
- EXPECT_EQUAL(am.getShrinker("a5").get(), ftl[3].get());
+ EXPECT_EQ(4u, ftl.size());
+ EXPECT_EQ(am.getFlushable("a4").get(), ftl[0].get());
+ EXPECT_EQ(am.getShrinker("a4").get(), ftl[1].get());
+ EXPECT_EQ(am.getFlushable("a5").get(), ftl[2].get());
+ EXPECT_EQ(am.getShrinker("a5").get(), ftl[3].get());
}
-
-void
-Test::requireThatCleanUpIsPerformedAfterFlush()
+TEST(AttributeFlushTest, require_that_cleanup_is_performed_after_flush)
{
Fixture f;
AttributeVector::SP av = f.addAttribute("a6");
@@ -454,16 +404,14 @@ Test::requireThatCleanUpIsPerformedAfterFlush()
fa.initFlush(30, std::make_shared<search::FlushToken>())->run();
EXPECT_TRUE(info.load());
- EXPECT_EQUAL(1u, info.snapshots().size()); // snapshots 10 & 20 removed
+ EXPECT_EQ(1u, info.snapshots().size()); // snapshots 10 & 20 removed
EXPECT_TRUE(info.snapshots()[0].valid);
- EXPECT_EQUAL(30u, info.snapshots()[0].syncToken);
+ EXPECT_EQ(30u, info.snapshots()[0].syncToken);
EXPECT_FALSE(fs::exists(fs::path(snap10)));
EXPECT_FALSE(fs::exists(fs::path(snap20)));
}
-
-void
-Test::requireThatFlushStatsAreUpdated()
+TEST(AttributeFlushTest, require_that_flush_stats_are_updated)
{
Fixture f;
AttributeManager &am = f._m;
@@ -473,13 +421,11 @@ Test::requireThatFlushStatsAreUpdated()
IFlushTarget::SP ft = am.getFlushable("a7");
ft->initFlush(101, std::make_shared<search::FlushToken>())->run();
FlushStats stats = ft->getLastFlushStats();
- EXPECT_EQUAL("flush/a7/snapshot-101", stats.getPath());
- EXPECT_EQUAL(8u, stats.getPathElementsToLog());
+ EXPECT_EQ("flush/a7/snapshot-101", stats.getPath());
+ EXPECT_EQ(8u, stats.getPathElementsToLog());
}
-
-void
-Test::requireThatOnlyOneFlusherCanRunAtTheSameTime()
+TEST(AttributeFlushTest, require_that_only_one_flusher_can_run_at_the_same_time)
{
Fixture f;
AttributeManager &am = f._m;
@@ -504,15 +450,13 @@ Test::requireThatOnlyOneFlusherCanRunAtTheSameTime()
ASSERT_TRUE(info.load());
LOG(info, "Found %zu snapshots", info.snapshots().size());
for (size_t i = 0; i < info.snapshots().size(); ++i) {
- EXPECT_EQUAL(true, info.snapshots()[i].valid);
+ EXPECT_EQ(true, info.snapshots()[i].valid);
}
IndexMetaInfo::Snapshot best = info.getBestSnapshot();
- EXPECT_EQUAL(true, best.valid);
+ EXPECT_EQ(true, best.valid);
}
-
-void
-Test::requireThatLastFlushTimeIsReported()
+TEST(AttributeFlushTest, require_that_last_flush_time_is_reported)
{
using seconds = std::chrono::seconds;
BaseFixture f;
@@ -521,38 +465,36 @@ Test::requireThatLastFlushTimeIsReported()
AttributeManagerFixture amf(f);
AttributeManager &am = amf._m;
AttributeVector::SP av = amf.addAttribute("a9");
- EXPECT_EQUAL(vespalib::system_time(), am.getFlushable("a9")->getLastFlushTime());
+ EXPECT_EQ(vespalib::system_time(), am.getFlushable("a9")->getLastFlushTime());
}
{ // no snapshot flushed yet
AttributeManagerFixture amf(f);
AttributeManager &am = amf._m;
AttributeVector::SP av = amf.addAttribute("a9");
IFlushTarget::SP ft = am.getFlushable("a9");
- EXPECT_EQUAL(vespalib::system_time(), ft->getLastFlushTime());
+ EXPECT_EQ(vespalib::system_time(), ft->getLastFlushTime());
ft->initFlush(200, std::make_shared<search::FlushToken>())->run();
EXPECT_TRUE(FastOS_File::Stat("flush/a9/snapshot-200", &stat));
- EXPECT_EQUAL(stat._modifiedTime, ft->getLastFlushTime());
+ EXPECT_EQ(stat._modifiedTime, ft->getLastFlushTime());
}
{ // snapshot flushed
AttributeManagerFixture amf(f);
AttributeManager &am = amf._m;
amf.addAttribute("a9");
IFlushTarget::SP ft = am.getFlushable("a9");
- EXPECT_EQUAL(stat._modifiedTime, ft->getLastFlushTime());
+ EXPECT_EQ(stat._modifiedTime, ft->getLastFlushTime());
{ // updated flush time after nothing to flush
std::this_thread::sleep_for(1100ms);
std::chrono::seconds now = duration_cast<seconds>(vespalib::system_clock::now().time_since_epoch());
Executor::Task::UP task = ft->initFlush(200, std::make_shared<search::FlushToken>());
EXPECT_FALSE(task);
- EXPECT_LESS(stat._modifiedTime, ft->getLastFlushTime());
- EXPECT_APPROX(now.count(), duration_cast<seconds>(ft->getLastFlushTime().time_since_epoch()).count(), 3);
+ EXPECT_LT(stat._modifiedTime, ft->getLastFlushTime());
+ EXPECT_NEAR(now.count(), duration_cast<seconds>(ft->getLastFlushTime().time_since_epoch()).count(), 3);
}
}
}
-
-void
-Test::requireThatShrinkWorks()
+TEST(AttributeFlushTest, require_that_shrink_works)
{
Fixture f;
AttributeManager &am = f._m;
@@ -562,32 +504,32 @@ Test::requireThatShrinkWorks()
av->addDocs(1000 - av->getNumDocs());
av->commit(CommitParam(50));
IFlushTarget::SP ft = am.getShrinker("a10");
- EXPECT_EQUAL(ft->getApproxMemoryGain().getBefore(),
- ft->getApproxMemoryGain().getAfter());
+ EXPECT_EQ(ft->getApproxMemoryGain().getBefore(),
+ ft->getApproxMemoryGain().getAfter());
AttributeGuard::UP g = am.getAttribute("a10");
EXPECT_FALSE(av->wantShrinkLidSpace());
EXPECT_FALSE(av->canShrinkLidSpace());
- EXPECT_EQUAL(1000u, av->getNumDocs());
- EXPECT_EQUAL(1000u, av->getCommittedDocIdLimit());
+ EXPECT_EQ(1000u, av->getNumDocs());
+ EXPECT_EQ(1000u, av->getCommittedDocIdLimit());
av->compactLidSpace(100);
EXPECT_TRUE(av->wantShrinkLidSpace());
EXPECT_FALSE(av->canShrinkLidSpace());
- EXPECT_EQUAL(1000u, av->getNumDocs());
- EXPECT_EQUAL(100u, av->getCommittedDocIdLimit());
+ EXPECT_EQ(1000u, av->getNumDocs());
+ EXPECT_EQ(100u, av->getCommittedDocIdLimit());
aw.heartBeat(51, IDestructorCallback::SP());
EXPECT_TRUE(av->wantShrinkLidSpace());
EXPECT_FALSE(av->canShrinkLidSpace());
- EXPECT_EQUAL(ft->getApproxMemoryGain().getBefore(),
- ft->getApproxMemoryGain().getAfter());
+ EXPECT_EQ(ft->getApproxMemoryGain().getBefore(),
+ ft->getApproxMemoryGain().getAfter());
g.reset();
aw.heartBeat(52, IDestructorCallback::SP());
EXPECT_TRUE(av->wantShrinkLidSpace());
EXPECT_TRUE(av->canShrinkLidSpace());
EXPECT_TRUE(ft->getApproxMemoryGain().getBefore() >
ft->getApproxMemoryGain().getAfter());
- EXPECT_EQUAL(1000u, av->getNumDocs());
- EXPECT_EQUAL(100u, av->getCommittedDocIdLimit());
- EXPECT_EQUAL(createSerialNum - 1, ft->getFlushedSerialNum());
+ EXPECT_EQ(1000u, av->getNumDocs());
+ EXPECT_EQ(100u, av->getCommittedDocIdLimit());
+ EXPECT_EQ(createSerialNum - 1, ft->getFlushedSerialNum());
vespalib::ThreadStackExecutor exec(1);
vespalib::Executor::Task::UP task = ft->initFlush(53, std::make_shared<search::FlushToken>());
exec.execute(std::move(task));
@@ -595,15 +537,16 @@ Test::requireThatShrinkWorks()
exec.shutdown();
EXPECT_FALSE(av->wantShrinkLidSpace());
EXPECT_FALSE(av->canShrinkLidSpace());
- EXPECT_EQUAL(ft->getApproxMemoryGain().getBefore(),
- ft->getApproxMemoryGain().getAfter());
- EXPECT_EQUAL(100u, av->getNumDocs());
- EXPECT_EQUAL(100u, av->getCommittedDocIdLimit());
+ EXPECT_EQ(ft->getApproxMemoryGain().getBefore(),
+ ft->getApproxMemoryGain().getAfter());
+ EXPECT_EQ(100u, av->getNumDocs());
+ EXPECT_EQ(100u, av->getCommittedDocIdLimit());
}
void
-Test::requireThatFlushedAttributeCanBeLoaded(const HwInfo &hwInfo)
+require_that_flushed_attribute_can_be_loaded(const HwInfo &hwInfo, const vespalib::string& label)
{
+ SCOPED_TRACE(label);
constexpr uint32_t numDocs = 100;
BaseFixture f(hwInfo);
vespalib::string attrName(hwInfo.disk().slow() ? "a11slow" : "a11fast");
@@ -612,9 +555,9 @@ Test::requireThatFlushedAttributeCanBeLoaded(const HwInfo &hwInfo)
AttributeManager &am = amf._m;
AttributeVector::SP av = amf.addPostingAttribute(attrName);
IntegerAttribute & ia = static_cast<IntegerAttribute &>(*av);
- EXPECT_EQUAL(1u, av->getNumDocs());
+ EXPECT_EQ(1u, av->getNumDocs());
av->addDocs(numDocs);
- EXPECT_EQUAL(numDocs + 1, av->getNumDocs());
+ EXPECT_EQ(numDocs + 1, av->getNumDocs());
for (uint32_t i = 0; i < numDocs; ++i) {
ia.update(i + 1, i + 43);
}
@@ -625,61 +568,44 @@ Test::requireThatFlushedAttributeCanBeLoaded(const HwInfo &hwInfo)
{
AttributeManagerFixture amf(f);
AttributeVector::SP av = amf.addPostingAttribute(attrName);
- EXPECT_EQUAL(numDocs + 1, av->getNumDocs());
+ EXPECT_EQ(numDocs + 1, av->getNumDocs());
for (uint32_t i = 0; i < numDocs; ++i) {
- EXPECT_EQUAL(i + 43, av->getInt(i + 1));
+ EXPECT_EQ(i + 43, av->getInt(i + 1));
}
}
}
-void
-Test::requireThatFlushedAttributeCanBeLoaded()
+TEST(AttributeFlushTest, require_that_flushed_attribute_can_be_loaded)
{
- TEST_DO(requireThatFlushedAttributeCanBeLoaded(HwInfo(HwInfo::Disk(0, false, false), HwInfo::Memory(0), HwInfo::Cpu(0))));
- TEST_DO(requireThatFlushedAttributeCanBeLoaded(HwInfo(HwInfo::Disk(0, true, false), HwInfo::Memory(0), HwInfo::Cpu(0))));
+ require_that_flushed_attribute_can_be_loaded(HwInfo(HwInfo::Disk(0, false, false), HwInfo::Memory(0), HwInfo::Cpu(0)), "fast-disk");
+ require_that_flushed_attribute_can_be_loaded(HwInfo(HwInfo::Disk(0, true, false), HwInfo::Memory(0), HwInfo::Cpu(0)), "slow-disk");
}
-void
-Test::requireThatFlushFailurePreventsSyncTokenUpdate()
+TEST(AttributeFlushTest, require_that_flush_failure_prevents_sync_token_update)
{
BaseFixture f;
AttributeManagerFixture amf(f);
auto &am = amf._m;
auto av = amf.addIntArrayPostingAttribute("a12");
- EXPECT_EQUAL(1u, av->getNumDocs());
+ EXPECT_EQ(1u, av->getNumDocs());
auto flush_target = am.getFlushable("a12");
- EXPECT_EQUAL(0u, flush_target->getFlushedSerialNum());
+ EXPECT_EQ(0u, flush_target->getFlushedSerialNum());
auto flush_task = flush_target->initFlush(200, std::make_shared<search::FlushToken>());
// Trigger flush failure
av->getEnumStoreBase()->inc_compaction_count();
flush_task->run();
- EXPECT_EQUAL(0u, flush_target->getFlushedSerialNum());
+ EXPECT_EQ(0u, flush_target->getFlushedSerialNum());
+}
+
}
int
-Test::Main()
+main(int argc, char* argv[])
{
- TEST_INIT("attributeflush_test");
-
- if (_argc > 0) {
- DummyFileHeaderContext::setCreator(_argv[0]);
+ ::testing::InitGoogleTest(&argc, argv);
+ if (argc > 0) {
+ DummyFileHeaderContext::setCreator(argv[0]);
}
- fs::remove_all(fs::path(test_dir));
- TEST_DO(requireThatUpdaterAndFlusherCanRunConcurrently());
- TEST_DO(requireThatFlushableAttributeReportsMemoryUsage());
- TEST_DO(requireThatFlushableAttributeManagesSyncTokenInfo());
- TEST_DO(requireThatFlushTargetsCanBeRetrieved());
- TEST_DO(requireThatCleanUpIsPerformedAfterFlush());
- TEST_DO(requireThatFlushStatsAreUpdated());
- TEST_DO(requireThatOnlyOneFlusherCanRunAtTheSameTime());
- TEST_DO(requireThatLastFlushTimeIsReported());
- TEST_DO(requireThatShrinkWorks());
- TEST_DO(requireThatFlushedAttributeCanBeLoaded());
- TEST_DO(requireThatFlushFailurePreventsSyncTokenUpdate());
-
- TEST_DONE();
+ fs::remove_all(fs::path(proton::test_dir));
+ return RUN_ALL_TESTS();
}
-
-}
-
-TEST_APPHOOK(proton::Test);
diff --git a/searchcore/src/tests/proton/feed_and_search/feed_and_search_test.cpp b/searchcore/src/tests/proton/feed_and_search/feed_and_search_test.cpp
index 0936f05b222..ff740dd8801 100644
--- a/searchcore/src/tests/proton/feed_and_search/feed_and_search_test.cpp
+++ b/searchcore/src/tests/proton/feed_and_search/feed_and_search_test.cpp
@@ -23,15 +23,12 @@
#include <vespa/searchlib/queryeval/blueprint.h>
#include <vespa/searchlib/queryeval/fake_requestcontext.h>
#include <vespa/searchlib/queryeval/searchiterator.h>
-#include <vespa/vespalib/testkit/testapp.h>
+#include <vespa/vespalib/gtest/gtest.h>
#include <vespa/vespalib/util/gate.h>
#include <vespa/vespalib/util/destructor_callbacks.h>
#include <vespa/vespalib/util/threadstackexecutor.h>
#include <sstream>
-#include <vespa/log/log.h>
-LOG_SETUP("feed_and_search_test");
-
using document::DataType;
using document::Document;
using document::FieldValue;
@@ -75,38 +72,6 @@ void commit_memory_index_and_wait(MemoryIndex &memory_index)
gate.await();
}
-class Test : public vespalib::TestApp {
- const char *current_state;
- void DumpState(bool) {
- fprintf(stderr, "%s: ERROR: in %s\n", __FILE__, current_state);
- }
-
- void requireThatMemoryIndexCanBeDumpedAndSearched();
-
- void testSearch(Searchable &source,
- const string &term, uint32_t doc_id);
-
-public:
- int Main() override;
-};
-
-#define TEST_CALL(func) \
- current_state = #func; \
- func();
-
-int
-Test::Main()
-{
- TEST_INIT("feed_and_search_test");
-
- if (_argc > 0) {
- DummyFileHeaderContext::setCreator(_argv[0]);
- }
- TEST_CALL(requireThatMemoryIndexCanBeDumpedAndSearched);
-
- TEST_DONE();
-}
-
const string field_name = "string_field";
const string noise = "noise";
const string word1 = "foo";
@@ -123,7 +88,8 @@ Document::UP buildDocument(DocBuilder & doc_builder, int id, const string &word)
}
// Performs a search using a Searchable.
-void Test::testSearch(Searchable &source, const string &term, uint32_t doc_id)
+void
+testSearch(Searchable &source, const string &term, uint32_t doc_id)
{
FakeRequestContext requestContext;
uint32_t fieldId = 0;
@@ -139,12 +105,12 @@ void Test::testSearch(Searchable &source, const string &term, uint32_t doc_id)
search_iterator->initFullRange();
ASSERT_TRUE(search_iterator.get());
ASSERT_TRUE(search_iterator->seek(doc_id));
- EXPECT_EQUAL(doc_id, search_iterator->getDocId());
+ EXPECT_EQ(doc_id, search_iterator->getDocId());
search_iterator->unpack(doc_id);
FieldPositionsIterator it = match_data->resolveTermField(handle)->getIterator();
ASSERT_TRUE(it.valid());
- EXPECT_EQUAL(1u, it.size());
- EXPECT_EQUAL(1u, it.getPosition()); // All hits are at pos 1 in this index
+ EXPECT_EQ(1u, it.size());
+ EXPECT_EQ(1u, it.getPosition()); // All hits are at pos 1 in this index
EXPECT_TRUE(!search_iterator->seek(doc_id + 1));
EXPECT_TRUE(search_iterator->isAtEnd());
@@ -155,7 +121,8 @@ VESPA_THREAD_STACK_TAG(write_executor)
// Creates a memory index, inserts documents, performs a few
// searches, dumps the index to disk, and performs the searches
// again.
-void Test::requireThatMemoryIndexCanBeDumpedAndSearched() {
+TEST(FeedAndSearchTest, require_that_memory_index_can_be_dumped_and_searched)
+{
vespalib::ThreadStackExecutor sharedExecutor(2);
auto indexFieldInverter = vespalib::SequencedTaskExecutor::create(invert_executor, 2);
auto indexFieldWriter = vespalib::SequencedTaskExecutor::create(write_executor, 2);
@@ -239,4 +206,12 @@ void Test::requireThatMemoryIndexCanBeDumpedAndSearched() {
}
} // namespace
-TEST_APPHOOK(Test);
+int
+main(int argc, char* argv[])
+{
+ ::testing::InitGoogleTest(&argc, argv);
+ if (argc > 0) {
+ DummyFileHeaderContext::setCreator(argv[0]);
+ }
+ return RUN_ALL_TESTS();
+}
diff --git a/searchcore/src/tests/proton/feedtoken/CMakeLists.txt b/searchcore/src/tests/proton/feedtoken/CMakeLists.txt
index 1a13e46eb41..8ddb3831c97 100644
--- a/searchcore/src/tests/proton/feedtoken/CMakeLists.txt
+++ b/searchcore/src/tests/proton/feedtoken/CMakeLists.txt
@@ -5,5 +5,6 @@ vespa_add_executable(searchcore_feedtoken_test_app TEST
DEPENDS
searchcore_pcommon
searchcore_proton_metrics
+ GTest::gtest
)
vespa_add_test(NAME searchcore_feedtoken_test_app COMMAND searchcore_feedtoken_test_app)
diff --git a/searchcore/src/tests/proton/feedtoken/feedtoken_test.cpp b/searchcore/src/tests/proton/feedtoken/feedtoken_test.cpp
index c3c67e74c70..d3eb7d08821 100644
--- a/searchcore/src/tests/proton/feedtoken/feedtoken_test.cpp
+++ b/searchcore/src/tests/proton/feedtoken/feedtoken_test.cpp
@@ -1,6 +1,6 @@
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include <vespa/vespalib/testkit/testapp.h>
#include <vespa/searchcore/proton/common/feedtoken.h>
+#include <vespa/vespalib/gtest/gtest.h>
#include <vespa/vespalib/util/exceptions.h>
using namespace proton;
@@ -21,47 +21,24 @@ public:
size_t getReceivedCount() const { return _receivedCount; }
};
-class Test : public vespalib::TestApp {
-private:
- void testAck();
- void testFail();
- void testHandover();
-
-public:
- int Main() override {
- TEST_INIT("feedtoken_test");
-
- testAck(); TEST_FLUSH();
- testFail(); TEST_FLUSH();
- testHandover(); TEST_FLUSH();
-
- TEST_DONE();
- }
-};
-
-TEST_APPHOOK(Test);
-
-void
-Test::testAck()
+TEST(FeedTokenTest, test_ack)
{
LocalTransport transport;
{
FeedToken token = feedtoken::make(transport);
}
- EXPECT_EQUAL(1u, transport.getReceivedCount());
+ EXPECT_EQ(1u, transport.getReceivedCount());
}
-void
-Test::testFail()
+TEST(FeedTokenTest, test_fail)
{
LocalTransport transport;
FeedToken token = feedtoken::make(transport);
token->fail();
- EXPECT_EQUAL(1u, transport.getReceivedCount());
+ EXPECT_EQ(1u, transport.getReceivedCount());
}
-void
-Test::testHandover()
+TEST(FeedTokenTest, test_handover)
{
struct MyHandover {
static FeedToken handover(FeedToken token) {
@@ -75,7 +52,7 @@ Test::testHandover()
FeedToken token = feedtoken::make(transport);
token = MyHandover::handover(token);
}
- EXPECT_EQUAL(1u, transport.getReceivedCount());
+ EXPECT_EQ(1u, transport.getReceivedCount());
}
-
+GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/searchcore/src/tests/proton/index/CMakeLists.txt b/searchcore/src/tests/proton/index/CMakeLists.txt
index 40e3d8e7b79..c1cc6155a52 100644
--- a/searchcore/src/tests/proton/index/CMakeLists.txt
+++ b/searchcore/src/tests/proton/index/CMakeLists.txt
@@ -22,6 +22,7 @@ vespa_add_executable(searchcore_fusionrunner_test_app TEST
searchcore_server
searchcore_index
searchcore_pcommon
+ GTest::gtest
)
vespa_add_test(NAME searchcore_fusionrunner_test_app
@@ -32,6 +33,7 @@ vespa_add_executable(searchcore_diskindexcleaner_test_app TEST
diskindexcleaner_test.cpp
DEPENDS
searchcore_index
+ GTest::gtest
)
vespa_add_test(NAME searchcore_diskindexcleaner_test_app
diff --git a/searchcore/src/tests/proton/index/diskindexcleaner_test.cpp b/searchcore/src/tests/proton/index/diskindexcleaner_test.cpp
index 745d9c6a983..1aa79e11a57 100644
--- a/searchcore/src/tests/proton/index/diskindexcleaner_test.cpp
+++ b/searchcore/src/tests/proton/index/diskindexcleaner_test.cpp
@@ -3,53 +3,44 @@
#include <vespa/searchcorespi/index/disk_indexes.h>
#include <vespa/searchcorespi/index/diskindexcleaner.h>
-#include <vespa/vespalib/testkit/testapp.h>
+#include <vespa/vespalib/gtest/gtest.h>
#include <vespa/fastos/file.h>
#include <algorithm>
#include <filesystem>
-#include <vespa/log/log.h>
-LOG_SETUP("diskindexcleaner_test");
-
using std::string;
using std::vector;
using namespace searchcorespi::index;
namespace {
-class Test : public vespalib::TestApp {
- void requireThatAllIndexesOlderThanLastFusionIsRemoved();
- void requireThatIndexesInUseAreNotRemoved();
- void requireThatInvalidFlushIndexesAreRemoved();
- void requireThatInvalidFusionIndexesAreRemoved();
- void requireThatRemoveDontTouchNewIndexes();
-
-public:
- int Main() override;
-};
-
const string index_dir = "diskindexcleaner_test_data";
void removeTestData() {
std::filesystem::remove_all(std::filesystem::path(index_dir));
}
-int
-Test::Main()
-{
- TEST_INIT("diskindexcleaner_test");
-
- TEST_DO(removeTestData());
+class DiskIndexCleanerTest : public ::testing::Test {
+protected:
+ DiskIndexCleanerTest();
+ ~DiskIndexCleanerTest() override;
+ void SetUp() override;
+ void TearDown() override;
+};
- TEST_DO(requireThatAllIndexesOlderThanLastFusionIsRemoved());
- TEST_DO(requireThatIndexesInUseAreNotRemoved());
- TEST_DO(requireThatInvalidFlushIndexesAreRemoved());
- TEST_DO(requireThatInvalidFusionIndexesAreRemoved());
- TEST_DO(requireThatRemoveDontTouchNewIndexes());
+DiskIndexCleanerTest::DiskIndexCleanerTest() = default;
+DiskIndexCleanerTest::~DiskIndexCleanerTest() = default;
- TEST_DO(removeTestData());
+void
+DiskIndexCleanerTest::SetUp()
+{
+ removeTestData();
+}
- TEST_DONE();
+void
+DiskIndexCleanerTest::TearDown()
+{
+ removeTestData();
}
void createIndex(const string &name) {
@@ -87,18 +78,20 @@ void createIndexes() {
createIndex("index.flush.4");
}
-void Test::requireThatAllIndexesOlderThanLastFusionIsRemoved() {
+TEST_F(DiskIndexCleanerTest, require_that_all_indexes_older_than_last_fusion_is_removed)
+{
createIndexes();
DiskIndexes disk_indexes;
DiskIndexCleaner::clean(index_dir, disk_indexes);
vector<string> indexes = readIndexes();
- EXPECT_EQUAL(3u, indexes.size());
+ EXPECT_EQ(3u, indexes.size());
EXPECT_TRUE(contains(indexes, "index.fusion.2"));
EXPECT_TRUE(contains(indexes, "index.flush.3"));
EXPECT_TRUE(contains(indexes, "index.flush.4"));
}
-void Test::requireThatIndexesInUseAreNotRemoved() {
+TEST_F(DiskIndexCleanerTest, require_that_indexes_in_use_are_not_removed)
+{
createIndexes();
DiskIndexes disk_indexes;
disk_indexes.setActive(index_dir + "/index.fusion.1", 0);
@@ -116,37 +109,40 @@ void Test::requireThatIndexesInUseAreNotRemoved() {
EXPECT_TRUE(!contains(indexes, "index.flush.2"));
}
-void Test::requireThatInvalidFlushIndexesAreRemoved() {
+TEST_F(DiskIndexCleanerTest, require_that_invalid_flush_indexes_are_removed)
+{
createIndexes();
std::filesystem::remove(std::filesystem::path(index_dir + "/index.flush.4/serial.dat"));
DiskIndexes disk_indexes;
DiskIndexCleaner::clean(index_dir, disk_indexes);
vector<string> indexes = readIndexes();
- EXPECT_EQUAL(2u, indexes.size());
+ EXPECT_EQ(2u, indexes.size());
EXPECT_TRUE(contains(indexes, "index.fusion.2"));
EXPECT_TRUE(contains(indexes, "index.flush.3"));
}
-void Test::requireThatInvalidFusionIndexesAreRemoved() {
+TEST_F(DiskIndexCleanerTest, require_that_invalid_fusion_indexes_are_removed)
+{
createIndexes();
std::filesystem::remove(std::filesystem::path(index_dir + "/index.fusion.2/serial.dat"));
DiskIndexes disk_indexes;
DiskIndexCleaner::clean(index_dir, disk_indexes);
vector<string> indexes = readIndexes();
- EXPECT_EQUAL(4u, indexes.size());
+ EXPECT_EQ(4u, indexes.size());
EXPECT_TRUE(contains(indexes, "index.fusion.1"));
EXPECT_TRUE(contains(indexes, "index.flush.2"));
EXPECT_TRUE(contains(indexes, "index.flush.3"));
EXPECT_TRUE(contains(indexes, "index.flush.4"));
}
-void Test::requireThatRemoveDontTouchNewIndexes() {
+TEST_F(DiskIndexCleanerTest, require_that_remove_doesnt_touch_new_indexes)
+{
createIndexes();
std::filesystem::remove(std::filesystem::path(index_dir + "/index.flush.4/serial.dat"));
DiskIndexes disk_indexes;
DiskIndexCleaner::removeOldIndexes(index_dir, disk_indexes);
vector<string> indexes = readIndexes();
- EXPECT_EQUAL(3u, indexes.size());
+ EXPECT_EQ(3u, indexes.size());
EXPECT_TRUE(contains(indexes, "index.fusion.2"));
EXPECT_TRUE(contains(indexes, "index.flush.3"));
EXPECT_TRUE(contains(indexes, "index.flush.4"));
@@ -154,4 +150,4 @@ void Test::requireThatRemoveDontTouchNewIndexes() {
} // namespace
-TEST_APPHOOK(Test);
+GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/searchcore/src/tests/proton/index/fusionrunner_test.cpp b/searchcore/src/tests/proton/index/fusionrunner_test.cpp
index a58d7540d7c..dd6e8fa1c4c 100644
--- a/searchcore/src/tests/proton/index/fusionrunner_test.cpp
+++ b/searchcore/src/tests/proton/index/fusionrunner_test.cpp
@@ -22,7 +22,7 @@
#include <vespa/searchlib/queryeval/blueprint.h>
#include <vespa/vespalib/util/gate.h>
#include <vespa/vespalib/util/destructor_callbacks.h>
-#include <vespa/vespalib/testkit/testapp.h>
+#include <vespa/vespalib/gtest/gtest.h>
#include <vespa/vespalib/stllike/asciistream.h>
#include <filesystem>
#include <set>
@@ -66,12 +66,8 @@ using namespace proton;
namespace {
-#define TEST_CALL(func) \
- setUp(); \
- func; \
- tearDown()
-
-class Test : public vespalib::TestApp {
+class FusionRunnerTest : public ::testing::Test {
+protected:
std::unique_ptr<FusionRunner> _fusion_runner;
FixedSourceSelector::UP _selector;
FusionSpec _fusion_spec;
@@ -79,8 +75,10 @@ class Test : public vespalib::TestApp {
TransportAndExecutorService _service;
IndexManager::MaintainerOperations _ops;
- void setUp();
- void tearDown();
+ FusionRunnerTest();
+ ~FusionRunnerTest() override;
+ void SetUp() override;
+ void TearDown() override;
void createIndex(const string &dir, uint32_t id, bool fusion = false);
void checkResults(uint32_t fusion_id, const uint32_t *ids, size_t size);
@@ -92,41 +90,19 @@ class Test : public vespalib::TestApp {
void requireThatOldFusionIndexCanBePartOfNewFusion();
void requireThatSelectorsCanBeRebased();
void requireThatFusionCanBeStopped();
-
-public:
- Test();
- ~Test() override;
- int Main() override;
};
-Test::Test()
- : _fusion_runner(),
+FusionRunnerTest::FusionRunnerTest()
+ : ::testing::Test(),
+ _fusion_runner(),
_selector(),
_fusion_spec(),
_fileHeaderContext(),
_service(1),
_ops(_fileHeaderContext,TuneFileIndexManager(), 0, _service.write())
{ }
-Test::~Test() = default;
-
-int
-Test::Main()
-{
- TEST_INIT("fusionrunner_test");
- if (_argc > 0) {
- DummyFileHeaderContext::setCreator(_argv[0]);
- }
- TEST_CALL(requireThatNoDiskIndexesGiveId0());
- TEST_CALL(requireThatOneDiskIndexCausesCopy());
- TEST_CALL(requireThatTwoDiskIndexesCauseFusion());
- TEST_CALL(requireThatFusionCanRunOnMultipleDiskIndexes());
- TEST_CALL(requireThatOldFusionIndexCanBePartOfNewFusion());
- TEST_CALL(requireThatSelectorsCanBeRebased());
- TEST_CALL(requireThatFusionCanBeStopped());
-
- TEST_DONE();
-}
+FusionRunnerTest::~FusionRunnerTest() = default;
const string base_dir = "fusion_test_data";
const string field_name = "field_name";
@@ -142,7 +118,9 @@ getSchema()
return SchemaBuilder(db).add_all_indexes().build();
}
-void Test::setUp() {
+void
+FusionRunnerTest::SetUp()
+{
std::filesystem::remove_all(std::filesystem::path(base_dir));
_fusion_runner = std::make_unique<FusionRunner>(base_dir, getSchema(), TuneFileAttributes(), _fileHeaderContext);
const string selector_base = base_dir + "/index.flush.0/selector";
@@ -150,12 +128,16 @@ void Test::setUp() {
_fusion_spec = FusionSpec();
}
-void Test::tearDown() {
+void
+FusionRunnerTest::TearDown()
+{
std::filesystem::remove_all(std::filesystem::path(base_dir));
- _selector.reset(nullptr);
+ _selector.reset();
}
-Document::UP buildDocument(DocBuilder & doc_builder, int id, const string &word) {
+Document::UP
+buildDocument(DocBuilder & doc_builder, int id, const string &word)
+{
vespalib::asciistream ost;
ost << "id:ns:searchdocument::" << id;
auto doc = doc_builder.make_document(ost.str());
@@ -163,8 +145,10 @@ Document::UP buildDocument(DocBuilder & doc_builder, int id, const string &word)
return doc;
}
-void addDocument(DocBuilder & doc_builder, MemoryIndex &index, ISourceSelector &selector,
- uint8_t index_id, uint32_t docid, const string &word) {
+void
+addDocument(DocBuilder & doc_builder, MemoryIndex &index, ISourceSelector &selector,
+ uint8_t index_id, uint32_t docid, const string &word)
+{
Document::UP doc = buildDocument(doc_builder, docid, word);
index.insertDocument(docid, *doc, {});
vespalib::Gate gate;
@@ -173,7 +157,9 @@ void addDocument(DocBuilder & doc_builder, MemoryIndex &index, ISourceSelector &
gate.await();
}
-void Test::createIndex(const string &dir, uint32_t id, bool fusion) {
+void
+FusionRunnerTest::createIndex(const string &dir, uint32_t id, bool fusion)
+{
std::filesystem::create_directory(std::filesystem::path(dir));
vespalib::asciistream ost;
if (fusion) {
@@ -209,7 +195,9 @@ void Test::createIndex(const string &dir, uint32_t id, bool fusion) {
_selector->extractSaveInfo(index_dir + "/selector")->save(tuneFileAttributes, _fileHeaderContext);
}
-set<uint32_t> readFusionIds(const string &dir) {
+set<uint32_t>
+readFusionIds(const string &dir)
+{
set<uint32_t> ids;
const vespalib::string prefix("index.fusion.");
std::filesystem::directory_iterator dir_scan(dir);
@@ -225,13 +213,17 @@ set<uint32_t> readFusionIds(const string &dir) {
return ids;
}
-vespalib::string getFusionIndexName(uint32_t fusion_id) {
+vespalib::string
+getFusionIndexName(uint32_t fusion_id)
+{
vespalib::asciistream ost;
ost << base_dir << "/index.fusion." << fusion_id;
return ost.str();
}
-void Test::checkResults(uint32_t fusion_id, const uint32_t *ids, size_t size) {
+void
+FusionRunnerTest::checkResults(uint32_t fusion_id, const uint32_t *ids, size_t size)
+{
FakeRequestContext requestContext;
DiskIndex disk_index(getFusionIndexName(fusion_id));
ASSERT_TRUE(disk_index.setup(TuneFileSearch()));
@@ -256,66 +248,72 @@ void Test::checkResults(uint32_t fusion_id, const uint32_t *ids, size_t size) {
}
}
-void Test::requireThatNoDiskIndexesGiveId0() {
+TEST_F(FusionRunnerTest, require_that_no_disk_indexes_give_id_0)
+{
uint32_t fusion_id = _fusion_runner->fuse(_fusion_spec, 0u, _ops, std::make_shared<search::FlushToken>());
- EXPECT_EQUAL(0u, fusion_id);
+ EXPECT_EQ(0u, fusion_id);
}
-void Test::requireThatOneDiskIndexCausesCopy() {
+TEST_F(FusionRunnerTest, rquire_that_one_disk_index_causes_copy)
+{
createIndex(base_dir, disk_id[0]);
uint32_t fusion_id = _fusion_runner->fuse(_fusion_spec, 0u, _ops, std::make_shared<search::FlushToken>());
- EXPECT_EQUAL(disk_id[0], fusion_id);
+ EXPECT_EQ(disk_id[0], fusion_id);
set<uint32_t> fusion_ids = readFusionIds(base_dir);
ASSERT_TRUE(!fusion_ids.empty());
- EXPECT_EQUAL(1u, fusion_ids.size());
- EXPECT_EQUAL(fusion_id, *fusion_ids.begin());
+ EXPECT_EQ(1u, fusion_ids.size());
+ EXPECT_EQ(fusion_id, *fusion_ids.begin());
checkResults(fusion_id, disk_id, 1);
}
-void Test::requireThatTwoDiskIndexesCauseFusion() {
+TEST_F(FusionRunnerTest, require_that_two_disk_indexes_cause_fusion)
+{
createIndex(base_dir, disk_id[0]);
createIndex(base_dir, disk_id[1]);
uint32_t fusion_id = _fusion_runner->fuse(_fusion_spec, 0u, _ops, std::make_shared<search::FlushToken>());
- EXPECT_EQUAL(disk_id[1], fusion_id);
+ EXPECT_EQ(disk_id[1], fusion_id);
set<uint32_t> fusion_ids = readFusionIds(base_dir);
ASSERT_TRUE(!fusion_ids.empty());
- EXPECT_EQUAL(1u, fusion_ids.size());
- EXPECT_EQUAL(fusion_id, *fusion_ids.begin());
+ EXPECT_EQ(1u, fusion_ids.size());
+ EXPECT_EQ(fusion_id, *fusion_ids.begin());
checkResults(fusion_id, disk_id, 2);
}
-void Test::requireThatFusionCanRunOnMultipleDiskIndexes() {
+TEST_F(FusionRunnerTest, require_that_fusion_can_run_on_multiple_disk_indexes)
+{
createIndex(base_dir, disk_id[0]);
createIndex(base_dir, disk_id[1]);
createIndex(base_dir, disk_id[2]);
createIndex(base_dir, disk_id[3]);
uint32_t fusion_id = _fusion_runner->fuse(_fusion_spec, 0u, _ops, std::make_shared<search::FlushToken>());
- EXPECT_EQUAL(disk_id[3], fusion_id);
+ EXPECT_EQ(disk_id[3], fusion_id);
set<uint32_t> fusion_ids = readFusionIds(base_dir);
ASSERT_TRUE(!fusion_ids.empty());
- EXPECT_EQUAL(1u, fusion_ids.size());
- EXPECT_EQUAL(fusion_id, *fusion_ids.begin());
+ EXPECT_EQ(1u, fusion_ids.size());
+ EXPECT_EQ(fusion_id, *fusion_ids.begin());
checkResults(fusion_id, disk_id, 4);
}
-void Test::requireThatOldFusionIndexCanBePartOfNewFusion() {
+TEST_F(FusionRunnerTest, require_that_old_fusion_index_can_be_part_of_new_fusion)
+{
createIndex(base_dir, disk_id[0], true);
createIndex(base_dir, disk_id[1]);
uint32_t fusion_id = _fusion_runner->fuse(_fusion_spec, 0u, _ops, std::make_shared<search::FlushToken>());
- EXPECT_EQUAL(disk_id[1], fusion_id);
+ EXPECT_EQ(disk_id[1], fusion_id);
set<uint32_t> fusion_ids = readFusionIds(base_dir);
ASSERT_TRUE(!fusion_ids.empty());
- EXPECT_EQUAL(2u, fusion_ids.size());
- EXPECT_EQUAL(disk_id[0], *fusion_ids.begin());
- EXPECT_EQUAL(fusion_id, *(++fusion_ids.begin()));
+ EXPECT_EQ(2u, fusion_ids.size());
+ EXPECT_EQ(disk_id[0], *fusion_ids.begin());
+ EXPECT_EQ(fusion_id, *(++fusion_ids.begin()));
checkResults(fusion_id, disk_id, 2);
}
-void Test::requireThatSelectorsCanBeRebased() {
+TEST_F(FusionRunnerTest, require_that_selectors_can_be_rebased)
+{
createIndex(base_dir, disk_id[0]);
createIndex(base_dir, disk_id[1]);
uint32_t fusion_id = _fusion_runner->fuse(_fusion_spec, 0u, _ops, std::make_shared<search::FlushToken>());
@@ -328,17 +326,24 @@ void Test::requireThatSelectorsCanBeRebased() {
checkResults(fusion_id, disk_id, 3);
}
-void
-Test::requireThatFusionCanBeStopped()
+TEST_F(FusionRunnerTest, require_that_fusion_can_be_stopped)
{
createIndex(base_dir, disk_id[0]);
createIndex(base_dir, disk_id[1]);
auto flush_token = std::make_shared<search::FlushToken>();
flush_token->request_stop();
uint32_t fusion_id = _fusion_runner->fuse(_fusion_spec, 0u, _ops, flush_token);
- EXPECT_EQUAL(0u, fusion_id);
+ EXPECT_EQ(0u, fusion_id);
}
} // namespace
-TEST_APPHOOK(Test);
+int
+main(int argc, char* argv[])
+{
+ ::testing::InitGoogleTest(&argc, argv);
+ if (argc > 0) {
+ DummyFileHeaderContext::setCreator(argv[0]);
+ }
+ return RUN_ALL_TESTS();
+}
diff --git a/searchlib/src/tests/attribute/guard/CMakeLists.txt b/searchlib/src/tests/attribute/guard/CMakeLists.txt
index a956182e1e1..f5570377814 100644
--- a/searchlib/src/tests/attribute/guard/CMakeLists.txt
+++ b/searchlib/src/tests/attribute/guard/CMakeLists.txt
@@ -4,6 +4,7 @@ vespa_add_executable(searchlib_attributeguard_test_app TEST
attributeguard_test.cpp
DEPENDS
searchlib
+ GTest::gtest
)
vespa_add_test(NAME searchlib_attributeguard_test_app COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/attributeguard_test.sh
DEPENDS searchlib_attributeguard_test_app)
diff --git a/searchlib/src/tests/attribute/guard/attributeguard_test.cpp b/searchlib/src/tests/attribute/guard/attributeguard_test.cpp
index 47df9d7c320..513fa7406b6 100644
--- a/searchlib/src/tests/attribute/guard/attributeguard_test.cpp
+++ b/searchlib/src/tests/attribute/guard/attributeguard_test.cpp
@@ -1,31 +1,17 @@
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include <vespa/log/log.h>
-LOG_SETUP("attributeguard_test");
-#include <vespa/vespalib/testkit/testapp.h>
#include <vespa/searchlib/attribute/attributeguard.h>
#include <vespa/searchlib/attribute/extendableattributes.h>
+#include <vespa/vespalib/gtest/gtest.h>
namespace search {
-class AttributeGuardTest : public vespalib::TestApp
+TEST(AttributeGuardTest, test_attribute_guard)
{
-public:
- int Main() override;
-};
-
-int
-AttributeGuardTest::Main()
-{
- TEST_INIT("attributeguard_test");
-
-
AttributeVector::SP ssattr(new SingleStringExtAttribute("ss1"));
AttributeGuard guard(ssattr);
EXPECT_TRUE(guard.valid());
-
- TEST_DONE();
}
}
-TEST_APPHOOK(search::AttributeGuardTest);
+GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/vespaclient-java/src/main/java/com/yahoo/vespa/feed/perf/SimpleFeeder.java b/vespaclient-java/src/main/java/com/yahoo/vespa/feed/perf/SimpleFeeder.java
index b41bb29376b..3a7fe8f75c6 100644
--- a/vespaclient-java/src/main/java/com/yahoo/vespa/feed/perf/SimpleFeeder.java
+++ b/vespaclient-java/src/main/java/com/yahoo/vespa/feed/perf/SimpleFeeder.java
@@ -2,7 +2,6 @@
package com.yahoo.vespa.feed.perf;
import com.yahoo.concurrent.ThreadFactoryFactory;
-import com.yahoo.config.subscription.ConfigSubscriber;
import com.yahoo.document.Document;
import com.yahoo.document.DocumentId;
import com.yahoo.document.DocumentPut;
@@ -66,7 +65,6 @@ import java.util.stream.Stream;
public class SimpleFeeder implements ReplyHandler {
private final DocumentTypeManager docTypeMgr = new DocumentTypeManager();
- private final ConfigSubscriber documentTypeConfigSubscriber;
private final List<InputStream> inputStreams;
private final PrintStream out;
private final RPCMessageBus mbus;
@@ -200,16 +198,18 @@ public class SimpleFeeder implements ReplyHandler {
}
private void addCommaAndNewline() {
- if (! isFirst) {
- try {
+ try {
+ if (isFirst) {
+ outputStream.write(' ');
+ outputStream.write(' ');
+ isFirst = false;
+ } else {
outputStream.write(',');
outputStream.write('\n');
- } catch (IOException e) {
- failure.set(e);
+ outputStream.write(' ');
}
- }
- else {
- isFirst = false;
+ } catch (IOException e) {
+ failure.set(e);
}
}
@@ -391,7 +391,7 @@ public class SimpleFeeder implements ReplyHandler {
numMessagesToSend = params.getNumMessagesToSend();
mbus = newMessageBus(docTypeMgr, params);
session = newSession(mbus, this, params);
- documentTypeConfigSubscriber = DocumentTypeManagerConfigurer.configure(docTypeMgr, params.getConfigId());
+ DocumentTypeManagerConfigurer.configure(docTypeMgr, params.getConfigId());
benchmarkMode = params.isBenchmarkMode();
destination = (params.getDumpStream() != null)
? createDumper(params)
@@ -482,6 +482,7 @@ public class SimpleFeeder implements ReplyHandler {
numReplies.incrementAndGet();
accumulateReplies(now, latency);
}
+
private synchronized void accumulateReplies(long now, long latency) {
minLatency = Math.min(minLatency, latency);
maxLatency = Math.max(maxLatency, latency);
@@ -492,6 +493,7 @@ public class SimpleFeeder implements ReplyHandler {
nextReport += REPORT_INTERVAL;
}
}
+
private static void printHeader(PrintStream out) {
out.println("# Time used, num ok, num error, min latency, max latency, average latency");
}
diff --git a/vespaclient-java/src/test/java/com/yahoo/vespa/feed/perf/SimpleFeederTest.java b/vespaclient-java/src/test/java/com/yahoo/vespa/feed/perf/SimpleFeederTest.java
index 28859d0e7c4..2810303fad3 100644
--- a/vespaclient-java/src/test/java/com/yahoo/vespa/feed/perf/SimpleFeederTest.java
+++ b/vespaclient-java/src/test/java/com/yahoo/vespa/feed/perf/SimpleFeederTest.java
@@ -87,11 +87,11 @@ public class SimpleFeederTest {
"",
"(.+\n)+" +
"\\s*\\d+,\\s*3,.+\n");
- assertEquals(93, dump.size());
+ assertEquals(96, dump.size());
assertEquals("""
[
- {"id":"id:simple:simple::0","fields":{"my_str":"foo"}},
- {"remove":"id:simple:simple::2"}
+ {"id":"id:simple:simple::0","fields":{"my_str":"foo"}},
+ {"remove":"id:simple:simple::2"}
]""",
dump.toString());
}
@@ -121,12 +121,12 @@ public class SimpleFeederTest {
"",
"(.+\n)+" +
"\\s*\\d+,\\s*3,.+\n");
- assertEquals(150, dump.size());
+ assertEquals(154, dump.size());
assertEquals("""
[
- {"id":"id:simple:simple::0","fields":{"my_str":"foo"}},
- {"id":"id:simple:simple::1","fields":{"my_str":"bar"}},
- {"remove":"id:simple:simple::2"}
+ {"id":"id:simple:simple::0","fields":{"my_str":"foo"}},
+ {"id":"id:simple:simple::1","fields":{"my_str":"bar"}},
+ {"remove":"id:simple:simple::2"}
]""",
dump.toString());
assertFeed(dump.toString(),