Aktualizr
C++ SOTA Client
All Classes Namespaces Files Functions Variables Enumerations Enumerator Pages
campaign_test.cc
1 #include <gtest/gtest.h>
2 #include <boost/filesystem.hpp>
3 
4 #include "libaktualizr/campaign.h"
5 
6 #include "utilities/utils.h"
7 
8 boost::filesystem::path test_data_dir;
9 
10 /* Parse campaigns from JSON. */
11 TEST(campaign, Campaigns_from_json) {
12  auto json = Utils::parseJSONFile(test_data_dir / "campaigns_sample.json");
13 
14  auto campaigns = campaign::Campaign::campaignsFromJson(json);
15  EXPECT_EQ(campaigns.size(), 1);
16 
17  EXPECT_EQ(campaigns.at(0).name, "campaign1");
18  EXPECT_EQ(campaigns.at(0).id, "c2eb7e8d-8aa0-429d-883f-5ed8fdb2a493");
19  EXPECT_EQ(campaigns.at(0).size, 62470);
20  EXPECT_TRUE(campaigns.at(0).autoAccept);
21  EXPECT_EQ(campaigns.at(0).description, "this is my message to show on the device");
22  EXPECT_EQ(campaigns.at(0).estInstallationDuration, 10);
23  EXPECT_EQ(campaigns.at(0).estPreparationDuration, 20);
24 
25  // legacy: no autoAccept
26  Json::Value bad4;
27  bad4["campaigns"] = Json::Value(Json::arrayValue);
28  bad4["campaigns"][0] = Json::Value();
29  bad4["campaigns"][0]["name"] = "a";
30  bad4["campaigns"][0]["id"] = "a";
31  auto campaignsNoAutoAccept = campaign::Campaign::campaignsFromJson(bad4);
32  EXPECT_FALSE(campaignsNoAutoAccept.at(0).autoAccept);
33 }
34 
35 /* Get JSON from campaign. */
36 TEST(campaign, Campaigns_to_json) {
37  auto json = Utils::parseJSONFile(test_data_dir / "campaigns_sample.json");
38 
39  auto campaigns = campaign::Campaign::campaignsFromJson(json);
40  Json::Value res;
41  campaign::Campaign::JsonFromCampaigns(campaigns, res);
42 
43  EXPECT_EQ(res["campaigns"][0]["name"], "campaign1");
44  EXPECT_EQ(res["campaigns"][0]["id"], "c2eb7e8d-8aa0-429d-883f-5ed8fdb2a493");
45  EXPECT_EQ((res["campaigns"][0]["size"]).asInt64(), 62470);
46  EXPECT_EQ(res["campaigns"][0]["autoAccept"], true);
47  EXPECT_EQ(res["campaigns"][0]["metadata"][0]["type"], "DESCRIPTION");
48  EXPECT_EQ(res["campaigns"][0]["metadata"][0]["value"], "this is my message to show on the device");
49  EXPECT_EQ(res["campaigns"][0]["metadata"][1]["type"], "ESTIMATED_INSTALLATION_DURATION");
50  EXPECT_EQ(res["campaigns"][0]["metadata"][1]["value"], "10");
51  EXPECT_EQ(res["campaigns"][0]["metadata"][2]["type"], "ESTIMATED_PREPARATION_DURATION");
52  EXPECT_EQ(res["campaigns"][0]["metadata"][2]["value"], "20");
53 }
54 
55 TEST(campaign, Campaigns_from_invalid_json) {
56  // empty object
57  EXPECT_EQ(campaign::Campaign::campaignsFromJson(Json::Value()).size(), 0);
58 
59  // naked array
60  EXPECT_EQ(campaign::Campaign::campaignsFromJson(Json::Value(Json::arrayValue)).size(), 0);
61 
62  // object in object
63  Json::Value bad1;
64  bad1["campaigns"] = Json::Value();
65  EXPECT_EQ(campaign::Campaign::campaignsFromJson(bad1).size(), 0);
66 
67  // array in array in object
68  Json::Value bad2;
69  bad2["campaigns"] = Json::Value(Json::arrayValue);
70  bad2["campaigns"][0] = Json::Value(Json::arrayValue);
71  EXPECT_EQ(campaign::Campaign::campaignsFromJson(bad2).size(), 0);
72 
73  // no name
74  Json::Value bad3;
75  bad3["campaigns"] = Json::Value(Json::arrayValue);
76  bad3["campaigns"][0] = Json::Value();
77  EXPECT_EQ(campaign::Campaign::campaignsFromJson(bad3).size(), 0);
78 }
79 
80 #ifndef __NO_MAIN__
81 int main(int argc, char **argv) {
82  ::testing::InitGoogleTest(&argc, argv);
83 
84  if (argc != 2) {
85  std::cerr << "Error: " << argv[0] << " requires the path to the test data as an input argument.\n";
86  return EXIT_FAILURE;
87  }
88  test_data_dir = argv[1];
89 
90  return RUN_ALL_TESTS();
91 }
92 #endif