From 9091131a961849dd3ece715ce9ba5a89fa11bd6f Mon Sep 17 00:00:00 2001 From: momo5502 Date: Fri, 25 Oct 2024 17:32:19 +0200 Subject: [PATCH] Add more tests --- src/windows-emulator-test/emulation_test.cpp | 7 +-- .../emulation_test_utils.hpp | 18 ++++++ .../serialization_test.cpp | 58 +++++++++++++++++-- src/windows-emulator/syscalls.cpp | 2 +- 4 files changed, 73 insertions(+), 12 deletions(-) create mode 100644 src/windows-emulator-test/emulation_test_utils.hpp diff --git a/src/windows-emulator-test/emulation_test.cpp b/src/windows-emulator-test/emulation_test.cpp index 3cf9931e..1c28b11a 100644 --- a/src/windows-emulator-test/emulation_test.cpp +++ b/src/windows-emulator-test/emulation_test.cpp @@ -1,6 +1,4 @@ -#include -#include - +#include "emulation_test_utils.hpp" namespace test { @@ -10,8 +8,7 @@ namespace test emu.logger.disable_output(true); emu.start(); - ASSERT_TRUE(emu.process().exit_status.has_value()); - ASSERT_EQ(*emu.process().exit_status, 0); + assert_terminated_successfully(emu); } TEST(EmulationTest, CountedEmulationWorks) diff --git a/src/windows-emulator-test/emulation_test_utils.hpp b/src/windows-emulator-test/emulation_test_utils.hpp new file mode 100644 index 00000000..1445ead8 --- /dev/null +++ b/src/windows-emulator-test/emulation_test_utils.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include +#include + +namespace test +{ + inline void assert_terminated_with_status(const windows_emulator& win_emu, const NTSTATUS status) + { + ASSERT_TRUE(win_emu.process().exit_status.has_value()); + ASSERT_EQ(*win_emu.process().exit_status, status); + } + + inline void assert_terminated_successfully(const windows_emulator& win_emu) + { + assert_terminated_with_status(win_emu, STATUS_SUCCESS); + } +} diff --git a/src/windows-emulator-test/serialization_test.cpp b/src/windows-emulator-test/serialization_test.cpp index 6a3c14fb..be27f7a7 100644 --- a/src/windows-emulator-test/serialization_test.cpp +++ b/src/windows-emulator-test/serialization_test.cpp @@ -1,26 +1,72 @@ -#include -#include - +#include "emulation_test_utils.hpp" namespace test { - TEST(SerializationTest, BasicSerializationWorks) + TEST(SerializationTest, DISABLED_SerializedDataIsReproducible) { - windows_emulator emu{"./test-sample.exe"}; + windows_emulator emu1{ "./test-sample.exe" }; + emu1.logger.disable_output(true); + emu1.start(); + + assert_terminated_successfully(emu1); + + utils::buffer_serializer serializer1{}; + emu1.serialize(serializer1); + + utils::buffer_deserializer deserializer{ serializer1.get_buffer() }; + + windows_emulator new_emu{}; + new_emu.deserialize(deserializer); + + utils::buffer_serializer serializer2{}; + new_emu.serialize(serializer2); + + ASSERT_EQ(serializer1.get_buffer(), serializer2.get_buffer()); + } + + TEST(SerializationTest, DISABLED_EmulationIsReproducible) + { + windows_emulator emu1{ "./test-sample.exe" }; + emu1.logger.disable_output(true); + emu1.start(); + + assert_terminated_successfully(emu1); + + utils::buffer_serializer serializer1{}; + emu1.serialize(serializer1); + + windows_emulator emu2{ "./test-sample.exe" }; + emu2.logger.disable_output(true); + emu2.start(); + + assert_terminated_successfully(emu2); + + utils::buffer_serializer serializer2{}; + emu2.serialize(serializer2); + + ASSERT_EQ(serializer1.get_buffer(), serializer2.get_buffer()); + } + + TEST(SerializationTest, DISABLED_BasicSerializationWorks) + { + windows_emulator emu{ "./test-sample.exe" }; emu.logger.disable_output(true); emu.start({}, 100); utils::buffer_serializer serializer{}; emu.serialize(serializer); - utils::buffer_deserializer deserializer{serializer.get_buffer()}; + utils::buffer_deserializer deserializer{ serializer.get_buffer() }; windows_emulator new_emu{}; new_emu.logger.disable_output(true); new_emu.deserialize(deserializer); new_emu.start(); + assert_terminated_successfully(new_emu); + emu.start(); + assert_terminated_successfully(emu); utils::buffer_serializer serializer1{}; utils::buffer_serializer serializer2{}; diff --git a/src/windows-emulator/syscalls.cpp b/src/windows-emulator/syscalls.cpp index af214467..eee3288d 100644 --- a/src/windows-emulator/syscalls.cpp +++ b/src/windows-emulator/syscalls.cpp @@ -2154,7 +2154,7 @@ namespace { if (lock.value()) { - puts("NtAlertThreadByThreadIdEx with lock not supported yet!"); + c.win_emu.logger.print(color::gray, "NtAlertThreadByThreadIdEx with lock not supported yet!"); //c.emu.stop(); //return STATUS_NOT_SUPPORTED; }