public async Task ClaimOwnershipAsyncReturnsOnlyTheSuccessfullyClaimedOwnership() { var storageManager = new InMemoryCheckpointStore(); var ownershipList = new List <EventProcessorPartitionOwnership>(); var ownershipCount = 5; for (int i = 0; i < ownershipCount; i++) { ownershipList.Add( new EventProcessorPartitionOwnership { FullyQualifiedNamespace = "namespace", EventHubName = "eventHubName", ConsumerGroup = "consumerGroup", OwnerIdentifier = "ownerIdentifier", PartitionId = $"{ i }" }); } await storageManager.ClaimOwnershipAsync(ownershipList); // The versions must have been set by the storage manager. var versions = ownershipList.Select(ownership => ownership.Version).ToList(); ownershipList.Clear(); // Use a valid version when 'i' is odd. This way, we can expect 'ownershipCount / 2' successful // claims (rounded down). var expectedClaimedCount = ownershipCount / 2; for (int i = 0; i < ownershipCount; i++) { ownershipList.Add( new EventProcessorPartitionOwnership { FullyQualifiedNamespace = "namespace", EventHubName = "eventHubName", ConsumerGroup = "consumerGroup", OwnerIdentifier = "ownerIdentifier", PartitionId = $"{ i }", Version = i % 2 == 1 ? versions[i] : null }); } IEnumerable <EventProcessorPartitionOwnership> claimedOwnership = await storageManager.ClaimOwnershipAsync(ownershipList); Assert.That(claimedOwnership, Is.Not.Null); Assert.That(claimedOwnership.Count, Is.EqualTo(expectedClaimedCount)); Assert.That(claimedOwnership.OrderBy(ownership => int.Parse(ownership.PartitionId)).SequenceEqual(ownershipList.Where(ownership => int.Parse(ownership.PartitionId) % 2 == 1)), Is.True); }
public async Task OwnershipClaimDoesNotInterfereWithOtherNamespaces() { var storageManager = new InMemoryCheckpointStore(); var ownershipList = new List <EventProcessorPartitionOwnership>(); var firstOwnership = new EventProcessorPartitionOwnership { FullyQualifiedNamespace = "namespace1", EventHubName = "eventHubName", ConsumerGroup = "consumerGroup", OwnerIdentifier = "ownerIdentifier", PartitionId = "partitionId" }; ownershipList.Add(firstOwnership); await storageManager.ClaimOwnershipAsync(ownershipList); // Version must have been set by the storage manager. var version = firstOwnership.Version; ownershipList.Clear(); var secondOwnership = new EventProcessorPartitionOwnership { FullyQualifiedNamespace = "namespace2", EventHubName = "eventHubName", ConsumerGroup = "consumerGroup", OwnerIdentifier = "ownerIdentifier", PartitionId = "partitionId", Version = version }; ownershipList.Add(secondOwnership); await storageManager.ClaimOwnershipAsync(ownershipList); IEnumerable <EventProcessorPartitionOwnership> storedOwnership1 = await storageManager.ListOwnershipAsync("namespace1", "eventHubName", "consumerGroup"); IEnumerable <EventProcessorPartitionOwnership> storedOwnership2 = await storageManager.ListOwnershipAsync("namespace2", "eventHubName", "consumerGroup"); Assert.That(storedOwnership1, Is.Not.Null); Assert.That(storedOwnership1.Count, Is.EqualTo(1)); Assert.That(storedOwnership1.Single(), Is.EqualTo(firstOwnership)); Assert.That(storedOwnership2, Is.Not.Null); Assert.That(storedOwnership2.Count, Is.EqualTo(1)); Assert.That(storedOwnership2.Single(), Is.EqualTo(secondOwnership)); }
public async Task ClaimOwnershipAsyncCanClaimMultipleOwnership() { var storageManager = new InMemoryCheckpointStore(); var ownershipList = new List <EventProcessorPartitionOwnership>(); var ownershipCount = 5; for (int i = 0; i < ownershipCount; i++) { ownershipList.Add( new EventProcessorPartitionOwnership { FullyQualifiedNamespace = "namespace", EventHubName = "eventHubName", ConsumerGroup = "consumerGroup", OwnerIdentifier = "ownerIdentifier", PartitionId = $"partitionId { i }" }); } await storageManager.ClaimOwnershipAsync(ownershipList); IEnumerable <EventProcessorPartitionOwnership> storedOwnership = await storageManager.ListOwnershipAsync("namespace", "eventHubName", "consumerGroup"); Assert.That(storedOwnership, Is.Not.Null); Assert.That(storedOwnership.Count, Is.EqualTo(ownershipCount)); Assert.That(storedOwnership.OrderBy(ownership => ownership.PartitionId).SequenceEqual(ownershipList), Is.True); }
public async Task OwnershipClaimFailsWhenVersionIsInvalid(string version) { var storageManager = new InMemoryCheckpointStore(); var ownershipList = new List <EventProcessorPartitionOwnership>(); var firstOwnership = new EventProcessorPartitionOwnership { FullyQualifiedNamespace = "namespace", EventHubName = "eventHubName", ConsumerGroup = "consumerGroup", OwnerIdentifier = "ownerIdentifier", PartitionId = "partitionId" }; ownershipList.Add(firstOwnership); await storageManager.ClaimOwnershipAsync(ownershipList); ownershipList.Clear(); var secondOwnership = new EventProcessorPartitionOwnership { FullyQualifiedNamespace = "namespace", EventHubName = "eventHubName", ConsumerGroup = "consumerGroup", OwnerIdentifier = "ownerIdentifier", PartitionId = "partitionId", Version = version }; ownershipList.Add(secondOwnership); await storageManager.ClaimOwnershipAsync(ownershipList); IEnumerable <EventProcessorPartitionOwnership> storedOwnership = await storageManager.ListOwnershipAsync("namespace", "eventHubName", "consumerGroup"); Assert.That(storedOwnership, Is.Not.Null); Assert.That(storedOwnership.Count, Is.EqualTo(1)); Assert.That(storedOwnership.Single(), Is.EqualTo(firstOwnership)); }