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 "uptane/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 /* Partial verification secondaries can verify Uptane metadata. */
66 TEST_F(PartialVerificationSecondaryTest, Uptane_putMetadata_good) {
68  Uptane::RawMetaPack metadata;
69 
70  TemporaryDirectory temp_dir;
71  MetaFake meta(temp_dir.Path());
72  metadata.director_root = Utils::readFile(temp_dir / "director/root.json");
73  metadata.director_targets = Utils::readFile(temp_dir / "director/targets_hasupdates.json");
74  EXPECT_NO_THROW(sec.putMetadata(metadata));
75 }
76 
77 /* Partial verification secondaries reject invalid Uptane metadata. */
78 TEST_F(PartialVerificationSecondaryTest, Uptane_putMetadata_bad) {
80  Uptane::RawMetaPack metadata;
81 
82  TemporaryDirectory temp_dir;
83  MetaFake meta(temp_dir.Path());
84  metadata.director_root = Utils::readFile(temp_dir / "director/root.json");
85 
86  Json::Value json_targets = Utils::parseJSONFile(temp_dir / "director/targets_hasupdates.json");
87  json_targets["signatures"][0]["sig"] = "Wrong signature";
88  metadata.director_targets = Utils::jsonToStr(json_targets);
89  EXPECT_THROW(sec.putMetadata(metadata), Uptane::BadKeyId);
90 }
91 
92 #ifndef __NO_MAIN__
93 int main(int argc, char **argv) {
94  ::testing::InitGoogleTest(&argc, argv);
95  return RUN_ALL_TESTS();
96 }
97 #endif
Uptane::PartialVerificationSecondary
Definition: partialverificationsecondary.h:29
Primary::VirtualSecondary
Definition: virtualsecondary.h:23
Primary::PartialVerificationSecondaryConfig
Definition: partialverificationsecondary.h:17
Uptane::RawMetaPack
Definition: tuf.h:535
PartialVerificationSecondaryTest
Definition: virtual_secondary_test.cc:30
VirtualSecondaryTest
Definition: virtual_secondary_test.cc:8
PublicKey
Definition: crypto.h:26
Primary::VirtualSecondaryConfig
Definition: virtualsecondary.h:11
Uptane::BadKeyId
Definition: exceptions.h:88
TemporaryDirectory
Definition: utils.h:82
MetaFake
Definition: metafake.h:14