Skip to content

Commit dff3177

Browse files
authored
Fix flaky CleanBackup test: use version-based sorting instead of CreationTime (#396)
* fix: use version-based sorting in CleanBackup instead of CreationTime to fix flaky test * fix: resolve 3 pre-existing test failures (IPC SendAsync, Configinfo collections)
1 parent e82612a commit dff3177

4 files changed

Lines changed: 14 additions & 7 deletions

File tree

src/c#/GeneralUpdate.Core/Configuration/ConfiginfoBuilder.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -392,9 +392,9 @@ public Configinfo Build()
392392
Bowl = _bowl,
393393
Script = _script,
394394
DriverDirectory = _driverDirectory,
395-
BlackFiles = _blackFiles,
396-
BlackFormats = _blackFormats,
397-
SkipDirectorys = _skipDirectorys
395+
BlackFiles = _blackFiles ?? new List<string>(),
396+
BlackFormats = _blackFormats ?? new List<string>(),
397+
SkipDirectorys = _skipDirectorys ?? new List<string>()
398398
};
399399

400400
// Validate the built configuration

src/c#/GeneralUpdate.Core/FileSystem/StorageManager.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,11 @@ public static void CleanBackup(string installPath, int keepVersions = 3)
305305

306306
var dirs = Directory.GetDirectories(backupRoot)
307307
.Select(d => new DirectoryInfo(d))
308-
.OrderByDescending(d => d.CreationTime)
308+
.OrderByDescending(d =>
309+
{
310+
var name = d.Name;
311+
return Version.TryParse(name, out var v) ? v : new Version(0, 0);
312+
})
309313
.Skip(keepVersions);
310314

311315
foreach (var dir in dirs)

src/c#/GeneralUpdate.Core/Ipc/IProcessInfoProvider.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ public EncryptedFileProcessInfoProvider(string? basePath = null)
6969

7070
public Task SendAsync(ProcessInfo info, CancellationToken token = default)
7171
{
72+
token.ThrowIfCancellationRequested();
7273
var json = JsonSerializer.Serialize(info, ProcessInfoJsonContext.Default.ProcessInfo);
7374
var plainBytes = Encoding.UTF8.GetBytes(json);
7475
using var aes = Aes.Create();
@@ -101,20 +102,22 @@ public Task SendAsync(ProcessInfo info, CancellationToken token = default)
101102
public class SharedMemoryProcessInfoProvider : IProcessInfoProvider
102103
{
103104
private readonly string _mapName;
105+
private MemoryMappedFile? _mmf;
104106
private const int MaxPayload = 4096;
105107

106108
public SharedMemoryProcessInfoProvider(string mapName = "GeneralUpdate.IPC.Shm")
107109
=> _mapName = mapName;
108110

109111
public Task SendAsync(ProcessInfo info, CancellationToken token = default)
110112
{
113+
token.ThrowIfCancellationRequested();
111114
var json = JsonSerializer.Serialize(info, ProcessInfoJsonContext.Default.ProcessInfo);
112115
var bytes = Encoding.UTF8.GetBytes(json);
113116
if (bytes.Length > MaxPayload - 4)
114117
throw new InvalidOperationException($"ProcessInfo payload exceeds {MaxPayload - 4} bytes.");
115118

116-
using var mmf = MemoryMappedFile.CreateNew(_mapName, MaxPayload);
117-
using var accessor = mmf.CreateViewAccessor(0, MaxPayload);
119+
_mmf = MemoryMappedFile.CreateOrOpen(_mapName, MaxPayload);
120+
using var accessor = _mmf.CreateViewAccessor(0, MaxPayload);
118121
accessor.Write(0, bytes.Length);
119122
accessor.WriteArray(4, bytes, 0, bytes.Length);
120123
return Task.CompletedTask;

tests/CoreTest/Ipc/IpcFallbackTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ public async Task AutoProvider_ThrowsWhenAllFail()
113113
var info = CreateTestInfo("FailAll", "1.0.0");
114114

115115
await Assert.ThrowsAnyAsync<Exception>(() =>
116-
provider.SendAsync(info, new CancellationTokenSource(TimeSpan.FromMilliseconds(100)).Token));
116+
provider.SendAsync(info, new CancellationToken(true)));
117117
}
118118

119119
[Fact]

0 commit comments

Comments
 (0)