2026-04-01 14:45:19 +08:00
|
|
|
import { describe, expect, it } from 'bun:test';
|
|
|
|
|
|
|
|
|
|
import {
|
|
|
|
|
applyForwardProxyResponseHeaders,
|
|
|
|
|
collectForwardProxyHeaders,
|
|
|
|
|
shouldForwardProxyResponseHeader,
|
|
|
|
|
} from './proxy-headers.js';
|
|
|
|
|
|
|
|
|
|
describe('OpenCode proxy header handling', () => {
|
|
|
|
|
it('drops accept-encoding from forwarded request headers', () => {
|
|
|
|
|
const headers = collectForwardProxyHeaders({
|
|
|
|
|
accept: 'application/json',
|
|
|
|
|
'accept-encoding': 'gzip, deflate, br',
|
|
|
|
|
connection: 'keep-alive',
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
expect(headers.accept).toBe('application/json');
|
|
|
|
|
expect(headers['accept-encoding']).toBeUndefined();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('drops content-encoding from forwarded response headers', () => {
|
|
|
|
|
expect(shouldForwardProxyResponseHeader('content-encoding')).toBe(false);
|
|
|
|
|
expect(shouldForwardProxyResponseHeader('Content-Encoding')).toBe(false);
|
|
|
|
|
});
|
|
|
|
|
|
2026-04-01 15:19:20 +02:00
|
|
|
it('drops transfer-encoding from forwarded response headers', () => {
|
|
|
|
|
expect(shouldForwardProxyResponseHeader('transfer-encoding')).toBe(false);
|
|
|
|
|
expect(shouldForwardProxyResponseHeader('Transfer-Encoding')).toBe(false);
|
|
|
|
|
});
|
|
|
|
|
|
2026-04-01 14:45:19 +08:00
|
|
|
it('still keeps ordinary response headers', () => {
|
|
|
|
|
expect(shouldForwardProxyResponseHeader('content-type')).toBe(true);
|
|
|
|
|
expect(shouldForwardProxyResponseHeader('etag')).toBe(true);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('applies upstream response headers to express response without content-encoding', () => {
|
|
|
|
|
const applied = [];
|
|
|
|
|
const response = {
|
|
|
|
|
setHeader(key, value) {
|
|
|
|
|
applied.push([key, value]);
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
applyForwardProxyResponseHeaders(
|
|
|
|
|
new Headers({
|
|
|
|
|
'content-type': 'application/json',
|
|
|
|
|
etag: 'W/"abc"',
|
|
|
|
|
'content-encoding': 'gzip',
|
|
|
|
|
}),
|
|
|
|
|
response,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
expect(applied).toEqual([
|
|
|
|
|
['content-type', 'application/json'],
|
|
|
|
|
['etag', 'W/"abc"'],
|
|
|
|
|
]);
|
|
|
|
|
});
|
|
|
|
|
});
|