forked from avast/retdec
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpattern_tests.cpp
114 lines (94 loc) · 2.88 KB
/
pattern_tests.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/**
* @file tests/serdes/pattern_tests.cpp
* @brief Tests for the pattern module.
* @copyright (c) 2019 Avast Software, licensed under the MIT license
*/
#include <gtest/gtest.h>
#include <rapidjson/document.h>
#include <rapidjson/prettywriter.h>
#include <rapidjson/stringbuffer.h>
#include "retdec/common/pattern.h"
#include "retdec/serdes/pattern.h"
using namespace ::testing;
namespace retdec {
namespace serdes {
namespace tests {
//
//=============================================================================
// Pattern::Match
//=============================================================================
//
class PatternMatchItemTests : public Test
{
public:
PatternMatchItemTests() : writer(sb) {}
rapidjson::StringBuffer sb;
rapidjson::PrettyWriter<rapidjson::StringBuffer> writer;
rapidjson::Document root;
};
TEST_F(PatternMatchItemTests, getJsonValueWorksWithFromJsonValueWithFullyDefinedMatch)
{
auto m1 = common::Pattern::Match::floatingPoint(0x1000, 0x2000, 0x100, 4);
serialize(writer, m1);
root.Parse(sb.GetString());
common::Pattern::Match m2;
deserialize(root, m2);
EXPECT_TRUE(m2.isTypeFloatingPoint());
EXPECT_EQ(0x1000, m2.getOffset());
EXPECT_EQ(0x2000, m2.getAddress());
EXPECT_EQ(0x100, m2.getSize());
EXPECT_EQ(4, m2.getEntrySize());
}
TEST_F(PatternMatchItemTests, getJsonValueWorksWithFromJsonValueWithPartiallyDefinedMatch)
{
auto m1 = common::Pattern::Match::floatingPoint(0x1000);
serialize(writer, m1);
root.Parse(sb.GetString());
common::Pattern::Match m2;
deserialize(root, m2);
EXPECT_TRUE(m2.isTypeFloatingPoint());
EXPECT_EQ(0x1000, m2.getOffset());
EXPECT_FALSE(m2.isAddressDefined());
EXPECT_FALSE(m2.isSizeDefined());
EXPECT_FALSE(m2.isEntrySizeDefined());
}
//
//=============================================================================
// Pattern
//=============================================================================
//
class PatternTests : public Test
{
public:
PatternTests() : writer(sb) {}
rapidjson::StringBuffer sb;
rapidjson::PrettyWriter<rapidjson::StringBuffer> writer;
rapidjson::Document root;
};
TEST_F(PatternTests, getJsonValueWorksWithFromJsonValueWithFullyDefinedPattern)
{
auto p1 = common::Pattern::malwareLittle("name", "desc");
serialize(writer, p1);
root.Parse(sb.GetString());
common::Pattern p2;
deserialize(root, p2);
EXPECT_TRUE(p2.isTypeMalware());
EXPECT_TRUE(p2.isEndianLittle());
EXPECT_EQ("name", p2.getName());
EXPECT_EQ("desc", p2.getDescription());
}
TEST_F(PatternTests, getJsonValueWorksWithFromJsonValueWithPartiallyDefinedPattern)
{
auto p1 = common::Pattern::malware();
serialize(writer, p1);
root.Parse(sb.GetString());
common::Pattern p2;
deserialize(root, p2);
EXPECT_TRUE(p2.isTypeMalware());
EXPECT_TRUE(p2.isEndianUnknown());
EXPECT_EQ("", p2.getName());
EXPECT_EQ("", p2.getDescription());
}
} // namespace tests
} // namespace serdes
} // namespace retdec