-
Notifications
You must be signed in to change notification settings - Fork 148
/
database_writer_test.cc
72 lines (63 loc) · 2.49 KB
/
database_writer_test.cc
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
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include "third_party/zynamics/bindiff/database_writer.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
#include "third_party/absl/status/status_matchers.h"
#include "third_party/zynamics/bindiff/match/call_graph.h"
#include "third_party/zynamics/bindiff/sqlite.h"
#include "third_party/zynamics/bindiff/test_util.h"
#include "third_party/zynamics/binexport/testing.h"
#include "third_party/zynamics/binexport/util/status_macros.h"
namespace security::bindiff {
namespace {
using ::absl_testing::IsOk;
using ::security::binexport::GetTestTempPath;
using ::testing::Eq;
using ::testing::StrEq;
class DatabaseWriterTest : public BinDiffTest {
private:
void SetUp() override {
SetUpBasicFunctionMatch();
}
};
TEST_F(DatabaseWriterTest, SimpleDatabaseCreation) {
const std::string db_path = GetTestTempPath("test_database_writer_1.sqlite");
NA_ASSERT_OK_AND_ASSIGN(
auto writer, DatabaseWriter::Create(db_path, DatabaseWriter::Options()));
EXPECT_THAT(writer->Write(primary_->call_graph, secondary_->call_graph,
primary_->flow_graphs, secondary_->flow_graphs,
fixed_points_),
IsOk());
NA_ASSERT_OK_AND_ASSIGN(auto database, SqliteDatabase::Connect(db_path));
NA_ASSERT_OK_AND_ASSIGN(
auto stmt,
database.Statement(
"SELECT COUNT(*) FROM functionalgorithm WHERE name = :name"));
EXPECT_THAT(stmt.BindText(MatchingStep::kFunctionManualName).Execute(),
IsOk());
int count = 0;
stmt.Into(&count);
EXPECT_THAT(count, Eq(1));
NA_ASSERT_OK_AND_ASSIGN(
stmt,
database.Statement("SELECT a.name FROM function AS f, functionalgorithm "
"AS a WHERE f.algorithm = a.id LIMIT 1"));
EXPECT_THAT(stmt.Execute(), IsOk());
std::string algorithm;
stmt.Into(&algorithm);
EXPECT_THAT(algorithm, StrEq(MatchingStep::kFunctionManualName));
}
} // namespace
} // namespace security::bindiff