public async void GetReplicaListAsync_ServiceFabricFails_ResultIsCached() { var caller = Create <CachedServiceFabricCaller>(); var partitionId = Guid.NewGuid(); var originalReplicas = new List <ReplicaWrapper> { SFTestHelpers.FakeReplica(new Uri("http://localhost/app1/sv1"), 1) }; Mock <IQueryClientWrapper>() .SetupSequence(m => m.GetReplicaListAsync( partitionId, It.IsAny <TimeSpan>(), It.IsAny <CancellationToken>())) .ReturnsAsync(originalReplicas) .ThrowsAsync(new Exception("the cake is a lie")) .ThrowsAsync(new Exception("the cake is still a lie")); await CallThreeTimesAndAssertAsync(() => caller.GetReplicaListAsync(partitionId, CancellationToken.None)); }
private ServiceWrapper CreateService(string appName, string serviceName, int numPartitions, int numReplicasPerPartition, out List <ReplicaWrapper> replicas, out List <PartitionWrapper> partitions, ServiceKind serviceKind = ServiceKind.Stateless) { var svcName = new Uri($"fabric:/{appName}/{serviceName}"); var service = SFTestHelpers.FakeService(svcName, $"{appName}_{serviceName}_Type", serviceKind: serviceKind); replicas = new List <ReplicaWrapper>(); partitions = new List <PartitionWrapper>(); for (var i = 0; i < numPartitions; i++) { var partitionReplicas = Enumerable.Range(i * numReplicasPerPartition, numReplicasPerPartition).Select(replicaId => SFTestHelpers.FakeReplica(svcName, replicaId)).ToList(); replicas.AddRange(partitionReplicas); var partition = SFTestHelpers.FakePartition(); partitions.Add(partition); Mock_ReplicasResponse(partition.Id, partitionReplicas.ToArray()); } Mock_PartitionsResponse(svcName, partitions.ToArray()); return(service); }