// 版权所有 (c) ling 保留所有权利。 // 除非另行说明,否则仅允许在Transmission中使用此文件中的代码。 // // 由 ling 创建于 24-4-18. // #include #include "Transmit.h" static bool isExec = false; static const char *shortStr = "Client Hello"; static const char *LongStr = "Client HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient Hello"; static const char *LongLongStr = "Client HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient Hello" "Client HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient Hello" "Client HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient Hello" "Client HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient Hello" "Client HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient Hello" "Client HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient Hello" "Client HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient Hello" "Client HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient Hello" "Client HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient HelloClient Hello"; class Transmit : public Transmission::Transmit { private: SOCKET fd; public: explicit Transmit(SOCKET fd, std::string ip) : Transmission::Transmit(fd, ip) { this->fd = fd; } void packetReady(int type, std::shared_ptr data, size_t size) override { if (type == 1) ASSERT_TRUE(strcmp((char *) data.get(), shortStr) == 0); else if (type == 2) ASSERT_TRUE(strcmp((char *) data.get(), LongStr) == 0); else if (type == 3) { ASSERT_TRUE(strcmp((char *) data.get(), LongLongStr) == 0); } else ASSERT_TRUE(false); isExec = true; } void pushData(const unsigned char *data, int32_t size) const override { ::write(this->fd, &size, sizeof(int32_t)); ::write(this->fd, data, size); ::write(this->fd, &DATA_STOP, sizeof(DATA_STOP)); } void read() { int32_t size = 0; ::read(this->fd, &size, sizeof(size)); auto temp = new unsigned char[size]; ::read(this->fd, temp, size); int32_t stop = 0; ::read(this->fd, &stop, sizeof(stop)); dataArrives((unsigned char *) &size, sizeof(size)); dataArrives(temp, size); dataArrives((unsigned char *) &stop, sizeof(stop)); delete[] temp; } }; TEST(Transmit测试, 1) { int fds[2]; pipe(fds); int read = fds[0]; int write = fds[1]; Transmit transmitRead(read, ""); Transmit transmitWrite(write, ""); transmitWrite.sendData((unsigned char *) shortStr, strlen(shortStr) + 1, 1); transmitRead.read(); ASSERT_TRUE(isExec); isExec = false; transmitWrite.sendData((unsigned char *) LongStr, strlen(LongStr) + 1, 2); transmitRead.read(); ASSERT_TRUE(isExec); isExec = false; transmitWrite.sendData((unsigned char *) LongLongStr, strlen(LongLongStr) + 1, 3); transmitRead.read(); ASSERT_TRUE(isExec); }