Mock Server Connection
Description
Section titled “Description”This example demonstrates how to use getMockServer() to connect to a mock server and understand the MockServer interface. It shows:
- The MockServer interface properties (baseUrl and clientType)
- How getMockServer reads from environment variables
- Proper error handling for missing env vars and unreachable servers This example requires MOCK_ALGOD_URL environment variable and a running mock server for a successful connection - otherwise it shows helpful error messages.
Prerequisites
Section titled “Prerequisites”- No LocalNet required
MOCK_ALGOD_URLenv var and running mock server for successful connection
Run This Example
Section titled “Run This Example”From the repository root:
cd examplesnpm run example testing/04-mock-server-connection.ts/** * Example: Mock Server Connection * * This example demonstrates how to use getMockServer() to connect to a mock * server and understand the MockServer interface. It shows: * - The MockServer interface properties (baseUrl and clientType) * - How getMockServer reads from environment variables * - Proper error handling for missing env vars and unreachable servers * * This example requires MOCK_ALGOD_URL environment variable and a running * mock server for a successful connection - otherwise it shows helpful error messages. * * Prerequisites: * - No LocalNet required * - `MOCK_ALGOD_URL` env var and running mock server for successful connection */
import { checkServerHealth, EXTERNAL_URL_ENV_VARS, getMockServer, MOCK_PORTS, type MockServer,} from '@algorandfoundation/algokit-utils/testing';import { printError, printHeader, printInfo, printStep, printSuccess } from '../shared/utils.js';
async function main() { printHeader('Mock Server Connection Example');
// Step 1: Document the MockServer interface printStep(1, 'MockServer Interface'); printInfo('The MockServer interface has two properties:'); printInfo(' interface MockServer {'); printInfo(' baseUrl: string // Base URL of the mock server'); printInfo(' clientType: ClientType // Type of client: "algod" | "indexer" | "kmd"'); printInfo(' }'); printInfo(''); printInfo('Use this interface to connect to mock servers for testing.');
// Step 2: Explain how getMockServer reads environment variables printStep(2, 'Environment Variable Configuration'); printInfo('getMockServer() reads URLs from environment variables:'); printInfo(` - algod: ${EXTERNAL_URL_ENV_VARS.algod}`); printInfo(` - indexer: ${EXTERNAL_URL_ENV_VARS.indexer}`); printInfo(` - kmd: ${EXTERNAL_URL_ENV_VARS.kmd}`); printInfo(''); printInfo('Default ports when running locally:'); printInfo(` - algod: localhost:${MOCK_PORTS.algod.host}`); printInfo(` - indexer: localhost:${MOCK_PORTS.indexer.host}`); printInfo(` - kmd: localhost:${MOCK_PORTS.kmd.host}`);
// Step 3: Check server health before attempting connection printStep(3, 'Pre-connection Health Check'); const envVar = EXTERNAL_URL_ENV_VARS.algod; const envValue = process.env[envVar];
if (envValue) { printInfo(`Environment variable ${envVar} is set to: ${envValue}`); printInfo('Checking server health before connecting...'); const isHealthy = await checkServerHealth(envValue); printInfo(`Server health: ${isHealthy ? 'REACHABLE' : 'NOT REACHABLE'}`); } else { printInfo(`Environment variable ${envVar} is NOT set`); printInfo('Will demonstrate error handling below.'); }
// Step 4: Demonstrate getMockServer() with proper error handling printStep(4, 'Connecting to Algod Mock Server'); printInfo("Attempting to connect using getMockServer('algod')...");
try { const server: MockServer = await getMockServer('algod');
// Success case - display MockServer properties printSuccess('Successfully connected to mock server!'); printInfo(''); printInfo('MockServer instance properties:'); printInfo(` baseUrl: ${server.baseUrl}`); printInfo(` clientType: ${server.clientType}`); printInfo(''); printInfo('You can now use this server to create an AlgodClient:'); printInfo( ' const client = new AlgodClient({ baseUrl: server.baseUrl, token: DEFAULT_TOKEN })', ); } catch (error) { // Handle connection failures gracefully const errorMessage = error instanceof Error ? error.message : String(error);
if (errorMessage.includes('is not set')) { // Case: Environment variable not set printError('Connection failed: Environment variable not set'); printInfo(''); printInfo('Error message:'); printInfo(` ${errorMessage}`); printInfo(''); printInfo('To fix this, set the environment variable:'); printInfo(` export ${envVar}=http://localhost:${MOCK_PORTS.algod.host}`); } else if (errorMessage.includes('not reachable')) { // Case: Server not reachable printError('Connection failed: Server not reachable'); printInfo(''); printInfo('Error message:'); printInfo(` ${errorMessage}`); printInfo(''); printInfo('To fix this:'); printInfo(' 1. Start the mock server using algokit-polytest CLI'); printInfo(' 2. Or ensure the server at the configured URL is running'); } else { // Case: Unexpected error printError('Connection failed: Unexpected error'); printInfo(''); printInfo('Error message:'); printInfo(` ${errorMessage}`); } }
// Step 5: Summary printStep(5, 'Summary'); printInfo('Key takeaways for using getMockServer():'); printInfo(' 1. Set the appropriate environment variable (MOCK_ALGOD_URL, etc.)'); printInfo(' 2. Ensure the mock server is running and reachable'); printInfo(' 3. Use try/catch to handle connection failures gracefully'); printInfo(' 4. The returned MockServer provides baseUrl and clientType'); printInfo(' 5. Use checkServerHealth() for pre-connection validation');
printSuccess('Mock server connection example completed!');}
main().catch(console.error);