Skip to content

Commit

Permalink
ISPN-14426 Test disable tracing propagation on HotRod client
Browse files Browse the repository at this point in the history
  • Loading branch information
fax4ever committed Dec 22, 2022
1 parent 1f1c279 commit 2932b7b
Show file tree
Hide file tree
Showing 2 changed files with 113 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ public OpenTelemetryClient(SpanExporter spanExporter) {
.addSpanProcessor(spanProcessor);

tracerProvider = builder.build();
GlobalOpenTelemetry.resetForTest();
openTelemetry = OpenTelemetrySdk.builder()
.setTracerProvider(tracerProvider)
.setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance()))
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
package org.infinispan.client.hotrod.tracing;

import static org.assertj.core.api.Assertions.assertThat;
import static org.infinispan.configuration.cache.IndexStorage.LOCAL_HEAP;

import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.infinispan.client.hotrod.RemoteCache;
import org.infinispan.client.hotrod.RemoteCacheManager;
import org.infinispan.client.hotrod.annotation.model.Author;
import org.infinispan.client.hotrod.annotation.model.Poem;
import org.infinispan.client.hotrod.test.InternalRemoteCacheManager;
import org.infinispan.client.hotrod.test.SingleHotRodServerTest;
import org.infinispan.configuration.cache.ConfigurationBuilder;
import org.infinispan.factories.GlobalComponentRegistry;
import org.infinispan.manager.EmbeddedCacheManager;
import org.infinispan.protostream.SerializationContextInitializer;
import org.infinispan.server.core.telemetry.TelemetryService;
import org.infinispan.server.core.telemetry.impl.OpenTelemetryService;
import org.infinispan.test.fwk.TestCacheManagerFactory;
import org.testng.annotations.Test;

import io.opentelemetry.sdk.testing.exporter.InMemorySpanExporter;
import io.opentelemetry.sdk.trace.data.SpanData;

@Test(groups = "functional", testName = "org.infinispan.client.hotrod.tracing.TracingDisabledTest")
public class TracingDisabledTest extends SingleHotRodServerTest {

private final InMemorySpanExporter inMemorySpanExporter = InMemorySpanExporter.create();

// Configure OpenTelemetry SDK for tests
private final OpenTelemetryClient oTelConfig = new OpenTelemetryClient(inMemorySpanExporter);

@Override
protected EmbeddedCacheManager createCacheManager() throws Exception {
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.indexing().enable()
.storage(LOCAL_HEAP)
.addIndexedEntity("poem.Poem");

EmbeddedCacheManager manager = TestCacheManagerFactory.createServerModeCacheManager();
manager.defineConfiguration("poems", builder.build());

GlobalComponentRegistry globalComponentRegistry = manager.getGlobalComponentRegistry();
globalComponentRegistry.registerComponent(new OpenTelemetryService(oTelConfig.openTelemetry()), TelemetryService.class);
return manager;
}

@Override
protected RemoteCacheManager getRemoteCacheManager() {
org.infinispan.client.hotrod.configuration.ConfigurationBuilder builder = createHotRodClientConfigurationBuilder("127.0.0.1", hotrodServer.getPort());
builder.disableTracing(); // <-- tracing context propagation is disabled client side
return new InternalRemoteCacheManager(builder.build());
}

@Override
protected void teardown() {
oTelConfig.shutdown();
super.teardown();
}

@Override
protected SerializationContextInitializer contextInitializer() {
return Poem.PoemSchema.INSTANCE;
}

@Test
public void smokeTest() {
RemoteCache<Integer, Poem> remoteCache = remoteCacheManager.getCache("poems");
oTelConfig.withinClientSideSpan("user-client-side-span", () -> {
remoteCache.put(1, new Poem(new Author("Edgar Allen Poe"), "The Raven", 1845));
remoteCache.put(2, new Poem(new Author("Emily Dickinson"), "Because I could not stop for Death", 1890));
});

// Verify that the client span (user-client-side-span) and the two PUT server spans are exported correctly.
// We're going now to correlate the client span with the server spans!
List<SpanData> spans = inMemorySpanExporter.getFinishedSpanItems();
assertThat(spans).hasSize(3);

String traceId = null;
Set spanIds = new HashSet();
Map<String, Integer> parentSpanIds = new HashMap<>();
String parentSpan = null;

for (SpanData span : spans) {
if (traceId == null) {
traceId = span.getTraceId();
} else {
// check that the spans have all different trace ids
assertThat(span.getTraceId()).isNotEqualTo(traceId);
}

spanIds.add(span.getSpanId());
parentSpanIds.compute(span.getParentSpanId(), (key, value) -> (value == null) ? 1 : value + 1);

Integer times = parentSpanIds.get(span.getParentSpanId());
if (times == 2) {
parentSpan = span.getParentSpanId();
}
}

// we have 3 different spans:
assertThat(spanIds).hasSize(3);
// client spans <--> server spans are not correlated
assertThat(parentSpanIds).hasSize(1);
assertThat(spanIds).doesNotContain(parentSpan);
}
}

0 comments on commit 2932b7b

Please sign in to comment.