Convert couchbase-2-common javaagent unit tests from groovy to java (#9426)

This commit is contained in:
Jay DeLuca 2023-09-12 17:30:41 -04:00 committed by GitHub
parent 6ca659a579
commit 590e352fcf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 83 additions and 39 deletions

View File

@ -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"))

View File

@ -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'
}
}

View File

@ -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<Arguments> 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;
}
}
}