Skip to content

Commit 6924f72

Browse files
committed
Apply feature parity with Java contract tests.
1 parent 634398c commit 6924f72

File tree

2 files changed

+76
-65
lines changed

2 files changed

+76
-65
lines changed

contract-tests/images/applications/botocore/botocore_server.py

Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import requests
1313
from botocore.client import BaseClient
1414
from botocore.config import Config
15-
from botocore.exceptions import ClientError
1615
from typing_extensions import Tuple, override
1716

1817
_PORT: int = 8080
@@ -210,7 +209,7 @@ def _handle_kinesis_request(self) -> None:
210209

211210
def _handle_bedrock_request(self) -> None:
212211
# Localstack does not support Bedrock related services.
213-
# we inject inject_200_success and inject_500_error directly into the API call
212+
# we inject inject_200_success directly into the API call
214213
# to make sure we receive http response with expected status code and attributes.
215214
bedrock_client: BaseClient = boto3.client("bedrock", endpoint_url=_AWS_SDK_ENDPOINT, region_name=_AWS_REGION)
216215
bedrock_agent_client: BaseClient = boto3.client(
@@ -222,28 +221,20 @@ def _handle_bedrock_request(self) -> None:
222221
bedrock_agent_runtime_client: BaseClient = boto3.client(
223222
"bedrock-agent-runtime", endpoint_url=_AWS_SDK_ENDPOINT, region_name=_AWS_REGION
224223
)
225-
if self.in_path(_ERROR):
226-
error_client: BaseClient = boto3.client(
227-
"bedrock-agent", endpoint_url=_ERROR_ENDPOINT, region_name=_AWS_REGION
224+
if self.in_path("getknowledgebase/get_knowledge_base"):
225+
set_main_status(200)
226+
bedrock_agent_client.meta.events.register(
227+
"before-call.bedrock-agent.GetKnowledgeBase",
228+
inject_200_success,
228229
)
229-
set_main_status(400)
230-
try:
231-
error_client.get_knowledge_base(knowledgeBaseId="invalid-knowledge-base-id")
232-
except Exception as exception:
233-
print("Expected exception occurred", exception)
234-
elif self.in_path(_FAULT):
235-
set_main_status(500)
236-
try:
237-
fault_client: BaseClient = boto3.client(
238-
"bedrock-agent", endpoint_url=_FAULT_ENDPOINT, region_name=_AWS_REGION, config=_NO_RETRY_CONFIG
239-
)
240-
fault_client.meta.events.register(
241-
"before-call.bedrock-agent.GetDataSource",
242-
lambda **kwargs: inject_500_error("GetDataSource", **kwargs),
243-
)
244-
fault_client.get_data_source(knowledgeBaseId="TESTKBSEID", dataSourceId="DATASURCID")
245-
except Exception as exception:
246-
print("Expected exception occurred", exception)
230+
bedrock_agent_client.get_knowledge_base(knowledgeBaseId="invalid-knowledge-base-id")
231+
elif self.in_path("getdatasource/get_data_source"):
232+
set_main_status(200)
233+
bedrock_agent_client.meta.events.register(
234+
"before-call.bedrock-agent.GetDataSource",
235+
inject_200_success,
236+
)
237+
bedrock_agent_client.get_data_source(knowledgeBaseId="TESTKBSEID", dataSourceId="DATASURCID")
247238
elif self.in_path("getagent/get-agent"):
248239
set_main_status(200)
249240
bedrock_agent_client.meta.events.register(
@@ -272,6 +263,18 @@ def _handle_bedrock_request(self) -> None:
272263
sessionId="testSessionId",
273264
inputText="Invoke agent sample input text",
274265
)
266+
elif self.in_path("retrieve/retrieve"):
267+
set_main_status(200)
268+
bedrock_agent_runtime_client.meta.events.register(
269+
"before-call.bedrock-agent-runtime.Retrieve",
270+
inject_200_success,
271+
)
272+
bedrock_agent_runtime_client.retrieve(
273+
knowledgeBaseId="test-knowledge-base-id",
274+
retrievalQuery={
275+
"text": "an example of retrieve query",
276+
},
277+
)
275278
elif self.in_path("invokemodel/invoke-model"):
276279
set_main_status(200)
277280
bedrock_runtime_client.meta.events.register(
@@ -368,16 +371,6 @@ def inject_200_success(**kwargs):
368371
return http_response, response_body
369372

370373

371-
def inject_500_error(api_name, **kwargs):
372-
raise ClientError(
373-
{
374-
"Error": {"Code": "InternalServerError", "Message": "Internal Server Error"},
375-
"ResponseMetadata": {"HTTPStatusCode": 500, "RequestId": "mock-request-id"},
376-
},
377-
api_name,
378-
)
379-
380-
381374
def main() -> None:
382375
prepare_aws_server()
383376
server_address: Tuple[str, int] = ("0.0.0.0", _PORT)

contract-tests/tests/test/amazon/botocore/botocore_test.py

Lines changed: 50 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@
3131
_AWS_KINESIS_STREAM_NAME: str = "aws.kinesis.stream.name"
3232
_AWS_BEDROCK_AGENT_ID: str = "aws.bedrock.agent.id"
3333
_AWS_BEDROCK_GUARDRAIL_ID: str = "aws.bedrock.guardrail.id"
34-
_AWS_BEDROCK_KNOWLEDGEBASE_ID: str = "aws.bedrock.knowledge_base.id"
35-
_AWS_BEDROCK_DATASOURCE_ID: str = "aws.bedrock.data_source.id"
34+
_AWS_BEDROCK_KNOWLEDGE_BASE_ID: str = "aws.bedrock.knowledge_base.id"
35+
_AWS_BEDROCK_DATA_SOURCE_ID: str = "aws.bedrock.data_source.id"
3636
_GEN_AI_REQUEST_MODEL: str = "gen_ai.request.model"
3737

3838

@@ -377,7 +377,7 @@ def test_kinesis_fault(self):
377377
span_name="Kinesis.PutRecord",
378378
)
379379

380-
def test_bedrock_invoke_model(self):
380+
def test_bedrock_runtime_invoke_model(self):
381381
self.do_test_requests(
382382
"bedrock/invokemodel/invoke-model",
383383
"GET",
@@ -395,24 +395,6 @@ def test_bedrock_invoke_model(self):
395395
span_name="Bedrock Runtime.InvokeModel",
396396
)
397397

398-
def test_bedrock_get_agent(self):
399-
self.do_test_requests(
400-
"bedrock/getagent/get-agent",
401-
"GET",
402-
200,
403-
0,
404-
0,
405-
rpc_service="Bedrock Agent",
406-
remote_service="AWS::Bedrock",
407-
remote_operation="GetAgent",
408-
remote_resource_type="AWS::Bedrock::Agent",
409-
remote_resource_identifier="TESTAGENTID",
410-
request_specific_attributes={
411-
_AWS_BEDROCK_AGENT_ID: "TESTAGENTID",
412-
},
413-
span_name="Bedrock Agent.GetAgent",
414-
)
415-
416398
def test_bedrock_get_guardrail(self):
417399
self.do_test_requests(
418400
"bedrock/getguardrail/get-guardrail",
@@ -431,7 +413,7 @@ def test_bedrock_get_guardrail(self):
431413
span_name="Bedrock.GetGuardrail",
432414
)
433415

434-
def test_bedrock_invoke_agent(self):
416+
def test_bedrock_agent_runtime_invoke_agent(self):
435417
self.do_test_requests(
436418
"bedrock/invokeagent/invoke_agent",
437419
"GET",
@@ -449,38 +431,74 @@ def test_bedrock_invoke_agent(self):
449431
span_name="Bedrock Agent Runtime.InvokeAgent",
450432
)
451433

452-
def test_bedrock_error(self):
434+
def test_bedrock_agent_runtime_retrieve(self):
453435
self.do_test_requests(
454-
"bedrock/error",
436+
"bedrock/retrieve/retrieve",
455437
"GET",
456-
400,
457-
1,
438+
200,
439+
0,
440+
0,
441+
rpc_service="Bedrock Agent Runtime",
442+
remote_service="AWS::Bedrock",
443+
remote_operation="Retrieve",
444+
remote_resource_type="AWS::Bedrock::KnowledgeBase",
445+
remote_resource_identifier="test-knowledge-base-id",
446+
request_specific_attributes={
447+
_AWS_BEDROCK_KNOWLEDGE_BASE_ID: "test-knowledge-base-id",
448+
},
449+
span_name="Bedrock Agent Runtime.Retrieve",
450+
)
451+
452+
def test_bedrock_agent_get_agent(self):
453+
self.do_test_requests(
454+
"bedrock/getagent/get-agent",
455+
"GET",
456+
200,
457+
0,
458+
0,
459+
rpc_service="Bedrock Agent",
460+
remote_service="AWS::Bedrock",
461+
remote_operation="GetAgent",
462+
remote_resource_type="AWS::Bedrock::Agent",
463+
remote_resource_identifier="TESTAGENTID",
464+
request_specific_attributes={
465+
_AWS_BEDROCK_AGENT_ID: "TESTAGENTID",
466+
},
467+
span_name="Bedrock Agent.GetAgent",
468+
)
469+
470+
def test_bedrock_agent_get_knowledge_base(self):
471+
self.do_test_requests(
472+
"bedrock/getknowledgebase/get_knowledge_base",
473+
"GET",
474+
200,
475+
0,
458476
0,
459477
rpc_service="Bedrock Agent",
460478
remote_service="AWS::Bedrock",
461479
remote_operation="GetKnowledgeBase",
462480
remote_resource_type="AWS::Bedrock::KnowledgeBase",
463481
remote_resource_identifier="invalid-knowledge-base-id",
464482
request_specific_attributes={
465-
_AWS_BEDROCK_KNOWLEDGEBASE_ID: "invalid-knowledge-base-id",
483+
_AWS_BEDROCK_KNOWLEDGE_BASE_ID: "invalid-knowledge-base-id",
466484
},
467485
span_name="Bedrock Agent.GetKnowledgeBase",
468486
)
469487

470-
def test_bedrock_fault(self):
488+
def test_bedrock_agent_get_data_source(self):
471489
self.do_test_requests(
472-
"bedrock/fault",
490+
"bedrock/getdatasource/get_data_source",
473491
"GET",
474-
500,
492+
200,
493+
0,
475494
0,
476-
1,
477495
rpc_service="Bedrock Agent",
478496
remote_service="AWS::Bedrock",
479497
remote_operation="GetDataSource",
480498
remote_resource_type="AWS::Bedrock::DataSource",
481499
remote_resource_identifier="DATASURCID",
482500
request_specific_attributes={
483-
_AWS_BEDROCK_DATASOURCE_ID: "DATASURCID",
501+
_AWS_BEDROCK_DATA_SOURCE_ID: "DATASURCID",
484502
},
485503
span_name="Bedrock Agent.GetDataSource",
486504
)

0 commit comments

Comments
 (0)