CH-J SM Mobileserverbeheer over SSH
Menu
Gepubliceerde bron

CH-J SM Mobile

Blader door mappen en bestanden voor een specifieke toepassing release.

Download bron ZIP
CH-J / SM Mobile 134 bestanden
sm-mobile-20261016T050549Z-3678f2a05fa9 Toegevoegd: · Gebouwd:
Bestanden
linux_test.dart Toegevoegd: Datum niet geregistreerd 2,7 KB · 94 regels
Bestand downloaden
1import 'dart:convert';
2import 'dart:io';
3import 'package:flutter_test/flutter_test.dart';
4import 'package:sm_mobile/models/server_profile.dart';
5import 'package:sm_mobile/services/monitor.dart';
6import 'package:sm_mobile/services/ssh_service.dart';
7import 'package:sm_mobile/services/vault.dart';
8import '../support.dart';
10void main() {
11 TestWidgetsFlutterBinding.ensureInitialized();
12 final enabled = Platform.environment['SM_LINUX_TEST'] == '1';
13 late Vault vault;
14 late SshService ssh;
15 setUpAll(() async {
16 if (!enabled) return;
17 vault = Vault(MemoryStore());
18 await vault.create('isolated linux test master password');
19 ssh = SshService(vault);
20 });
21 tearDownAll(() {
22 if (enabled) {
23 ssh.dispose();
24 vault.lock();
25 }
26 });
27 test(
28 'real Linux OpenSSH: password login and independently pinned host fingerprint',
29 () async {
30 final p = ServerProfile(
31 name: 'Linux test',
32 host: '127.0.0.1',
33 port: 22239,
34 username: 'smtest',
35 );
36 await ssh.connect(
37 p,
38 credential: Platform.environment['SM_TEST_PASSWORD']!,
39 prompt: (endpoint, type, fp) async {
40 expect(fp, Platform.environment['SM_TEST_FINGERPRINT']);
41 return true;
42 },
43 );
44 expect(ssh.error, null);
45 expect(ssh.connected, true);
46 final marker = 'LINUX_PASSWORD_OK_${newId()}';
47 final result = await ssh.client.run('printf %s "$marker"');
48 expect(utf8.decode(result), marker);
49 },
50 skip: !enabled,
51 );
52 test('real Linux metrics, command RTT and cancellable refresh', () async {
53 final adapter = LinuxMonitor();
54 final metrics = await adapter.sample(ssh.client);
55 expect(
56 metrics.keys,
57 containsAll([
58 'cpu',
59 'ram',
60 'disk',
61 'uptime',
62 'load',
63 'system',
64 'release',
65 'rtt',
66 ]),
67 );
68 expect(metrics['system'], startsWith('Linux'));
69 expect(
70 double.parse(metrics['cpu']!.replaceAll('%', '')),
71 inInclusiveRange(0, 100),
72 );
73 expect(double.parse(metrics['uptime']!), greaterThan(0));
74 expect(metrics['ram'], contains('MiB'));
75 expect(metrics['disk'], contains('KiB'));
76 final expectedLoad = utf8
77 .decode(await ssh.client.run('cut -d " " -f 1-3 /proc/loadavg'))
78 .trim()
79 .split(' ');
80 final actualLoad = metrics['load']!.split(' ');
81 for (var i = 0; i < 3; i++) {
82 expect(
83 double.parse(actualLoad[i]),
84 closeTo(double.parse(expectedLoad[i]), .5),
85 );
86 }
87 expect(metrics['rtt'], matches(RegExp(r'^\d+ ms$')));
88 final pending = adapter.sample(ssh.client);
89 adapter.cancel();
90 await expectLater(pending, throwsA(anything));
91 ssh.disconnect();
92 expect(ssh.connected, false);
93 }, skip: !enabled);
SHA-256c999103787416ce8ba545e37165ae9869b7c0ecc1148c72fcda58fb1ad785b72

CH-J Proprietary Software License 1.14 · Bron wordt geleverd onder de CH-J Proprietary Software License 1.14. De beschikbaarheid verandert de licentievoorwaarden niet of verleent geen extra rechten.

Archief SHA-256c486a807e4828998b9c57ab0f2e760f7980b31965fe118e89d3e1a5a2b65be65