/** * @file test_data_processor.cpp * @brief DataProcessor 单元测试 * * 测试数据处理管道、加密/解密、压缩/解压功能。 */ #include "test_framework.h" #include using namespace extra2d; using namespace extra2d::test; // --------------------------------------------------------------------------- // XOR 加密/解密测试 // --------------------------------------------------------------------------- TEST(DataProcessor, XOR_EncryptDecrypt) { std::vector original = createTestData(1024); std::string key = "test-key-12345"; Encryptor encryptor(key, Decryptor::Type::XOR); Decryptor decryptor(key, Decryptor::Type::XOR); std::vector encrypted = encryptor.process(original); std::vector decrypted = decryptor.process(encrypted); TEST_ASSERT_TRUE(dataEquals(original, decrypted)); TEST_ASSERT_FALSE(dataEquals(original, encrypted)); } TEST(DataProcessor, XOR_SameKeyProducesSameResult) { std::vector data = createTestData(512); std::string key = "secret"; Encryptor enc1(key, Decryptor::Type::XOR); Encryptor enc2(key, Decryptor::Type::XOR); std::vector result1 = enc1.process(data); std::vector result2 = enc2.process(data); TEST_ASSERT_TRUE(dataEquals(result1, result2)); } TEST(DataProcessor, XOR_DifferentKeysProduceDifferentResults) { std::vector data = createTestData(512); Encryptor enc1("key1", Decryptor::Type::XOR); Encryptor enc2("key2", Decryptor::Type::XOR); std::vector result1 = enc1.process(data); std::vector result2 = enc2.process(data); TEST_ASSERT_FALSE(dataEquals(result1, result2)); } TEST(DataProcessor, XOR_EmptyKey) { std::vector data = createTestData(256); Encryptor encryptor("", Decryptor::Type::XOR); Decryptor decryptor("", Decryptor::Type::XOR); std::vector encrypted = encryptor.process(data); std::vector decrypted = decryptor.process(encrypted); TEST_ASSERT_TRUE(dataEquals(data, decrypted)); } TEST(DataProcessor, XOR_EmptyData) { std::vector empty; std::string key = "test"; Encryptor encryptor(key, Decryptor::Type::XOR); Decryptor decryptor(key, Decryptor::Type::XOR); std::vector encrypted = encryptor.process(empty); std::vector decrypted = decryptor.process(encrypted); TEST_ASSERT_TRUE(decrypted.empty()); } // --------------------------------------------------------------------------- // DataPipe 测试 // --------------------------------------------------------------------------- TEST(DataProcessor, DataPipe_Empty) { DataPipe pipe; TEST_ASSERT_TRUE(pipe.empty()); TEST_ASSERT_EQ(0u, pipe.size()); std::vector data = createTestData(100); std::vector result = pipe.process(data); TEST_ASSERT_TRUE(dataEquals(data, result)); } TEST(DataProcessor, DataPipe_SingleProcessor) { DataPipe pipe; pipe.encrypt("key", Decryptor::Type::XOR); TEST_ASSERT_FALSE(pipe.empty()); TEST_ASSERT_EQ(1u, pipe.size()); std::vector original = createTestData(256); std::vector processed = pipe.process(original); TEST_ASSERT_FALSE(dataEquals(original, processed)); } TEST(DataProcessor, DataPipe_MultipleProcessors) { DataPipe pipe; pipe.encrypt("key", Decryptor::Type::XOR); pipe.encrypt("key2", Decryptor::Type::XOR); pipe.encrypt("key", Decryptor::Type::XOR); pipe.encrypt("key2", Decryptor::Type::XOR); TEST_ASSERT_EQ(4u, pipe.size()); std::vector original = createTestData(512); std::vector processed = pipe.process(original); TEST_ASSERT_TRUE(dataEquals(original, processed)); } TEST(DataProcessor, DataPipe_EncryptDecrypt) { DataPipe encryptPipe; encryptPipe.encrypt("secret-key", Decryptor::Type::XOR); DataPipe decryptPipe; decryptPipe.decrypt("secret-key", Decryptor::Type::XOR); std::vector original = createTestData(1024); std::vector encrypted = encryptPipe.process(original); std::vector decrypted = decryptPipe.process(encrypted); TEST_ASSERT_TRUE(dataEquals(original, decrypted)); } TEST(DataProcessor, DataPipe_Clear) { DataPipe pipe; pipe.encrypt("key", Decryptor::Type::XOR); pipe.encrypt("key2", Decryptor::Type::XOR); TEST_ASSERT_EQ(2u, pipe.size()); pipe.clear(); TEST_ASSERT_TRUE(pipe.empty()); TEST_ASSERT_EQ(0u, pipe.size()); } TEST(DataProcessor, DataPipe_MoveSemantics) { DataPipe pipe1; pipe1.encrypt("key", Decryptor::Type::XOR); DataPipe pipe2 = std::move(pipe1); TEST_ASSERT_EQ(1u, pipe2.size()); std::vector data = createTestData(128); std::vector result = pipe2.process(data); TEST_ASSERT_FALSE(dataEquals(data, result)); } // --------------------------------------------------------------------------- // 校验和测试 // --------------------------------------------------------------------------- TEST(DataProcessor, Checksum_Consistency) { std::vector data = createTestData(1024); std::vector checksum1 = computeChecksum(data); std::vector checksum2 = computeChecksum(data); TEST_ASSERT_TRUE(dataEquals(checksum1, checksum2)); } TEST(DataProcessor, Checksum_DifferentData) { std::vector data1 = createTestData(1024, 42); std::vector data2 = createTestData(1024, 43); std::vector checksum1 = computeChecksum(data1); std::vector checksum2 = computeChecksum(data2); TEST_ASSERT_FALSE(dataEquals(checksum1, checksum2)); } TEST(DataProcessor, Checksum_Verify) { std::vector data = createTestData(2048); std::vector checksum = computeChecksum(data); TEST_ASSERT_TRUE(verifyChecksum(data, checksum)); } TEST(DataProcessor, Checksum_VerifyTampered) { std::vector data = createTestData(2048); std::vector checksum = computeChecksum(data); data[100] ^= 0xFF; TEST_ASSERT_FALSE(verifyChecksum(data, checksum)); } TEST(DataProcessor, Checksum_Size) { std::vector data = createTestData(100); std::vector checksum = computeChecksum(data); TEST_ASSERT_EQ(32u, checksum.size()); } // --------------------------------------------------------------------------- // 处理器链测试 // --------------------------------------------------------------------------- TEST(DataProcessor, Chain_EncryptDecrypt) { std::vector original = createTestData(512); std::string key = "chain-test-key"; Encryptor encryptor(key, Decryptor::Type::XOR); Decryptor decryptor(key, Decryptor::Type::XOR); encryptor.setNext(std::make_unique(key, Decryptor::Type::XOR)); std::vector result = encryptor.process(original); TEST_ASSERT_TRUE(dataEquals(original, result)); } // --------------------------------------------------------------------------- // 边界条件测试 // --------------------------------------------------------------------------- TEST(DataProcessor, Boundary_SingleByte) { std::vector data = {0x42}; std::string key = "key"; Encryptor encryptor(key, Decryptor::Type::XOR); Decryptor decryptor(key, Decryptor::Type::XOR); std::vector encrypted = encryptor.process(data); std::vector decrypted = decryptor.process(encrypted); TEST_ASSERT_TRUE(dataEquals(data, decrypted)); TEST_ASSERT_EQ(1u, encrypted.size()); } TEST(DataProcessor, Boundary_LargeData) { std::vector data = createTestData(1024 * 1024); std::string key = "large-data-key"; Encryptor encryptor(key, Decryptor::Type::XOR); Decryptor decryptor(key, Decryptor::Type::XOR); std::vector encrypted = encryptor.process(data); std::vector decrypted = decryptor.process(encrypted); TEST_ASSERT_TRUE(dataEquals(data, decrypted)); }