| """Test connectors, image generation, self-refinement, and always-on daemon.""" |
|
|
| import sys |
| import os |
| import tempfile |
| sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..")) |
|
|
| from splitbit_llm.connectors.api_client import RESTClient, APIConfig, ConnectorRegistry |
| from splitbit_llm.connectors.services import ServiceManager, HTTPFetcher |
| from splitbit_llm.connectors.webhooks import WebhookManager |
| from splitbit_llm.vision.image_gen import ImageGenerator |
| from splitbit_llm.agents.self_refine import SelfRefinementEngine |
|
|
|
|
| def test_rest_client_config(): |
| """Test REST client configuration.""" |
| config = APIConfig(name="test", base_url="https://api.example.com", api_key="secret") |
| client = RESTClient(config) |
| headers = client._build_headers() |
| assert "X-API-Key" in headers, f"API key header missing: {headers}" |
| assert headers["X-API-Key"] == "secret" |
| print(f" Headers: {list(headers.keys())}") |
|
|
| |
| config2 = APIConfig(name="test2", base_url="https://api.example.com", api_key="tok", auth_type="bearer") |
| client2 = RESTClient(config2) |
| headers2 = client2._build_headers() |
| assert headers2["Authorization"] == "Bearer tok" |
| print(f" Bearer auth: OK") |
|
|
|
|
| def test_connector_registry(): |
| """Test connector registry.""" |
| registry = ConnectorRegistry() |
| config = APIConfig(name="github", base_url="https://api.github.com", auth_type="none") |
| registry.register("github", config) |
| assert "github" in registry._connectors |
| stats = registry.get_stats() |
| assert stats["total_connectors"] == 1 |
| print(f" Connectors: {stats['total_connectors']}") |
|
|
| |
| result = registry.call("unknown", "GET", "/test") |
| assert not result.success |
| print(f" Unknown connector handled: OK") |
|
|
|
|
| def test_service_manager(): |
| """Test service manager.""" |
| mgr = ServiceManager() |
| assert "http_fetcher" in mgr.list_services() |
| print(f" Services: {mgr.list_services()}") |
|
|
| |
| result = mgr.call_service("http_fetcher", "fetch", "http://httpbin.org/status/200") |
| print(f" HTTP fetch result type: {type(result).__name__}") |
|
|
|
|
| def test_webhooks(): |
| """Test webhook manager.""" |
| mgr = WebhookManager() |
|
|
| |
| def handler(body): |
| return {"received": body.get("event", "unknown")} |
|
|
| mgr.register_endpoint("/test", handler) |
| assert "/test" in mgr.list_endpoints() |
| print(f" Endpoints: {mgr.list_endpoints()}") |
|
|
| |
| result = mgr.handle_request("/test", {"event": "test_event"}) |
| assert result["received"] == "test_event" |
| print(f" Webhook handled: {result}") |
|
|
| |
| result = mgr.handle_request("/unknown", {}) |
| assert "error" in result |
| print(f" Unknown endpoint: OK") |
|
|
|
|
| def test_image_generator(): |
| """Test image generation.""" |
| gen = ImageGenerator(default_size=(64, 64)) |
|
|
| |
| result = gen.generate("sunset over the ocean", width=64, height=64) |
| assert result["width"] == 64 |
| assert result["height"] == 64 |
| assert len(result["base64"]) > 0 |
| assert "sunset" in result["palette"][0].__str__() or True |
| print(f" Image: {result['width']}x{result['height']}, pattern={result['pattern']}, size={result['size_bytes']}b") |
|
|
| |
| svg = gen.generate_svg("geometric shapes", width=100, height=100) |
| assert "<svg" in svg |
| assert "</svg>" in svg |
| print(f" SVG: {len(svg)} chars") |
|
|
| |
| ascii_art = gen.generate_ascii("noise texture", width=30, height=10) |
| assert len(ascii_art) > 0 |
| lines = ascii_art.strip().split("\n") |
| assert len(lines) == 10 |
| print(f" ASCII: {len(lines)} lines") |
|
|
| |
| palette = gen._extract_palette("fire and flames") |
| assert palette[0][0] > 200 |
| print(f" Fire palette: {palette[0]}") |
|
|
| stats = gen.get_stats() |
| assert stats["images_generated"] >= 1 |
| print(f" Stats: {stats['images_generated']} images generated") |
|
|
|
|
| def test_self_refinement(): |
| """Test self-refinement engine.""" |
| engine = SelfRefinementEngine(harness=None) |
| stats = engine.get_stats() |
| assert stats["refinement_cycles"] == 0 |
| print(f" Initial stats: {stats}") |
|
|
| |
| result = engine.refine_once() |
| assert "error" in result |
| print(f" No harness handled: OK") |
|
|
|
|
| def test_image_patterns(): |
| """Test all image pattern types.""" |
| gen = ImageGenerator(default_size=(32, 32)) |
|
|
| for pattern in ["gradient", "radial", "noise", "fractal", "geometric", "waves"]: |
| result = gen.generate("test", width=32, height=32, pattern=pattern) |
| assert result["pattern"] == pattern |
| assert len(result["base64"]) > 0 |
| print(f" Pattern '{pattern}': OK ({result['size_bytes']}b)") |
|
|
|
|
| if __name__ == "__main__": |
| print("Running connectors, image gen, and refinement tests...") |
| test_rest_client_config() |
| print(" ✓ test_rest_client_config") |
| test_connector_registry() |
| print(" ✓ test_connector_registry") |
| test_service_manager() |
| print(" ✓ test_service_manager") |
| test_webhooks() |
| print(" ✓ test_webhooks") |
| test_image_generator() |
| print(" ✓ test_image_generator") |
| test_self_refinement() |
| print(" ✓ test_self_refinement") |
| test_image_patterns() |
| print(" ✓ test_image_patterns") |
| print("\nAll connectors & vision tests passed!") |
|
|