1 #include <gtest/gtest.h>
6 #include "primary/aktualizr.h"
7 #include "test_utils.h"
8 #include "uptane_test_common.h"
10 boost::filesystem::path uptane_generator_path;
14 HttpFakeMetaCounter(
const boost::filesystem::path &test_dir_in,
const boost::filesystem::path &meta_dir_in)
15 :
HttpFake(test_dir_in,
"", meta_dir_in) {}
17 HttpResponse get(
const std::string &url, int64_t maxsize)
override {
18 if (url.find(
"director/1.root.json") != std::string::npos) {
19 ++director_1root_count;
21 if (url.find(
"director/2.root.json") != std::string::npos) {
22 ++director_2root_count;
24 if (url.find(
"director/targets.json") != std::string::npos) {
25 ++director_targets_count;
27 if (url.find(
"repo/1.root.json") != std::string::npos) {
30 if (url.find(
"repo/2.root.json") != std::string::npos) {
33 if (url.find(
"repo/timestamp.json") != std::string::npos) {
34 ++image_timestamp_count;
36 if (url.find(
"repo/snapshot.json") != std::string::npos) {
37 ++image_snapshot_count;
39 if (url.find(
"repo/targets.json") != std::string::npos) {
40 ++image_targets_count;
43 return HttpFake::get(url, maxsize);
46 int director_1root_count{0};
47 int director_2root_count{0};
48 int director_targets_count{0};
49 int image_1root_count{0};
50 int image_2root_count{0};
51 int image_timestamp_count{0};
52 int image_snapshot_count{0};
53 int image_targets_count{0};
64 auto http = std::make_shared<HttpFakeMetaCounter>(temp_dir.Path(), meta_dir.Path() /
"repo");
65 Config conf = UptaneTestCommon::makeTestConfig(temp_dir, http->tls_server);
66 logger_set_threshold(boost::log::trivial::trace);
68 auto storage = INvStorage::newStorage(conf.storage);
70 aktualizr.Initialize();
73 Process uptane_gen(uptane_generator_path.string());
74 uptane_gen.run({
"generate",
"--path", meta_dir.PathString()});
77 EXPECT_EQ(update_result.status, result::UpdateStatus::kNoUpdatesAvailable);
78 EXPECT_EQ(http->director_1root_count, 1);
79 EXPECT_EQ(http->director_2root_count, 1);
80 EXPECT_EQ(http->director_targets_count, 1);
81 EXPECT_EQ(http->image_1root_count, 0);
82 EXPECT_EQ(http->image_2root_count, 0);
83 EXPECT_EQ(http->image_timestamp_count, 0);
84 EXPECT_EQ(http->image_snapshot_count, 0);
85 EXPECT_EQ(http->image_targets_count, 0);
89 uptane_gen.run({
"image",
"--path", meta_dir.PathString(),
"--filename",
"tests/test_data/firmware.txt",
90 "--targetname",
"firmware.txt",
"--hwid",
"primary_hw"});
91 uptane_gen.run({
"image",
"--path", meta_dir.PathString(),
"--filename",
"tests/test_data/firmware_name.txt",
92 "--targetname",
"firmware_name.txt",
"--hwid",
"primary_hw"});
93 uptane_gen.run({
"addtarget",
"--path", meta_dir.PathString(),
"--targetname",
"firmware.txt",
"--hwid",
"primary_hw",
94 "--serial",
"CA:FE:A6:D2:84:9D"});
95 uptane_gen.run({
"adddelegation",
"--path", meta_dir.PathString(),
"--dname",
"role-abc",
"--dpattern",
"abc/*"});
96 uptane_gen.run({
"signtargets",
"--path", meta_dir.PathString()});
98 update_result = aktualizr.CheckUpdates().get();
99 EXPECT_EQ(update_result.status, result::UpdateStatus::kUpdatesAvailable);
100 EXPECT_EQ(http->director_1root_count, 1);
101 EXPECT_EQ(http->director_2root_count, 2);
102 EXPECT_EQ(http->director_targets_count, 2);
103 EXPECT_EQ(http->image_1root_count, 1);
104 EXPECT_EQ(http->image_2root_count, 1);
105 EXPECT_EQ(http->image_timestamp_count, 1);
106 EXPECT_EQ(http->image_snapshot_count, 1);
107 EXPECT_EQ(http->image_targets_count, 1);
111 uptane_gen.run({
"emptytargets",
"--path", meta_dir.PathString()});
112 uptane_gen.run({
"addtarget",
"--path", meta_dir.PathString(),
"--targetname",
"firmware_name.txt",
"--hwid",
113 "primary_hw",
"--serial",
"CA:FE:A6:D2:84:9D"});
114 uptane_gen.run({
"signtargets",
"--path", meta_dir.PathString()});
116 update_result = aktualizr.CheckUpdates().get();
117 EXPECT_EQ(update_result.status, result::UpdateStatus::kUpdatesAvailable);
118 EXPECT_EQ(http->director_1root_count, 1);
119 EXPECT_EQ(http->director_2root_count, 3);
120 EXPECT_EQ(http->director_targets_count, 3);
121 EXPECT_EQ(http->image_1root_count, 1);
122 EXPECT_EQ(http->image_2root_count, 2);
123 EXPECT_EQ(http->image_timestamp_count, 2);
124 EXPECT_EQ(http->image_snapshot_count, 1);
125 EXPECT_EQ(http->image_targets_count, 1);
129 uptane_gen.run({
"emptytargets",
"--path", meta_dir.PathString()});
130 uptane_gen.run({
"addtarget",
"--path", meta_dir.PathString(),
"--targetname",
"firmware.txt",
"--hwid",
"primary_hw",
131 "--serial",
"CA:FE:A6:D2:84:9D"});
132 uptane_gen.run({
"adddelegation",
"--path", meta_dir.PathString(),
"--dname",
"role-def",
"--dpattern",
"def/*",
133 "--dparent",
"role-abc"});
134 uptane_gen.run({
"signtargets",
"--path", meta_dir.PathString()});
136 update_result = aktualizr.CheckUpdates().get();
137 EXPECT_EQ(update_result.status, result::UpdateStatus::kUpdatesAvailable);
138 EXPECT_EQ(http->director_1root_count, 1);
139 EXPECT_EQ(http->director_2root_count, 4);
140 EXPECT_EQ(http->director_targets_count, 4);
141 EXPECT_EQ(http->image_1root_count, 1);
142 EXPECT_EQ(http->image_2root_count, 3);
143 EXPECT_EQ(http->image_timestamp_count, 3);
144 EXPECT_EQ(http->image_snapshot_count, 2);
145 EXPECT_EQ(http->image_targets_count, 1);
149 int main(
int argc,
char **argv) {
150 ::testing::InitGoogleTest(&argc, argv);
152 std::cerr <<
"Error: " << argv[0] <<
" requires the path to the uptane-generator utility\n";
155 uptane_generator_path = argv[1];
158 logger_set_threshold(boost::log::trivial::trace);
160 return RUN_ALL_TESTS();