#!/usr/bin/env python3 """ Direct gRPC test for action mappings - bypasses REST API """ import sys import os # Add protos directory to path sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'src', 'api', 'protos')) import grpc from protos import configuration_pb2, configuration_pb2_grpc def test_action_mappings(): print("=" * 60) print("Direct gRPC Test: Action Mappings") print("=" * 60) # Connect to gRPC server print("\n[1/2] Connecting to SDK Bridge (localhost:50051)...") try: channel = grpc.insecure_channel('localhost:50051') stub = configuration_pb2_grpc.ConfigurationServiceStub(channel) print(" ✅ Connected") except Exception as e: print(f" ❌ Connection failed: {e}") return 1 # Call ReadActionMappings print("\n[2/2] Calling ReadActionMappings...") try: request = configuration_pb2.ReadActionMappingsRequest() response = stub.ReadActionMappings(request, timeout=30.0) print(" ✅ Request successful") except grpc.RpcError as e: print(f" ❌ gRPC error: {e.code()} - {e.details()}") return 1 except Exception as e: print(f" ❌ Error: {e}") return 1 # Display results print("\n" + "=" * 60) print("RESULTS") print("=" * 60) print(f"\nSuccess: {response.success}") print(f"Total Count: {response.total_count}") if response.error_message: print(f"Error Message: {response.error_message}") if response.total_count > 0: total_actions = sum(len(m.actions) for m in response.mappings) print(f"\n✅ SUCCESS: Found {response.total_count} Rules markers with {total_actions} total actions") print(f"\nFirst 5 mappings:") for i, mapping in enumerate(list(response.mappings)[:5], 1): print(f"\n [{i}] {mapping.name} at offset {mapping.start_offset}") print(f" Actions ({len(mapping.actions)}):") for action in list(mapping.actions)[:3]: print(f" - {action}") if len(mapping.actions) > 3: print(f" ... and {len(mapping.actions) - 3} more") if response.total_count > 5: print(f"\n ... and {response.total_count - 5} more Rules markers") print(f"\n{'='*60}") print(f"✅ TEST PASSED: Action mappings gRPC service is working!") print(f"{'='*60}") return 0 else: print(f"\n❌ FAILED: No mappings found (expected ~60)") print(f"\n{'='*60}") print(f"❌ TEST FAILED: Action mappings returns empty array") print(f"{'='*60}") return 1 if __name__ == "__main__": sys.exit(test_action_mappings())