private async Task AssertRetryThenSuccessAsync(OperationBase op, Exception exp) { var retryOrchestrator = CreateRetryOrchestrator(); var bucketMock = new Mock <BucketBase>("fake", new ClusterContext(), new Mock <IScopeFactory>().Object, retryOrchestrator, new Mock <ILogger>().Object, new Mock <IRedactor>().Object, new Mock <IBootstrapperFactory>().Object, NullRequestTracer.Instance); var handleOperationCompletedMethod = op.GetType().GetMethod("HandleOperationCompleted", (BindingFlags.Instance | BindingFlags.NonPublic)); bucketMock.Setup(x => x.SendAsync(op, It.IsAny <CancellationToken>())).Callback((IOperation op, CancellationToken ct) => { if (op.Completed.IsCompleted) { Assert.True(false, "operation result should be reset before retry"); } // complete the operation (ResponseStatus does not matter for this test) handleOperationCompletedMethod.Invoke(op, new object[] { null, ResponseStatus.TemporaryFailure }); if (op.Attempts == 1) { throw exp; } }).Returns(op.Completed); var tokenSource = new CancellationTokenSource(TimeSpan.FromMilliseconds(2500)); try { await retryOrchestrator.RetryAsync(bucketMock.Object, op, tokenSource.Token).ConfigureAwait(false); } catch (Exception e) { Assert.True(false, "Expected operation to succeed after retry"); } Assert.True(op.Attempts > 1); }
public void ExecuteOp(OperationBase op) { if (LastSavedOp > UndoStack.Count) { LastSavedOp = -1; } RedoStack.Clear(); UndoStack.Push(op); op.Execute(); Unsaved = true; ApplicationSettings.Instance.SystemLog.Add($"Execute Operation: {op.GetType().Name} with parameter {op.Parameter}."); }
private void OnOperationPropertyChanged(OperationBase oldOperation, OperationBase newOperation) { if (oldOperation != null) { oldOperation.Completed -= OnOperationCompleted; this.IsBusy = false; } if (newOperation != null) { newOperation.Completed += OnOperationCompleted; SetOperationMessage(newOperation.GetType()); this.IsBusy = true; } }
internal void HookOperationEvent(OperationBase operation) { var opEvents = operation.GetType().GetEvents(BindingFlags.Instance | BindingFlags.Public); foreach (var opEvent in opEvents) { if (_eventNames.Contains(opEvent.Name)) { try { var mi = GetType().GetMethod(nameof(HandleOperationEvent), BindingFlags.NonPublic | BindingFlags.Instance); if (mi != null) { var handler = Delegate.CreateDelegate(opEvent.EventHandlerType, this, mi); opEvent.AddEventHandler(operation, handler); } } catch (Exception e) { Console.WriteLine(e.Message); } } } }
private void VerifyOperationSucceeded(OperationBase operation) { Assert.IsFalse(operation.HasError, string.Format("Operation of type {0} contains error {1}", operation.GetType(), operation.Error)); }