Skip to content

Commit 32eebbc

Browse files
committed
feat: set up contract tests for step functions
1 parent 6c79f55 commit 32eebbc

File tree

8 files changed

+343
-30
lines changed

8 files changed

+343
-30
lines changed

appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/awssdk/base/AwsSdkBaseTest.java

Lines changed: 67 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import java.util.Set;
2626
import java.util.regex.Pattern;
2727
import java.util.regex.PatternSyntaxException;
28-
2928
import org.assertj.core.api.ThrowingConsumer;
3029
import org.junit.jupiter.api.AfterAll;
3130
import org.junit.jupiter.api.BeforeAll;
@@ -46,7 +45,9 @@ public abstract class AwsSdkBaseTest extends ContractTestBase {
4645
LocalStackContainer.Service.DYNAMODB,
4746
LocalStackContainer.Service.SQS,
4847
LocalStackContainer.Service.KINESIS,
49-
LocalStackContainer.Service.SECRETSMANAGER)
48+
LocalStackContainer.Service.SECRETSMANAGER,
49+
LocalStackContainer.Service.IAM,
50+
LocalStackContainer.Service.STEPFUNCTIONS)
5051
.withEnv("DEFAULT_REGION", "us-west-2")
5152
.withNetwork(network)
5253
.withEnv("LOCALSTACK_HOST", "127.0.0.1")
@@ -108,6 +109,8 @@ protected String getApplicationWaitPattern() {
108109

109110
protected abstract String getSecretsManagerSpanNamePrefix();
110111

112+
protected abstract String getStepFunctionsSpanNamePrefix();
113+
111114
protected abstract String getS3RpcServiceName();
112115

113116
protected abstract String getDynamoDbRpcServiceName();
@@ -126,6 +129,8 @@ protected String getApplicationWaitPattern() {
126129

127130
protected abstract String getSecretsManagerRpcServiceName();
128131

132+
protected abstract String getStepFunctionsRpcServiceName();
133+
129134
private String getS3ServiceName() {
130135
return "AWS::S3";
131136
}
@@ -158,7 +163,13 @@ private String getBedrockRuntimeServiceName() {
158163
return "AWS::BedrockRuntime";
159164
}
160165

161-
private String getSecretsManagerServiceName() { return "AWS::SecretsManager"; }
166+
private String getSecretsManagerServiceName() {
167+
return "AWS::SecretsManager";
168+
}
169+
170+
private String getStepFunctionsServiceName() {
171+
return "AWS::StepFunctions";
172+
}
162173

163174
private String s3SpanName(String operation) {
164175
return String.format("%s.%s", getS3SpanNamePrefix(), operation);
@@ -196,6 +207,10 @@ private String secretsManagerSpanName(String operation) {
196207
return String.format("%s.%s", getSecretsManagerSpanNamePrefix(), operation);
197208
}
198209

210+
private String stepFunctionsSpanName(String operation) {
211+
return String.format("%s.%s", getStepFunctionsSpanNamePrefix(), operation);
212+
}
213+
199214
private boolean isValidRegex(String pattern) {
200215
try {
201216
Pattern.compile(pattern);
@@ -2229,18 +2244,18 @@ protected void doTestBedrockAgentRuntimeKnowledgeBaseId() {
22292244
protected void doTestSecretsManagerCreateSecret() throws Exception {
22302245
appClient.get("/secretsmanager/createsecret/test-secret-id").aggregate().join();
22312246
var traces = mockCollectorClient.getTraces();
2232-
var metrics = mockCollectorClient.getMetrics(
2247+
var metrics =
2248+
mockCollectorClient.getMetrics(
22332249
Set.of(
2234-
AppSignalsConstants.ERROR_METRIC,
2235-
AppSignalsConstants.FAULT_METRIC,
2236-
AppSignalsConstants.LATENCY_METRIC
2237-
)
2238-
);
2250+
AppSignalsConstants.ERROR_METRIC,
2251+
AppSignalsConstants.FAULT_METRIC,
2252+
AppSignalsConstants.LATENCY_METRIC));
22392253
var localService = getApplicationOtelServiceName();
22402254
var localOperation = "GET /secretsmanager/createsecret/:secretId";
22412255
var type = "AWS::SecretsManager::Secret";
22422256
var identifier = "test-secret-id-[A-Za-z0-9]{6}";
2243-
var cloudformationIdentifier = "arn:aws:secretsmanager:us-west-2:000000000000:secret:test-secret-id-[A-Za-z0-9]{6}";
2257+
var cloudformationIdentifier =
2258+
"arn:aws:secretsmanager:us-west-2:000000000000:secret:test-secret-id-[A-Za-z0-9]{6}";
22442259

22452260
assertSpanClientAttributes(
22462261
traces,
@@ -2257,7 +2272,10 @@ protected void doTestSecretsManagerCreateSecret() throws Exception {
22572272
4566,
22582273
"http://localstack:4566",
22592274
200,
2260-
List.of(assertAttribute(SemanticConventionsConstants.AWS_SECRET_ARN, "arn:aws:secretsmanager:us-west-2:000000000000:secret:test-secret-id-[A-Za-z0-9]{6}")));
2275+
List.of(
2276+
assertAttribute(
2277+
SemanticConventionsConstants.AWS_SECRET_ARN,
2278+
"arn:aws:secretsmanager:us-west-2:000000000000:secret:test-secret-id-[A-Za-z0-9]{6}")));
22612279
assertMetricClientAttributes(
22622280
metrics,
22632281
AppSignalsConstants.LATENCY_METRIC,
@@ -2292,4 +2310,42 @@ protected void doTestSecretsManagerCreateSecret() throws Exception {
22922310
cloudformationIdentifier,
22932311
0.0);
22942312
}
2313+
2314+
protected void doTestStepFunctionsCreateStateMachine() throws Exception {
2315+
appClient.get("/sfn/createstatemachine/test-state-machine").aggregate().join();
2316+
var traces = mockCollectorClient.getTraces();
2317+
var metrics =
2318+
mockCollectorClient.getMetrics(
2319+
Set.of(
2320+
AppSignalsConstants.ERROR_METRIC,
2321+
AppSignalsConstants.FAULT_METRIC,
2322+
AppSignalsConstants.LATENCY_METRIC));
2323+
2324+
var localService = getApplicationOtelServiceName();
2325+
var localOperation = "GET /sfn/createstatemachine/:name";
2326+
var type = "AWS::StepFunctions::StateMachine";
2327+
var identifier = "test-state-machine";
2328+
var cloudformationIdentifier =
2329+
"arn:aws:states:us-west-2:000000000000:stateMachine:test-state-machine";
2330+
2331+
assertSpanClientAttributes(
2332+
traces,
2333+
stepFunctionsSpanName("CreateStateMachine"),
2334+
getStepFunctionsRpcServiceName(),
2335+
localService,
2336+
localOperation,
2337+
getStepFunctionsServiceName(),
2338+
"CreateStateMachine",
2339+
type,
2340+
identifier,
2341+
cloudformationIdentifier,
2342+
"localstack",
2343+
4566,
2344+
"http://localstack:4566",
2345+
200,
2346+
List.of(
2347+
assertAttribute(
2348+
SemanticConventionsConstants.AWS_STATE_MACHINE_ARN,
2349+
"arn:aws:states:us-west-2:000000000000:stateMachine:test-state-machine")));
2350+
}
22952351
}

appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/awssdk/v1/AwsSdkV1Test.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,11 @@ protected String getSecretsManagerSpanNamePrefix() {
8181
return "AWSSecretsManager";
8282
}
8383

84+
@Override
85+
protected String getStepFunctionsSpanNamePrefix() {
86+
return "AWSStepFunctions";
87+
}
88+
8489
protected String getS3RpcServiceName() {
8590
return "Amazon S3";
8691
}
@@ -100,6 +105,11 @@ protected String getSecretsManagerRpcServiceName() {
100105
return "AWSSecretsManager";
101106
}
102107

108+
@Override
109+
protected String getStepFunctionsRpcServiceName() {
110+
return "AWSStepFunctions";
111+
}
112+
103113
protected String getKinesisRpcServiceName() {
104114
return "AmazonKinesis";
105115
}
@@ -247,5 +257,12 @@ void testBedrockAgentRuntimeKnowledgeBaseId() {
247257
}
248258

249259
@Test
250-
void testSecretsManagerCreateSecret() throws Exception { doTestSecretsManagerCreateSecret(); }
260+
void testSecretsManagerCreateSecret() throws Exception {
261+
doTestSecretsManagerCreateSecret();
262+
}
263+
264+
@Test
265+
void testStepFunctionsCreateStateMachine() throws Exception {
266+
doTestStepFunctionsCreateStateMachine();
267+
}
251268
}

appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/awssdk/v2/AwsSdkV2Test.java

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,14 @@ protected String getBedrockAgentRuntimeSpanNamePrefix() {
7676
}
7777

7878
@Override
79-
protected String getSecretsManagerSpanNamePrefix() { return "SecretsManager"; }
79+
protected String getSecretsManagerSpanNamePrefix() {
80+
return "SecretsManager";
81+
}
82+
83+
@Override
84+
protected String getStepFunctionsSpanNamePrefix() {
85+
return "Sfn";
86+
}
8087

8188
@Override
8289
protected String getS3RpcServiceName() {
@@ -118,7 +125,14 @@ protected String getBedrockAgentRuntimeRpcServiceName() {
118125
}
119126

120127
@Override
121-
protected String getSecretsManagerRpcServiceName() { return "SecretsManager"; }
128+
protected String getSecretsManagerRpcServiceName() {
129+
return "SecretsManager";
130+
}
131+
132+
@Override
133+
protected String getStepFunctionsRpcServiceName() {
134+
return "Sfn";
135+
}
122136

123137
@Test
124138
void testS3CreateBucket() throws Exception {
@@ -248,5 +262,12 @@ void testBedrockAgentRuntimeAgentId() {
248262
// }
249263

250264
@Test
251-
void testSecretsManagerCreateSecret() throws Exception { doTestSecretsManagerCreateSecret(); }
265+
void testSecretsManagerCreateSecret() throws Exception {
266+
doTestSecretsManagerCreateSecret();
267+
}
268+
269+
@Test
270+
void testStepFunctionsCreateStateMachine() throws Exception {
271+
doTestStepFunctionsCreateStateMachine();
272+
}
252273
}

appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/utils/SemanticConventionsConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ public class SemanticConventionsConstants {
6565
public static final String AWS_GUARDRAIL_ARN = "aws.bedrock.guardrail.arn";
6666
public static final String GEN_AI_REQUEST_MODEL = "gen_ai.request.model";
6767
public static final String AWS_SECRET_ARN = "aws.secretsmanager.secret.arn";
68+
public static final String AWS_STATE_MACHINE_ARN = "aws.stepfunctions.state_machine.arn";
6869

6970
// kafka
7071
public static final String MESSAGING_CLIENT_ID = "messaging.client_id";

appsignals-tests/images/aws-sdk/aws-sdk-v1/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ dependencies {
3838
implementation("com.amazonaws:aws-java-sdk-bedrockruntime")
3939
implementation("com.amazonaws:aws-java-sdk-bedrockagentruntime")
4040
implementation("com.amazonaws:aws-java-sdk-secretsmanager")
41+
implementation("com.amazonaws:aws-java-sdk-iam")
42+
implementation("com.amazonaws:aws-java-sdk-stepfunctions")
4143
implementation("commons-logging:commons-logging")
4244
implementation("com.linecorp.armeria:armeria")
4345
implementation("com.fasterxml.jackson.core:jackson-databind:2.13.3")

0 commit comments

Comments
 (0)