207 lines
5.9 KiB
Python
207 lines
5.9 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Basic functionality test for nats_bridge.py
|
|
Tests the core classes and functions without NATS connection
|
|
"""
|
|
|
|
import sys
|
|
import os
|
|
|
|
# Add src to path for import
|
|
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src'))
|
|
|
|
from nats_bridge import (
|
|
MessagePayload,
|
|
MessageEnvelope,
|
|
smartsend,
|
|
smartreceive,
|
|
log_trace,
|
|
generate_uuid,
|
|
get_timestamp,
|
|
_serialize_data,
|
|
_deserialize_data
|
|
)
|
|
import json
|
|
|
|
|
|
def test_message_payload():
|
|
"""Test MessagePayload class"""
|
|
print("\n=== Testing MessagePayload ===")
|
|
|
|
# Test direct transport with text
|
|
payload1 = MessagePayload(
|
|
data="Hello World",
|
|
msg_type="text",
|
|
id="test-id-1",
|
|
dataname="message",
|
|
transport="direct",
|
|
encoding="base64",
|
|
size=11
|
|
)
|
|
|
|
assert payload1.id == "test-id-1"
|
|
assert payload1.dataname == "message"
|
|
assert payload1.type == "text"
|
|
assert payload1.transport == "direct"
|
|
assert payload1.encoding == "base64"
|
|
assert payload1.size == 11
|
|
print(" [PASS] MessagePayload with text data")
|
|
|
|
# Test link transport with URL
|
|
payload2 = MessagePayload(
|
|
data="http://example.com/file.txt",
|
|
msg_type="binary",
|
|
id="test-id-2",
|
|
dataname="file",
|
|
transport="link",
|
|
encoding="none",
|
|
size=1000
|
|
)
|
|
|
|
assert payload2.transport == "link"
|
|
assert payload2.data == "http://example.com/file.txt"
|
|
print(" [PASS] MessagePayload with link transport")
|
|
|
|
# Test to_dict method
|
|
payload_dict = payload1.to_dict()
|
|
assert "id" in payload_dict
|
|
assert "dataname" in payload_dict
|
|
assert "type" in payload_dict
|
|
assert "transport" in payload_dict
|
|
assert "data" in payload_dict
|
|
print(" [PASS] MessagePayload.to_dict() method")
|
|
|
|
|
|
def test_message_envelope():
|
|
"""Test MessageEnvelope class"""
|
|
print("\n=== Testing MessageEnvelope ===")
|
|
|
|
# Create payloads
|
|
payload1 = MessagePayload("Hello", "text", id="p1", dataname="msg1")
|
|
payload2 = MessagePayload("http://example.com/file", "binary", id="p2", dataname="file", transport="link")
|
|
|
|
# Create envelope
|
|
env = MessageEnvelope(
|
|
send_to="/test/subject",
|
|
payloads=[payload1, payload2],
|
|
correlation_id="test-correlation-id",
|
|
msg_id="test-msg-id",
|
|
msg_purpose="chat",
|
|
sender_name="test_sender",
|
|
receiver_name="test_receiver",
|
|
reply_to="/test/reply"
|
|
)
|
|
|
|
assert env.send_to == "/test/subject"
|
|
assert env.correlation_id == "test-correlation-id"
|
|
assert env.msg_id == "test-msg-id"
|
|
assert env.msg_purpose == "chat"
|
|
assert len(env.payloads) == 2
|
|
print(" [PASS] MessageEnvelope creation")
|
|
|
|
# Test to_json method
|
|
json_str = env.to_json()
|
|
json_data = json.loads(json_str)
|
|
assert json_data["sendTo"] == "/test/subject"
|
|
assert json_data["correlationId"] == "test-correlation-id"
|
|
assert json_data["msgPurpose"] == "chat"
|
|
assert len(json_data["payloads"]) == 2
|
|
print(" [PASS] MessageEnvelope.to_json() method")
|
|
|
|
|
|
def test_serialize_data():
|
|
"""Test _serialize_data function"""
|
|
print("\n=== Testing _serialize_data ===")
|
|
|
|
# Test text serialization
|
|
text_bytes = _serialize_data("Hello", "text")
|
|
assert isinstance(text_bytes, bytes)
|
|
assert text_bytes == b"Hello"
|
|
print(" [PASS] Text serialization")
|
|
|
|
# Test dictionary serialization
|
|
dict_data = {"key": "value", "number": 42}
|
|
dict_bytes = _serialize_data(dict_data, "dictionary")
|
|
assert isinstance(dict_bytes, bytes)
|
|
parsed = json.loads(dict_bytes.decode('utf-8'))
|
|
assert parsed["key"] == "value"
|
|
print(" [PASS] Dictionary serialization")
|
|
|
|
# Test binary serialization
|
|
binary_data = b"\x00\x01\x02"
|
|
binary_bytes = _serialize_data(binary_data, "binary")
|
|
assert binary_bytes == b"\x00\x01\x02"
|
|
print(" [PASS] Binary serialization")
|
|
|
|
# Test image serialization
|
|
image_data = bytes([1, 2, 3, 4, 5])
|
|
image_bytes = _serialize_data(image_data, "image")
|
|
assert image_bytes == image_data
|
|
print(" [PASS] Image serialization")
|
|
|
|
|
|
def test_deserialize_data():
|
|
"""Test _deserialize_data function"""
|
|
print("\n=== Testing _deserialize_data ===")
|
|
|
|
# Test text deserialization
|
|
text_bytes = b"Hello"
|
|
text_data = _deserialize_data(text_bytes, "text", "test-correlation-id")
|
|
assert text_data == "Hello"
|
|
print(" [PASS] Text deserialization")
|
|
|
|
# Test dictionary deserialization
|
|
dict_bytes = b'{"key": "value"}'
|
|
dict_data = _deserialize_data(dict_bytes, "dictionary", "test-correlation-id")
|
|
assert dict_data == {"key": "value"}
|
|
print(" [PASS] Dictionary deserialization")
|
|
|
|
# Test binary deserialization
|
|
binary_data = b"\x00\x01\x02"
|
|
binary_result = _deserialize_data(binary_data, "binary", "test-correlation-id")
|
|
assert binary_result == b"\x00\x01\x02"
|
|
print(" [PASS] Binary deserialization")
|
|
|
|
|
|
def test_utilities():
|
|
"""Test utility functions"""
|
|
print("\n=== Testing Utility Functions ===")
|
|
|
|
# Test generate_uuid
|
|
uuid1 = generate_uuid()
|
|
uuid2 = generate_uuid()
|
|
assert uuid1 != uuid2
|
|
print(f" [PASS] generate_uuid() - generated: {uuid1}")
|
|
|
|
# Test get_timestamp
|
|
timestamp = get_timestamp()
|
|
assert "T" in timestamp
|
|
print(f" [PASS] get_timestamp() - generated: {timestamp}")
|
|
|
|
|
|
def main():
|
|
"""Run all tests"""
|
|
print("=" * 60)
|
|
print("NATSBridge Python/Micropython - Basic Functionality Tests")
|
|
print("=" * 60)
|
|
|
|
try:
|
|
test_message_payload()
|
|
test_message_envelope()
|
|
test_serialize_data()
|
|
test_deserialize_data()
|
|
test_utilities()
|
|
|
|
print("\n" + "=" * 60)
|
|
print("ALL TESTS PASSED!")
|
|
print("=" * 60)
|
|
|
|
except Exception as e:
|
|
print(f"\n[FAIL] Test failed with error: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
sys.exit(1)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main() |