mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2025-12-17 07:14:28 +01:00
137
test/proxy_command_test.dart
Normal file
137
test/proxy_command_test.dart
Normal file
@@ -0,0 +1,137 @@
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:server_box/data/model/server/proxy_command_config.dart';
|
||||
import 'package:server_box/data/model/server/server_private_info.dart';
|
||||
|
||||
void main() {
|
||||
group('ProxyCommandConfig Tests', () {
|
||||
test('should create ProxyCommandConfig with required fields', () {
|
||||
const config = ProxyCommandConfig(
|
||||
command: 'cloudflared access ssh --hostname %h',
|
||||
timeout: Duration(seconds: 30),
|
||||
requiresExecutable: true,
|
||||
executableName: 'cloudflared',
|
||||
);
|
||||
|
||||
expect(config.command, equals('cloudflared access ssh --hostname %h'));
|
||||
expect(config.timeout.inSeconds, equals(30));
|
||||
expect(config.requiresExecutable, isTrue);
|
||||
expect(config.executableName, equals('cloudflared'));
|
||||
});
|
||||
|
||||
test('should get final command with placeholders replaced', () {
|
||||
const config = ProxyCommandConfig(
|
||||
command: 'cloudflared access ssh --hostname %h --port %p',
|
||||
timeout: Duration(seconds: 30),
|
||||
);
|
||||
|
||||
final finalCommand = config.getFinalCommand(
|
||||
hostname: 'example.com',
|
||||
port: 22,
|
||||
user: 'testuser',
|
||||
);
|
||||
|
||||
expect(finalCommand, equals('cloudflared access ssh --hostname example.com --port 22'));
|
||||
});
|
||||
|
||||
test('should handle all placeholders correctly', () {
|
||||
const config = ProxyCommandConfig(
|
||||
command: 'ssh -W %h:%p -l %r bastion.example.com',
|
||||
timeout: Duration(seconds: 10),
|
||||
);
|
||||
|
||||
final finalCommand = config.getFinalCommand(
|
||||
hostname: 'target.example.com',
|
||||
port: 2222,
|
||||
user: 'admin',
|
||||
);
|
||||
|
||||
expect(finalCommand, equals('ssh -W target.example.com:2222 -l admin bastion.example.com'));
|
||||
});
|
||||
|
||||
test('should validate presets from map', () {
|
||||
final presets = proxyCommandPresets;
|
||||
|
||||
final cloudflareConfig = presets['cloudflare_access'];
|
||||
expect(cloudflareConfig, isNotNull);
|
||||
expect(cloudflareConfig!.command, equals('cloudflared access ssh --hostname %h'));
|
||||
expect(cloudflareConfig.requiresExecutable, isTrue);
|
||||
expect(cloudflareConfig.executableName, equals('cloudflared'));
|
||||
|
||||
final sshBastionConfig = presets['ssh_via_bastion'];
|
||||
expect(sshBastionConfig, isNotNull);
|
||||
expect(sshBastionConfig!.command, equals('ssh -W %h:%p bastion.example.com'));
|
||||
expect(sshBastionConfig.requiresExecutable, isFalse);
|
||||
|
||||
final ncConfig = presets['nc_netcat'];
|
||||
expect(ncConfig, isNotNull);
|
||||
expect(ncConfig!.command, equals('nc %h %p'));
|
||||
expect(ncConfig.requiresExecutable, isFalse);
|
||||
|
||||
final socatConfig = presets['socat'];
|
||||
expect(socatConfig, isNotNull);
|
||||
expect(socatConfig!.command, equals('socat - PROXY:%h:%p,proxyport=8080'));
|
||||
expect(socatConfig.requiresExecutable, isFalse);
|
||||
});
|
||||
});
|
||||
|
||||
group('Spi with ProxyCommand Tests', () {
|
||||
test('should create Spi with ProxyCommand configuration', () {
|
||||
final spi = Spi(
|
||||
name: 'Test Server',
|
||||
ip: 'example.com',
|
||||
port: 22,
|
||||
user: 'testuser',
|
||||
pwd: 'testpass',
|
||||
proxyCommand: const ProxyCommandConfig(
|
||||
command: 'cloudflared access ssh --hostname %h',
|
||||
timeout: Duration(seconds: 30),
|
||||
requiresExecutable: true,
|
||||
executableName: 'cloudflared',
|
||||
),
|
||||
);
|
||||
|
||||
expect(spi.name, equals('Test Server'));
|
||||
expect(spi.proxyCommand, isNotNull);
|
||||
expect(spi.proxyCommand!.command, equals('cloudflared access ssh --hostname %h'));
|
||||
expect(spi.proxyCommand!.requiresExecutable, isTrue);
|
||||
});
|
||||
|
||||
test('should handle Spi without ProxyCommand', () {
|
||||
final spi = Spi(
|
||||
name: 'Test Server',
|
||||
ip: 'example.com',
|
||||
port: 22,
|
||||
user: 'testuser',
|
||||
pwd: 'testpass',
|
||||
);
|
||||
|
||||
expect(spi.proxyCommand, isNull);
|
||||
});
|
||||
|
||||
test('should serialize and deserialize Spi with ProxyCommand', () {
|
||||
final originalSpi = Spi(
|
||||
name: 'Test Server',
|
||||
ip: 'example.com',
|
||||
port: 22,
|
||||
user: 'testuser',
|
||||
pwd: 'testpass',
|
||||
proxyCommand: const ProxyCommandConfig(
|
||||
command: 'cloudflared access ssh --hostname %h',
|
||||
timeout: Duration(seconds: 30),
|
||||
requiresExecutable: true,
|
||||
executableName: 'cloudflared',
|
||||
),
|
||||
);
|
||||
|
||||
final json = originalSpi.toJson();
|
||||
final deserializedSpi = Spi.fromJson(json);
|
||||
|
||||
expect(deserializedSpi.name, equals(originalSpi.name));
|
||||
expect(deserializedSpi.ip, equals(originalSpi.ip));
|
||||
expect(deserializedSpi.proxyCommand, isNotNull);
|
||||
expect(deserializedSpi.proxyCommand!.command, equals(originalSpi.proxyCommand!.command));
|
||||
expect(deserializedSpi.proxyCommand!.requiresExecutable, equals(originalSpi.proxyCommand!.requiresExecutable));
|
||||
expect(deserializedSpi.proxyCommand!.executableName, equals(originalSpi.proxyCommand!.executableName));
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user