Search in sources :

Example 71 with Tracer

use of io.opentracing.Tracer in project hono by eclipse.

the class CacheBasedDeviceConnectionInfoTest method testGetCommandHandlingAdapterInstancesWithSuspectedAdapterInstanceContainer.

/**
 * Verifies that the <em>getCommandHandlingAdapterInstances</em> operation succeeds with a result containing
 * the mapping of a gateway device if the also existing mapping belonging to the *the given device* is associated
 * with an adapter instance having the 'SUSPECTED_DEAD' status.
 *
 * @param extraUnusedViaGateways Test values.
 * @param ctx The vert.x context.
 */
@ParameterizedTest(name = PARAMETERIZED_TEST_NAME_PATTERN)
@MethodSource("extraUnusedViaGateways")
public void testGetCommandHandlingAdapterInstancesWithSuspectedAdapterInstanceContainer(final Set<String> extraUnusedViaGateways, final VertxTestContext ctx) {
    final AdapterInstanceStatusProvider statusProvider = mock(AdapterInstanceStatusProvider.class);
    info = new CacheBasedDeviceConnectionInfo(cache, tracer, statusProvider);
    final String deviceId = "testDevice";
    final String adapterInstance = "adapterInstance";
    final String otherAdapterInstance = "otherAdapterInstance";
    final String gatewayId = "gw-1";
    final Set<String> viaGateways = new HashSet<>(Set.of(gatewayId));
    viaGateways.addAll(extraUnusedViaGateways);
    // GIVEN testDevice has no last known gateway registered
    when(cache.get(CacheBasedDeviceConnectionInfo.getGatewayEntryKey(Constants.DEFAULT_TENANT, deviceId))).thenReturn(Future.succeededFuture());
    // and testDevice's and gw-1's command handling adapter instances are set to
    // adapterInstance and otherAdapterInstance respectively
    when(cache.getAll(CacheBasedDeviceConnectionInfo.getAdapterInstanceEntryKeys(Constants.DEFAULT_TENANT, deviceId, viaGateways))).thenReturn(Future.succeededFuture(Map.of(CacheBasedDeviceConnectionInfo.getAdapterInstanceEntryKey(Constants.DEFAULT_TENANT, deviceId), adapterInstance, CacheBasedDeviceConnectionInfo.getAdapterInstanceEntryKey(Constants.DEFAULT_TENANT, gatewayId), otherAdapterInstance)));
    when(cache.remove(anyString(), anyString())).thenReturn(Future.succeededFuture(Boolean.TRUE));
    when(statusProvider.getStatus(adapterInstance)).thenReturn(AdapterInstanceStatus.SUSPECTED_DEAD);
    when(statusProvider.getStatus(otherAdapterInstance)).thenReturn(AdapterInstanceStatus.ALIVE);
    info.getCommandHandlingAdapterInstances(Constants.DEFAULT_TENANT, deviceId, viaGateways, span).onComplete(ctx.succeeding(result -> {
        ctx.verify(() -> {
            assertNotNull(result);
            assertGetInstancesResultMapping(result, gatewayId, otherAdapterInstance);
            assertGetInstancesResultSize(result, 1);
            // verify mapping entry for terminated adapter instance has not been removed
            verify(cache, never()).remove(CacheBasedDeviceConnectionInfo.getAdapterInstanceEntryKey(Constants.DEFAULT_TENANT, deviceId), adapterInstance);
        });
        ctx.completeNow();
    }));
}
Also used : ArgumentMatchers.any(org.mockito.ArgumentMatchers.any) HttpURLConnection(java.net.HttpURLConnection) VertxTestContext(io.vertx.junit5.VertxTestContext) Assertions.assertNotNull(org.junit.jupiter.api.Assertions.assertNotNull) BeforeEach(org.junit.jupiter.api.BeforeEach) ArgumentMatchers.anyLong(org.mockito.ArgumentMatchers.anyLong) ArgumentMatchers.argThat(org.mockito.ArgumentMatchers.argThat) ArgumentMatchers.eq(org.mockito.ArgumentMatchers.eq) ArgumentMatchers.anyMap(org.mockito.ArgumentMatchers.anyMap) AdapterInstanceStatus(org.eclipse.hono.util.AdapterInstanceStatus) ClientErrorException(org.eclipse.hono.client.ClientErrorException) Constants(org.eclipse.hono.util.Constants) Timeout(io.vertx.junit5.Timeout) HashSet(java.util.HashSet) ExtendWith(org.junit.jupiter.api.extension.ExtendWith) Duration(java.time.Duration) Map(java.util.Map) TracingMockSupport(org.eclipse.hono.test.TracingMockSupport) JsonObject(io.vertx.core.json.JsonObject) Assertions.assertEquals(org.junit.jupiter.api.Assertions.assertEquals) MethodSource(org.junit.jupiter.params.provider.MethodSource) Tracer(io.opentracing.Tracer) DeviceConnectionConstants(org.eclipse.hono.util.DeviceConnectionConstants) Set(java.util.Set) ServerErrorException(org.eclipse.hono.client.ServerErrorException) IOException(java.io.IOException) Mockito.when(org.mockito.Mockito.when) Truth.assertThat(com.google.common.truth.Truth.assertThat) VertxExtension(io.vertx.junit5.VertxExtension) Future(io.vertx.core.Future) Mockito.verify(org.mockito.Mockito.verify) TimeUnit(java.util.concurrent.TimeUnit) Test(org.junit.jupiter.api.Test) JsonArray(io.vertx.core.json.JsonArray) Mockito.never(org.mockito.Mockito.never) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) Stream(java.util.stream.Stream) Assertions.assertTrue(org.junit.jupiter.api.Assertions.assertTrue) Span(io.opentracing.Span) Collections(java.util.Collections) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) Mockito.mock(org.mockito.Mockito.mock) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) HashSet(java.util.HashSet) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) MethodSource(org.junit.jupiter.params.provider.MethodSource)

Example 72 with Tracer

use of io.opentracing.Tracer in project hono by eclipse.

the class KafkaBasedTelemetrySenderTest method testThatSendTelemetryThrowsOnMissingMandatoryParameter.

/**
 * Verifies that
 * {@link KafkaBasedTelemetrySender#sendTelemetry(TenantObject, RegistrationAssertion, QoS, String, Buffer, Map, io.opentracing.SpanContext)}
 * throws an NPE if a mandatory parameter is {@code null}.
 */
@Test
public void testThatSendTelemetryThrowsOnMissingMandatoryParameter() {
    final QoS qos = QoS.AT_LEAST_ONCE;
    final MockProducer<String, Buffer> mockProducer = KafkaClientUnitTestHelper.newMockProducer(true);
    final CachingKafkaProducerFactory<String, Buffer> factory = CachingKafkaProducerFactory.testFactory(vertxMock, (n, c) -> KafkaClientUnitTestHelper.newKafkaProducer(mockProducer));
    final Tracer tracer = NoopTracerFactory.create();
    final KafkaBasedTelemetrySender sender = new KafkaBasedTelemetrySender(vertxMock, factory, kafkaProducerConfig, true, tracer);
    assertThrows(NullPointerException.class, () -> sender.sendTelemetry(null, device, qos, "the-content-type", null, null, null));
    assertThrows(NullPointerException.class, () -> sender.sendTelemetry(tenant, null, qos, "the-content-type", null, null, null));
    assertThrows(NullPointerException.class, () -> sender.sendTelemetry(tenant, device, null, "the-content-type", null, null, null));
}
Also used : Buffer(io.vertx.core.buffer.Buffer) QoS(org.eclipse.hono.util.QoS) Tracer(io.opentracing.Tracer) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 73 with Tracer

use of io.opentracing.Tracer in project hono by eclipse.

the class TracingHelper method injectSpanContext.

/**
 * Injects a {@code SpanContext} into the headers of vert.x {@code DeliveryOptions}.
 *
 * @param tracer The Tracer to use for injecting the context.
 * @param spanContext The context to inject or {@code null} if no context is available.
 * @param deliveryOptions The delivery options to inject the context into.
 * @throws NullPointerException if tracer or deliveryOptions is {@code null}.
 */
public static void injectSpanContext(final Tracer tracer, final SpanContext spanContext, final DeliveryOptions deliveryOptions) {
    Objects.requireNonNull(tracer);
    Objects.requireNonNull(deliveryOptions);
    if (spanContext != null && !(spanContext instanceof NoopSpanContext)) {
        final MultiMap headers = Optional.of(deliveryOptions).map(options -> options.getHeaders()).orElseGet(() -> {
            final MultiMap newHeaders = MultiMap.caseInsensitiveMultiMap();
            deliveryOptions.setHeaders(newHeaders);
            return newHeaders;
        });
        tracer.inject(spanContext, Format.Builtin.TEXT_MAP, new MultiMapInjectAdapter(headers));
    }
}
Also used : NoopSpanContext(io.opentracing.noop.NoopSpanContext) DeliveryOptions(io.vertx.core.eventbus.DeliveryOptions) LoggerFactory(org.slf4j.LoggerFactory) MultiMap(io.vertx.core.MultiMap) IntTag(io.opentracing.tag.IntTag) HashMap(java.util.HashMap) Supplier(java.util.function.Supplier) Tags(io.opentracing.tag.Tags) BooleanTag(io.opentracing.tag.BooleanTag) References(io.opentracing.References) Map(java.util.Map) BiConsumer(java.util.function.BiConsumer) Message(org.apache.qpid.proton.message.Message) Fields(io.opentracing.log.Fields) JsonObject(io.vertx.core.json.JsonObject) Logger(org.slf4j.Logger) Iterator(java.util.Iterator) Tracer(io.opentracing.Tracer) MessageHelper(org.eclipse.hono.util.MessageHelper) StringTag(io.opentracing.tag.StringTag) SpanContext(io.opentracing.SpanContext) Objects(java.util.Objects) TextMap(io.opentracing.propagation.TextMap) Format(io.opentracing.propagation.Format) NoopSpanContext(io.opentracing.noop.NoopSpanContext) Optional(java.util.Optional) Span(io.opentracing.Span) MultiMap(io.vertx.core.MultiMap)

Example 74 with Tracer

use of io.opentracing.Tracer in project Payara by payara.

the class SpanPropagator method internalActiveContext.

private SpanContext internalActiveContext() {
    final PayaraTracingServices payaraTracingServices = new PayaraTracingServices();
    final Tracer tracer = payaraTracingServices.getActiveTracer();
    if (tracer == null) {
        return null;
    }
    final Span activeSpan = tracer.activeSpan();
    return activeSpan == null ? null : activeSpan.context();
}
Also used : Tracer(io.opentracing.Tracer) Span(io.opentracing.Span)

Example 75 with Tracer

use of io.opentracing.Tracer in project Payara by payara.

the class ContextSetupProviderImpl method startConcurrentContextSpan.

private void startConcurrentContextSpan(ComponentInvocation invocation, InvocationContext handle) {
    Tracer tracer = openTracing.getTracer(openTracing.getApplicationName(Globals.getDefaultBaseServiceLocator().getService(InvocationManager.class)));
    // Start a trace in the request tracing system
    SpanBuilder builder = tracer.buildSpan("executeConcurrentContext");
    // Check for propagated span
    if (handle.getSpanContextMap() != null) {
        @SuppressWarnings("unchecked") SpanContext spanContext = tracer.extract(Format.Builtin.TEXT_MAP, new MapToTextMap(handle.getSpanContextMap()));
        if (spanContext != null) {
            builder.asChildOf(spanContext);
            // Check for the presence of a propagated parent operation name
            try {
                String operationName = ((RequestTraceSpanContext) spanContext).getBaggageItems().get("operation.name");
                if (operationName != null) {
                    builder.withTag("Parent Operation Name", operationName);
                }
            } catch (ClassCastException cce) {
                logger.log(Level.FINE, "ClassCastException caught converting Span Context", cce);
            }
        }
    }
    if (invocation != null) {
        builder = builder.withTag("App Name", invocation.getAppName()).withTag("Component ID", invocation.getComponentId()).withTag("Module Name", invocation.getModuleName());
        Object instance = invocation.getInstance();
        if (instance != null) {
            builder.withTag("Class Name", instance.getClass().getName());
        }
    }
    builder.withTag("Thread Name", Thread.currentThread().getName());
    tracer.activateSpan(builder.start());
}
Also used : SpanBuilder(io.opentracing.Tracer.SpanBuilder) RequestTraceSpanContext(fish.payara.notification.requesttracing.RequestTraceSpanContext) SpanContext(io.opentracing.SpanContext) Tracer(io.opentracing.Tracer) MapToTextMap(fish.payara.opentracing.propagation.MapToTextMap)

Aggregations

Tracer (io.opentracing.Tracer)104 Span (io.opentracing.Span)49 SpanContext (io.opentracing.SpanContext)30 Map (java.util.Map)21 Vertx (io.vertx.core.Vertx)19 HashMap (java.util.HashMap)19 Test (org.junit.Test)19 BeforeEach (org.junit.jupiter.api.BeforeEach)19 Test (org.junit.jupiter.api.Test)19 Future (io.vertx.core.Future)18 Buffer (io.vertx.core.buffer.Buffer)16 HttpURLConnection (java.net.HttpURLConnection)14 EventBus (io.vertx.core.eventbus.EventBus)13 JsonObject (io.vertx.core.json.JsonObject)12 Objects (java.util.Objects)12 Logger (org.slf4j.Logger)11 LoggerFactory (org.slf4j.LoggerFactory)11 Tags (io.opentracing.tag.Tags)9 Scope (io.opentracing.Scope)8 GlobalTracer (io.opentracing.util.GlobalTracer)8