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_TRUE(director.initRoot(Utils::readFile(meta_dir.Path() / "repo/director/root.json")));
23 
24  EXPECT_TRUE(director.verifyTargets(Utils::readFile(meta_dir.Path() / "repo/director/targets.json")));
25  EXPECT_TRUE(director.targets.targets.empty());
26  EXPECT_TRUE(director.latest_targets.targets.empty());
27 
28  uptane_gen.run({"image", "--path", meta_dir.PathString(), "--filename", "tests/test_data/firmware.txt",
29  "--targetname", "firmware.txt", "--hwid", "primary_hw"});
30  uptane_gen.run({"addtarget", "--path", meta_dir.PathString(), "--targetname", "firmware.txt", "--hwid", "primary_hw",
31  "--serial", "CA:FE:A6:D2:84:9D"});
32  uptane_gen.run({"signtargets", "--path", meta_dir.PathString()});
33 
34  EXPECT_TRUE(director.verifyTargets(Utils::readFile(meta_dir.Path() / "repo/director/targets.json")));
35  EXPECT_EQ(director.targets.targets.size(), 1);
36  EXPECT_EQ(director.targets.targets[0].filename(), "firmware.txt");
37  EXPECT_EQ(director.targets.targets.size(), director.latest_targets.targets.size());
38 
39  uptane_gen.run({"emptytargets", "--path", meta_dir.PathString()});
40  uptane_gen.run({"signtargets", "--path", meta_dir.PathString(), "--correlationid", "abc123"});
41 
42  EXPECT_TRUE(director.verifyTargets(Utils::readFile(meta_dir.Path() / "repo/director/targets.json")));
43  EXPECT_EQ(director.targets.targets.size(), 1);
44  EXPECT_EQ(director.targets.targets[0].filename(), "firmware.txt");
45  EXPECT_TRUE(director.latest_targets.targets.empty());
46 }
47 
48 } // namespace Uptane
49 
50 #ifndef __NO_MAIN__
51 int main(int argc, char **argv) {
52  ::testing::InitGoogleTest(&argc, argv);
53  if (argc != 2) {
54  std::cerr << "Error: " << argv[0] << " requires the path to the uptane-generator utility\n";
55  return EXIT_FAILURE;
56  }
57  uptane_generator_path = argv[1];
58 
59  logger_init();
60  logger_set_threshold(boost::log::trivial::trace);
61 
62  return RUN_ALL_TESTS();
63 }
64 #endif
65 
66 // vim: set tabstop=2 shiftwidth=2 expandtab:
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: secondary_tcp_server.h:8