From 590e352fcfffb63e5bc6b683a1acdd47d9cd9a6d Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Tue, 12 Sep 2023 17:30:41 -0400 Subject: [PATCH] Convert couchbase-2-common javaagent unit tests from groovy to java (#9426) --- .../javaagent-unit-tests/build.gradle.kts | 3 - .../v2_0/CouchbaseQuerySanitizerTest.groovy | 36 -------- .../v2_0/CouchbaseQuerySanitizerTest.java | 83 +++++++++++++++++++ 3 files changed, 83 insertions(+), 39 deletions(-) delete mode 100644 instrumentation/couchbase/couchbase-2-common/javaagent-unit-tests/src/test/groovy/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseQuerySanitizerTest.groovy create mode 100644 instrumentation/couchbase/couchbase-2-common/javaagent-unit-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseQuerySanitizerTest.java diff --git a/instrumentation/couchbase/couchbase-2-common/javaagent-unit-tests/build.gradle.kts b/instrumentation/couchbase/couchbase-2-common/javaagent-unit-tests/build.gradle.kts index 08e327b8b0..dced8196b4 100644 --- a/instrumentation/couchbase/couchbase-2-common/javaagent-unit-tests/build.gradle.kts +++ b/instrumentation/couchbase/couchbase-2-common/javaagent-unit-tests/build.gradle.kts @@ -3,9 +3,6 @@ plugins { } dependencies { - testImplementation("org.apache.groovy:groovy") - testImplementation("org.spockframework:spock-core") - testImplementation(project(":instrumentation-api-semconv")) testImplementation(project(":javaagent-extension-api")) testImplementation(project(":instrumentation:couchbase:couchbase-2-common:javaagent")) diff --git a/instrumentation/couchbase/couchbase-2-common/javaagent-unit-tests/src/test/groovy/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseQuerySanitizerTest.groovy b/instrumentation/couchbase/couchbase-2-common/javaagent-unit-tests/src/test/groovy/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseQuerySanitizerTest.groovy deleted file mode 100644 index ec3bcd9ab0..0000000000 --- a/instrumentation/couchbase/couchbase-2-common/javaagent-unit-tests/src/test/groovy/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseQuerySanitizerTest.groovy +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.instrumentation.couchbase.v2_0 - -import com.couchbase.client.java.analytics.AnalyticsQuery -import com.couchbase.client.java.query.N1qlQuery -import com.couchbase.client.java.query.Select -import com.couchbase.client.java.query.dsl.Expression -import com.couchbase.client.java.view.SpatialViewQuery -import com.couchbase.client.java.view.ViewQuery -import spock.lang.Specification -import spock.lang.Unroll - -class CouchbaseQuerySanitizerTest extends Specification { - @Unroll - def "should normalize #desc query"() { - when: - def normalized = CouchbaseQuerySanitizer.sanitize(query).getFullStatement() - - then: - // the analytics query ends up with trailing ';' in earlier couchbase version, but no trailing ';' in later couchbase version - normalized.replaceFirst(';$', '') == expected - - where: - desc | query | expected - "plain string" | "SELECT field1 FROM `test` WHERE field2 = 'asdf'" | "SELECT field1 FROM `test` WHERE field2 = ?" - "Statement" | Select.select("field1").from("test").where(Expression.path("field2").eq(Expression.s("asdf"))) | "SELECT field1 FROM test WHERE field2 = ?" - "N1QL" | N1qlQuery.simple("SELECT field1 FROM `test` WHERE field2 = 'asdf'") | "SELECT field1 FROM `test` WHERE field2 = ?" - "Analytics" | AnalyticsQuery.simple("SELECT field1 FROM `test` WHERE field2 = 'asdf'") | "SELECT field1 FROM `test` WHERE field2 = ?" - "View" | ViewQuery.from("design", "view").skip(10) | 'ViewQuery(design/view){params="skip=10"}' - "SpatialView" | SpatialViewQuery.from("design", "view").skip(10) | 'skip=10' - } -} diff --git a/instrumentation/couchbase/couchbase-2-common/javaagent-unit-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseQuerySanitizerTest.java b/instrumentation/couchbase/couchbase-2-common/javaagent-unit-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseQuerySanitizerTest.java new file mode 100644 index 0000000000..b67f857a2e --- /dev/null +++ b/instrumentation/couchbase/couchbase-2-common/javaagent-unit-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseQuerySanitizerTest.java @@ -0,0 +1,83 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.instrumentation.couchbase.v2_0; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Named.named; + +import com.couchbase.client.java.analytics.AnalyticsQuery; +import com.couchbase.client.java.query.N1qlQuery; +import com.couchbase.client.java.query.Select; +import com.couchbase.client.java.query.dsl.Expression; +import com.couchbase.client.java.view.SpatialViewQuery; +import com.couchbase.client.java.view.ViewQuery; +import java.util.stream.Stream; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +class CouchbaseQuerySanitizerTest { + + @ParameterizedTest + @MethodSource("providesArguments") + void testShouldNormalizeStringQuery(Parameter parameter) { + String normalized = CouchbaseQuerySanitizer.sanitize(parameter.query).getFullStatement(); + assertThat(normalized).isNotNull(); + // the analytics query ends up with trailing ';' in earlier couchbase version, but no trailing + // ';' in later couchbase version + assertThat(normalized.replaceFirst(";$", "")).isEqualTo(parameter.expected); + } + + private static Stream providesArguments() { + return Stream.of( + Arguments.of( + named( + "plain string", + new Parameter( + "SELECT field1 FROM `test` WHERE field2 = 'asdf'", + "SELECT field1 FROM `test` WHERE field2 = ?"))), + Arguments.of( + named( + "Statement", + new Parameter( + Select.select("field1") + .from("test") + .where(Expression.path("field2").eq(Expression.s("asdf"))), + "SELECT field1 FROM test WHERE field2 = ?"))), + Arguments.of( + named( + "N1QL", + new Parameter( + N1qlQuery.simple("SELECT field1 FROM `test` WHERE field2 = 'asdf'"), + "SELECT field1 FROM `test` WHERE field2 = ?"))), + Arguments.of( + named( + "Analytics", + new Parameter( + AnalyticsQuery.simple("SELECT field1 FROM `test` WHERE field2 = 'asdf'"), + "SELECT field1 FROM `test` WHERE field2 = ?"))), + Arguments.of( + named( + "View", + new Parameter( + ViewQuery.from("design", "view").skip(10), + "ViewQuery(design/view){params=\"skip=10\"}"))), + Arguments.of( + named( + "SpatialView", + new Parameter(SpatialViewQuery.from("design", "view").skip(10), "skip=10")))); + } + + private static class Parameter { + public final Object query; + public final String expected; + + public Parameter(Object query, String expected) { + this.query = query; + this.expected = expected; + } + } +}