High-priority fixes: - Message length validation and splitting (4096 char limit) - Empty chat_id validation to prevent silent failures - Health check timeout (5s) to prevent service hangs Testing infrastructure: - Comprehensive test suite (20+ automated tests) - Quick smoke test script - Test message generator - Complete testing documentation All changes are backward compatible. Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
99 lines
3.6 KiB
Python
Executable file
99 lines
3.6 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
"""
|
|
Test message generator for Telegram integration testing.
|
|
Generates messages of various lengths for testing message splitting.
|
|
"""
|
|
|
|
import sys
|
|
|
|
def generate_short_message():
|
|
"""Generate a short message (< 100 chars)"""
|
|
return "Hello! This is a short test message."
|
|
|
|
def generate_medium_message():
|
|
"""Generate a medium message (~ 1000 chars)"""
|
|
return "This is a medium-length test message. " * 25
|
|
|
|
def generate_long_message():
|
|
"""Generate a long message (~ 5000 chars, > 4096 limit)"""
|
|
return "This is a very long test message that will be split into multiple chunks. " * 70
|
|
|
|
def generate_exact_limit_message():
|
|
"""Generate a message exactly at 4096 char limit"""
|
|
base = "x" * 4096
|
|
return base
|
|
|
|
def generate_over_limit_message():
|
|
"""Generate a message just over the 4096 char limit"""
|
|
return "x" * 4200
|
|
|
|
def generate_multi_chunk_message():
|
|
"""Generate a message that requires 3+ chunks"""
|
|
return "Lorem ipsum dolor sit amet, consectetur adipiscing elit. " * 250
|
|
|
|
def generate_newline_message():
|
|
"""Generate a message with many newlines (tests newline splitting)"""
|
|
return "Line of text\n" * 400
|
|
|
|
def generate_word_boundary_message():
|
|
"""Generate a message with clear word boundaries"""
|
|
return "word " * 1000
|
|
|
|
def print_message_info(message, name):
|
|
"""Print information about a message"""
|
|
print(f"\n{'='*60}")
|
|
print(f"{name}")
|
|
print(f"{'='*60}")
|
|
print(f"Length: {len(message)} characters")
|
|
print(f"Will split: {'Yes' if len(message) > 4096 else 'No'}")
|
|
if len(message) > 4096:
|
|
chunks = (len(message) + 4095) // 4096
|
|
print(f"Estimated chunks: {chunks}")
|
|
print(f"{'='*60}")
|
|
print(message[:200] + "..." if len(message) > 200 else message)
|
|
print(f"{'='*60}\n")
|
|
|
|
def main():
|
|
if len(sys.argv) > 1:
|
|
test_type = sys.argv[1].lower()
|
|
else:
|
|
print("Usage: python3 generate_test_messages.py [type]")
|
|
print("\nAvailable types:")
|
|
print(" short - Short message (< 100 chars)")
|
|
print(" medium - Medium message (~1000 chars)")
|
|
print(" long - Long message (~5000 chars, requires splitting)")
|
|
print(" exact - Exactly 4096 chars")
|
|
print(" over - Just over 4096 chars")
|
|
print(" multi - Very long (3+ chunks)")
|
|
print(" newline - Many newlines (tests line splitting)")
|
|
print(" word - Clear word boundaries")
|
|
print(" all - Show info for all types")
|
|
print("\nExample:")
|
|
print(" python3 generate_test_messages.py long")
|
|
sys.exit(1)
|
|
|
|
messages = {
|
|
'short': ('Short Message', generate_short_message()),
|
|
'medium': ('Medium Message', generate_medium_message()),
|
|
'long': ('Long Message', generate_long_message()),
|
|
'exact': ('Exact Limit (4096)', generate_exact_limit_message()),
|
|
'over': ('Just Over Limit', generate_over_limit_message()),
|
|
'multi': ('Multi-Chunk Message', generate_multi_chunk_message()),
|
|
'newline': ('Newline Test', generate_newline_message()),
|
|
'word': ('Word Boundary Test', generate_word_boundary_message()),
|
|
}
|
|
|
|
if test_type == 'all':
|
|
for name, msg in messages.values():
|
|
print_message_info(msg, name)
|
|
elif test_type in messages:
|
|
name, msg = messages[test_type]
|
|
# Just print the message for piping to Telegram
|
|
print(msg)
|
|
else:
|
|
print(f"Error: Unknown type '{test_type}'")
|
|
print("Run without arguments to see available types.")
|
|
sys.exit(1)
|
|
|
|
if __name__ == '__main__':
|
|
main()
|