Skip to content

Commit a7d509d

Browse files
BenEfratimp911de
authored andcommitted
Return proxied Statement from ObservationStatement mutator calls.
Add test to verify proxy preserves Observation Signed-off-by: Ben Efrati <BenEfrati@users.noreply.github.com> Closes #1651 Original pull request: #1652
1 parent d41b7ea commit a7d509d

2 files changed

Lines changed: 34 additions & 4 deletions

File tree

‎spring-data-cassandra/src/main/java/org/springframework/data/cassandra/observability/ObservationStatement.java‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
*
3535
* @author Mark Paluch
3636
* @author Marcin Grzejszczak
37+
* @author Ben Efrati
3738
* @since 4.0
3839
*/
3940
final class ObservationStatement implements MethodInterceptor {
@@ -103,9 +104,10 @@ public static boolean isObservationStatement(Statement<?> statement) {
103104
}
104105
}
105106

106-
Object result = invocation.proceed();
107-
if (result instanceof Statement<?>) {
108-
this.delegate = (Statement<?>) result;
107+
Object result = invocation.proceed();
108+
if (result instanceof Statement<?> statement) {
109+
this.delegate = statement;
110+
return createProxy(this.observation, statement);
109111
}
110112

111113
return result;

‎spring-data-cassandra/src/test/java/org/springframework/data/cassandra/observability/ObservationStatementUnitTests.java‎

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,17 @@
1515
*/
1616
package org.springframework.data.cassandra.observability;
1717

18-
import static org.assertj.core.api.Assertions.*;
18+
import static org.assertj.core.api.Assertions.assertThat;
19+
20+
import java.nio.ByteBuffer;
21+
import java.nio.charset.StandardCharsets;
22+
import java.util.Map;
1923

2024
import io.micrometer.observation.Observation;
2125
import io.micrometer.observation.tck.TestObservationRegistry;
2226

27+
import org.assertj.core.api.Assertions;
28+
import org.assertj.core.api.InstanceOfAssertFactory;
2329
import org.junit.jupiter.api.Test;
2430

2531
import com.datastax.oss.driver.api.core.cql.SimpleStatement;
@@ -28,6 +34,7 @@
2834
* Unit test for {@link ObservationStatement}
2935
*
3036
* @author Mark Paluch
37+
* @author Ben Efrati
3138
*/
3239
class ObservationStatementUnitTests {
3340

@@ -50,4 +57,25 @@ void equalsAndHashCodeShouldBeEqual() {
5057
assertThat(statement1).isNotEqualTo(statement3);
5158
assertThat(statement1.hashCode()).isNotEqualTo(statement3.hashCode());
5259
}
60+
61+
@Test // GH-1651
62+
void mutatingCallsReturnProxyPreservingObservation() {
63+
64+
TestObservationRegistry registry = TestObservationRegistry.create();
65+
66+
Observation observation = Observation.start("foo", registry);
67+
68+
SimpleStatement statement = ObservationStatement.createProxy(observation,
69+
SimpleStatement.newInstance("SELECT * FROM foo"));
70+
Map<String, ByteBuffer> customPayload = Map.of("key",
71+
ByteBuffer.wrap("value".getBytes(StandardCharsets.UTF_8)));
72+
SimpleStatement customPayloadStatement = statement.setCustomPayload(customPayload);
73+
assertThat(customPayloadStatement)
74+
.isNotEqualTo(statement)
75+
.doesNotHaveSameHashCodeAs(statement)
76+
.asInstanceOf(new InstanceOfAssertFactory<>(CassandraObservationSupplier.class, Assertions::assertThat))
77+
.extracting(CassandraObservationSupplier::getObservation)
78+
.isEqualTo(observation);
79+
80+
}
5381
}

0 commit comments

Comments
 (0)