Пример #1
0
        public async Task when_sending_disconnect_and_client_session_has_persistent_state_then_disconnects_and_preserves_session()
        {
            var connectionProvider = new Mock <IConnectionProvider> ();
            var sessionRepository  = new Mock <IRepository <ClientSession> >();
            var willRepository     = new Mock <IRepository <ConnectionWill> > ();

            var flow = new DisconnectFlow(connectionProvider.Object, sessionRepository.Object, willRepository.Object);

            var clientId   = Guid.NewGuid().ToString();
            var channel    = new Mock <IMqttChannel <IPacket> > ();
            var disconnect = new Disconnect();

            var session = new ClientSession
            {
                ClientId = clientId,
                Clean    = false
            };

            connectionProvider
            .Setup(p => p.GetConnection(It.Is <string> (c => c == clientId)))
            .Returns(channel.Object);

            sessionRepository.Setup(r => r.Get(It.IsAny <Expression <Func <ClientSession, bool> > >())).Returns(session);

            await flow.ExecuteAsync(clientId, disconnect, channel.Object)
            .ConfigureAwait(continueOnCapturedContext: false);

            willRepository.Verify(r => r.Delete(It.IsAny <Expression <Func <ConnectionWill, bool> > > ()));
            sessionRepository.Verify(r => r.Delete(It.Is <ClientSession>(s => s == session)), Times.Never);
        }
        public async Task when_sending_disconnect_and_client_session_has_persistent_state_then_disconnects_and_preserves_session()
        {
            Mock <IConnectionProvider>           connectionProvider = new Mock <IConnectionProvider>();
            Mock <IRepository <ClientSession> >  sessionRepository  = new Mock <IRepository <ClientSession> >();
            Mock <IRepository <ConnectionWill> > willRepository     = new Mock <IRepository <ConnectionWill> >();

            DisconnectFlow flow = new DisconnectFlow(connectionProvider.Object, sessionRepository.Object, willRepository.Object);

            string clientId = Guid.NewGuid().ToString();
            Mock <IMqttChannel <IPacket> > channel = new Mock <IMqttChannel <IPacket> >();
            Disconnect disconnect = new Disconnect();

            ClientSession session = new ClientSession(clientId, clean: false);

            connectionProvider
            .Setup(p => p.GetConnection(It.Is <string>(c => c == clientId)))
            .Returns(channel.Object);

            sessionRepository.Setup(r => r.Read(It.IsAny <string>())).Returns(session);

            await flow.ExecuteAsync(clientId, disconnect, channel.Object);

            willRepository.Verify(r => r.Delete(It.IsAny <string>()));
            sessionRepository.Verify(r => r.Delete(It.Is <string>(s => s == session.Id)), Times.Never);
        }
        public async Task when_sending_disconnect_and_client_session_has_clean_state_then_disconnects_and_delete_will_and_session()
        {
            var connectionProvider = new Mock <IConnectionProvider> ();
            var sessionRepository  = new Mock <IRepository <ClientSession> >();
            var willRepository     = new Mock <IRepository <ConnectionWill> > ();

            var flow = new DisconnectFlow(connectionProvider.Object, sessionRepository.Object, willRepository.Object);

            var clientId   = Guid.NewGuid().ToString();
            var channel    = new Mock <IMqttChannel <IPacket> > ();
            var disconnect = new Disconnect();

            var session = new ClientSession(clientId, clean: true);

            connectionProvider
            .Setup(p => p.GetConnection(It.Is <string> (c => c == clientId)))
            .Returns(channel.Object);

            sessionRepository.Setup(r => r.Read(It.IsAny <string>())).Returns(session);

            await flow.ExecuteAsync(clientId, disconnect, channel.Object)
            .ConfigureAwait(continueOnCapturedContext: false);

            willRepository.Verify(r => r.Delete(It.IsAny <string> ()));
            sessionRepository.Verify(r => r.Delete(It.Is <string>(s => s == session.Id)));
        }
        public void when_getting_explicit_server_flow_from_type_then_succeeds()
        {
            IMqttAuthenticationProvider authenticationProvider = Mock.Of <IMqttAuthenticationProvider>(p => p.Authenticate(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>()) == true);
            ServerProtocolFlowProvider  flowProvider           = new ServerProtocolFlowProvider(authenticationProvider, Mock.Of <IConnectionProvider>(), Mock.Of <IMqttTopicEvaluator>(),
                                                                                                Mock.Of <IRepositoryProvider>(), Mock.Of <IPacketIdProvider>(), Mock.Of <ISubject <MqttUndeliveredMessage> >(), new MqttConfiguration());

            ServerConnectFlow         connectFlow     = flowProvider.GetFlow <ServerConnectFlow>();
            PublishSenderFlow         senderFlow      = flowProvider.GetFlow <PublishSenderFlow>();
            ServerPublishReceiverFlow receiverFlow    = flowProvider.GetFlow <ServerPublishReceiverFlow>();
            ServerSubscribeFlow       subscribeFlow   = flowProvider.GetFlow <ServerSubscribeFlow>();
            ServerUnsubscribeFlow     unsubscribeFlow = flowProvider.GetFlow <ServerUnsubscribeFlow>();
            DisconnectFlow            disconnectFlow  = flowProvider.GetFlow <DisconnectFlow>();

            Assert.NotNull(connectFlow);
            Assert.NotNull(senderFlow);
            Assert.NotNull(receiverFlow);
            Assert.NotNull(subscribeFlow);
            Assert.NotNull(unsubscribeFlow);
            Assert.NotNull(disconnectFlow);
        }