test_aws_cn_get_available_services_live.py•3.91 kB
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
# with the License. A copy of the License is located at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
# OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
# and limitations under the License.
"""Live test for the get_available_services tool in the AWS Documentation MCP server."""
import pytest
from awslabs.aws_documentation_mcp_server.server_aws_cn import get_available_services
class MockContext:
"""Mock context for testing."""
async def error(self, message):
"""Mock error method."""
print(f'Error: {message}')
@pytest.mark.asyncio
@pytest.mark.live
async def test_get_available_services_live():
"""Test that get_available_services can fetch real AWS China available services."""
ctx = MockContext()
# Call the tool
result = await get_available_services(ctx)
# Verify the result
assert result is not None
assert isinstance(result, str)
assert len(result) > 0
# Check that the result contains the source URL
source_url = 'https://docs.amazonaws.cn/en_us/aws/latest/userguide/services.html'
assert source_url in result
# Check for expected content in the AWS China services page
expected_content_markers = [
'Documentation by Service',
'China',
'Region',
'services',
]
for marker in expected_content_markers:
assert marker.lower() in result.lower(), f"Expected to find '{marker}' in the result"
# Check that the content is properly formatted
assert 'AWS Documentation from' in result
# Check that the result doesn't contain error messages
error_indicators = ['<e>Error', 'Failed to fetch']
for indicator in error_indicators:
assert indicator not in result, f"Found error indicator '{indicator}' in the result"
# Check for specific AWS services that should be available in China regions
common_services = [
'Amazon EC2',
'Amazon S3',
'Simple Storage Service',
'Lambda',
]
for service in common_services:
assert service.lower() in result.lower(), (
f"Expected to find '{service}' in the available services"
)
# Print a sample of the result for debugging (will show in pytest output with -v flag)
print('\nReceived AWS China available services content (first 300 chars):')
print(f'{result[:300]}...')
@pytest.mark.asyncio
@pytest.mark.live
async def test_get_available_services_content_structure():
"""Test that get_available_services returns properly structured content."""
ctx = MockContext()
# Call the tool
result = await get_available_services(ctx)
# Verify the result structure
assert result is not None
assert isinstance(result, str)
# The result should contain markdown formatting elements
markdown_elements = ['#', '##', '-', '*', '|']
markdown_present = any(element in result for element in markdown_elements)
assert markdown_present, 'Expected markdown formatting in the result'
# The result should mention differences between global AWS and AWS China
difference_indicators = ['difference', 'specific', 'region', 'availability']
difference_mentioned = any(
indicator.lower() in result.lower() for indicator in difference_indicators
)
assert difference_mentioned, (
'Expected mentions of differences between global AWS and AWS China'
)
# Print the structure analysis for debugging
print('\nContent structure analysis:')
print(f'Total content length: {len(result)} characters')