コード例 #1
0
        public void Credit_ReturnsOneHundred_WhenMultipleCalls()
        {
            var processor = new CbsRequestProcessor(Substitute.For <ISecurityContext>(), Substitute.For <ILoggerProvider>(), CbsTokenValidator.Default);

            processor.Credit.ShouldBe(100);
            processor.Credit.ShouldBe(100);
        }
コード例 #2
0
        public async Task Process_CompleteWith200Ok_WhenTokenValid()
        {
            const string testMessageId = "rekwest1025847";
            var          processor     = new CbsRequestProcessor(Substitute.For <ISecurityContext>(), Substitute.For <ILoggerProvider>(), Substitute.For <ITokenValidator>());

            IDictionary <string, object> responseProperties = await TestAmqpHost.ProcessCbsRequestAsync(testMessageId, processor);

            responseProperties.ShouldBe(new Dictionary <string, object>
            {
                ["CorrelationId"] = testMessageId,
                ["status-code"]   = 200
            });
        }
コード例 #3
0
        public async Task Process_LogSuccess_WhenTokenValid()
        {
            ILogger         fakeLogger         = Substitute.For <ILogger>();
            ILoggerProvider fakeLoggerProvider = Substitute.For <ILoggerProvider>();

            fakeLoggerProvider.CreateLogger(Arg.Any <string>()).Returns(fakeLogger);
            var processor = new CbsRequestProcessor(Substitute.For <ISecurityContext>(), fakeLoggerProvider, Substitute.For <ITokenValidator>());

            await TestAmqpHost.ProcessCbsRequestAsync("111", processor);

            fakeLogger.Received(1).Log(
                LogLevel.Debug,
                Arg.Any <EventId>(),
                Arg.Is <FormattedLogValues>(f => f.ToString().StartsWith("Valid $cbs request")),
                Arg.Any <Exception>(),
                Arg.Any <Func <FormattedLogValues, Exception, string> >()
                );
        }
コード例 #4
0
        public async Task Process_CompleteWith401Unathorized_WhenTokenValid()
        {
            const string    testMessageId      = "someErrorMessageId";
            ITokenValidator fakeTokenValidator = Substitute.For <ITokenValidator>();

            fakeTokenValidator
            .When(instance => instance.Validate(Arg.Any <string>()))
            .Do(_ => throw new ArgumentException("Test"));
            var processor = new CbsRequestProcessor(Substitute.For <ISecurityContext>(), Substitute.For <ILoggerProvider>(), fakeTokenValidator);

            IDictionary <string, object> responseProperties = await TestAmqpHost.ProcessCbsRequestAsync(testMessageId, processor);

            responseProperties.ShouldBe(new Dictionary <string, object>
            {
                ["CorrelationId"] = testMessageId,
                ["status-code"]   = 401
            });
        }
コード例 #5
0
        public async Task Process_LogError_WhenTokenInvalid()
        {
            var             testException      = new ArgumentException("Test");
            ILogger         fakeLogger         = Substitute.For <ILogger>();
            ILoggerProvider fakeLoggerProvider = Substitute.For <ILoggerProvider>();

            fakeLoggerProvider.CreateLogger(Arg.Any <string>()).Returns(fakeLogger);
            ITokenValidator fakeTokenValidator = Substitute.For <ITokenValidator>();

            fakeTokenValidator
            .When(instance => instance.Validate(Arg.Any <string>()))
            .Do(_ => throw testException);
            var processor = new CbsRequestProcessor(Substitute.For <ISecurityContext>(), fakeLoggerProvider, fakeTokenValidator);

            await TestAmqpHost.ProcessCbsRequestAsync("abc", processor);

            fakeLogger.Received(1).Log(
                LogLevel.Error,
                Arg.Any <EventId>(),
                Arg.Is <FormattedLogValues>(f => f.ToString().StartsWith("Failed to validate $cbs request")),
                testException,
                Arg.Any <Func <FormattedLogValues, Exception, string> >()
                );
        }
コード例 #6
0
ファイル: TestAmqpHost.cs プロジェクト: tonto7973/xim
        public static async Task <IDictionary <string, object> > ProcessCbsRequestAsync(string messageId, CbsRequestProcessor processor)
        {
            var           responseProperties = new Dictionary <string, object>();
            ContainerHost host = Open();

            try
            {
                host.RegisterRequestProcessor("$cbs", processor);
                Connection connection = await host.ConnectAsync();

                var session = new Session(connection);
                try
                {
                    Message response = await session.SendCbsRequestAsync(messageId);

                    responseProperties["CorrelationId"] = response.Properties.CorrelationId;
                    responseProperties["status-code"]   = response.ApplicationProperties["status-code"];
                }
                finally
                {
                    await session.CloseAsync();

                    await connection.CloseAsync();
                }
            }
            finally
            {
                host.Close();
            }
            return(responseProperties);
        }