|
35 | 35 | _AWS_BEDROCK_KNOWLEDGE_BASE_ID: str = "aws.bedrock.knowledge_base.id" |
36 | 36 | _AWS_BEDROCK_DATA_SOURCE_ID: str = "aws.bedrock.data_source.id" |
37 | 37 | _GEN_AI_REQUEST_MODEL: str = "gen_ai.request.model" |
| 38 | +_AWS_SECRET_ARN: str = "aws.secretsmanager.secret.arn" |
38 | 39 |
|
39 | 40 |
|
40 | 41 | # pylint: disable=too-many-public-methods |
@@ -74,7 +75,7 @@ def set_up_dependency_container(cls): |
74 | 75 | cls._local_stack: LocalStackContainer = ( |
75 | 76 | LocalStackContainer(image="localstack/localstack:3.5.0") |
76 | 77 | .with_name("localstack") |
77 | | - .with_services("s3", "sqs", "dynamodb", "kinesis") |
| 78 | + .with_services("s3", "sqs", "dynamodb", "kinesis", "secretsmanager") |
78 | 79 | .with_env("DEFAULT_REGION", "us-west-2") |
79 | 80 | .with_kwargs(network=NETWORK_NAME, networking_config=local_stack_networking_config) |
80 | 81 | ) |
@@ -532,6 +533,63 @@ def test_bedrock_agent_get_data_source(self): |
532 | 533 | span_name="Bedrock Agent.GetDataSource", |
533 | 534 | ) |
534 | 535 |
|
| 536 | + def test_secretsmanager_describe_secret(self): |
| 537 | + self.do_test_requests( |
| 538 | + "secretsmanager/describesecret/my-secret", |
| 539 | + "GET", |
| 540 | + 200, |
| 541 | + 0, |
| 542 | + 0, |
| 543 | + rpc_service="Secrets Manager", |
| 544 | + remote_service="AWS::SecretsManager", |
| 545 | + remote_operation="DescribeSecret", |
| 546 | + remote_resource_type="AWS::SecretsManager::Secret", |
| 547 | + remote_resource_identifier=r"testSecret-[a-zA-Z0-9]{6}$", |
| 548 | + cloudformation_primary_identifier=r"arn:aws:secretsmanager:us-west-2:000000000000:secret:testSecret-[a-zA-Z0-9]{6}$", |
| 549 | + response_specific_attributes={ |
| 550 | + _AWS_SECRET_ARN: r"arn:aws:secretsmanager:us-west-2:000000000000:secret:testSecret-[a-zA-Z0-9]{6}$", |
| 551 | + }, |
| 552 | + span_name="Secrets Manager.DescribeSecret", |
| 553 | + ) |
| 554 | + |
| 555 | + def test_secretsmanager_error(self): |
| 556 | + self.do_test_requests( |
| 557 | + "secretsmanager/error", |
| 558 | + "GET", |
| 559 | + 400, |
| 560 | + 1, |
| 561 | + 0, |
| 562 | + rpc_service="Secrets Manager", |
| 563 | + remote_service="AWS::SecretsManager", |
| 564 | + remote_operation="DescribeSecret", |
| 565 | + remote_resource_type="AWS::SecretsManager::Secret", |
| 566 | + remote_resource_identifier="unExistSecret", |
| 567 | + cloudformation_primary_identifier="arn:aws:secretsmanager:us-west-2:000000000000:secret:unExistSecret", |
| 568 | + request_specific_attributes={ |
| 569 | + _AWS_SECRET_ARN: "arn:aws:secretsmanager:us-west-2:000000000000:secret:unExistSecret", |
| 570 | + }, |
| 571 | + span_name="Secrets Manager.DescribeSecret", |
| 572 | + ) |
| 573 | + |
| 574 | + def test_secretsmanager_fault(self): |
| 575 | + self.do_test_requests( |
| 576 | + "secretsmanager/fault", |
| 577 | + "GET", |
| 578 | + 500, |
| 579 | + 0, |
| 580 | + 1, |
| 581 | + rpc_service="Secrets Manager", |
| 582 | + remote_service="AWS::SecretsManager", |
| 583 | + remote_operation="GetSecretValue", |
| 584 | + remote_resource_type="AWS::SecretsManager::Secret", |
| 585 | + remote_resource_identifier="nonexistent-secret", |
| 586 | + cloudformation_primary_identifier="arn:aws:secretsmanager:us-west-2:000000000000:secret:nonexistent-secret", |
| 587 | + request_specific_attributes={ |
| 588 | + _AWS_SECRET_ARN: "arn:aws:secretsmanager:us-west-2:000000000000:secret:nonexistent-secret", |
| 589 | + }, |
| 590 | + span_name="Secrets Manager.GetSecretValue", |
| 591 | + ) |
| 592 | + |
535 | 593 | @override |
536 | 594 | def _assert_aws_span_attributes(self, resource_scope_spans: List[ResourceScopeSpan], path: str, **kwargs) -> None: |
537 | 595 | target_spans: List[Span] = [] |
@@ -571,9 +629,15 @@ def _assert_aws_attributes( |
571 | 629 | if remote_resource_type != "None": |
572 | 630 | self._assert_str_attribute(attributes_dict, AWS_REMOTE_RESOURCE_TYPE, remote_resource_type) |
573 | 631 | if remote_resource_identifier != "None": |
574 | | - self._assert_str_attribute(attributes_dict, AWS_REMOTE_RESOURCE_IDENTIFIER, remote_resource_identifier) |
| 632 | + if self._is_valid_regex(remote_resource_identifier): |
| 633 | + self._assert_match_attribute(attributes_dict, AWS_REMOTE_RESOURCE_IDENTIFIER, remote_resource_identifier) |
| 634 | + else: |
| 635 | + self._assert_str_attribute(attributes_dict, AWS_REMOTE_RESOURCE_IDENTIFIER, remote_resource_identifier) |
575 | 636 | if cloudformation_primary_identifier != "None": |
576 | | - self._assert_str_attribute(attributes_dict, AWS_CLOUDFORMATION_PRIMARY_IDENTIFIER, cloudformation_primary_identifier) |
| 637 | + if self._is_valid_regex(remote_resource_identifier): |
| 638 | + self._assert_match_attribute(attributes_dict, AWS_CLOUDFORMATION_PRIMARY_IDENTIFIER, cloudformation_primary_identifier) |
| 639 | + else: |
| 640 | + self._assert_str_attribute(attributes_dict, AWS_CLOUDFORMATION_PRIMARY_IDENTIFIER, cloudformation_primary_identifier) |
577 | 641 | # See comment above AWS_LOCAL_OPERATION |
578 | 642 | self._assert_str_attribute(attributes_dict, AWS_SPAN_KIND, span_kind) |
579 | 643 |
|
@@ -623,7 +687,9 @@ def _assert_semantic_conventions_attributes( |
623 | 687 | else: |
624 | 688 | self._assert_array_value_ddb_table_name(attributes_dict, key, value) |
625 | 689 | for key, value in response_specific_attributes.items(): |
626 | | - if isinstance(value, str): |
| 690 | + if self._is_valid_regex(value): |
| 691 | + self._assert_match_attribute(attributes_dict, key, value) |
| 692 | + elif isinstance(value, str): |
627 | 693 | self._assert_str_attribute(attributes_dict, key, value) |
628 | 694 | elif isinstance(value, int): |
629 | 695 | self._assert_int_attribute(attributes_dict, key, value) |
@@ -665,7 +731,10 @@ def _assert_metric_attributes( |
665 | 731 | if remote_resource_type != "None": |
666 | 732 | self._assert_str_attribute(attribute_dict, AWS_REMOTE_RESOURCE_TYPE, remote_resource_type) |
667 | 733 | if remote_resource_identifier != "None": |
668 | | - self._assert_str_attribute(attribute_dict, AWS_REMOTE_RESOURCE_IDENTIFIER, remote_resource_identifier) |
| 734 | + if self._is_valid_regex(remote_resource_identifier): |
| 735 | + self._assert_match_attribute(attribute_dict, AWS_REMOTE_RESOURCE_IDENTIFIER, remote_resource_identifier) |
| 736 | + else: |
| 737 | + self._assert_str_attribute(attribute_dict, AWS_REMOTE_RESOURCE_IDENTIFIER, remote_resource_identifier) |
669 | 738 | self.check_sum(metric_name, dependency_dp.sum, expected_sum) |
670 | 739 |
|
671 | 740 | attribute_dict: Dict[str, AnyValue] = self._get_attributes_dict(service_dp.attributes) |
|
0 commit comments