public void When_HttpConfigProvider_Used_ClusterInfo_Accessible() { var clusterManager = new ClusterController(_clientConfig); //force use of StreamingHttpProvider by removing other providers clusterManager.ConfigProviders.Remove( clusterManager.ConfigProviders.Find(provider => !(provider is HttpStreamingProvider))); var cluster = new Cluster(_clientConfig, clusterManager); var bucket = cluster.OpenBucket("default", ""); var info = cluster.Info; cluster.CloseBucket(bucket); cluster.Dispose(); Assert.NotNull(info); Assert.NotNull(info.Pools()); Assert.NotNull(info.BucketConfigs()); Assert.Greater(info.BucketConfigs().Count, 0); Assert.NotNull(info.BucketConfigs().ElementAt(0)); }
public void When_Same_Bucket_Requested_Twice_In_Parallel_Only_One_Bootstrap_Is_Done() { var clusterController = new ClusterController(_clientConfig); var cluster1 = new Cluster(_clientConfig, clusterController); var cluster2 = new Cluster(_clientConfig, clusterController); object bucket1 = null; object bucket2 = null; var t1 = new Thread(() => bucket1 = cluster1.OpenBucket("default", "")); var t2 = new Thread(() => bucket2 = cluster2.OpenBucket("default", "")); t1.Start(); t2.Start(); t1.Join(); t2.Join(); Assert.IsNotNull(bucket1); Assert.AreSame(bucket1, bucket2); }
public async Task When_Disposing_Bucket_In_Parallel_Does_Not_Dispose_Referenced_Bucket() { var clusterController = new ClusterController(_clientConfig); var cluster1 = new Cluster(_clientConfig, clusterController); var cluster2 = new Cluster(_clientConfig, clusterController); IBucket bucket1 = null; IBucket bucket2 = null; var t1 = new Thread(() => { Thread.Sleep(100); // Give thread2 time to open the bucket using (bucket1 = cluster1.OpenBucket("default", "")) { } }); t1.Start(); using (bucket2 = cluster2.OpenBucket("default", "")) { Thread.Sleep(100); // Sleep while thread1 disposes the bucket await bucket2.ExistsAsync("Key"); // Used to throw ObjectDisposedException } t1.Join(); Assert.AreSame(bucket1, bucket2); }