Beispiel #1
0
        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();
                }
            }
        }
Beispiel #2
0
        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)");
                }
            }
        }