fix yt-dlp test harness

This commit is contained in:
2026-04-03 12:53:58 -07:00
parent 3c7995afb7
commit 0498cfa07d
3 changed files with 38 additions and 9 deletions

View File

@@ -34,7 +34,12 @@ EOF
function makeHangingFakeYtDlpScript(dir: string): void { function makeHangingFakeYtDlpScript(dir: string): void {
const scriptPath = path.join(dir, 'yt-dlp'); const scriptPath = path.join(dir, 'yt-dlp');
const script = `#!/usr/bin/env sh const script =
process.platform === 'win32'
? `#!/usr/bin/env bun
setInterval(() => {}, 1000);
`
: `#!/usr/bin/env sh
while :; do while :; do
sleep 1; sleep 1;
done done
@@ -52,11 +57,19 @@ async function withFakeYtDlp<T>(payload: string, fn: () => Promise<T>): Promise<
fs.mkdirSync(binDir, { recursive: true }); fs.mkdirSync(binDir, { recursive: true });
makeFakeYtDlpScript(binDir, payload); makeFakeYtDlpScript(binDir, payload);
const originalPath = process.env.PATH ?? ''; const originalPath = process.env.PATH ?? '';
const originalCommand = process.env.SUBMINER_YTDLP_BIN;
process.env.PATH = `${binDir}${path.delimiter}${originalPath}`; process.env.PATH = `${binDir}${path.delimiter}${originalPath}`;
process.env.SUBMINER_YTDLP_BIN =
process.platform === 'win32' ? path.join(binDir, 'yt-dlp.cmd') : path.join(binDir, 'yt-dlp');
try { try {
return await fn(); return await fn();
} finally { } finally {
process.env.PATH = originalPath; process.env.PATH = originalPath;
if (originalCommand === undefined) {
delete process.env.SUBMINER_YTDLP_BIN;
} else {
process.env.SUBMINER_YTDLP_BIN = originalCommand;
}
} }
}); });
} }
@@ -67,11 +80,19 @@ async function withHangingFakeYtDlp<T>(fn: () => Promise<T>): Promise<T> {
fs.mkdirSync(binDir, { recursive: true }); fs.mkdirSync(binDir, { recursive: true });
makeHangingFakeYtDlpScript(binDir); makeHangingFakeYtDlpScript(binDir);
const originalPath = process.env.PATH ?? ''; const originalPath = process.env.PATH ?? '';
const originalCommand = process.env.SUBMINER_YTDLP_BIN;
process.env.PATH = `${binDir}${path.delimiter}${originalPath}`; process.env.PATH = `${binDir}${path.delimiter}${originalPath}`;
process.env.SUBMINER_YTDLP_BIN =
process.platform === 'win32' ? path.join(binDir, 'yt-dlp.cmd') : path.join(binDir, 'yt-dlp');
try { try {
return await fn(); return await fn();
} finally { } finally {
process.env.PATH = originalPath; process.env.PATH = originalPath;
if (originalCommand === undefined) {
delete process.env.SUBMINER_YTDLP_BIN;
} else {
process.env.SUBMINER_YTDLP_BIN = originalCommand;
}
} }
}); });
} }

View File

@@ -143,12 +143,12 @@ if [ "$YTDLP_FAKE_MODE" = "multi" ]; then
IFS="," IFS=","
for lang in $sub_lang; do for lang in $sub_lang; do
if [ -n "$lang" ]; then if [ -n "$lang" ]; then
printf 'WEBVTT\\n' > "${prefix}.${lang}.vtt" printf 'WEBVTT\\n' > "\${prefix}.\${lang}.vtt"
fi fi
done done
IFS="$OLD_IFS" IFS="$OLD_IFS"
elif [ "$YTDLP_FAKE_MODE" = "rolling-auto" ]; then elif [ "$YTDLP_FAKE_MODE" = "rolling-auto" ]; then
cat <<'EOF' > "${prefix}.vtt" cat <<'EOF' > "\${prefix}.vtt"
WEBVTT WEBVTT
00:00:01.000 --> 00:00:02.000 00:00:01.000 --> 00:00:02.000
@@ -162,19 +162,19 @@ WEBVTT
EOF EOF
elif [ "$YTDLP_FAKE_MODE" = "multi-primary-only-fail" ]; then elif [ "$YTDLP_FAKE_MODE" = "multi-primary-only-fail" ]; then
primary_lang="${sub_lang%%,*}" primary_lang="\${sub_lang%%,*}"
if [ -n "$primary_lang" ]; then if [ -n "$primary_lang" ]; then
printf 'WEBVTT\\n' > "${prefix}.${primary_lang}.vtt" printf 'WEBVTT\\n' > "\${prefix}.\${primary_lang}.vtt"
fi fi
printf "ERROR: Unable to download video subtitles for 'en': HTTP Error 429: Too Many Requests\\n" 1>&2 printf "ERROR: Unable to download video subtitles for 'en': HTTP Error 429: Too Many Requests\\n" 1>&2
exit 1 exit 1
elif [ "$YTDLP_FAKE_MODE" = "both" ]; then elif [ "$YTDLP_FAKE_MODE" = "both" ]; then
printf 'WEBVTT\\n' > "${prefix}.vtt" printf 'WEBVTT\\n' > "\${prefix}.vtt"
printf 'webp' > "${prefix}.orig.webp" printf 'webp' > "\${prefix}.orig.webp"
elif [ "$YTDLP_FAKE_MODE" = "webp-only" ]; then elif [ "$YTDLP_FAKE_MODE" = "webp-only" ]; then
printf 'webp' > "${prefix}.orig.webp" printf 'webp' > "\${prefix}.orig.webp"
else else
printf 'WEBVTT\\n' > "${prefix}.vtt" printf 'WEBVTT\\n' > "\${prefix}.vtt"
fi fi
`; `;
fs.writeFileSync(scriptPath, script, 'utf8'); fs.writeFileSync(scriptPath, script, 'utf8');

View File

@@ -46,11 +46,19 @@ async function withFakeYtDlp<T>(
fs.mkdirSync(binDir, { recursive: true }); fs.mkdirSync(binDir, { recursive: true });
makeFakeYtDlpScript(binDir, payload, options.rawScript === true); makeFakeYtDlpScript(binDir, payload, options.rawScript === true);
const originalPath = process.env.PATH ?? ''; const originalPath = process.env.PATH ?? '';
const originalCommand = process.env.SUBMINER_YTDLP_BIN;
process.env.PATH = `${binDir}${path.delimiter}${originalPath}`; process.env.PATH = `${binDir}${path.delimiter}${originalPath}`;
process.env.SUBMINER_YTDLP_BIN =
process.platform === 'win32' ? path.join(binDir, 'yt-dlp.cmd') : path.join(binDir, 'yt-dlp');
try { try {
return await fn(); return await fn();
} finally { } finally {
process.env.PATH = originalPath; process.env.PATH = originalPath;
if (originalCommand === undefined) {
delete process.env.SUBMINER_YTDLP_BIN;
} else {
process.env.SUBMINER_YTDLP_BIN = originalCommand;
}
} }
}); });
} }