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;