fix(client,testing,build): improve TypeScript compatibility for DNS client parsing and test suite

This commit is contained in:
2026-04-30 12:48:49 +00:00
parent 510801b109
commit 199dfe7ba3
18 changed files with 1944 additions and 3435 deletions
+17 -15
View File
@@ -1,12 +1,14 @@
import * as plugins from '../ts_server/plugins.js';
import { expect, tap } from '@git.zone/tstest/tapbundle';
import { tapNodeTools } from '@git.zone/tstest/tapbundle_serverside';
import { TapNodeTools } from '@git.zone/tstest/tapbundle_serverside';
import * as dnsPacket from 'dns-packet';
import * as dgram from 'dgram';
import * as smartdns from '../ts_server/index.js';
let dnsServer: smartdns.DnsServer;
const tapNodeTools = new TapNodeTools(tap);
let dnsServer: smartdns.DnsServer | null;
// Port management for tests
let nextHttpsPort = 8900;
@@ -29,7 +31,7 @@ async function stopServer(server: smartdns.DnsServer | null | undefined) {
try {
await server.stop();
} catch (e) {
console.log('Handled error when stopping server:', e.message || e);
console.log('Handled error when stopping server:', e instanceof Error ? e.message : e);
}
}
@@ -118,9 +120,9 @@ tap.test('SOA records work for all scenarios', async () => {
client.send(soaQuery, udpPort, 'localhost');
});
console.log('Direct SOA query response:', response.answers.length, 'answers');
expect(response.answers.length).toEqual(1);
expect(response.answers[0].type).toEqual('SOA');
console.log('Direct SOA query response:', response.answers!.length, 'answers');
expect(response.answers!.length).toEqual(1);
expect(response.answers![0].type).toEqual('SOA');
// Test 2: Non-existent domain query (should get SOA in authority)
console.log('\n--- Test 2: Non-existent domain query ---');
@@ -153,8 +155,8 @@ tap.test('SOA records work for all scenarios', async () => {
client.send(nxQuery, udpPort, 'localhost');
});
console.log('Non-existent query response:', response.answers.length, 'answers');
const soaAnswers = response.answers.filter(a => a.type === 'SOA');
console.log('Non-existent query response:', response.answers!.length, 'answers');
const soaAnswers = response.answers!.filter(a => a.type === 'SOA');
expect(soaAnswers.length).toEqual(1);
// Test 3: SOA with DNSSEC
@@ -197,11 +199,11 @@ tap.test('SOA records work for all scenarios', async () => {
client.send(dnssecQuery, udpPort, 'localhost');
});
console.log('DNSSEC SOA query response:', response.answers.length, 'answers');
console.log('Answer types:', response.answers.map(a => a.type));
expect(response.answers.length).toEqual(2); // SOA + RRSIG
expect(response.answers.some(a => a.type === 'SOA')).toEqual(true);
expect(response.answers.some(a => a.type === 'RRSIG')).toEqual(true);
console.log('DNSSEC SOA query response:', response.answers!.length, 'answers');
console.log('Answer types:', response.answers!.map(a => a.type));
expect(response.answers!.length).toEqual(2); // SOA + RRSIG
expect(response.answers!.some(a => a.type === 'SOA')).toEqual(true);
expect(response.answers!.some(a => a.type === 'RRSIG')).toEqual(true);
client.close();
await stopServer(dnsServer);
@@ -259,7 +261,7 @@ tap.test('Configurable primary nameserver works correctly', async () => {
client.send(query, udpPort, 'localhost');
});
const soaAnswers = response.answers.filter(a => a.type === 'SOA');
const soaAnswers = response.answers!.filter(a => a.type === 'SOA');
console.log('✅ Configured primary nameserver:', (soaAnswers[0] as any).data.mname);
expect((soaAnswers[0] as any).data.mname).toEqual('master.test.com');
@@ -268,4 +270,4 @@ tap.test('Configurable primary nameserver works correctly', async () => {
dnsServer = null;
});
export default tap.start();
export default tap.start();