Cybersecurity-Projects/PROJECTS/beginner/hash-cracker/tests/test_hash_detector.cpp

55 lines
1.7 KiB
C++

/*
©AngelaMos | 2026
test_hash_detector.cpp
Tests for hash algorithm auto-detection by digest length
Verifies detection of MD5 (32 chars), SHA-1 (40), SHA-256 (64), and
SHA-512 (128) from real and synthetic hex strings. Confirms rejection
of invalid lengths and non-hex characters with CrackError::InvalidHash.
Connects to:
hash/HashDetector.hpp - HashDetector::detect tested
core/Concepts.hpp - CrackError enum for error assertions
*/
#include "src/hash/HashDetector.hpp"
#include <gtest/gtest.h>
TEST(HashDetectorTest, DetectsMD5) {
auto result = HashDetector::detect("d41d8cd98f00b204e9800998ecf8427e");
ASSERT_TRUE(result.has_value());
EXPECT_EQ(*result, HashType::MD5);
}
TEST(HashDetectorTest, DetectsSHA1) {
auto result = HashDetector::detect("da39a3ee5e6b4b0d3255bfef95601890afd80709");
ASSERT_TRUE(result.has_value());
EXPECT_EQ(*result, HashType::SHA1);
}
TEST(HashDetectorTest, DetectsSHA256) {
auto result =
HashDetector::detect("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855");
ASSERT_TRUE(result.has_value());
EXPECT_EQ(*result, HashType::SHA256);
}
TEST(HashDetectorTest, DetectsSHA512) {
auto result = HashDetector::detect(std::string(128, 'a'));
ASSERT_TRUE(result.has_value());
EXPECT_EQ(*result, HashType::SHA512);
}
TEST(HashDetectorTest, RejectsInvalidLength) {
auto result = HashDetector::detect("abc");
EXPECT_FALSE(result.has_value());
EXPECT_EQ(result.error(), CrackError::InvalidHash);
}
TEST(HashDetectorTest, RejectsNonHex) {
auto result = HashDetector::detect(std::string(64, 'z'));
EXPECT_FALSE(result.has_value());
EXPECT_EQ(result.error(), CrackError::InvalidHash);
}