public static TestServiceCommand Get(IJellyfishContext ctx, ITestOutputHelper output, string commandName, ExecutionIsolationStrategy strategy, ExecutionResult executionResult = ExecutionResult.NONE, FallbackResult fallbackResult = FallbackResult.UNIMPLEMENTED, Action <CommandPropertiesBuilder> setter = null, TestCircuitBreaker circuitBreaker = null, IClock clock = null) { var builder = CommandPropertiesTest.GetUnitTestPropertiesSetter(); builder.WithExecutionIsolationStrategy(strategy); if (setter != null) { setter(builder); } if (clock == null) { clock = new MockedClock(); } var cmd = new TestServiceCommand(ctx, commandName, builder, clock, circuitBreaker ?? new TestCircuitBreaker(clock), new TestExecutionHook(output)); cmd.Log = msg => output.WriteLine("({0}) - {1}", cmd.Id, msg); if (executionResult == ExecutionResult.SUCCESS) { cmd.Action = () => { cmd.Log("Execution success"); return(Task.FromResult(TestCommandFactory.EXECUTE_VALUE)); }; } else if (executionResult == ExecutionResult.FAILURE) { cmd.Action = () => { cmd.Log("Execution failure");; throw new Exception("Execution Failure for TestCommand"); }; } else if (executionResult == ExecutionResult.HYSTRIX_FAILURE) { cmd.Action = () => { cmd.Log("Execution failure"); throw new Exception("Execution Failure for TestCommand", new Exception("Fallback Failure for TestCommand")); }; } else if (executionResult == ExecutionResult.RECOVERABLE_ERROR) { cmd.Action = () => { cmd.Log("Execution recoverable error"); throw new Exception("Execution ERROR for TestCommand"); }; } else if (executionResult == ExecutionResult.UNRECOVERABLE_ERROR) { cmd.Action = () => { cmd.Log("Execution unrecoverable error"); throw new StackOverflowException("Unrecoverable Error for TestCommand"); }; } else if (executionResult == ExecutionResult.BAD_REQUEST) { cmd.Action = () => { cmd.Log("Execution bad request"); throw new BadRequestException("Execution BadRequestException for TestCommand"); }; } if (fallbackResult == FallbackResult.SUCCESS) { cmd.Fallback = () => { cmd.Log("Execution fallback success"); return(Task.FromResult(TestCommandFactory.FALLBACK_VALUE)); }; } else if (fallbackResult == FallbackResult.FAILURE) { cmd.Fallback = () => { cmd.Log("Execution fallback error"); throw new Exception("Fallback Failure for TestCommand"); }; } else if (fallbackResult == FallbackResult.UNIMPLEMENTED) { cmd.Fallback = () => { cmd.Log("Execution fallback unimplemented"); throw new NotImplementedException(); }; } return(cmd); }
public TestServiceCommand(IJellyfishContext ctx, string name, CommandPropertiesBuilder builder, IClock clock = null, TestCircuitBreaker circuitBreaker = null, CommandExecutionHook executionHook = null) : base(ctx ?? new JellyfishContext(), clock, name, name, null, builder, circuitBreaker, circuitBreaker?.Metrics, executionHook: executionHook) { SetFlag(ServiceCommandOptions.HasFallBack, false); SetFlag(ServiceCommandOptions.HasCacheKey, false); Id = cx++; }
public SuccessfulCacheableCommand(IJellyfishContext ctx, TestCircuitBreaker circuitBreaker, bool cacheEnabled, T value) : base(ctx, circuitBreaker.Clock, "SuccessfulCacheableCommand", null, metrics: circuitBreaker.Metrics, circuitBreaker: circuitBreaker, properties: CommandPropertiesTest.GetUnitTestPropertiesSetter().WithRequestCacheEnabled(true)) { this.value = value; this.cacheEnabled = cacheEnabled; }