import 'dart:io'; import 'package:flutter_test/flutter_test.dart'; import 'package:jj_mkvmaker/core/lan_scan.dart'; /// X-plore 비교 j: 같은 망 SMB 서버 찾기의 포트 훑기 (실제 망 대신 이 기기의 열린 · 닫힌 포트로) void main() { test('열린 포트만 찾는다 · 순서는 넣은 대로 · 진행 · 취소', () async { final server = await ServerSocket.bind(InternetAddress.loopbackIPv4, 0); addTearDown(server.close); server.listen((s) => s.destroy()); final closed = await ServerSocket.bind(InternetAddress.loopbackIPv4, 0); final closedPort = closed.port; await closed.close(); var progress = 0; final found = await scanPort(['127.0.0.1', '127.0.0.2'], port: server.port, lookupNames: false, onProgress: (d, _) => progress = d); expect(found.map((h) => h.address), ['127.0.0.1'], reason: '127.0.0.2 는 듣지 않음 (Windows 는 127.0.0.1 에만 묶임)'); expect(progress, 2); expect(await scanPort(['127.0.0.1'], port: closedPort, lookupNames: false), isEmpty); expect(await scanPort(['127.0.0.1'], port: server.port, lookupNames: false, cancelled: () => true), isEmpty, reason: '취소'); expect((await localPrivateIPv4()).every((a) => !a.isLoopback), isTrue); }); }