fix(ffmpeg): re-pin dead BtbN tag (first real recording 404'd), wrap download failures in actionable IOException
The 2026-08-09 pin was a DAILY build; BtbN retention aged it out and the cold-cache download 404'd on the creator's first native recording attempt (2026-09-01, startup.log). Re-pinned to the MONTH-END build autobuild-2026-08-31-13-27 (N-126342, lgpl-shared win64 — 2-year retention; tag+variant recorded in TASKS.md per the licensing rule). Verified alive: HEAD 200 + zip contents (bin/ffmpeg.exe, bin/ffprobe.exe, 7 libav DLLs) match the name-agnostic extractor. Also closes the wrap-gap: HttpRequestException escaped the locator untouched, surfacing a raw 'Response status code... 404' from the frame pump; now wrapped in IOException with the refresh-pin-or-install-ffmpeg message. FfmpegLocatorTests 7/7 (one updated, one added for the 404 case).
This commit is contained in:
@@ -164,6 +164,23 @@ public class FfmpegLocatorTests
|
||||
{
|
||||
var downloader = new RecordingDownloader { Error = new HttpRequestException("offline") };
|
||||
var locator = new FfmpegLocator([], TempDir(), downloader.DownloadAsync);
|
||||
await Assert.ThrowsAsync<HttpRequestException>(() => locator.LocateAsync());
|
||||
var ex = await Assert.ThrowsAsync<IOException>(() => locator.LocateAsync());
|
||||
Assert.IsType<HttpRequestException>(ex.InnerException);
|
||||
Assert.Contains("pinned build", ex.Message, StringComparison.OrdinalIgnoreCase);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Locate_DeadPin404_ThrowsActionableLocatorError()
|
||||
{
|
||||
// 2026-09-01 incident: the pinned autobuild tag aged out of BtbN retention;
|
||||
// the raw HttpRequestException must never surface from the pump again.
|
||||
var downloader = new RecordingDownloader
|
||||
{
|
||||
Error = new HttpRequestException("Response status code does not indicate success: 404 (Not Found)."),
|
||||
};
|
||||
var locator = new FfmpegLocator([], TempDir(), downloader.DownloadAsync);
|
||||
var ex = await Assert.ThrowsAsync<IOException>(() => locator.LocateAsync());
|
||||
Assert.Contains("PATH", ex.Message);
|
||||
Assert.Contains("PinnedUrl", ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user