Files
openchamber/packages/web/server/lib/opencode/network-runtime.test.js
T

58 lines
1.8 KiB
JavaScript

import { afterEach, describe, expect, it, vi } from 'vitest';
import { createOpenCodeNetworkRuntime } from './network-runtime.js';
const originalFetch = globalThis.fetch;
const createRuntime = (overrides = {}) => createOpenCodeNetworkRuntime({
state: {
openCodePort: 4096,
openCodeBaseUrl: null,
openCodeApiPrefix: '',
openCodeApiPrefixDetected: false,
openCodeApiDetectionTimer: null,
...overrides.state,
},
getOpenCodeAuthHeaders: () => ({}),
configuredOpenCodeHostname: overrides.configuredOpenCodeHostname,
});
describe('OpenCode network runtime', () => {
afterEach(() => {
vi.useRealTimers();
globalThis.fetch = originalFetch;
});
it('returns false when readiness fetch rejects', async () => {
globalThis.fetch = vi.fn(async () => {
throw new Error('offline');
});
const runtime = createRuntime();
const readyPromise = runtime.waitForReady('http://127.0.0.1:4096', 1);
await expect(readyPromise).resolves.toBe(false);
});
it('builds managed OpenCode URLs against IPv4 loopback by default', () => {
const runtime = createRuntime();
expect(runtime.buildOpenCodeUrl('/provider')).toBe('http://127.0.0.1:4096/provider');
});
it('keeps external OpenCode base URLs authoritative', () => {
const runtime = createRuntime({
state: { openCodeBaseUrl: 'http://remote.example:4096' },
});
expect(runtime.buildOpenCodeUrl('/provider')).toBe('http://remote.example:4096/provider');
});
it('normalizes wildcard and IPv6 OpenCode bind hosts for local connects', () => {
expect(createRuntime({ configuredOpenCodeHostname: '0.0.0.0' }).buildOpenCodeUrl('/provider'))
.toBe('http://127.0.0.1:4096/provider');
expect(createRuntime({ configuredOpenCodeHostname: '::1' }).buildOpenCodeUrl('/provider'))
.toBe('http://[::1]:4096/provider');
});
});