zeroclaw/test_helpers/generate_test_messages.py
Abdul Samad 4fd1408034
fix(telegram): add message splitting, timeout, and validation fixes (#246)
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>
2026-02-16 05:59:11 -05:00

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()