public virtual async Task CanConcurrentlyManageFilesAsync() { await ResetAsync(); var storage = GetStorage(); if (storage == null) { return; } using (storage) { const string queueFolder = "q"; var queueItems = new BlockingCollection <int>(); var info = await storage.GetFileInfoAsync("nope"); Assert.Null(info); await Run.InParallelAsync(10, async i => { var ev = new PostInfo { ApiVersion = 2, CharSet = "utf8", ContentEncoding = "application/json", Data = Encoding.UTF8.GetBytes("{}"), IpAddress = "127.0.0.1", MediaType = "gzip", ProjectId = i.ToString(), UserAgent = "test" }; await storage.SaveObjectAsync(Path.Combine(queueFolder, i + ".json"), ev); queueItems.Add(i); }); Assert.Equal(10, (await storage.GetFileListAsync()).Count()); await Run.InParallelAsync(10, async i => { string path = Path.Combine(queueFolder, queueItems.Random() + ".json"); var eventPost = await storage.GetEventPostAndSetActiveAsync(Path.Combine(queueFolder, RandomData.GetInt(0, 25) + ".json"), _logger); if (eventPost == null) { return; } if (RandomData.GetBool()) { await storage.CompleteEventPostAsync(path, eventPost.ProjectId, SystemClock.UtcNow, true, _logger); } else { await storage.SetNotActiveAsync(path, _logger); } }); } }
public virtual void CanConcurrentlyManageFiles() { Reset(); IFileStorage storage = GetStorage(); if (storage == null) { return; } using (storage) { const string queueFolder = "q"; var queueItems = new BlockingCollection <int>(); var info = storage.GetFileInfo("nope"); Assert.Null(info); Parallel.For(0, 10, i => { var ev = new PostInfo { ApiVersion = 2, CharSet = "utf8", ContentEncoding = "application/json", Data = Encoding.UTF8.GetBytes("{}"), IpAddress = "127.0.0.1", MediaType = "gzip", ProjectId = i.ToString(), UserAgent = "test" }; storage.SaveObject(Path.Combine(queueFolder, i + ".json"), ev); queueItems.Add(i); }); Assert.Equal(10, storage.GetFileList().Count()); Parallel.For(0, 10, i => { string path = Path.Combine(queueFolder, queueItems.Random() + ".json"); var eventPost = storage.GetEventPostAndSetActive(Path.Combine(queueFolder, RandomData.GetInt(0, 25) + ".json")); if (eventPost == null) { return; } if (RandomData.GetBool()) { storage.CompleteEventPost(path, eventPost.ProjectId, DateTime.UtcNow, true); } else { storage.SetNotActive(path); } }); } }
public virtual async Task CanConcurrentlyManageFiles() { await ResetAsync(); IFileStorage storage = GetStorage(); if (storage == null) return; using (storage) { const string queueFolder = "q"; var queueItems = new BlockingCollection<int>(); var info = await storage.GetFileInfoAsync("nope"); Assert.Null(info); await Run.InParallel(10, async i => { var ev = new PostInfo { ApiVersion = 2, CharSet = "utf8", ContentEncoding = "application/json", Data = Encoding.UTF8.GetBytes("{}"), IpAddress = "127.0.0.1", MediaType = "gzip", ProjectId = i.ToString(), UserAgent = "test" }; await storage.SaveObjectAsync(Path.Combine(queueFolder, i + ".json"), ev); queueItems.Add(i); }); Assert.Equal(10, (await storage.GetFileListAsync()).Count()); await Run.InParallel(10, async i => { string path = Path.Combine(queueFolder, queueItems.Random() + ".json"); var eventPost = await storage.GetEventPostAndSetActiveAsync(Path.Combine(queueFolder, RandomData.GetInt(0, 25) + ".json")); if (eventPost == null) return; if (RandomData.GetBool()) { await storage.CompleteEventPost(path, eventPost.ProjectId, DateTime.UtcNow, true); } else await storage.SetNotActiveAsync(path); }); } }