Aktualizr
C++ SOTA Client
All Classes Namespaces Files Functions Variables Enumerations Enumerator Pages
virtual_secondary_test.cc
1 #include <gtest/gtest.h>
2 
3 #include "metafake.h"
4 #include "partialverificationsecondary.h"
5 #include "primary/secondaryinterface.h"
6 #include "virtualsecondary.h"
7 
8 class VirtualSecondaryTest : public ::testing::Test {
9  protected:
11  config_.partial_verifying = false;
12  config_.full_client_dir = temp_dir_.Path();
13  config_.ecu_serial = "";
14  config_.ecu_hardware_id = "secondary_hardware";
15  config_.ecu_private_key = "sec.priv";
16  config_.ecu_public_key = "sec.pub";
17  config_.firmware_path = temp_dir_.Path() / "firmware.txt";
18  config_.target_name_path = temp_dir_.Path() / "firmware_name.txt";
19  config_.metadata_path = temp_dir_.Path() / "metadata";
20  }
21 
22  virtual void SetUp() {}
23  virtual void TearDown() {}
24 
25  protected:
26  TemporaryDirectory temp_dir_;
28 };
29 
30 class PartialVerificationSecondaryTest : public ::testing::Test {
31  protected:
33  config_.partial_verifying = true;
34  config_.full_client_dir = temp_dir_.Path();
35  config_.ecu_serial = "";
36  config_.ecu_hardware_id = "secondary_hardware";
37  config_.ecu_private_key = "sec.priv";
38  config_.ecu_public_key = "sec.pub";
39  config_.firmware_path = temp_dir_.Path() / "firmware.txt";
40  config_.target_name_path = temp_dir_.Path() / "firmware_name.txt";
41  config_.metadata_path = temp_dir_.Path() / "metadata";
42  }
43 
44  virtual void SetUp() {}
45  virtual void TearDown() {}
46 
47  protected:
48  TemporaryDirectory temp_dir_;
50 };
51 
52 /* Create a virtual secondary for testing. */
53 TEST_F(VirtualSecondaryTest, Instantiation) { EXPECT_NO_THROW(Primary::VirtualSecondary virtual_sec(config_)); }
54 
55 /* Partial verification secondaries generate and store public keys. */
56 TEST_F(PartialVerificationSecondaryTest, Uptane_get_key) {
58  PublicKey key1 = sec1.getPublicKey();
60  PublicKey key2 = sec2.getPublicKey();
61  // Verify that we store keys
62  EXPECT_EQ(key1, key2);
63 }
64 
65 // TODO(OTA-2484): restore these tests when the implementation is actually functional.
66 #if 0
67 /* Partial verification secondaries can verify Uptane metadata. */
68 TEST_F(PartialVerificationSecondaryTest, Uptane_putMetadata_good) {
70  Uptane::MetaBundle meta_bundle;
71 
72  TemporaryDirectory temp_dir;
73  MetaFake meta(temp_dir.Path());
74  meta_bundle.insert({std::make_pair(Uptane::RepositoryType::Director(), Uptane::Role::Root()),
75  Utils::readFile(temp_dir / "director/root.json")});
76  meta_bundle.insert({std::make_pair(Uptane::RepositoryType::Director(), Uptane::Role::Root()),
77  Utils::readFile(temp_dir / "director/targets_hasupdates.json")});
78  EXPECT_NO_THROW(sec.putMetadata(meta_bundle));
79 }
80 
81 /* Partial verification secondaries reject invalid Uptane metadata. */
82 TEST_F(PartialVerificationSecondaryTest, Uptane_putMetadata_bad) {
84  Uptane::MetaBundle meta_bundle;
85 
86  TemporaryDirectory temp_dir;
87  MetaFake meta(temp_dir.Path());
88  meta_bundle.insert({std::make_pair(Uptane::RepositoryType::Director(), Uptane::Role::Root()),
89  Utils::readFile(temp_dir / "director/root.json")});
90 
91  Json::Value json_targets = Utils::parseJSONFile(temp_dir / "director/targets_hasupdates.json");
92  json_targets["signatures"][0]["sig"] = "Wrong signature";
93  meta_bundle.insert(
94  {std::make_pair(Uptane::RepositoryType::Director(), Uptane::Role::Root()), Utils::jsonToStr(json_targets)});
95  EXPECT_THROW(sec.putMetadata(meta_bundle), Uptane::BadKeyId);
96 }
97 #endif
98 
99 #ifndef __NO_MAIN__
100 int main(int argc, char **argv) {
101  ::testing::InitGoogleTest(&argc, argv);
102  return RUN_ALL_TESTS();
103 }
104 #endif