public async Task DefaultBucket_MultipleClient(int clientCount) { var loggerFactory = new ClusterFixture.TestOutputLoggerFactory(_outputHelper); var clients = new List <PerBucketCleaner>(clientCount); var activeClients = new List <string>(); try { for (int i = 0; i < clientCount; i++) { var clientUuid = Guid.NewGuid().ToString(); var cleaner = new Cleaner(_fixture.Cluster, null, loggerFactory); var collection = await _fixture.OpenDefaultCollection(_outputHelper); var repo = new CleanerRepository(collection, null); var perBucketCleaner = new PerBucketCleaner(clientUuid, cleaner, repo, TimeSpan.FromSeconds(0.1), loggerFactory, startDisabled: true); clients.Add(perBucketCleaner); var details = await perBucketCleaner.ProcessClient(cleanupAtrs : false); activeClients.Add(clientUuid); foreach (var activeClient in activeClients) { Assert.Contains(details.ActiveClientIds, cid => cid == activeClient); } } } finally { foreach (var client in clients) { await client.DisposeAsync(); } } }
public async Task DefaultBucket_BasicBackgroundRun() { var loggerFactory = new ClusterFixture.TestOutputLoggerFactory(_outputHelper); var clientUuid = Guid.NewGuid().ToString(); var cleaner = new Cleaner(_fixture.Cluster, null, loggerFactory); var collection = await _fixture.OpenDefaultCollection(_outputHelper); var repo = new CleanerRepository(collection, null); PerBucketCleaner perBucketCleaner = null; try { perBucketCleaner = new PerBucketCleaner(clientUuid, cleaner, repo, TimeSpan.FromSeconds(0.1), loggerFactory); await Task.Delay(500); Assert.True(perBucketCleaner.Running); for (var i = 0; i < 10 && perBucketCleaner.RunCount < 1; i++) { await Task.Delay(500); } Assert.NotEqual(0, perBucketCleaner.RunCount); } finally { await perBucketCleaner.DisposeAsync(); } var recordFetch = await repo.GetClientRecord(); Assert.DoesNotContain(recordFetch.clientRecord.Clients, kvp => kvp.Key == clientUuid); Assert.False(perBucketCleaner.Running); }