public void UsingConnection()
        {
            IConnection connection = mocks.StrictMock<IConnection>();

            connection.Start();
            LastCall.On(connection).Repeat.Twice();
            connection.PurgeTempDestinations();
            LastCall.On( connection ).Repeat.Twice();
            connection.Stop();
            LastCall.On(connection).Repeat.Once();
            connection.Close();
            LastCall.On(connection).Repeat.Once();

            mocks.ReplayAll();
            
            SingleConnectionFactory scf = new SingleConnectionFactory(connection);
            IConnection con1 = scf.CreateConnection();
            con1.Start();
            con1.PurgeTempDestinations();
            con1.Stop(); // should be ignored
            con1.Close(); // should be ignored
            IConnection con2 = scf.CreateConnection();
            con2.Start();
            con1.PurgeTempDestinations();
            con2.Stop(); // should be ignored
            con2.Close(); // should be ignored.
            scf.Dispose();

            mocks.VerifyAll();
        }
        public void UsingConnection()
        {
            IConnection connection = mocks.StrictMock <IConnection>();

            connection.Start();
            LastCall.On(connection).Repeat.Twice();
            connection.PurgeTempDestinations();
            LastCall.On(connection).Repeat.Twice();
            connection.Stop();
            LastCall.On(connection).Repeat.Once();
            connection.Close();
            LastCall.On(connection).Repeat.Once();

            mocks.ReplayAll();

            SingleConnectionFactory scf  = new SingleConnectionFactory(connection);
            IConnection             con1 = scf.CreateConnection();

            con1.Start();
            con1.PurgeTempDestinations();
            con1.Stop();  // should be ignored
            con1.Close(); // should be ignored
            IConnection con2 = scf.CreateConnection();

            con2.Start();
            con1.PurgeTempDestinations();
            con2.Stop();  // should be ignored
            con2.Close(); // should be ignored.
            scf.Dispose();

            mocks.VerifyAll();
        }
        public void UsingConnectionFactoryAndReconnectOnException()
        {
            IConnectionFactory connectionFactory = (IConnectionFactory)mocks.CreateMock(typeof(IConnectionFactory));
            TestConnection     con = new TestConnection();

            Expect.Call(connectionFactory.CreateConnection()).Return(con).Repeat.Twice();

            mocks.ReplayAll();

            SingleConnectionFactory scf = new SingleConnectionFactory(connectionFactory);

            scf.ReconnectOnException = true;
            IConnection con1 = scf.CreateConnection();

            con1.Start();
            con.FireExcpetionEvent(new NMSException(""));
            IConnection con2 = scf.CreateConnection();

            con2.Start();
            scf.Dispose();

            mocks.VerifyAll();

            Assert.AreEqual(2, con.StartCount);
            Assert.AreEqual(2, con.CloseCount);
        }
        public void UsingConnection()
        {
            IConnection connection = (IConnection)mocks.CreateMock(typeof(IConnection));

            connection.Start();
            LastCall.On(connection).Repeat.Twice();
            connection.Stop();
            LastCall.On(connection).Repeat.Once();
            connection.Close();
            LastCall.On(connection).Repeat.Once();

            mocks.ReplayAll();

            SingleConnectionFactory scf  = new SingleConnectionFactory(connection);
            IConnection             con1 = scf.CreateConnection();

            con1.Start();
            con1.Stop();  // should be ignored
            con1.Close(); // should be ignored
            IConnection con2 = scf.CreateConnection();

            con2.Start();
            con2.Stop();  // should be ignored
            con2.Close(); // should be ignored.
            scf.Dispose();

            mocks.VerifyAll();
        }
        public void UsingConnectionFactoryAndClientId()
        {
            IConnectionFactory connectionFactory = A.Fake <IConnectionFactory>();
            IConnection        connection        = A.Fake <IConnection>();

            A.CallTo(() => connectionFactory.CreateConnection()).Returns(connection).Once();

            SingleConnectionFactory scf = new SingleConnectionFactory(connectionFactory);

            scf.ClientId = "MyId";
            IConnection con1 = scf.CreateConnection();

            con1.Start();
            con1.Close(); // should be ignored
            IConnection con2 = scf.CreateConnection();

            con2.Start();
            con2.Close();  // should be ignored
            scf.Dispose(); // should trigger actual close

            A.CallToSet(() => connection.ClientId).WhenArgumentsMatch(x => x.Get <string>(0) == "MyId").MustHaveHappenedOnceExactly();
            A.CallTo(() => connection.Start()).MustHaveHappenedTwiceExactly();
            A.CallTo(() => connection.Stop()).MustHaveHappenedOnceExactly();
            A.CallTo(() => connection.Close()).MustHaveHappenedOnceExactly();
        }
        public void UsingConnectionFactoryAndClientId()
        {
            IConnectionFactory connectionFactory = (IConnectionFactory)mocks.CreateMock(typeof(IConnectionFactory));
            IConnection        connection        = (IConnection)mocks.CreateMock(typeof(IConnection));

            Expect.Call(connectionFactory.CreateConnection()).Return(connection).Repeat.Once();
            connection.ClientId = "MyId";
            LastCall.On(connection).Repeat.Once();
            connection.Start();
            LastCall.On(connection).Repeat.Twice();
            connection.Stop();
            LastCall.On(connection).Repeat.Once();
            connection.Close();
            LastCall.On(connection).Repeat.Once();

            mocks.ReplayAll();

            SingleConnectionFactory scf = new SingleConnectionFactory(connectionFactory);

            scf.ClientId = "MyId";
            IConnection con1 = scf.CreateConnection();

            con1.Start();
            con1.Close(); // should be ignored
            IConnection con2 = scf.CreateConnection();

            con2.Start();
            con2.Close();   // should be ignored
            scf.Dispose();  // should trigger actual close

            mocks.VerifyAll();
        }
        public void UsingConnectionFactory()
        {
            IConnectionFactory connectionFactory = (IConnectionFactory)mocks.StrictMock <IConnectionFactory>();
            IConnection        connection        = mocks.StrictMock <IConnection>();

            Expect.Call(connectionFactory.CreateConnection()).Return(connection).Repeat.Once();
            connection.Start();
            LastCall.On(connection).Repeat.Twice();
            connection.Stop();
            LastCall.On(connection).Repeat.Once();
            connection.Close();
            LastCall.On(connection).Repeat.Once();


            mocks.ReplayAll();

            SingleConnectionFactory scf  = new SingleConnectionFactory(connectionFactory);
            IConnection             con1 = scf.CreateConnection();

            con1.Start();
            con1.Close(); // should be ignored
            IConnection con2 = scf.CreateConnection();

            con2.Start();
            con2.Close();   //should be ignored
            scf.Dispose();  //should trigger actual close

            mocks.VerifyAll();
        }
        public void UsingConnectionFactoryAndExceptionListenerAndReconnectOnException()
        {
            IConnectionFactory    connectionFactory = A.Fake <IConnectionFactory>();
            TestConnection        con      = new TestConnection();
            TestExceptionListener listener = new TestExceptionListener();

            A.CallTo(() => connectionFactory.CreateConnection()).Returns(con).Twice();

            SingleConnectionFactory scf = new SingleConnectionFactory(connectionFactory);

            scf.ExceptionListener    = listener;
            scf.ReconnectOnException = true;
            IConnection con1 = scf.CreateConnection();

            //Assert.AreSame(listener, );
            con1.Start();
            con.FireExcpetionEvent(new NMSException(""));
            IConnection con2 = scf.CreateConnection();

            con2.Start();
            scf.Dispose();

            Assert.AreEqual(2, con.StartCount);
            Assert.AreEqual(2, con.CloseCount);
            Assert.AreEqual(1, listener.Count);
        }
        public void UsingConnectionFactoryAndExceptionListenerAndReconnectOnException()
        {
            IConnectionFactory    connectionFactory = mocks.StrictMock <IConnectionFactory>();
            TestConnection        con      = new TestConnection();
            TestExceptionListener listener = new TestExceptionListener();

            Expect.Call(connectionFactory.CreateConnection()).Return(con).Repeat.Twice();

            mocks.ReplayAll();

            SingleConnectionFactory scf = new SingleConnectionFactory(connectionFactory);

            scf.ExceptionListener    = listener;
            scf.ReconnectOnException = true;
            IConnection con1 = scf.CreateConnection();

            //Assert.AreSame(listener, );
            con1.Start();
            con.FireExcpetionEvent(new NMSException(""));
            IConnection con2 = scf.CreateConnection();

            con2.Start();
            scf.Dispose();

            mocks.VerifyAll();

            Assert.AreEqual(2, con.StartCount);
            Assert.AreEqual(2, con.CloseCount);
            Assert.AreEqual(1, listener.Count);
        }
        public void UsingConnectionFactoryAndExceptionListener()
        {
            IConnectionFactory connectionFactory = mocks.StrictMock <IConnectionFactory>();
            IConnection        connection        = mocks.StrictMock <IConnection>();


            IExceptionListener listener = new ChainedExceptionListener();

            Expect.Call(connectionFactory.CreateConnection()).Return(connection).Repeat.Once();
            connection.ExceptionListener += listener.OnException;
            LastCall.On(connection).IgnoreArguments();

            connection.Start();
            LastCall.On(connection).Repeat.Twice();
            connection.Stop();
            LastCall.On(connection).Repeat.Once();
            connection.Close();
            LastCall.On(connection).Repeat.Once();

            mocks.ReplayAll();

            SingleConnectionFactory scf = new SingleConnectionFactory(connectionFactory);

            scf.ExceptionListener = listener;
            IConnection con1 = scf.CreateConnection();

            //can't look at invocation list on event ...grrr.

            con1.Start();
            con1.Stop();  // should be ignored
            con1.Close(); // should be ignored
            IConnection con2 = scf.CreateConnection();

            con2.Start();
            con2.Stop();
            con2.Close();
            scf.Dispose();

            mocks.VerifyAll();
        }
        public void UsingConnectionFactory()
        {
            IConnectionFactory connectionFactory = A.Fake <IConnectionFactory>();
            IConnection        connection        = A.Fake <IConnection>();

            A.CallTo(() => connectionFactory.CreateConnection()).Returns(connection).Once();

            SingleConnectionFactory scf  = new SingleConnectionFactory(connectionFactory);
            IConnection             con1 = scf.CreateConnection();

            con1.Start();
            con1.Close(); // should be ignored
            IConnection con2 = scf.CreateConnection();

            con2.Start();
            con2.Close();  //should be ignored
            scf.Dispose(); //should trigger actual close

            A.CallTo(() => connection.Start()).MustHaveHappenedTwiceExactly();
            A.CallTo(() => connection.Stop()).MustHaveHappenedOnceExactly();
            A.CallTo(() => connection.Close()).MustHaveHappenedOnceExactly();
        }
        public void UsingConnectionFactoryAndExceptionListener()
        {
            IConnectionFactory connectionFactory = A.Fake <IConnectionFactory>();
            IConnection        connection        = A.Fake <IConnection>();


            IExceptionListener listener = new ChainedExceptionListener();

            A.CallTo(() => connectionFactory.CreateConnection()).Returns(connection).Once();

            SingleConnectionFactory scf = new SingleConnectionFactory(connectionFactory);

            scf.ExceptionListener = listener;
            IConnection con1 = scf.CreateConnection();

            //can't look at invocation list on event ...grrr.

            con1.Start();
            con1.Stop();  // should be ignored
            con1.Close(); // should be ignored
            IConnection con2 = scf.CreateConnection();

            con2.Start();
            con2.Stop();
            con2.Close();
            scf.Dispose();

            // TODO
            //connection.ExceptionListener += listener.OnException;
            // LastCall.On(connection).IgnoreArguments();


            A.CallTo(() => connection.Start()).MustHaveHappenedTwiceExactly();
            A.CallTo(() => connection.Stop()).MustHaveHappenedOnceExactly();
            A.CallTo(() => connection.Close()).MustHaveHappenedOnceExactly();
        }
        public void UsingConnection()
        {
            IConnection connection = A.Fake <IConnection>();

            SingleConnectionFactory scf  = new SingleConnectionFactory(connection);
            IConnection             con1 = scf.CreateConnection();

            con1.Start();
            con1.PurgeTempDestinations();
            con1.Stop();  // should be ignored
            con1.Close(); // should be ignored
            IConnection con2 = scf.CreateConnection();

            con2.Start();
            con1.PurgeTempDestinations();
            con2.Stop();  // should be ignored
            con2.Close(); // should be ignored.
            scf.Dispose();

            A.CallTo(() => connection.Start()).MustHaveHappenedTwiceExactly();
            A.CallTo(() => connection.PurgeTempDestinations()).MustHaveHappenedTwiceExactly();
            A.CallTo(() => connection.Stop()).MustHaveHappenedOnceExactly();
            A.CallTo(() => connection.Close()).MustHaveHappenedOnceExactly();
        }
        public void SessionCallbackWithinSynchronizedTransaction()
        {
            SingleConnectionFactory scf = new SingleConnectionFactory(mockConnectionFactory);
            NmsTemplate template = CreateTemplate();
            template.ConnectionFactory = scf;

            mockConnection.Start();
            LastCall.On(mockConnection).Repeat.Times(2);
            // We're gonna call getTransacted 3 times, i.e. 2 more times.
            Expect.Call(mockSession.Transacted).Return(UseTransactedSession).Repeat.Twice();

            if (UseTransactedTemplate)
            {
                mockSession.Commit();
                LastCall.On(mockSession).Repeat.Once();
            }

            mockSession.Close();
            LastCall.On(mockSession).Repeat.Once();
            mockConnection.Stop();
            LastCall.On(mockConnection).Repeat.Once();
            mockConnection.Close();
            LastCall.On(mockConnection).Repeat.Once();

            mocks.ReplayAll();

            TransactionSynchronizationManager.InitSynchronization();

            try
            {
                template.Execute(delegate(ISession session)
                                     {
                                         bool b = session.Transacted;
                                         return null;
                                     });
                template.Execute(delegate(ISession session)
                                     {
                                         bool b = session.Transacted;
                                         return null;
                                     });

                Assert.AreSame(mockSession, ConnectionFactoryUtils.GetTransactionalSession(scf, null, false));
                Assert.AreSame(mockSession,
                               ConnectionFactoryUtils.GetTransactionalSession(scf, scf.CreateConnection(), false));

                //In Java this test was doing 'double-duty' and testing TransactionAwareConnectionFactoryProxy, which has
                //not been implemented in .NET

                template.Execute(delegate(ISession session)
                                     {
                                         bool b = session.Transacted;
                                         return null;
                                     });

                IList synchs = TransactionSynchronizationManager.Synchronizations;
                Assert.AreEqual(1, synchs.Count);
                ITransactionSynchronization synch = (ITransactionSynchronization) synchs[0];
                synch.BeforeCommit(false);
                synch.BeforeCompletion();
                synch.AfterCommit();
                synch.AfterCompletion(TransactionSynchronizationStatus.Unknown);
            }
            finally
            {
                TransactionSynchronizationManager.ClearSynchronization();
                //Assert.IsTrue(TransactionSynchronizationManager.ResourceDictionary.Count == 0);
                //Assert.IsFalse(TransactionSynchronizationManager.SynchronizationActive);
                scf.Dispose();
            }
            Assert.IsTrue(TransactionSynchronizationManager.ResourceDictionary.Count == 0);
            mocks.VerifyAll();
        }
 public CloseSupressingConnection(SingleConnectionFactory singleConnectionFactory, IConnection target)
 {
     this.target = target;
     this.singleConnectionFactory = singleConnectionFactory;
 }
        public void UsingConnectionFactoryAndExceptionListenerAndReconnectOnException()
        {
            IConnectionFactory connectionFactory = mocks.StrictMock<IConnectionFactory>();
            TestConnection con = new TestConnection();
            TestExceptionListener listener = new TestExceptionListener();

            Expect.Call(connectionFactory.CreateConnection()).Return(con).Repeat.Twice();

            mocks.ReplayAll();
            
            SingleConnectionFactory scf = new SingleConnectionFactory(connectionFactory);
            scf.ExceptionListener = listener;
            scf.ReconnectOnException = true;
            IConnection con1 = scf.CreateConnection();
            //Assert.AreSame(listener, );
            con1.Start();
            con.FireExcpetionEvent(new NMSException(""));
            IConnection con2 = scf.CreateConnection();
            con2.Start();
            scf.Dispose();

            mocks.VerifyAll();

            Assert.AreEqual(2, con.StartCount);
            Assert.AreEqual(2, con.CloseCount);
            Assert.AreEqual(1, listener.Count);
        }
        public void UsingConnectionFactoryAndExceptionListener()
        {
            IConnectionFactory connectionFactory = mocks.StrictMock<IConnectionFactory>();
            IConnection connection = mocks.StrictMock<IConnection>();


            IExceptionListener listener = new ChainedExceptionListener();
            Expect.Call(connectionFactory.CreateConnection()).Return(connection).Repeat.Once();
            connection.ExceptionListener += listener.OnException;
            LastCall.On(connection).IgnoreArguments();

            connection.Start();
            LastCall.On(connection).Repeat.Twice();
            connection.Stop();
            LastCall.On(connection).Repeat.Once();
            connection.Close();
            LastCall.On(connection).Repeat.Once();

            mocks.ReplayAll();
            
            SingleConnectionFactory scf = new SingleConnectionFactory(connectionFactory);
            scf.ExceptionListener = listener;
            IConnection con1 = scf.CreateConnection();

            //can't look at invocation list on event ...grrr.

            con1.Start();
            con1.Stop(); // should be ignored
            con1.Close(); // should be ignored
            IConnection con2 = scf.CreateConnection();
            con2.Start();
            con2.Stop();
            con2.Close();
            scf.Dispose();
                       
            mocks.VerifyAll();
        }
        public void UsingConnectionFactoryAndClientId()
        {
            IConnectionFactory connectionFactory = (IConnectionFactory)mocks.CreateMock(typeof(IConnectionFactory));
            IConnection connection = (IConnection)mocks.CreateMock(typeof(IConnection));

            Expect.Call(connectionFactory.CreateConnection()).Return(connection).Repeat.Once();
            connection.ClientId = "MyId";
            LastCall.On(connection).Repeat.Once();
            connection.Start();
            LastCall.On(connection).Repeat.Twice();
            connection.Stop();
            LastCall.On(connection).Repeat.Once();
            connection.Close();
            LastCall.On(connection).Repeat.Once();

            mocks.ReplayAll();

            SingleConnectionFactory scf = new SingleConnectionFactory(connectionFactory);
            scf.ClientId = "MyId";
            IConnection con1 = scf.CreateConnection();
            con1.Start();
            con1.Close(); // should be ignored
            IConnection con2 = scf.CreateConnection();
            con2.Start();
            con2.Close();   // should be ignored
            scf.Dispose();  // should trigger actual close

            mocks.VerifyAll();
        }
        public void UsingConnectionFactory()
        {
            IConnectionFactory connectionFactory = (IConnectionFactory)mocks.StrictMock<IConnectionFactory>();
            IConnection connection = mocks.StrictMock<IConnection>();

            Expect.Call(connectionFactory.CreateConnection()).Return(connection).Repeat.Once();
            connection.Start();
            LastCall.On(connection).Repeat.Twice();
            connection.Stop();
            LastCall.On(connection).Repeat.Once();
            connection.Close();
            LastCall.On(connection).Repeat.Once();


            mocks.ReplayAll();

            SingleConnectionFactory scf = new SingleConnectionFactory(connectionFactory);
            IConnection con1 = scf.CreateConnection();
            con1.Start();
            con1.Close(); // should be ignored
            IConnection con2 = scf.CreateConnection();
            con2.Start();
            con2.Close();   //should be ignored
            scf.Dispose();  //should trigger actual close

            mocks.VerifyAll();

        }
        public void UsingConnectionFactoryAndReconnectOnException()
        {
            IConnectionFactory connectionFactory = (IConnectionFactory)mocks.CreateMock(typeof(IConnectionFactory));
            TestConnection con = new TestConnection();

            Expect.Call(connectionFactory.CreateConnection()).Return(con).Repeat.Twice();

            mocks.ReplayAll();

            SingleConnectionFactory scf = new SingleConnectionFactory(connectionFactory);
            scf.ReconnectOnException = true;
            IConnection con1 = scf.CreateConnection();

            con1.Start();
            con.FireExcpetionEvent(new NMSException(""));
            IConnection con2 = scf.CreateConnection();
            con2.Start();
            scf.Dispose();

            mocks.VerifyAll();

            Assert.AreEqual(2, con.StartCount);
            Assert.AreEqual(2, con.CloseCount);
        }
 public CloseSupressingConnection(SingleConnectionFactory singleConnectionFactory, IConnection target)
 {
     this.target = target;
     this.singleConnectionFactory = singleConnectionFactory;
 }
        public void UsingConnection()
        {
            IConnection connection = (IConnection)mocks.CreateMock(typeof(IConnection));

            connection.Start();
            LastCall.On(connection).Repeat.Twice();
            connection.Stop();
            LastCall.On(connection).Repeat.Once();
            connection.Close();
            LastCall.On(connection).Repeat.Once();

            mocks.ReplayAll();

            SingleConnectionFactory scf = new SingleConnectionFactory(connection);
            IConnection con1 = scf.CreateConnection();
            con1.Start();
            con1.Stop(); // should be ignored
            con1.Close(); // should be ignored
            IConnection con2 = scf.CreateConnection();
            con2.Start();
            con2.Stop(); // should be ignored
            con2.Close(); // should be ignored.
            scf.Dispose();

            mocks.VerifyAll();
        }