diff --git a/src/main/java/com/uid2/operator/vertx/ClientVersionCapturingHandler.java b/src/main/java/com/uid2/operator/vertx/ClientVersionCapturingHandler.java index 6ff5e6135..2af4fb6b2 100644 --- a/src/main/java/com/uid2/operator/vertx/ClientVersionCapturingHandler.java +++ b/src/main/java/com/uid2/operator/vertx/ClientVersionCapturingHandler.java @@ -32,13 +32,14 @@ public ClientVersionCapturingHandler(String dir, String whitelistGlob) throws IO } @Override public void handle(RoutingContext context) { - if (context.request().headers().contains(Const.Http.ClientVersionHeader)) { - final String clientVersion = context.request().headers().get(Const.Http.ClientVersionHeader); - if (clientVersion != null) { - final Counter counter = _clientVersionCounters.get(clientVersion); - if (counter != null) { - counter.increment(); - } + String clientVersion = context.request().headers().get(Const.Http.ClientVersionHeader); + if (clientVersion == null) { + clientVersion = !context.queryParam("client").isEmpty() ? context.queryParam("client").get(0) : null; + } + if (clientVersion != null) { + final Counter counter = _clientVersionCounters.get(clientVersion); + if (counter != null) { + counter.increment(); } } context.next(); diff --git a/src/test/java/com/uid2/operator/UIDOperatorVerticleTest.java b/src/test/java/com/uid2/operator/UIDOperatorVerticleTest.java index 4dea59d6a..7be340ef0 100644 --- a/src/test/java/com/uid2/operator/UIDOperatorVerticleTest.java +++ b/src/test/java/com/uid2/operator/UIDOperatorVerticleTest.java @@ -27,7 +27,9 @@ import com.uid2.shared.secret.KeyHasher; import com.uid2.shared.store.*; import com.uid2.shared.store.reader.RotatingKeysetProvider; +import io.micrometer.core.instrument.Counter; import io.micrometer.core.instrument.Metrics; +import io.micrometer.core.instrument.search.MeterNotFoundException; import io.micrometer.core.instrument.simple.SimpleMeterRegistry; import io.vertx.core.AsyncResult; import io.vertx.core.Future; @@ -5005,4 +5007,74 @@ void secureLinkValidationFailsReturnsIdentityError(Vertx vertx, VertxTestContext testContext.completeNow(); }); } + + @ParameterizedTest // note that this test will be removed when we switch to logging versions + @ValueSource(strings = {"euid-sdk-1.0.0", "openid-sdk-1.0", "uid2-esp-0.0.1a", "uid2-sdk-0.0.1a", + "uid2-sdk-0.0.1b", "uid2-sdk-1.0.0", "uid2-sdk-2.0.0"}) + void clientVersionHeader(String clientVersion, Vertx vertx, VertxTestContext testContext) { + WebClient client = WebClient.create(vertx); + HttpRequest req = client.getAbs(getUrlForEndpoint("/any/endpoint")); + req.putHeader("X-UID2-Client-Version", clientVersion); + req.send(ar -> { + assertEquals(404, ar.result().statusCode()); + final double actual = Metrics.globalRegistry + .get("uid2.client_sdk_versions") + .tag("client_version", clientVersion) + .counter().count(); + assertEquals(1, actual); + testContext.completeNow(); + }); + } + + @ParameterizedTest // note that this test will be removed when we switch to logging versions + @ValueSource(strings = {"euid-sdk-1.0.0", "openid-sdk-1.0", "uid2-esp-0.0.1a", "uid2-sdk-0.0.1a", + "uid2-sdk-0.0.1b", "uid2-sdk-1.0.0", "uid2-sdk-2.0.0"}) + void clientVersionQueryParameter(String clientVersion, Vertx vertx, VertxTestContext testContext) { + WebClient client = WebClient.create(vertx); + HttpRequest req = client.getAbs(getUrlForEndpoint("/any/endpoint?client=" + clientVersion)); + req.send(ar -> { + assertEquals(404, ar.result().statusCode()); + final double actual = Metrics.globalRegistry + .get("uid2.client_sdk_versions") + .tag("client_version", clientVersion) + .counter().count(); + assertEquals(1, actual); + testContext.completeNow(); + }); + } + + @Test // note that this test will be removed when we switch to logging versions + void clientVersionHeaderNotFound(Vertx vertx, VertxTestContext testContext) { + WebClient client = WebClient.create(vertx); + HttpRequest req = client.getAbs(getUrlForEndpoint("/any/endpoint")); + String clientVersion = "invalid-sdk"; + req.putHeader("X-UID2-Client-Version", clientVersion); + req.send(ar -> { + assertEquals(404, ar.result().statusCode()); + assertThrows(MeterNotFoundException.class, () -> { + Metrics.globalRegistry + .get("uid2.client_sdk_versions") + .tag("client_version", clientVersion) + .counter(); + }); + testContext.completeNow(); + }); + } + + @Test // note that this test will be removed when we switch to logging versions + void clientVersionQueryParameterNotFound(Vertx vertx, VertxTestContext testContext) { + WebClient client = WebClient.create(vertx); + String clientVersion = "invalid-sdk"; + HttpRequest req = client.getAbs(getUrlForEndpoint("/any/endpoint?client=" + clientVersion)); + req.send(ar -> { + assertEquals(404, ar.result().statusCode()); + assertThrows(MeterNotFoundException.class, () -> { + Metrics.globalRegistry + .get("uid2.client_sdk_versions") + .tag("client_version", clientVersion) + .counter(); + }); + testContext.completeNow(); + }); + } }