@@ -1500,3 +1500,127 @@ def test_execute_code_auto_starts_session(self, mock_boto3, mock_get_data_endpoi
15001500 # Assert
15011501 client .data_plane_client .start_code_interpreter_session .assert_called_once ()
15021502 client .data_plane_client .invoke_code_interpreter .assert_called_once ()
1503+
1504+ @patch ("bedrock_agentcore.tools.code_interpreter_client.get_control_plane_endpoint" )
1505+ @patch ("bedrock_agentcore.tools.code_interpreter_client.get_data_plane_endpoint" )
1506+ @patch ("bedrock_agentcore.tools.code_interpreter_client.boto3" )
1507+ def test_create_code_interpreter_with_certificates (
1508+ self , mock_boto3 , mock_get_data_endpoint , mock_get_control_endpoint
1509+ ):
1510+ # Arrange
1511+ mock_session = MagicMock ()
1512+ mock_control_client = MagicMock ()
1513+ mock_data_client = MagicMock ()
1514+ mock_session .client .side_effect = [mock_control_client , mock_data_client ]
1515+ mock_boto3 .Session .return_value = mock_session
1516+ client = CodeInterpreter ("us-west-2" )
1517+
1518+ mock_response = {
1519+ "codeInterpreterArn" : "arn:aws:bedrock-agentcore:us-west-2:123456789012:code-interpreter/test-interp" ,
1520+ "codeInterpreterId" : "test-interp-123" ,
1521+ "createdAt" : datetime .datetime .now (),
1522+ "status" : "CREATING" ,
1523+ }
1524+ client .control_plane_client .create_code_interpreter .return_value = mock_response
1525+
1526+ certificates = [
1527+ {
1528+ "location" : {
1529+ "secretsManager" : {"secretArn" : "arn:aws:secretsmanager:us-west-2:123456789012:secret:my-ca" }
1530+ }
1531+ }
1532+ ]
1533+
1534+ # Act
1535+ result = client .create_code_interpreter (
1536+ name = "test_interpreter_with_certs" ,
1537+ execution_role_arn = "arn:aws:iam::123456789012:role/InterpreterRole" ,
1538+ certificates = certificates ,
1539+ description = "Interpreter with custom root CA" ,
1540+ )
1541+
1542+ # Assert
1543+ client .control_plane_client .create_code_interpreter .assert_called_once_with (
1544+ name = "test_interpreter_with_certs" ,
1545+ executionRoleArn = "arn:aws:iam::123456789012:role/InterpreterRole" ,
1546+ networkConfiguration = {"networkMode" : "PUBLIC" },
1547+ description = "Interpreter with custom root CA" ,
1548+ certificates = certificates ,
1549+ )
1550+ assert result == mock_response
1551+
1552+ @patch ("bedrock_agentcore.tools.code_interpreter_client.get_control_plane_endpoint" )
1553+ @patch ("bedrock_agentcore.tools.code_interpreter_client.get_data_plane_endpoint" )
1554+ @patch ("bedrock_agentcore.tools.code_interpreter_client.boto3" )
1555+ def test_create_code_interpreter_with_certificate_dataclass (
1556+ self , mock_boto3 , mock_get_data_endpoint , mock_get_control_endpoint
1557+ ):
1558+ # Arrange
1559+ mock_session = MagicMock ()
1560+ mock_control_client = MagicMock ()
1561+ mock_data_client = MagicMock ()
1562+ mock_session .client .side_effect = [mock_control_client , mock_data_client ]
1563+ mock_boto3 .Session .return_value = mock_session
1564+ client = CodeInterpreter ("us-west-2" )
1565+
1566+ mock_response = {
1567+ "codeInterpreterArn" : "arn:aws:bedrock-agentcore:us-west-2:123456789012:code-interpreter/test-interp" ,
1568+ "codeInterpreterId" : "test-interp-123" ,
1569+ "createdAt" : datetime .datetime .now (),
1570+ "status" : "CREATING" ,
1571+ }
1572+ client .control_plane_client .create_code_interpreter .return_value = mock_response
1573+
1574+ # Use a mock Certificate dataclass with to_dict method
1575+ mock_cert = MagicMock ()
1576+ mock_cert .to_dict .return_value = {
1577+ "location" : {"secretsManager" : {"secretArn" : "arn:aws:secretsmanager:us-west-2:123456789012:secret:my-ca" }}
1578+ }
1579+
1580+ # Act
1581+ result = client .create_code_interpreter (
1582+ name = "test_interpreter_with_certs" ,
1583+ execution_role_arn = "arn:aws:iam::123456789012:role/InterpreterRole" ,
1584+ certificates = [mock_cert ],
1585+ )
1586+
1587+ # Assert
1588+ mock_cert .to_dict .assert_called_once ()
1589+ client .control_plane_client .create_code_interpreter .assert_called_once_with (
1590+ name = "test_interpreter_with_certs" ,
1591+ executionRoleArn = "arn:aws:iam::123456789012:role/InterpreterRole" ,
1592+ networkConfiguration = {"networkMode" : "PUBLIC" },
1593+ certificates = [mock_cert .to_dict .return_value ],
1594+ )
1595+ assert result == mock_response
1596+
1597+ @patch ("bedrock_agentcore.tools.code_interpreter_client.get_control_plane_endpoint" )
1598+ @patch ("bedrock_agentcore.tools.code_interpreter_client.get_data_plane_endpoint" )
1599+ @patch ("bedrock_agentcore.tools.code_interpreter_client.boto3" )
1600+ def test_create_code_interpreter_without_certificates (
1601+ self , mock_boto3 , mock_get_data_endpoint , mock_get_control_endpoint
1602+ ):
1603+ """Verify that omitting certificates does not include it in the API call (backward compatibility)."""
1604+ # Arrange
1605+ mock_session = MagicMock ()
1606+ mock_control_client = MagicMock ()
1607+ mock_data_client = MagicMock ()
1608+ mock_session .client .side_effect = [mock_control_client , mock_data_client ]
1609+ mock_boto3 .Session .return_value = mock_session
1610+ client = CodeInterpreter ("us-west-2" )
1611+
1612+ mock_response = {
1613+ "codeInterpreterId" : "test-interp-123" ,
1614+ "status" : "CREATING" ,
1615+ }
1616+ client .control_plane_client .create_code_interpreter .return_value = mock_response
1617+
1618+ # Act
1619+ client .create_code_interpreter (
1620+ name = "test_interpreter_no_certs" ,
1621+ execution_role_arn = "arn:aws:iam::123456789012:role/InterpreterRole" ,
1622+ )
1623+
1624+ # Assert — certificates key should NOT be in the call
1625+ call_kwargs = client .control_plane_client .create_code_interpreter .call_args [1 ]
1626+ assert "certificates" not in call_kwargs
0 commit comments