From 6567d8a5b473bc1a1f89e2226631d546421675e4 Mon Sep 17 00:00:00 2001 From: RyuJongJin <266630912+RyuJongJin@users.noreply.github.com> Date: Sun, 18 Oct 2026 04:52:24 +0900 Subject: [PATCH] =?UTF-8?q?WIP=20=EC=8B=9C=ED=97=98=20=ED=9D=94=EB=93=A4?= =?UTF-8?q?=EB=A6=BC:=20batch=5Ftest=20"186=20=C2=B7=20187"=20-=20?= =?UTF-8?q?=EC=8B=A4=EC=A0=9C=20=EC=8B=9C=EA=B0=84=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EA=B8=B0=EB=8B=A4=EB=A6=AC=EA=B8=B0=20=C2=B7=20=ED=95=9C?= =?UTF-8?q?=EB=8F=84=204=EB=B6=84=20=C2=B7=20=EC=9E=84=EC=8B=9C=20?= =?UTF-8?q?=ED=8F=B4=EB=8D=94=20=EC=A7=80=EC=9A=B0=EA=B8=B0=20=EB=8B=A4?= =?UTF-8?q?=EC=8B=9C=20=EC=8B=9C=EB=8F=84=20(=EA=B2=80=ED=86=A0=20?= =?UTF-8?q?=EB=8C=80=EA=B8=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 976 직전 전체 시험 (50bd2bf) 에서 PC 가 바쁠 때 정해진 횟수 (400 × 25ms) 안에 v1 이 시작하지 않아 30초 한도에 걸렸고, 그때 ffmpeg 가 파일을 쥐고 있어 jj_batch186_ 임시 폴더를 지우지 못하고 남겼다. 240 (e7cd30e) 과 같은 방식으로 고침. 기대값은 그대로. Co-Authored-By: Claude Opus 5.5 --- test/batch_test.dart | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/test/batch_test.dart b/test/batch_test.dart index 12159f7..f2f41de 100644 --- a/test/batch_test.dart +++ b/test/batch_test.dart @@ -243,7 +243,18 @@ void main() { final tool = ProcessMediaTool('ffmpeg', 'ffprobe'); if (await tool.version() == null) return markTestSkipped('FFmpeg 없음'); final dir = Directory.systemTemp.createTempSync('jj_batch186_'); - addTearDown(() => dir.deleteSync(recursive: true)); + // 시간 초과로 끝나면 ffmpeg 가 아직 파일을 쥐고 있어 바로 지우지 못했다 (10/18 전체 시험) - 잠시 다시 시도 + addTearDown(() async { + for (var i = 0;; i++) { + try { + if (dir.existsSync()) dir.deleteSync(recursive: true); + return; + } on FileSystemException { + if (i >= 50) rethrow; + await Future.delayed(const Duration(milliseconds: 200)); + } + } + }); // v1 은 다시 인코딩에 시간이 걸리게 길게, v2 · v3 는 짧게 final files = [for (final n in ['v1', 'v2', 'v3']) p.join(dir.path, '$n.mp4')]; for (final (i, f) in files.indexed) { @@ -257,9 +268,10 @@ void main() { await c.addVideos(files); final [v1, v2, v3] = c.videos; final building = c.buildVideos([v1, v2, v3]); - // v1 이 만들어지는 중 · 묶음에 2개가 기다림 - for (var i = 0; i < 400 && !(v1.status == JobStatus.running && v1.progress > 0.02); i++) { - await Future.delayed(const Duration(milliseconds: 25)); + // v1 이 만들어지는 중 · 묶음에 2개가 기다림. 관리자 지적 (10/18): PC 가 바쁘면 정해진 횟수 안에 오지 않아 30초 한도에 걸렸다 - 실제 시간으로 (최대 90초) + final end = DateTime.now().add(const Duration(seconds: 90)); + while (!(v1.status == JobStatus.running && v1.progress > 0.02) && DateTime.now().isBefore(end)) { + await Future.delayed(const Duration(milliseconds: 20)); } expect(v1.status, JobStatus.running); expect(c.batchWaiting, 2, reason: '한 묶음 안의 기다리는 동영상도 대기로 센다'); @@ -270,7 +282,7 @@ void main() { expect(v1.message, '취소됨'); expect(File(outputMkvPath(v1.path)).existsSync(), isFalse, reason: '만들다 만 파일은 지움'); expect(c.logs.join('\n'), contains('성공 2 · 취소 1 · 실패 0 / 전체 3')); - }); + }, timeout: const Timeout(Duration(minutes: 4))); group('P0 (931): 결과 MKV 가 이미 있을 때 · 취소해도 예전 완성본은 그대로', () { late Directory dir;