diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2024-03-01 17:22:12 +0100 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2024-03-01 17:22:12 +0100 |
commit | 0e0f564cea6aef2bb9aa40dd34f670c732a42f9f (patch) | |
tree | 1ce42f6b2d078275a5f9151c8cf34aa6ead48150 /modules | |
parent | 8c0511a69b49cfb584a773db7af404ed15de36ca (diff) | |
parent | e461496ecb89263d1df052b1876ad607b196b58d (diff) | |
download | redot-engine-0e0f564cea6aef2bb9aa40dd34f670c732a42f9f.tar.gz |
Merge pull request #89021 from wheatear-dev/test-crypto-key
Add unit tests for CryptoKey
Diffstat (limited to 'modules')
-rw-r--r-- | modules/mbedtls/SCsub | 3 | ||||
-rw-r--r-- | modules/mbedtls/tests/test_crypto_mbedtls.cpp | 39 | ||||
-rw-r--r-- | modules/mbedtls/tests/test_crypto_mbedtls.h | 31 |
3 files changed, 73 insertions, 0 deletions
diff --git a/modules/mbedtls/SCsub b/modules/mbedtls/SCsub index 7c1204d2b7..4b8f65d8ff 100644 --- a/modules/mbedtls/SCsub +++ b/modules/mbedtls/SCsub @@ -121,6 +121,9 @@ if env["tests"]: env_mbed_tls.Append(CPPDEFINES=["TESTS_ENABLED"]) env_mbed_tls.add_source_files(module_obj, "./tests/*.cpp") + if env["disable_exceptions"]: + env_mbed_tls.Append(CPPDEFINES=["DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS"]) + env.modules_sources += module_obj # Needed to force rebuilding the module files when the thirdparty library is updated. diff --git a/modules/mbedtls/tests/test_crypto_mbedtls.cpp b/modules/mbedtls/tests/test_crypto_mbedtls.cpp index 22d79b79f9..b96a072146 100644 --- a/modules/mbedtls/tests/test_crypto_mbedtls.cpp +++ b/modules/mbedtls/tests/test_crypto_mbedtls.cpp @@ -33,6 +33,7 @@ #include "../crypto_mbedtls.h" #include "tests/test_macros.h" +#include "tests/test_utils.h" namespace TestCryptoMbedTLS { @@ -60,4 +61,42 @@ void hmac_context_digest_test(HashingContext::HashType ht, String expected_hex) String hex = String::hex_encode_buffer(digest.ptr(), digest.size()); CHECK(hex == expected_hex); } + +Ref<CryptoKey> create_crypto_key(const String &p_key_path, bool p_public_only) { + Ref<CryptoKey> crypto_key = Ref<CryptoKey>(CryptoKey::create()); + crypto_key->load(p_key_path, p_public_only); + return crypto_key; +} + +String read_file_s(const String &p_file_path) { + Ref<FileAccess> file_access = FileAccess::open(p_file_path, FileAccess::READ); + REQUIRE(file_access.is_valid()); + return file_access->get_as_utf8_string(); +} + +bool files_equal(const String &p_in_path, const String &p_out_path) { + const String s_in = read_file_s(p_in_path); + const String s_out = read_file_s(p_out_path); + return s_in == s_out; +} + +void crypto_key_public_only_test(const String &p_key_path, bool p_public_only) { + Ref<CryptoKey> crypto_key = create_crypto_key(p_key_path, p_public_only); + bool is_equal = crypto_key->is_public_only() == p_public_only; + CHECK(is_equal); +} + +void crypto_key_save_test(const String &p_in_path, const String &p_out_path, bool p_public_only) { + Ref<CryptoKey> crypto_key = create_crypto_key(p_in_path, p_public_only); + crypto_key->save(p_out_path, p_public_only); + bool is_equal = files_equal(p_in_path, p_out_path); + CHECK(is_equal); +} + +void crypto_key_save_public_only_test(const String &p_in_priv_path, const String &p_in_pub_path, const String &p_out_path) { + Ref<CryptoKey> crypto_key = create_crypto_key(p_in_priv_path, false); + crypto_key->save(p_out_path, true); + bool is_equal = files_equal(p_in_pub_path, p_out_path); + CHECK(is_equal); +} } // namespace TestCryptoMbedTLS diff --git a/modules/mbedtls/tests/test_crypto_mbedtls.h b/modules/mbedtls/tests/test_crypto_mbedtls.h index 0b24925d6b..5ec78d18a3 100644 --- a/modules/mbedtls/tests/test_crypto_mbedtls.h +++ b/modules/mbedtls/tests/test_crypto_mbedtls.h @@ -31,9 +31,11 @@ #ifndef TEST_CRYPTO_MBEDTLS_H #define TEST_CRYPTO_MBEDTLS_H +#include "core/crypto/crypto.h" #include "core/crypto/hashing_context.h" #include "tests/test_macros.h" +#include "tests/test_utils.h" namespace TestCryptoMbedTLS { @@ -56,6 +58,35 @@ TEST_CASE("[HMACContext] HMAC digest") { // SHA-1 hmac_context_digest_test(HashingContext::HashType::HASH_SHA1, "a0ac4cd68a2f4812c355983d94e8d025afe7dddf"); } + +void crypto_key_public_only_test(const String &p_key_path, bool public_only); + +TEST_CASE("[Crypto] CryptoKey is_public_only") { + crypto_key_public_only_test(TestUtils::get_data_path("crypto/in.key"), false); + crypto_key_public_only_test(TestUtils::get_data_path("crypto/in.pub"), true); +} + +void crypto_key_save_test(const String &p_in_path, const String &p_out_path, bool public_only); + +TEST_CASE("[Crypto] CryptoKey save") { + const String in_priv_path = TestUtils::get_data_path("crypto/in.key"); + const String out_priv_path = TestUtils::get_data_path("crypto/out.key"); + crypto_key_save_test(in_priv_path, out_priv_path, false); + + const String in_pub_path = TestUtils::get_data_path("crypto/in.pub"); + const String out_pub_path = TestUtils::get_data_path("crypto/out.pub"); + crypto_key_save_test(in_pub_path, out_pub_path, true); +} + +void crypto_key_save_public_only_test(const String &p_in_priv_path, const String &p_in_pub_path, const String &p_out_path); + +TEST_CASE("[Crypto] CryptoKey save public_only") { + const String in_priv_path = TestUtils::get_data_path("crypto/in.key"); + const String in_pub_path = TestUtils::get_data_path("crypto/in.pub"); + const String out_path = TestUtils::get_data_path("crypto/out_public_only.pub"); + crypto_key_save_public_only_test(in_priv_path, in_pub_path, out_path); +} + } // namespace TestCryptoMbedTLS #endif // TEST_CRYPTO_MBEDTLS_H |