diff --git a/Source/UnitTests/Common/CMakeLists.txt b/Source/UnitTests/Common/CMakeLists.txt index 8865c024c1..e509f160f2 100644 --- a/Source/UnitTests/Common/CMakeLists.txt +++ b/Source/UnitTests/Common/CMakeLists.txt @@ -15,6 +15,7 @@ add_dolphin_test(FlagTest FlagTest.cpp) add_dolphin_test(FloatUtilsTest FloatUtilsTest.cpp) add_dolphin_test(MathUtilTest MathUtilTest.cpp) add_dolphin_test(NandPathsTest NandPathsTest.cpp) +add_dolphin_test(SettingsHandlerTest SettingsHandlerTest.cpp) add_dolphin_test(SPSCQueueTest SPSCQueueTest.cpp) add_dolphin_test(StringUtilTest StringUtilTest.cpp) add_dolphin_test(SwapTest SwapTest.cpp) diff --git a/Source/UnitTests/Common/SettingsHandlerTest.cpp b/Source/UnitTests/Common/SettingsHandlerTest.cpp new file mode 100644 index 0000000000..cafa02ce98 --- /dev/null +++ b/Source/UnitTests/Common/SettingsHandlerTest.cpp @@ -0,0 +1,94 @@ +// Copyright 2024 Dolphin Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include + +#include "Common/SettingsHandler.h" + +namespace +{ +// The encrypted bytes corresponding to the following settings, in order: +// "key" = "val" +Common::SettingsHandler::Buffer BUFFER_A{0x91, 0x91, 0x90, 0xEE, 0xD1, 0x2F, 0xF0, 0x34, 0x79}; + +// The encrypted bytes corresponding to the following settings, in order: +// "key1" = "val1" +// "key2" = "val2" +// "foo" = "bar" +Common::SettingsHandler::Buffer BUFFER_B{ + 0x91, 0x91, 0x90, 0xE2, 0x9A, 0x38, 0xFD, 0x55, 0x42, 0xEA, 0xC4, 0xF6, 0x5E, 0xF, 0xDF, 0xE7, + 0xC3, 0x0A, 0xBB, 0x9C, 0x50, 0xB1, 0x10, 0x82, 0xB4, 0x8A, 0x0D, 0xBE, 0xCD, 0x72, 0xF4}; +} // namespace + +TEST(SettingsHandlerTest, EncryptSingleSetting) +{ + Common::SettingsHandler handler; + handler.AddSetting("key", "val"); + Common::SettingsHandler::Buffer buffer = handler.GetBytes(); + + EXPECT_TRUE(std::equal(buffer.begin(), buffer.end(), BUFFER_A.begin(), BUFFER_A.end())); +} + +TEST(SettingsHandlerTest, DecryptSingleSetting) +{ + Common::SettingsHandler::Buffer buffer = BUFFER_A; + Common::SettingsHandler handler(std::move(buffer)); + EXPECT_EQ(handler.GetValue("key"), "val"); +} + +TEST(SettingsHandlerTest, EncryptMultipleSettings) +{ + Common::SettingsHandler handler; + handler.AddSetting("key1", "val1"); + handler.AddSetting("key2", "val2"); + handler.AddSetting("foo", "bar"); + Common::SettingsHandler::Buffer buffer = handler.GetBytes(); + + EXPECT_TRUE(std::equal(buffer.begin(), buffer.end(), BUFFER_B.begin(), BUFFER_B.end())); +} + +TEST(SettingsHandlerTest, DecryptMultipleSettings) +{ + Common::SettingsHandler::Buffer buffer = BUFFER_B; + Common::SettingsHandler handler(std::move(buffer)); + EXPECT_EQ(handler.GetValue("key1"), "val1"); + EXPECT_EQ(handler.GetValue("key2"), "val2"); + EXPECT_EQ(handler.GetValue("foo"), "bar"); +} + +TEST(SettingsHandlerTest, SetBytesOverwritesExistingBuffer) +{ + Common::SettingsHandler::Buffer buffer = BUFFER_A; + Common::SettingsHandler handler(std::move(buffer)); + ASSERT_EQ(handler.GetValue("key"), "val"); + ASSERT_EQ(handler.GetValue("foo"), ""); + + Common::SettingsHandler::Buffer buffer2 = BUFFER_B; + handler.SetBytes(std::move(buffer2)); + EXPECT_EQ(handler.GetValue("foo"), "bar"); + EXPECT_EQ(handler.GetValue("key"), ""); +} + +TEST(SettingsHandlerTest, GetValueOnSameInstance) +{ + Common::SettingsHandler handler; + handler.AddSetting("key", "val"); + EXPECT_EQ(handler.GetValue("key"), ""); + + Common::SettingsHandler::Buffer buffer = handler.GetBytes(); + handler.SetBytes(std::move(buffer)); + EXPECT_EQ(handler.GetValue("key"), "val"); +} + +TEST(SettingsHandlerTest, GetValueAfterReset) +{ + Common::SettingsHandler::Buffer buffer = BUFFER_A; + Common::SettingsHandler handler(std::move(buffer)); + ASSERT_EQ(handler.GetValue("key"), "val"); + + handler.Reset(); + EXPECT_EQ(handler.GetValue("key"), ""); +} + +// TODO: Add test coverage of the edge case fixed in +// https://github.com/dolphin-emu/dolphin/pull/8704. diff --git a/Source/UnitTests/UnitTests.vcxproj b/Source/UnitTests/UnitTests.vcxproj index 0608cbe307..9e44cec8c3 100644 --- a/Source/UnitTests/UnitTests.vcxproj +++ b/Source/UnitTests/UnitTests.vcxproj @@ -54,6 +54,7 @@ +