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); }
public async Task RunsWithoutException() { var loggerFactory = new ClusterFixture.TestOutputLoggerFactory(_outputHelper); var manager = new LostTransactionManager( cluster: _fixture.Cluster, loggerFactory: loggerFactory, cleanupWindow: TimeSpan.FromMilliseconds(1_000), keyValueTimeout: null); try { await Task.Delay(1_500); Assert.NotEqual(0, manager.DiscoveredBucketCount); Assert.NotEqual(0, manager.RunningCount); await Task.Delay(TimeSpan.FromMilliseconds(10_000)); Assert.NotEqual(0, manager.TotalRunCount); } finally { await manager.DisposeAsync(); await Task.Delay(100); Assert.Equal(0, manager.RunningCount); } }
public async Task Singles(string statement) { (var defaultCollection, var docId, var sampleDoc) = await TestUtil.PrepSampleDoc(_fixture, _outputHelper); _outputHelper.WriteLine(sampleDoc.ToString()); var loggerFactory = new ClusterFixture.TestOutputLoggerFactory(_outputHelper); await defaultCollection.InsertAsync(docId, sampleDoc); var txnCfg = TransactionConfigBuilder.Create().LoggerFactory(loggerFactory); var txn = TestUtil.CreateTransaction(_fixture.Cluster, KeyValue.DurabilityLevel.None, _outputHelper); var config = new SingleQueryTransactionConfigBuilder(); config.QueryOptionsValue.Parameter("docId", docId); var results = await txn.QueryAsync <object>(statement, config); await foreach (var r in results.QueryResult.Rows) { _outputHelper.WriteLine($"result = {r}"); } }
public async Task Nuke_All_Client_Records() { // this is not a test, just a utility method to reset the data. var loggerFactory = new ClusterFixture.TestOutputLoggerFactory(_outputHelper); var cluster = _fixture.Cluster; var buckets = await cluster.Buckets.GetAllBucketsAsync(); foreach (var bucket in buckets) { var bkt = await cluster.BucketAsync(bucket.Key); var col = await bkt.DefaultCollectionAsync(); _outputHelper.WriteLine($"Removing client record on {bucket.Key}"); try { await col.RemoveAsync("_txn:client-record"); } catch (DocumentNotFoundException) { _outputHelper.WriteLine("(no client record found on this bucket)"); } } }