123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332 |
- #include <string.h>
- #include "../Tests.h"
- #include "core/Network.h"
- #define TEST_READ(Type, type, value) \
- { \
- type u; \
- CORE_TEST_FALSE(coreInPacketRead##Type(&in, &u)); \
- CORE_TEST_TRUE(u == value); \
- }
- static void testWriteRead(void) {
- CoreOutPacket out;
- coreInitOutPacket(&out);
- coreOutPacketWriteU8(&out, 200);
- coreOutPacketWriteU16(&out, 6656);
- coreOutPacketWriteU32(&out, 348923689);
- coreOutPacketWriteI8(&out, 90);
- coreOutPacketWriteI8(&out, -35);
- coreOutPacketWriteI16(&out, 843);
- coreOutPacketWriteI16(&out, -8961);
- coreOutPacketWriteI32(&out, 100430199);
- coreOutPacketWriteI32(&out, -534534);
- coreOutPacketWriteFloat(&out, 64564.5346f);
- const char s[] = "This is Great";
- coreOutPacketWriteString(&out, s, sizeof(s));
- CoreInPacket in;
- coreInitInPacket(&in, out.data.buffer, out.data.size);
- TEST_READ(U8, u8, 200)
- TEST_READ(U16, u16, 6656)
- TEST_READ(U32, u32, 348923689)
- TEST_READ(I8, i8, 90)
- TEST_READ(I8, i8, -35)
- TEST_READ(I16, i16, 843)
- TEST_READ(I16, i16, -8961)
- TEST_READ(I32, i32, 100430199)
- TEST_READ(I32, i32, -534534)
- float f;
- CORE_TEST_FALSE(coreInPacketReadFloat(&in, &f));
- CORE_TEST_FLOAT(64564.5346f, f, 0.00001f);
- char buffer[256];
- size_t n = coreInPacketReadString(&in, buffer, sizeof(buffer));
- CORE_TEST_SIZE(14, n);
- CORE_TEST_STRING(s, buffer);
- CORE_TEST_TRUE(coreInPacketReadU8(&in, &(u8){0}));
- CORE_TEST_TRUE(coreInPacketReadU16(&in, &(u16){0}));
- CORE_TEST_TRUE(coreInPacketReadU32(&in, &(u32){0}));
- CORE_TEST_TRUE(coreInPacketReadI8(&in, &(i8){0}));
- CORE_TEST_TRUE(coreInPacketReadI16(&in, &(i16){0}));
- CORE_TEST_TRUE(coreInPacketReadI32(&in, &(i32){0}));
- CORE_TEST_TRUE(coreInPacketReadFloat(&in, &(float){0}));
- CORE_TEST_SIZE(0, coreInPacketReadString(&in, nullptr, 0));
- CORE_TEST_SIZE(0, coreInPacketReadString(&in, buffer, sizeof(buffer)));
- coreDestroyOutPacket(&out);
- }
- static void testTooShortBuffer(void) {
- CoreOutPacket out;
- coreInitOutPacket(&out);
- const char s[] = "This is Great";
- coreOutPacketWriteString(&out, s, sizeof(s));
- const char s2[] = "Well hoho";
- coreOutPacketWriteString(&out, s2, sizeof(s2));
- CoreInPacket in;
- coreInitInPacket(&in, out.data.buffer, out.data.size);
- char buffer[8];
- size_t n = coreInPacketReadString(&in, buffer, sizeof(buffer));
- CORE_TEST_SIZE(14, n);
- CORE_TEST_STRING("This is", buffer);
- char buffer2[6];
- size_t n2 = coreInPacketReadString(&in, buffer2, sizeof(buffer2));
- CORE_TEST_SIZE(10, n2);
- CORE_TEST_STRING("Well ", buffer2);
- coreDestroyOutPacket(&out);
- }
- typedef struct {
- u8 a;
- u8 b;
- } PacketTest;
- static void testBinaryData(void) {
- CoreOutPacket out;
- coreInitOutPacket(&out);
- PacketTest data = {56, 3};
- coreOutPacketWrite(&out, &data, sizeof(data));
- CoreInPacket in;
- coreInitInPacket(&in, out.data.buffer, out.data.size);
- PacketTest inData;
- CORE_TEST_FALSE(coreInPacketRead(&in, &inData, sizeof(inData)));
- CORE_TEST_TRUE(memcmp(&inData, &data, sizeof(inData)) == 0);
- coreDestroyOutPacket(&out);
- }
- static void testShortString(void) {
- CoreOutPacket out;
- coreInitOutPacket(&out);
- coreOutPacketWriteU16(&out, 200);
- coreOutPacketWriteU16(&out, 65535);
- CoreInPacket in;
- coreInitInPacket(&in, out.data.buffer, out.data.size);
- char buffer[256];
- size_t n = coreInPacketReadString(&in, buffer, sizeof(buffer));
- CORE_TEST_SIZE(200, n);
- CORE_TEST_STRING("", buffer);
- coreDestroyOutPacket(&out);
- }
- /*static bool checkError(Test& test, const Error e, const char* msg) {
- if(e.has()) {
- test.checkFalse(true, msg);
- return true;
- }
- return false;
- }
- static void tickClient(int ticks) {
- for(int i = 0; i < ticks; i++) {
- Client::tick();
- }
- }
- static void tick(int ticks) {
- for(int i = 0; i < ticks; i++) {
- Client::tick();
- Server::tick();
- }
- }
- static void testConnect(Test& test, PacketSendMode mode) {
- static bool clientConnected = false;
- static bool clientDisconnected = false;
- static bool clientPackage = false;
- clientConnected = false;
- clientDisconnected = false;
- clientPackage = false;
- static int packageCounter = 0;
- static bool serverConnected = false;
- static bool serverDisconnect = false;
- static uint8 data1 = 0;
- static uint16 data2 = 0;
- static uint32 data3 = 0;
- static int8 data4 = 0;
- static int16 data5 = 0;
- static int32 data6 = 0;
- static int8 data7 = 0;
- static int16 data8 = 0;
- static int32 data9 = 0;
- static StringBuffer<20> data10;
- static float data11 = 0.0f;
- static IntVector3 data12;
- static Vector3 data13;
- serverConnected = false;
- serverDisconnect = false;
- data1 = 0;
- data2 = 0;
- data3 = 0;
- data4 = 0;
- data5 = 0;
- data6 = 0;
- data7 = 0;
- data8 = 0;
- data9 = 0;
- data10.clear();
- data11 = 0.0f;
- data12 = IntVector3();
- data13 = Vector3();
- Server::resetHandler();
- Server::setConnectHandler([](Server::Client) { serverConnected = true; });
- Server::setDisconnectHandler(
- [](Server::Client) { serverDisconnect = true; });
- Server::setPacketHandler([](Server::Client client, InPacket& in) {
- in.read(data1);
- in.read(data2);
- in.read(data3);
- in.read(data4);
- in.read(data5);
- in.read(data6);
- in.read(data7);
- in.read(data8);
- in.read(data9);
- in.read(data10);
- in.read(data11);
- in.read(data12);
- in.read(data13);
- if(packageCounter == 0) {
- OutPacket out(0);
- Server::send(client, out, PacketSendMode::RELIABLE);
- } else if(packageCounter == 1) {
- OutPacket out(0);
- Server::send(client, out, PacketSendMode::SEQUENCED);
- } else if(packageCounter == 2) {
- OutPacket out(0);
- Server::send(client, out, PacketSendMode::UNSEQUENCED);
- }
- packageCounter++;
- });
- Client::resetHandler();
- Client::setConnectHandler([]() { clientConnected = true; });
- Client::setDisconnectHandler([]() { clientDisconnected = true; });
- Client::setPacketHandler([](InPacket&) { clientPackage = true; });
- if(checkError(test, Server::start(54321, 5), "server can initialize")) {
- return;
- } else if(checkError(test, Client::start(), "client can initialize")) {
- return;
- } else if(checkError(test, Client::connect("127.0.0.1", 54321, 90),
- "start connection failed")) {
- return;
- }
- test.checkFalse(Client::isConnected(), "client not connected yet");
- test.checkTrue(Client::isConnecting(), "client is connecting");
- tick(100);
- test.checkTrue(clientConnected, "client called connect callback");
- test.checkTrue(Client::isConnected(), "client is connected");
- test.checkFalse(Client::isConnecting(), "client is no more connecting");
- OutPacket out(50);
- out.writeU8(0xF1).writeU16(0xF123).writeU32(0xF1234567);
- out.writeS8(-0x71).writeS16(-0x7123).writeS32(-0x71234567);
- out.writeS8(0x71).writeS16(0x7123).writeS32(0x71234567);
- StringBuffer<20> s("Hi there");
- out.writeString(s);
- out.writeFloat(252345.983f);
- out.writeVector(IntVector3(1, 2, 3));
- out.writeVector(Vector3(1.5f, 2.5f, 3.5f));
- Client::send(out, mode);
- tick(100);
- test.checkTrue(clientPackage, "client has received data");
- test.checkTrue(serverConnected, "server has connection");
- test.checkUnsigned8(0xF1, data1, "correct value is sent 1");
- test.checkUnsigned16(0xF123, data2, "correct value is sent 2");
- test.checkEqual(0xF1234567u, data3, "correct value is sent 3");
- test.checkSigned8(-0x71, data4, "correct value is sent 4");
- test.checkSigned16(-0x7123, data5, "correct value is sent 5");
- test.checkEqual(-0x71234567, data6, "correct value is sent 6");
- test.checkSigned8(0x71, data7, "correct value is sent 7");
- test.checkSigned16(0x7123, data8, "correct value is sent 8");
- test.checkEqual(0x71234567, data9, "correct value is sent 9");
- test.checkEqual(s, data10, "correct value is sent 10");
- test.checkFloat(252345.983f, data11, 0.01f, "correct value is sent 11");
- test.checkEqual(1, data12[0], "correct value is sent 12|1");
- test.checkEqual(2, data12[1], "correct value is sent 12|2");
- test.checkEqual(3, data12[2], "correct value is sent 12|3");
- test.checkFloat(1.5f, data13[0], 0.01f, "correct value is sent 13|1");
- test.checkFloat(2.5f, data13[1], 0.01f, "correct value is sent 13|2");
- test.checkFloat(3.5f, data13[2], 0.01f, "correct value is sent 13|3");
- Client::disconnect(90);
- test.checkFalse(Client::isConnected(), "client was disconnected");
- test.checkFalse(Client::isConnecting(), "client is not connecting");
- tick(100);
- test.checkTrue(clientDisconnected, "client has disconnected");
- test.checkTrue(serverDisconnect, "client has disconnected on server");
- Client::stop();
- Server::stop();
- }
- static void testDisconnect(Test& test) {
- static bool disconnected = false;
- disconnected = false;
- Client::resetHandler();
- Client::setDisconnectHandler([]() { disconnected = true; });
- if(checkError(test, Client::start(), "client can initialize")) {
- return;
- } else if(checkError(test, Client::connect("127.0.0.1", 54321, 90),
- "start connection failed")) {
- return;
- }
- test.checkFalse(Client::isConnected(), "client not connected yet");
- test.checkTrue(Client::isConnecting(), "client is connecting");
- Client::disconnect(50);
- tickClient(100);
- test.checkFalse(Client::isConnected(), "client was disconnected");
- test.checkFalse(Client::isConnecting(), "client is not connecting");
- test.checkTrue(disconnected, "client has disconnected");
- Client::stop();
- }
- static void testStop(Test& test) {
- static bool disconnected = false;
- disconnected = false;
- Client::resetHandler();
- Client::setDisconnectHandler([]() { disconnected = true; });
- if(checkError(test, Client::start(), "client can initialize")) {
- return;
- } else if(checkError(test, Client::connect("127.0.0.1", 54321, 90),
- "start connection failed")) {
- return;
- }
- test.checkFalse(Client::isConnected(), "client not connected yet");
- test.checkTrue(Client::isConnecting(), "client is connecting");
- Client::stop();
- test.checkFalse(Client::isConnected(), "client was disconnected");
- test.checkFalse(Client::isConnecting(), "client is not connecting");
- test.checkTrue(disconnected, "client has disconnected");
- }*/
- void coreTestNetwork() {
- testWriteRead();
- testTooShortBuffer();
- testBinaryData();
- testShortString();
- // testConnect(test, PacketSendMode::UNSEQUENCED);
- // testConnect(test, PacketSendMode::RELIABLE);
- // testConnect(test, PacketSendMode::SEQUENCED);
- // testDisconnect(test);
- // testStop(test);
- }
|