public void DynamicInitiator()
        {
            StartListener();
            StartEngine(true);

            // Ensure we can log on statically (normally) configured initiator
            Assert.IsTrue(WaitForLogonMessage(StaticInitiatorCompID), "Failed to get logon message for static initiator session");
            SendInitiatorLogon(StaticInitiatorCompID);

            // Add the dynamic initator and ensure that we can log on
            string dynamicCompID = "ini10";
            var    sessionID     = CreateSessionID(dynamicCompID);
            var    sessionConfig = CreateSessionConfig(dynamicCompID, true);

            Assert.IsTrue(_initiator.AddSession(sessionID, sessionConfig), "Failed to add dynamic session to initiator");
            Assert.IsTrue(WaitForLogonMessage(dynamicCompID), "Failed to get logon message for dynamic initiator session");
            SendInitiatorLogon(dynamicCompID);
            Assert.IsTrue(WaitForLogonStatus(dynamicCompID), "Failed to logon dynamic initiator session");

            // Ensure that we can't add the same session again
            Assert.IsFalse(_initiator.AddSession(sessionID, sessionConfig), "Added dynamic session twice");

            // Now that dynamic initiator is logged on, ensure that unforced attempt to remove session fails
            Assert.IsFalse(_initiator.RemoveSession(sessionID, false), "Unexpected success removing active session");
            Assert.IsTrue(IsLoggedOn(dynamicCompID), "Unexpected logoff");

            // Ensure that forced attempt to remove session dynamic session succeeds, even though it is in logged on state
            Assert.IsTrue(_initiator.RemoveSession(sessionID, true), "Failed to remove active session");
            Assert.IsTrue(WaitForDisconnect(dynamicCompID), "Socket still connected after session removed");
            Assert.IsFalse(IsLoggedOn(dynamicCompID), "Session still logged on after being removed");

            // Ensure that we can perform unforced removal of a dynamic session that is not logged on.
            string dynamicCompID2 = "ini20";
            var    sessionID2     = CreateSessionID(dynamicCompID2);

            Assert.IsTrue(_initiator.AddSession(sessionID2, CreateSessionConfig(dynamicCompID2, true)), "Failed to add dynamic session to initiator");
            Assert.IsTrue(WaitForLogonMessage(dynamicCompID2), "Failed to get logon message for dynamic initiator session");
            Assert.IsFalse(IsLoggedOn(dynamicCompID2), "Session logged on");
            Assert.IsTrue(_initiator.RemoveSession(sessionID2, false), "Failed to remove inactive session");
            Assert.IsTrue(WaitForDisconnect(dynamicCompID2), "Socket still connected after session removed");

            // Ensure that we can remove statically configured session
            Assert.IsTrue(IsLoggedOn(StaticInitiatorCompID), "Unexpected loss of connection");
            Assert.IsTrue(_initiator.RemoveSession(CreateSessionID(StaticInitiatorCompID), true), "Failed to remove active session");
            Assert.IsTrue(WaitForDisconnect(StaticInitiatorCompID), "Socket still connected after session removed");
            Assert.IsFalse(IsLoggedOn(StaticInitiatorCompID), "Session still logged on after being removed");

            // Check that log directory default setting has been effective
            Assert.Greater(System.IO.Directory.GetFiles(_logPath, QuickFix.Values.BeginString_FIX42 + "*.log").Length, 0);
        }
        public void DynamicInitiator()
        {
            StartListener();
            StartEngine(true);

            // Ensure we can log on statically (normally) configured initiator
            Assert.IsTrue(WaitForLogonMessage(StaticInitiatorCompID), "Failed to get logon message for static initiator session");
            SendInitiatorLogon(StaticInitiatorCompID);

            // Add the dynamic initator and ensure that we can log on
            string dynamicCompID = "ini10";
            var    sessionID     = CreateSessionID(dynamicCompID);

            Assert.IsTrue(_initiator.AddSession(sessionID, CreateSessionConfig(dynamicCompID, true)), "Failed to add dynamic session to initiator");
            Assert.IsTrue(WaitForLogonMessage(dynamicCompID), "Failed to get logon message for dynamic initiator session");
            SendInitiatorLogon(dynamicCompID);
            Assert.IsTrue(WaitForLogonStatus(dynamicCompID), "Failed to logon dynamic initiator session");

            // Now that dynamic initiator is logged on, ensure that unforced attempt to remove session fails
            Assert.IsFalse(_initiator.RemoveSession(sessionID, false), "Unexpected success removing active session");
            Assert.IsTrue(IsLoggedOn(dynamicCompID), "Unexpected logoff");

            // Ensure that forced attempt to remove session dynamic session succeeds, even though it is in logged on state
            Assert.IsTrue(_initiator.RemoveSession(sessionID, true), "Failed to remove active session");
            Assert.IsTrue(WaitForDisconnect(dynamicCompID), "Socket still connected after session removed");
            Assert.IsFalse(IsLoggedOn(dynamicCompID), "Session still logged on after being removed");

            // Ensure that we can perform unforced removal of a dynamic session that is not logged on.
            string dynamicCompID2 = "ini20";
            var    sessionID2     = CreateSessionID(dynamicCompID2);

            Assert.IsTrue(_initiator.AddSession(sessionID2, CreateSessionConfig(dynamicCompID2, true)), "Failed to add dynamic session to initiator");
            Assert.IsTrue(WaitForLogonMessage(dynamicCompID2), "Failed to get logon message for dynamic initiator session");
            Assert.IsFalse(IsLoggedOn(dynamicCompID2), "Session logged on");
            Assert.IsTrue(_initiator.RemoveSession(sessionID2, false), "Failed to remove inactive session");
            Assert.IsTrue(WaitForDisconnect(dynamicCompID2), "Socket still connected after session removed");

            // Ensure that we can remove statically configured session
            Assert.IsTrue(IsLoggedOn(StaticInitiatorCompID), "Unexpected loss of connection");
            Assert.IsTrue(_initiator.RemoveSession(CreateSessionID(StaticInitiatorCompID), true), "Failed to remove active session");
            Assert.IsTrue(WaitForDisconnect(StaticInitiatorCompID), "Socket still connected after session removed");
            Assert.IsFalse(IsLoggedOn(StaticInitiatorCompID), "Session still logged on after being removed");
        }