fix: handle ambiguous prompt transport failures
This commit is contained in:
@@ -2,36 +2,56 @@ import { afterEach, describe, expect, it, vi } from 'vitest';
|
||||
|
||||
import { createOpenCodeNetworkRuntime } from './network-runtime.js';
|
||||
|
||||
const createRuntime = () => createOpenCodeNetworkRuntime({
|
||||
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();
|
||||
vi.unstubAllGlobals();
|
||||
globalThis.fetch = originalFetch;
|
||||
});
|
||||
|
||||
it('clears the probe abort timer when readiness fetch rejects', async () => {
|
||||
vi.useFakeTimers();
|
||||
vi.setSystemTime(0);
|
||||
vi.stubGlobal('fetch', vi.fn(async () => {
|
||||
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 vi.advanceTimersByTimeAsync(100);
|
||||
await expect(readyPromise).resolves.toBe(false);
|
||||
});
|
||||
|
||||
expect(vi.getTimerCount()).toBe(0);
|
||||
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');
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user