Skip to content

Health Check Utility

← Back to Testing

This example demonstrates how to use checkServerHealth() to verify mock server availability before running tests. The function checks if a server is reachable by performing a health check request. This example works whether or not mock servers are running - it just reports the status of each server.

  • No LocalNet required
  • Mock server optional (reports status either way)

From the repository root:

Terminal window
cd examples
npm run example testing/03-health-check.ts

View source on GitHub

03-health-check.ts
/**
* Example: Health Check Utility
*
* This example demonstrates how to use checkServerHealth() to verify
* mock server availability before running tests. The function checks
* if a server is reachable by performing a health check request.
*
* This example works whether or not mock servers are running - it just
* reports the status of each server.
*
* Prerequisites:
* - No LocalNet required
* - Mock server optional (reports status either way)
*/
import {
checkServerHealth,
EXTERNAL_URL_ENV_VARS,
MOCK_PORTS,
} from '@algorandfoundation/algokit-utils/testing'
import { printHeader, printInfo, printStep, printSuccess } from '../shared/utils.js'
/**
* Get the URL for a mock server, checking environment variable first,
* then falling back to localhost with default port.
*/
function getServerUrl(clientType: 'algod' | 'indexer' | 'kmd'): string {
const envVar = EXTERNAL_URL_ENV_VARS[clientType]
const envValue = process.env[envVar]
if (envValue) {
return envValue
}
return `http://localhost:${MOCK_PORTS[clientType].host}`
}
async function main() {
printHeader('Health Check Utility Example')
// Step 1: Explain checkServerHealth function
printStep(1, 'checkServerHealth() - Check if a server is reachable')
printInfo('Function signature: checkServerHealth(url: string, timeout?: number): Promise<boolean>')
printInfo(' - url: The base URL of the server to check')
printInfo(' - timeout: Maximum time to wait (default: 5000ms)')
printInfo(' - Returns: true if server responds, false otherwise')
printInfo('')
printInfo('The function sends a request to /health endpoint and considers')
printInfo('any HTTP response (including 500) as the server being reachable.')
// Step 2: Check algod mock server with default timeout
printStep(2, 'Check algod mock server (default 5000ms timeout)')
const algodUrl = getServerUrl('algod')
printInfo(`URL: ${algodUrl}`)
printInfo(` (from ${EXTERNAL_URL_ENV_VARS.algod} or localhost:${MOCK_PORTS.algod.host})`)
const algodHealthy = await checkServerHealth(algodUrl)
printInfo(`Status: ${algodHealthy ? '✓ Server is reachable' : '✗ Server is not reachable'}`)
// Step 3: Check indexer mock server with custom timeout
printStep(3, 'Check indexer mock server (custom 2000ms timeout)')
const indexerUrl = getServerUrl('indexer')
printInfo(`URL: ${indexerUrl}`)
printInfo(` (from ${EXTERNAL_URL_ENV_VARS.indexer} or localhost:${MOCK_PORTS.indexer.host})`)
const indexerHealthy = await checkServerHealth(indexerUrl, 2000)
printInfo(`Status: ${indexerHealthy ? '✓ Server is reachable' : '✗ Server is not reachable'}`)
// Step 4: Check kmd mock server with custom timeout
printStep(4, 'Check kmd mock server (custom 2000ms timeout)')
const kmdUrl = getServerUrl('kmd')
printInfo(`URL: ${kmdUrl}`)
printInfo(` (from ${EXTERNAL_URL_ENV_VARS.kmd} or localhost:${MOCK_PORTS.kmd.host})`)
const kmdHealthy = await checkServerHealth(kmdUrl, 2000)
printInfo(`Status: ${kmdHealthy ? '✓ Server is reachable' : '✗ Server is not reachable'}`)
// Step 5: Summary of health check results
printStep(5, 'Health Check Summary')
printInfo('Server Status:')
printInfo(` - algod (${algodUrl}): ${algodHealthy ? 'REACHABLE' : 'NOT REACHABLE'}`)
printInfo(` - indexer (${indexerUrl}): ${indexerHealthy ? 'REACHABLE' : 'NOT REACHABLE'}`)
printInfo(` - kmd (${kmdUrl}): ${kmdHealthy ? 'REACHABLE' : 'NOT REACHABLE'}`)
printInfo('')
// Provide helpful guidance based on results
const anyServerUp = algodHealthy || indexerHealthy || kmdHealthy
const allServersUp = algodHealthy && indexerHealthy && kmdHealthy
if (allServersUp) {
printInfo('All mock servers are running and ready for testing!')
} else if (anyServerUp) {
printInfo('Some mock servers are running. Start the others if needed for your tests.')
} else {
printInfo('No mock servers are currently running.')
printInfo('To start mock servers for local development:')
printInfo(' 1. Use algokit-polytest CLI to start servers')
printInfo(' 2. Or set environment variables to external server URLs:')
printInfo(` export ${EXTERNAL_URL_ENV_VARS.algod}=http://your-server:8000`)
printInfo(` export ${EXTERNAL_URL_ENV_VARS.indexer}=http://your-server:8002`)
printInfo(` export ${EXTERNAL_URL_ENV_VARS.kmd}=http://your-server:8001`)
}
printSuccess('Health check example completed!')
}
main().catch(console.error)