Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import io.opentelemetry.sdk.trace.SdkTracerProvider;
import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder;
import java.time.Instant;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import org.slf4j.Logger;
Expand Down Expand Up @@ -175,6 +176,7 @@ public ExecutionOtelPlugin() {
* @param config the plugin configuration
*/
public ExecutionOtelPlugin(SdkTracerProviderBuilder tracerProviderBuilder, OtelPluginConfig config) {
Objects.requireNonNull(config, "config must not be null");
this.idGenerator = DeterministicIdGenerator.installOn(tracerProviderBuilder);
// Wrap the configured sampler so durable spans use the execution's single precomputed decision.
DurableSampler.installOn(tracerProviderBuilder);
Expand All @@ -196,6 +198,7 @@ public ExecutionOtelPlugin(SdkTracerProviderBuilder tracerProviderBuilder, OtelP
* @param config the plugin configuration
*/
public ExecutionOtelPlugin(OtelPluginConfig config) {
Objects.requireNonNull(config, "config must not be null");
this.contextExtractor = config.contextExtractor();
this.enableMdc = config.enableMdc();
this.workflowSpanName = config.workflowSpanName();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import io.opentelemetry.sdk.trace.SdkTracerProvider;
import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder;
import java.time.Instant;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedDeque;
import java.util.concurrent.TimeUnit;
Expand Down Expand Up @@ -168,6 +169,7 @@ public InvocationOtelPlugin() {
* @param config the plugin configuration
*/
public InvocationOtelPlugin(SdkTracerProviderBuilder tracerProviderBuilder, OtelPluginConfig config) {
Objects.requireNonNull(config, "config must not be null");
this.idGenerator = DeterministicIdGenerator.installOn(tracerProviderBuilder);
// Wrap the configured sampler so durable spans use the execution's single precomputed decision.
DurableSampler.installOn(tracerProviderBuilder);
Expand All @@ -189,6 +191,7 @@ public InvocationOtelPlugin(SdkTracerProviderBuilder tracerProviderBuilder, Otel
* @param config the plugin configuration
*/
public InvocationOtelPlugin(OtelPluginConfig config) {
Objects.requireNonNull(config, "config must not be null");
this.contextExtractor = config.contextExtractor();
this.enableMdc = config.enableMdc();
this.workflowSpanName = config.workflowSpanName();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
package software.amazon.lambda.durable.otel;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verifyNoInteractions;

import io.opentelemetry.sdk.trace.SdkTracerProvider;
import org.junit.jupiter.api.Test;

class OtelPluginConfigValidationTest {

@Test
void configOnlyConstructorsRejectNullConfig() {
var invocationError =
assertThrows(NullPointerException.class, () -> new InvocationOtelPlugin((OtelPluginConfig) null));
var executionError =
assertThrows(NullPointerException.class, () -> new ExecutionOtelPlugin((OtelPluginConfig) null));

assertEquals("config must not be null", invocationError.getMessage());
assertEquals("config must not be null", executionError.getMessage());
}

@Test
void invocationConstructorRejectsNullConfigBeforeTouchingBuilder() {
var builder = spy(SdkTracerProvider.builder());

assertThrows(NullPointerException.class, () -> new InvocationOtelPlugin(builder, null));

verifyNoInteractions(builder);
}

@Test
void executionConstructorRejectsNullConfigBeforeTouchingBuilder() {
var builder = spy(SdkTracerProvider.builder());

assertThrows(NullPointerException.class, () -> new ExecutionOtelPlugin(builder, null));

verifyNoInteractions(builder);
}
}
Loading