PacketSerializerTest.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "Qt.h"
00024 #include "../BadPacket.h"
00025 #include "generated/PacketSerializerDriver.h"
00026 #include "generated/PacketProtocolMock.h"
00027 #include "generated/TransportMock.h"
00028 #include "Imports.cpp"
00029
00030 namespace Protocols {
00031 namespace Generics {
00032 namespace Testing {
00033
00035
00037 class PacketSerializerTest : public CppUnit::TestFixture
00038 {
00039 CPPUNIT_TEST_SUITE(PacketSerializerTest);
00040 CPPUNIT_TEST (testReadPacketSucceeds);
00041 CPPUNIT_TEST (testReadPacketFailsCannotPeekHeader);
00042 CPPUNIT_TEST (testReadPacketFailsPeeksHeaderButCannotReadCompletePacket);
00043 CPPUNIT_TEST (testWritePacketSucceeds);
00044 CPPUNIT_TEST (testWritePacketFailsCannotWriteCompletePacket);
00045 CPPUNIT_TEST_SUITE_END();
00046
00047 static const QByteArray header;
00048 static const QByteArray payload;
00049 static const Packet packet;
00050
00051 auto_ptr <TransportMock> transport;
00052 auto_ptr <PacketProtocolMock> packetProtocol;
00053 auto_ptr <PacketSerializer> serializerReal;
00054 auto_ptr <PacketSerializerDriver> serializer;
00055
00056 public:
00057 PacketSerializerTest()
00058 : transport(), packetProtocol(), serializerReal(), serializer()
00059 {
00060 }
00061
00062 void setUp()
00063 {
00064 transport.reset (new TransportMock);
00065 packetProtocol.reset (new PacketProtocolMock);
00066 serializerReal.reset (new PacketSerializer (*packetProtocol));
00067 serializer.reset (new PacketSerializerDriver (*serializerReal.get()));
00068 }
00069
00070 void tearDown()
00071 {
00072 serializer.reset();
00073 serializerReal.reset();
00074 packetProtocol.reset();
00075 transport.reset();
00076 }
00077
00078 void testReadPacketSucceeds()
00079 {
00080 Data outPacket;
00081 call (serializer->read (outPacket, *transport))
00082 .willCall (packetProtocol->headerLength())
00083 .willReturn (header.length())
00084 .willCall (transport->peek (header.length()))
00085 .willReturn (header)
00086 .willCall (packetProtocol->payloadLength (header))
00087 .willReturn (payload.length())
00088 .willCall (transport->canRead (header.length() + payload.length()))
00089 .willReturn (true)
00090 .willCall (transport->read (header.length()))
00091 .willReturn (header)
00092 .willCall (transport->read (payload.length()))
00093 .willReturn (payload)
00094 .willCall (packetProtocol->createPacket (header, payload))
00095 .willReturn (packet)
00096 .willReturn (true);
00097
00098 willBeEqual (Data (packet), outPacket);
00099 }
00100
00101 void testReadPacketFailsCannotPeekHeader()
00102 {
00103 Data outPacket;
00104 call (serializer->read (outPacket, *transport))
00105 .willCall (packetProtocol->headerLength())
00106 .willReturn (header.length())
00107 .willCall (transport->peek (header.length()))
00108 .willReturn (QByteArray())
00109 .willReturn (false);
00110
00111 willBeEqual (Data(), outPacket);
00112 }
00113
00114 void testReadPacketFailsPeeksHeaderButCannotReadCompletePacket()
00115 {
00116 Data outPacket;
00117 call (serializer->read (outPacket, *transport))
00118 .willCall (packetProtocol->headerLength())
00119 .willReturn (header.length())
00120 .willCall (transport->peek (header.length()))
00121 .willReturn (header)
00122 .willCall (packetProtocol->payloadLength (header))
00123 .willReturn (payload.length())
00124 .willCall (transport->canRead (header.length() + payload.length()))
00125 .willReturn (false)
00126 .willReturn (false);
00127
00128 willBeEqual (Data(), outPacket);
00129 }
00130
00131 void testWritePacketSucceeds()
00132 {
00133 call (serializer->write (packet, *transport))
00134 .willCall (transport->canWrite (header.length() + payload.length()))
00135 .willReturn (true)
00136 .willCall (transport->write (header, false))
00137 .willReturn (true)
00138 .willCall (transport->write (payload, true))
00139 .willReturn (true)
00140 .willReturn (true);
00141 }
00142
00143 void testWritePacketFailsCannotWriteCompletePacket()
00144 {
00145 call (serializer->write (packet, *transport))
00146 .willCall (transport->canWrite (header.length() + payload.length()))
00147 .willReturn (false)
00148 .willReturn (false);
00149 }
00150 };
00151
00153 const QByteArray PacketSerializerTest::header = QByteArray ("header");
00155 const QByteArray PacketSerializerTest::payload = QByteArray ("payload");
00158 const Packet PacketSerializerTest::packet = BadPacket (header, payload);
00159
00160 CPPUNIT_TEST_SUITE_REGISTRATION(PacketSerializerTest);
00161
00162 }
00163 }
00164 }