Aktualizr
C++ SOTA Client
All Classes Namespaces Files Functions Variables Enumerations Enumerator Pages
director_test.cc
1 #include <gtest/gtest.h>
2 
3 #include "directorrepository.h"
4 #include "test_utils.h"
5 #include "utilities/utils.h"
6 
7 boost::filesystem::path uptane_generator_path;
8 
9 namespace Uptane {
10 
11 /*
12  * Verify that we correctly persist non-empty Targets metadata after receiving
13  * subsequent Targets metadata that is empty.
14  */
15 TEST(Director, EmptyTargets) {
16  TemporaryDirectory meta_dir;
17 
18  Process uptane_gen(uptane_generator_path.string());
19  uptane_gen.run({"generate", "--path", meta_dir.PathString()});
20 
21  DirectorRepository director;
22  EXPECT_NO_THROW(director.initRoot(Uptane::RepositoryType(Uptane::RepositoryType::DIRECTOR),
23  Utils::readFile(meta_dir.Path() / "repo/director/root.json")));
24 
25  EXPECT_NO_THROW(director.verifyTargets(Utils::readFile(meta_dir.Path() / "repo/director/targets.json")));
26  EXPECT_TRUE(director.targets.targets.empty());
27  EXPECT_TRUE(director.latest_targets.targets.empty());
28 
29  uptane_gen.run({"image", "--path", meta_dir.PathString(), "--filename", "tests/test_data/firmware.txt",
30  "--targetname", "firmware.txt", "--hwid", "primary_hw"});
31  uptane_gen.run({"addtarget", "--path", meta_dir.PathString(), "--targetname", "firmware.txt", "--hwid", "primary_hw",
32  "--serial", "CA:FE:A6:D2:84:9D"});
33  uptane_gen.run({"signtargets", "--path", meta_dir.PathString()});
34 
35  EXPECT_NO_THROW(director.verifyTargets(Utils::readFile(meta_dir.Path() / "repo/director/targets.json")));
36  EXPECT_EQ(director.targets.targets.size(), 1);
37  EXPECT_EQ(director.targets.targets[0].filename(), "firmware.txt");
38  EXPECT_EQ(director.targets.targets.size(), director.latest_targets.targets.size());
39 
40  uptane_gen.run({"emptytargets", "--path", meta_dir.PathString()});
41  uptane_gen.run({"signtargets", "--path", meta_dir.PathString(), "--correlationid", "abc123"});
42 
43  EXPECT_NO_THROW(director.verifyTargets(Utils::readFile(meta_dir.Path() / "repo/director/targets.json")));
44  EXPECT_EQ(director.targets.targets.size(), 1);
45  EXPECT_EQ(director.targets.targets[0].filename(), "firmware.txt");
46  EXPECT_TRUE(director.latest_targets.targets.empty());
47 }
48 
49 } // namespace Uptane
50 
51 #ifndef __NO_MAIN__
52 int main(int argc, char **argv) {
53  ::testing::InitGoogleTest(&argc, argv);
54  if (argc != 2) {
55  std::cerr << "Error: " << argv[0] << " requires the path to the uptane-generator utility\n";
56  return EXIT_FAILURE;
57  }
58  uptane_generator_path = argv[1];
59 
60  logger_init();
61  logger_set_threshold(boost::log::trivial::trace);
62 
63  return RUN_ALL_TESTS();
64 }
65 #endif
66 
67 // vim: set tabstop=2 shiftwidth=2 expandtab:
Uptane::RepositoryType
Definition: tuf.h:21
Process
Definition: test_utils.h:19
TemporaryDirectory
Definition: utils.h:82
Uptane
Base data types that are used in The Update Framework (TUF), part of Uptane.
Definition: packagemanagerinterface.h:18