Skip to content

Commit 535dd92

Browse files
committed
add step functions activity contract tests
1 parent c3cb430 commit 535dd92

File tree

6 files changed

+127
-11
lines changed

6 files changed

+127
-11
lines changed

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

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2381,4 +2381,41 @@ protected void doTestStepFunctionsDescribeStateMachine() throws Exception {
23812381
cloudformationIdentifier,
23822382
0.0);
23832383
}
2384+
2385+
protected void doTestStepFunctionsDescribeActivity() throws Exception {
2386+
appClient.get("/sfn/describeactivity/test-activity").aggregate().join();
2387+
var traces = mockCollectorClient.getTraces();
2388+
var metrics = mockCollectorClient.getMetrics(
2389+
Set.of(
2390+
AppSignalsConstants.ERROR_METRIC,
2391+
AppSignalsConstants.FAULT_METRIC,
2392+
AppSignalsConstants.LATENCY_METRIC));
2393+
2394+
var localService = getApplicationOtelServiceName();
2395+
var localOperation = "GET /sfn/describeactivity/:name";
2396+
var type = "AWS::StepFunctions::Activity";
2397+
var identifier = "test-activity";
2398+
var cloudformationIdentifier = "arn:aws:states:us-west-2:000000000000:activity:test-activity";
2399+
2400+
assertSpanClientAttributes(
2401+
traces,
2402+
stepFunctionsSpanName("DescribeActivity"),
2403+
getStepFunctionsRpcServiceName(),
2404+
localService,
2405+
localOperation,
2406+
getStepFunctionsServiceName(),
2407+
"DescribeActivity",
2408+
type,
2409+
identifier,
2410+
cloudformationIdentifier,
2411+
"localstack",
2412+
4566,
2413+
"http://localstack:4566",
2414+
200,
2415+
List.of(
2416+
assertAttribute(
2417+
SemanticConventionsConstants.AWS_ACTIVITY_ARN,
2418+
"arn:aws:states:us-west-2:000000000000:activity:test-activity")));
2419+
2420+
}
23842421
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,4 +265,9 @@ void testSecretsManagerDescribeSecret() throws Exception {
265265
void testStepFunctionsDescribeStateMachine() throws Exception {
266266
doTestStepFunctionsDescribeStateMachine();
267267
}
268+
269+
@Test
270+
void testStepFunctionsDescribeActivity() throws Exception {
271+
doTestStepFunctionsDescribeActivity();
272+
}
268273
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,4 +270,9 @@ void testSecretsManagerDescribeSecret() throws Exception {
270270
void testStepFunctionsDescribeStateMachine() throws Exception {
271271
doTestStepFunctionsDescribeStateMachine();
272272
}
273+
274+
@Test
275+
void testStepFunctionsDescribeActivity() throws Exception {
276+
doTestStepFunctionsDescribeActivity();
277+
}
273278
}

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
@@ -66,6 +66,7 @@ public class SemanticConventionsConstants {
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";
6868
public static final String AWS_STATE_MACHINE_ARN = "aws.stepfunctions.state_machine.arn";
69+
public static final String AWS_ACTIVITY_ARN = "aws.stepfunctions.activity.arn";
6970

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

appsignals-tests/images/aws-sdk/aws-sdk-v1/src/main/java/com/amazon/sampleapp/App.java

Lines changed: 46 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -700,14 +700,18 @@ private static void setupStepFunctions() {
700700

701701
var sfnName = "test-state-machine";
702702
String existingStateMachineArn = null;
703-
var listRequest = new ListStateMachinesRequest();
704-
var listResponse = stepFunctionsClient.listStateMachines(listRequest);
705-
existingStateMachineArn =
706-
listResponse.getStateMachines().stream()
707-
.filter(machine -> machine.getName().equals(sfnName))
708-
.findFirst()
709-
.map(StateMachineListItem::getStateMachineArn)
710-
.orElse(null);
703+
try {
704+
var listRequest = new ListStateMachinesRequest();
705+
var listResponse = stepFunctionsClient.listStateMachines(listRequest);
706+
existingStateMachineArn =
707+
listResponse.getStateMachines().stream()
708+
.filter(machine -> machine.getName().equals(sfnName))
709+
.findFirst()
710+
.map(StateMachineListItem::getStateMachineArn)
711+
.orElse(null);
712+
} catch (Exception e) {
713+
logger.error("Error listing state machines", e);
714+
}
711715

712716
if (existingStateMachineArn != null) {
713717
logger.info("State machine already exists, skipping creation");
@@ -774,15 +778,48 @@ private static void setupStepFunctions() {
774778
existingStateMachineArn = createResponse.getStateMachineArn();
775779
}
776780

781+
var activityName = "test-activity";
782+
String existingActivityArn = null;
783+
784+
// List existing activities
785+
try {
786+
var listRequest = new ListActivitiesRequest();
787+
var listResponse = stepFunctionsClient.listActivities(listRequest);
788+
existingActivityArn = listResponse.getActivities().stream()
789+
.filter(activity -> activity.getName().equals(activityName))
790+
.findFirst()
791+
.map(ActivityListItem::getActivityArn)
792+
.orElse(null);
793+
} catch (Exception e) {
794+
logger.error("Error listing activities", e);
795+
}
796+
797+
if (existingActivityArn != null) {
798+
logger.info("Activity already exists, skipping creation");
799+
} else {
800+
logger.info("Activity not found, creating a new one");
801+
var createRequest = new CreateActivityRequest().withName(activityName);
802+
var createResponse = stepFunctionsClient.createActivity(createRequest);
803+
existingActivityArn = createResponse.getActivityArn();
804+
}
805+
777806
String finalExistingStateMachineArn = existingStateMachineArn;
778807
get(
779808
"/sfn/describestatemachine/:name",
780809
(req, res) -> {
781-
var name = req.params(":name");
782810
var describeRequest =
783811
new DescribeStateMachineRequest().withStateMachineArn(finalExistingStateMachineArn);
784812
stepFunctionsClient.describeStateMachine(describeRequest);
785813
return "";
786814
});
815+
816+
String finalExistingActivityArn = existingActivityArn;
817+
get(
818+
"/sfn/describeactivity/:name",
819+
(req, res) -> {
820+
var describeRequest = new DescribeActivityRequest().withActivityArn(finalExistingActivityArn);
821+
stepFunctionsClient.describeActivity(describeRequest);
822+
return "";
823+
});
787824
}
788825
}

appsignals-tests/images/aws-sdk/aws-sdk-v2/src/main/java/com/amazon/sampleapp/App.java

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -737,7 +737,7 @@ private static void setupStepFunctions() {
737737
.map(StateMachineListItem::stateMachineArn)
738738
.orElse(null);
739739
} catch (Exception e) {
740-
logger.error("Error listing secrets", e);
740+
logger.error("Error listing state machines", e);
741741
}
742742

743743
if (existingStateMachineArn != null) {
@@ -809,17 +809,48 @@ private static void setupStepFunctions() {
809809
existingStateMachineArn = sfnClient.createStateMachine(sfnRequest).stateMachineArn();
810810
}
811811

812+
var activityName = "test-activity";
813+
String existingActivityArn = null;
814+
815+
try {
816+
var listRequest = ListActivitiesRequest.builder().build();
817+
var listResponse = sfnClient.listActivities(listRequest);
818+
existingActivityArn = listResponse.activities().stream()
819+
.filter(activity -> activity.name().equals(activityName))
820+
.findFirst()
821+
.map(ActivityListItem::activityArn)
822+
.orElse(null);
823+
} catch (Exception e) {
824+
logger.error("Error listing activities", e);
825+
}
826+
827+
if (existingActivityArn != null) {
828+
logger.info("Activity already exists, skipping creation");
829+
} else {
830+
logger.info("Activity not found, creating a new one");
831+
var createRequest = CreateActivityRequest.builder().name(activityName).build();
832+
existingActivityArn = sfnClient.createActivity(createRequest).activityArn();
833+
}
834+
812835
String finalExistingStateMachineArn = existingStateMachineArn;
813836
get(
814837
"/sfn/describestatemachine/:name",
815838
(req, res) -> {
816-
var name = req.params(":name");
817839
var describeRequest =
818840
DescribeStateMachineRequest.builder()
819841
.stateMachineArn(finalExistingStateMachineArn)
820842
.build();
821843
sfnClient.describeStateMachine(describeRequest);
822844
return "";
823845
});
846+
847+
String finalExistingActivityArn = existingActivityArn;
848+
get(
849+
"/sfn/describeactivity/:name",
850+
(req, res) -> {
851+
var describeRequest = DescribeActivityRequest.builder().activityArn(finalExistingActivityArn).build();
852+
sfnClient.describeActivity(describeRequest);
853+
return "";
854+
});
824855
}
825856
}

0 commit comments

Comments
 (0)