/// <summary> /// Returns <see cref="TcpConnection_Accessor"/> object accessor for given <see cref="TcpConnection"/> object. /// </summary> /// <param name="connection"><see cref="TcpConnection"/> object</param> /// <returns><see cref="TcpConnection_Accessor"/> object</returns> protected TcpConnection_Accessor GetConnectionAccessor(ConnectionBase connection) { PrivateObject po = new PrivateObject(connection); TcpConnection_Accessor accessor = new TcpConnection_Accessor(po); return(accessor); }
public virtual void DataStreamTest() { ConnectionBase conn = CreateConnection("test"); try { TcpConnection_Accessor accessor = GetConnectionAccessor(conn); accessor.Socket = new ClientSocketMock(); Assert.IsNull(accessor.DataStream); conn.Open(); Assert.IsNotNull(accessor.DataStream); } finally { conn.Close(); } }
public virtual void PerformCommandTest() { ConnectionBase conn = CreateConnection("test"); try { TcpConnection_Accessor accessor = GetConnectionAccessor(conn); // assign mock socket accessor.Socket = new ClientSocketMock(); accessor.Socket.Open(); XmlFormatterFactoryMock factory = new XmlFormatterFactoryMock(); accessor.FormatterFactory = factory; IBinaryWriter writer = factory.CreateWriter(accessor.DataStream); // preserialize server protocol version and rewind to start pos. (emulate first stage of handshake procedure) int protocolVersion = TcpConnection_Accessor.MAJOR_PROTOCOL_VERSION; writer.Write(protocolVersion); StreamAdapter_Accessor streamAccessor = GetStreamAccessor((StreamAdapter)accessor.DataStream); long pos = streamAccessor.Stream.Position; streamAccessor.Stream.Seek(0, SeekOrigin.Begin); // command id and version const ServerCommand id = ServerCommand.Status; const short ver = 1; MockCommand command = new MockCommand(conn, id, ver); accessor.PerformCommand(command); accessor.Socket.Open(); streamAccessor.Stream.Seek(pos, SeekOrigin.Begin); IBinaryReader reader = factory.CreateReader(accessor.DataStream); // skip protocol version sent by hadshake method int clientProtocol = reader.ReadInt32(); // read & check data sent by mock command code ServerCommand actualId = (ServerCommand)reader.ReadInt16(); Assert.AreEqual(id, actualId); short actualVer = reader.ReadInt16(); Assert.AreEqual(ver, actualVer); } finally { conn.Close(); } }
public virtual void ProtectedDisposeTest() { ConnectionBase conn = CreateConnection("test"); try { TcpConnection_Accessor accessor = GetConnectionAccessor(conn); accessor.Socket = new ClientSocketMock(); conn.Open(); Assert.IsTrue(conn.IsConnected); accessor.Dispose(false); Assert.IsTrue(conn.IsConnected); accessor.Dispose(true); Assert.IsFalse(conn.IsConnected); } finally { conn.Close(); } }
public virtual void ConnectionTimeoutTest() { ConnectionBase conn = CreateConnection("test"); try { TcpConnection_Accessor accessor = GetConnectionAccessor(conn); accessor.Socket = new ClientSocketMock(); const int timeout = 100; conn.ConnectionTimeout = timeout; Assert.AreEqual(timeout, conn.ConnectionTimeout); conn.Open(); // wait "timeout" time and give timer little time to set new property value Thread.Sleep(timeout + 100); Assert.IsFalse(conn.IsConnected); } finally { conn.Close(); } }
public virtual void SendHandshakeTest() { ConnectionBase conn = CreateConnection("test"); try { TcpConnection_Accessor accessor = GetConnectionAccessor(conn); // assign mock socket and open fake stream accessor.Socket = new ClientSocketMock(); // underlying socket sholud be already opened accessor.Socket.Open(); // assign mock binary formatter factory XmlFormatterFactoryMock factory = new XmlFormatterFactoryMock(); accessor._formatterFactory = factory; IBinaryWriter writer = factory.CreateWriter(accessor.DataStream); // preserialize server reponse (protocol version) and rewind to start pos. (emulate first stage of handshake procedure) int protocolVersion = TcpConnection_Accessor.MAJOR_PROTOCOL_VERSION; writer.Write(protocolVersion); StreamAdapter_Accessor streamAccessor = GetStreamAccessor((StreamAdapter)accessor.DataStream); long pos = streamAccessor.Stream.Position; streamAccessor.Stream.Seek(0, SeekOrigin.Begin); accessor.SendHandshake(); // restore stream pos streamAccessor.Stream.Seek(pos, SeekOrigin.Begin); IBinaryReader reader = factory.CreateReader(accessor.DataStream); // read client response int actual = reader.ReadInt32(); Assert.AreEqual(actual, protocolVersion); } finally { conn.Close(); } }
protected TcpConnection_Accessor GetTcpConnectionAccessor(ConnectionBase connection) { PrivateObject po = new PrivateObject(connection); TcpConnection_Accessor accessor = new TcpConnection_Accessor(po); return accessor; }