public async Task ExecuteAsync_ShouldExecute_PrimaryWhenNoTimeoutOnIt() { // Arrange var mockService = new MockService(); var primaryArgs = new Type[] { typeof(int) }; MethodInfo methodInfo = typeof(MockService).GetMethod(nameof(MockService.MethodWithTimeoutTestAsync), primaryArgs); var primaryFuncArgs = primaryArgs.Concat(new Type[] { methodInfo.ReturnType }).ToArray(); var primaryDelegate = methodInfo.CreateDelegate(Expression.GetDelegateType(primaryFuncArgs), mockService); var fallbackArgs = new Type[] { typeof(HystrixFallback), typeof(int) }; methodInfo = typeof(MockService).GetMethod(nameof(MockService.MethodWithTimeoutTestAsync), fallbackArgs); var fallbackFuncArgs = fallbackArgs.Concat(new Type[] { methodInfo.ReturnType }).ToArray(); var fallbackDelegate = methodInfo.CreateDelegate(Expression.GetFuncType(fallbackFuncArgs), mockService); var options = MockService.GetCommandOptions(Guid.NewGuid().ToString(), Guid.NewGuid().ToString()); //Act var command = new HystrixCommandAsyncBase <IEnumerable <Type> >(options, primaryDelegate, fallbackDelegate, new object[] { 10 }, _loggerFactory); var result = await command.ExecuteAsync(); // Assert result.Should().BeEquivalentTo(primaryArgs); }
public async Task ExecuteAsync_ShouldExecute_MethodWithOutParametersRetuningTask() { // Arrange var mockService = new MockService(); var primaryArgs = new Type[] { }; MethodInfo methodInfo = typeof(MockService).GetMethod(nameof(MockService.MethodReturnsTask), primaryArgs); var primaryFuncArgs = primaryArgs.Concat(new Type[] { methodInfo.ReturnType }).ToArray(); var primaryDelegate = methodInfo.CreateDelegate(Expression.GetDelegateType(primaryFuncArgs), mockService); var fallbackArgs = new Type[] { typeof(HystrixFallback) }; methodInfo = typeof(MockService).GetMethod(nameof(MockService.MethodRetunsVoid), fallbackArgs); var fallbackDelegate = methodInfo.CreateDelegate(Expression.GetActionType(fallbackArgs), mockService); var options = MockService.GetCommandOptions(Guid.NewGuid().ToString(), Guid.NewGuid().ToString()); //Act var command = new HystrixCommandAsyncBase(options, primaryDelegate, fallbackDelegate, new object[] { }, _loggerFactory); await command.ExecuteAsync(); }