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