# Test Clients

Test clients for the Dexorder trading system.

## History Client

Tests the historical OHLC data request/response pattern between clients, Flink, and ingestors.

### Quick Start

```bash
cd history_client
./run-test.sh
```

This will:
1. Start all required services (Kafka, Flink, Ingestor)
2. Wait for services to initialize
3. Run the test client to query historical data
4. Display the results

### What it tests

- **ZMQ Communication**: Client → Flink REQ/REP pattern (port 5559)
- **Work Distribution**: Flink → Ingestor PUB/SUB with exchange prefix filtering (port 5555)
- **Response Channel**: Ingestor → Flink DEALER/ROUTER pattern (port 5556)
- **Data Flow**: Request → Ingestor fetches data → Response back to Flink → Response to client

### Expected Flow

1. **Client** sends OHLCRequest to Flink (REQ/REP)
   - Ticker: `BTC/USDT.BINANCE`
   - Period: 3600s (1 hour)
   - Range: Jan 1-7, 2026

2. **Flink** publishes DataRequest to ingestor work queue (PUB/SUB)
   - Topic prefix: `BINANCE:`
   - Any ingestor subscribed to BINANCE can respond

3. **Ingestor** receives request, fetches data, sends back response
   - Uses CCXT to fetch from exchange
   - Sends DataResponse via DEALER socket
   - Also writes to Kafka for Flink processing

4. **Flink** receives response, sends back to client
   - Matches response by request_id
   - Returns data or error to waiting client

### Manual Testing

Run the Python client directly:

```bash
cd history_client
pip install pyzmq
python client.py
```

Edit `client.py` to customize:
- Flink hostname and port
- Ticker symbol
- Time range
- Period (e.g., 3600 for 1h, 86400 for 1d)

## Docker Compose Profiles

The test client uses a Docker Compose profile to avoid starting automatically:

```bash
# Start all services
docker-compose up -d

# Run test client
docker-compose --profile test up history-test-client

# Or start everything including test
docker-compose --profile test up
```

## Troubleshooting

### Service logs

```bash
docker-compose logs -f ingestor
docker-compose logs -f flink-jobmanager
```

### Check ZMQ ports

```bash
# From inside Flink container
netstat -tlnp | grep 555
```

### Verify ingestor subscriptions

Check ingestor logs for:
```
Subscribed to exchange prefix: BINANCE:
Subscribed to exchange prefix: COINBASE:
```

### Test without Docker

1. Start Kafka: `docker-compose up -d kafka`
2. Build and run Flink app locally
3. Run ingestor: `cd ingestor && npm start`
4. Run test: `cd test/history_client && python client.py`
