msw-azure-kusto
v1.1.0
Published
TypeScript Azure Data Explorer (Kusto) HTTP emulator for local testing with MSW.
Maintainers
Readme
msw-azure-kusto
TypeScript Azure Data Explorer (Kusto) HTTP emulator for local testing with MSW.
Disclaimer: Primarily coded by Codex and Opus, this emulator is not feature complete. Only inline ingestion and URI-based CSV ingestion.
Usage
- Install
msw(https://mswjs.io/docs/getting-started) - Install
msw-azure-kusto - Import
handlersfrommsw-azure-kustoand pass them to your MSW setup
CLI emulator
You can run a standalone local Kusto emulator with npx:
npx msw-azure-kusto --port 80 --dashboard 4000Flags:
--port(-p) HTTP port for the Kusto emulator endpoints.--dashboardOptional dashboard UI port.
Install
npm install msw-azure-kustoSetup
import { setupServer } from "msw/node";
import { handlers } from "msw-azure-kusto";
export const server = setupServer(...handlers());azure-kusto-data client example
msw-azure-kusto emulates Kusto REST endpoints such as https://<cluster>/v1/rest/mgmt and https://<cluster>/v2/rest/query.
Use your normal azure-kusto-data client setup and point it at a mocked cluster host.
import { Client, KustoConnectionStringBuilder } from "azure-kusto-data";
import { setupServer } from "msw/node";
import { handlers } from "msw-azure-kusto";
const server = setupServer(...handlers());
server.listen();
const cluster = "https://example.kusto.windows.net";
const kcsb = KustoConnectionStringBuilder.withTokenProvider(cluster, async () => "mock-token");
const client = new Client(kcsb);
await client.executeMgmt("Samples", ".create table StormEvents (EventId:int, State:string, Damage:int)");
await client.executeMgmt("Samples", ".ingest inline into table StormEvents <| 1,WA,10\n2,CA,20\n3,WA,5");
const response = await client.executeQuery(
"Samples",
"StormEvents | where State == 'WA' | project EventId, State",
);
const primary = response.primaryResults[0];
const json = primary?.toJSON() as { data: Array<Record<string, unknown>> };
console.log(json.data);
await client.close();
server.close();Supported hosts:
https://*.kusto.windows.nethttps://kusto.local
Snapshot tests
Snapshots are in src/tests/snapshots/commands.test.snapshot.ts, based on .kql files in src/tests/commands.
Set CLUSTER in your shell or .env before running command tests, for example:
export CLUSTER="https://kusto.local"Run snapshot-backed command tests
node --run build
node --env-file-if-exists=.env --test dist/tests/commands.test.jsTo run only medium guide command cases:
node --env-file-if-exists=.env --test dist/tests/commands.test.js --test-name-pattern "command - medium-guide"Update snapshots
node --run build
node --run test-update-snapshots