public async Task CreatesPartitionKeyBasedLease(int factoryType) { RequestOptionsFactory requestOptionsFactory = GetRequestOptionsFactory(factoryType); string continuation = Guid.NewGuid().ToString(); DocumentServiceLeaseStoreManagerOptions options = new DocumentServiceLeaseStoreManagerOptions { HostName = Guid.NewGuid().ToString() }; Documents.PartitionKeyRange partitionKeyRange = new Documents.PartitionKeyRange() { Id = "0", MinInclusive = "", MaxExclusive = "FF" }; Mock <DocumentServiceLeaseUpdater> mockUpdater = new Mock <DocumentServiceLeaseUpdater>(); Mock <ContainerInternal> mockedContainer = new Mock <ContainerInternal>(); mockedContainer.Setup(c => c.CreateItemStreamAsync( It.IsAny <Stream>(), It.IsAny <PartitionKey>(), It.IsAny <ItemRequestOptions>(), It.IsAny <CancellationToken>())).ReturnsAsync((Stream stream, PartitionKey partitionKey, ItemRequestOptions options, CancellationToken token) => new ResponseMessage(System.Net.HttpStatusCode.OK) { Content = stream }); DocumentServiceLeaseManagerCosmos documentServiceLeaseManagerCosmos = new DocumentServiceLeaseManagerCosmos( Mock.Of <ContainerInternal>(), mockedContainer.Object, mockUpdater.Object, options, requestOptionsFactory); DocumentServiceLease afterAcquire = await documentServiceLeaseManagerCosmos.CreateLeaseIfNotExistAsync(partitionKeyRange, continuation); DocumentServiceLeaseCore pkRangeBasedLease = (DocumentServiceLeaseCore)afterAcquire; Assert.IsNotNull(pkRangeBasedLease); Assert.AreEqual(continuation, afterAcquire.ContinuationToken); Assert.AreEqual(partitionKeyRange.Id, pkRangeBasedLease.CurrentLeaseToken); ValidateRequestOptionsFactory(requestOptionsFactory, pkRangeBasedLease); }
public async Task CreatesEPKBasedLease(int factoryType) { RequestOptionsFactory requestOptionsFactory = GetRequestOptionsFactory(factoryType); string continuation = Guid.NewGuid().ToString(); DocumentServiceLeaseStoreManagerOptions options = new DocumentServiceLeaseStoreManagerOptions { HostName = Guid.NewGuid().ToString() }; FeedRangeEpk feedRangeEpk = new FeedRangeEpk(new Documents.Routing.Range <string>("AA", "BB", true, false)); Mock <DocumentServiceLeaseUpdater> mockUpdater = new Mock <DocumentServiceLeaseUpdater>(); Mock <ContainerInternal> mockedContainer = new Mock <ContainerInternal>(); mockedContainer.Setup(c => c.CreateItemStreamAsync( It.IsAny <Stream>(), It.IsAny <PartitionKey>(), It.IsAny <ItemRequestOptions>(), It.IsAny <CancellationToken>())).ReturnsAsync((Stream stream, PartitionKey partitionKey, ItemRequestOptions options, CancellationToken token) => new ResponseMessage(System.Net.HttpStatusCode.OK) { Content = stream }); DocumentServiceLeaseManagerCosmos documentServiceLeaseManagerCosmos = new DocumentServiceLeaseManagerCosmos( Mock.Of <ContainerInternal>(), mockedContainer.Object, mockUpdater.Object, options, requestOptionsFactory); DocumentServiceLease afterAcquire = await documentServiceLeaseManagerCosmos.CreateLeaseIfNotExistAsync(feedRangeEpk, continuation); DocumentServiceLeaseCoreEpk epkBasedLease = (DocumentServiceLeaseCoreEpk)afterAcquire; Assert.IsNotNull(epkBasedLease); Assert.AreEqual(continuation, afterAcquire.ContinuationToken); Assert.AreEqual(feedRangeEpk.Range.Min, ((FeedRangeEpk)epkBasedLease.FeedRange).Range.Min); Assert.AreEqual(feedRangeEpk.Range.Max, ((FeedRangeEpk)epkBasedLease.FeedRange).Range.Max); ValidateRequestOptionsFactory(requestOptionsFactory, epkBasedLease); }
internal static async Task <DocumentServiceLeaseStoreManager> InitializeLeaseStoreManagerAsync( DocumentServiceLeaseStoreManager documentServiceLeaseStoreManager, ContainerInternal leaseContainer, string leaseContainerPrefix, string instanceName) { if (documentServiceLeaseStoreManager == null) { ContainerResponse cosmosContainerResponse = await leaseContainer.ReadContainerAsync().ConfigureAwait(false); ContainerProperties containerProperties = cosmosContainerResponse.Resource; bool isPartitioned = containerProperties.PartitionKey != null && containerProperties.PartitionKey.Paths != null && containerProperties.PartitionKey.Paths.Count > 0; bool isMigratedFixed = (containerProperties.PartitionKey?.IsSystemKey == true); if (isPartitioned && !isMigratedFixed && (containerProperties.PartitionKey.Paths.Count != 1 || containerProperties.PartitionKey.Paths[0] != "/id")) { throw new ArgumentException("The lease collection, if partitioned, must have partition key equal to id."); } RequestOptionsFactory requestOptionsFactory = isPartitioned && !isMigratedFixed ? (RequestOptionsFactory) new PartitionedByIdCollectionRequestOptionsFactory() : (RequestOptionsFactory) new SinglePartitionRequestOptionsFactory(); DocumentServiceLeaseStoreManagerBuilder leaseStoreManagerBuilder = new DocumentServiceLeaseStoreManagerBuilder() .WithLeasePrefix(leaseContainerPrefix) .WithLeaseContainer(leaseContainer) .WithRequestOptionsFactory(requestOptionsFactory) .WithHostName(instanceName); documentServiceLeaseStoreManager = await leaseStoreManagerBuilder.BuildAsync().ConfigureAwait(false); } return(documentServiceLeaseStoreManager); }