Home | History | Annotate | Download | only in chromeos
      1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/chromeos/customization_document.h"
      6 
      7 #include "base/time.h"
      8 #include "chrome/browser/chromeos/mock_system_access.h"
      9 #include "testing/gtest/include/gtest/gtest.h"
     10 
     11 namespace {
     12 
     13 const char kGoodStartupManifest[] =
     14     "{"
     15     "  \"version\": \"1.0\","
     16     "  \"initial_locale\" : \"en-US\","
     17     "  \"initial_timezone\" : \"US/Pacific\","
     18     "  \"keyboard_layout\" : \"xkb:us::eng\","
     19     "  \"registration_url\" : \"http://www.google.com\","
     20     "  \"setup_content\" : {"
     21     "    \"en-US\" : {"
     22     "      \"help_page\" : \"file:///opt/oem/help/en-US/help.html\","
     23     "      \"eula_page\" : \"file:///opt/oem/eula/en-US/eula.html\","
     24     "    },"
     25     "    \"ru-RU\" : {"
     26     "      \"help_page\" : \"file:///opt/oem/help/ru-RU/help.html\","
     27     "      \"eula_page\" : \"file:///opt/oem/eula/ru-RU/eula.html\","
     28     "    },"
     29     "    \"default\" : {"
     30     "      \"help_page\" : \"file:///opt/oem/help/en/help.html\","
     31     "      \"eula_page\" : \"file:///opt/oem/eula/en/eula.html\","
     32     "    },"
     33     "  },"
     34     "  \"hwid_map\" : ["
     35     "    {"
     36     "      \"hwid_mask\": \"ZGA*34\","
     37     "      \"initial_locale\" : \"ja\","
     38     "      \"initial_timezone\" : \"Asia/Tokyo\","
     39     "      \"keyboard_layout\" : \"mozc-jp\","
     40     "    },"
     41     "    {"
     42     "      \"hwid_mask\": \"Mario 1?3*\","
     43     "      \"initial_locale\" : \"ru-RU\","
     44     "      \"initial_timezone\" : \"Europe/Moscow\","
     45     "      \"keyboard_layout\" : \"xkb:ru::rus\","
     46     "    },"
     47     "  ],"
     48     "}";
     49 
     50 const char kBadManifest[] = "{\"version\": \"1\"}";
     51 
     52 const char kGoodServicesManifest[] =
     53     "{"
     54     "  \"version\": \"1.0\","
     55     "  \"app_content\" : {"
     56     "    \"en-US\" : {"
     57     "      \"initial_start_page\": \"http://mario/promo\","
     58     "      \"support_page\": \"http://mario/us\","
     59     "    },"
     60     "    \"ru-RU\" : {"
     61     "      \"initial_start_page\": \"http://mario/ru/promo\","
     62     "      \"support_page\": \"http://mario/ru\","
     63     "    },"
     64     "    \"default\" : {"
     65     "      \"initial_start_page\": \"http://mario/global/promo\","
     66     "      \"support_page\": \"http://mario/global\","
     67     "    },"
     68     "  },"
     69     "  \"carrier_deals\" : {"
     70     "    \"Carrier (country)\" : {"
     71     "      \"deal_locale\" : \"en-US\","
     72     "      \"top_up_url\" : \"http://www.carrier.com/\","
     73     "      \"notification_count\" : 1,\n"
     74     "      \"expire_date\" : \"31/12/12 0:00\","
     75     "      \"localized_content\" : {"
     76     "        \"en-US\" : {"
     77     "          \"notification_text\" : \"3G connectivity : Carrier.\","
     78     "        },"
     79     "        \"default\" : {"
     80     "          \"notification_text\" : \"default_text.\","
     81     "        },"
     82     "      },"
     83     "    },"
     84     "  },"
     85     "}";
     86 
     87 const char kOldDealServicesManifest[] =
     88     "{"
     89     "  \"version\": \"1.0\","
     90     "  \"carrier_deals\" : {"
     91     "    \"Carrier (country)\" : {"
     92     "      \"deal_locale\" : \"en-US\","
     93     "      \"top_up_url\" : \"http://www.carrier.com/\","
     94     "      \"notification_count\" : 1,"
     95     "      \"expire_date\" : \"01/01/01 0:00\","
     96     "      \"localized_content\" : {"
     97     "        \"en-US\" : {"
     98     "          \"notification_text\" : \"en-US text.\","
     99     "        },"
    100     "        \"default\" : {"
    101     "          \"notification_text\" : \"default_text.\","
    102     "        },"
    103     "      },"
    104     "    },"
    105     "  },"
    106     "}";
    107 
    108 }  // anonymous namespace
    109 
    110 namespace chromeos {
    111 
    112 using ::testing::_;
    113 using ::testing::DoAll;
    114 using ::testing::NotNull;
    115 using ::testing::Return;
    116 using ::testing::SetArgumentPointee;
    117 
    118 TEST(StartupCustomizationDocumentTest, Basic) {
    119   MockSystemAccess mock_system_access;
    120   EXPECT_CALL(mock_system_access, GetMachineStatistic(_, NotNull()))
    121       .WillRepeatedly(Return(false));
    122   EXPECT_CALL(mock_system_access,
    123       GetMachineStatistic(std::string("hwid"), NotNull()))
    124           .WillOnce(DoAll(SetArgumentPointee<1>(std::string("Mario 12345")),
    125                           Return(true)));
    126   StartupCustomizationDocument customization(&mock_system_access,
    127                                              kGoodStartupManifest);
    128   EXPECT_EQ("ru-RU", customization.initial_locale());
    129   EXPECT_EQ("Europe/Moscow", customization.initial_timezone());
    130   EXPECT_EQ("xkb:ru::rus", customization.keyboard_layout());
    131   EXPECT_EQ("http://www.google.com", customization.registration_url());
    132 
    133   EXPECT_EQ("file:///opt/oem/help/en-US/help.html",
    134             customization.GetHelpPage("en-US"));
    135   EXPECT_EQ("file:///opt/oem/help/ru-RU/help.html",
    136             customization.GetHelpPage("ru-RU"));
    137   EXPECT_EQ("file:///opt/oem/help/en/help.html",
    138             customization.GetHelpPage("ja"));
    139 
    140   EXPECT_EQ("file:///opt/oem/eula/en-US/eula.html",
    141             customization.GetEULAPage("en-US"));
    142   EXPECT_EQ("file:///opt/oem/eula/ru-RU/eula.html",
    143             customization.GetEULAPage("ru-RU"));
    144   EXPECT_EQ("file:///opt/oem/eula/en/eula.html",
    145             customization.GetEULAPage("ja"));
    146 }
    147 
    148 TEST(StartupCustomizationDocumentTest, VPD) {
    149   MockSystemAccess mock_system_access;
    150   EXPECT_CALL(mock_system_access,
    151       GetMachineStatistic(std::string("hwid"), NotNull()))
    152           .WillOnce(DoAll(SetArgumentPointee<1>(std::string("Mario 12345")),
    153                           Return(true)));
    154   EXPECT_CALL(mock_system_access,
    155       GetMachineStatistic(std::string("initial_locale"), NotNull()))
    156           .WillOnce(DoAll(SetArgumentPointee<1>(std::string("ja")),
    157                           Return(true)));
    158   EXPECT_CALL(mock_system_access,
    159       GetMachineStatistic(std::string("initial_timezone"), NotNull()))
    160           .WillOnce(DoAll(SetArgumentPointee<1>(std::string("Asia/Tokyo")),
    161                           Return(true)));
    162   EXPECT_CALL(mock_system_access,
    163       GetMachineStatistic(std::string("keyboard_layout"), NotNull()))
    164           .WillOnce(DoAll(SetArgumentPointee<1>(std::string("mozc-jp")),
    165                           Return(true)));
    166   StartupCustomizationDocument customization(&mock_system_access,
    167                                              kGoodStartupManifest);
    168   EXPECT_TRUE(customization.IsReady());
    169   EXPECT_EQ("ja", customization.initial_locale());
    170   EXPECT_EQ("Asia/Tokyo", customization.initial_timezone());
    171   EXPECT_EQ("mozc-jp", customization.keyboard_layout());
    172 }
    173 
    174 TEST(StartupCustomizationDocumentTest, BadManifest) {
    175   MockSystemAccess mock_system_access;
    176   StartupCustomizationDocument customization(&mock_system_access, kBadManifest);
    177   EXPECT_FALSE(customization.IsReady());
    178 }
    179 
    180 TEST(ServicesCustomizationDocumentTest, Basic) {
    181   ServicesCustomizationDocument customization(kGoodServicesManifest, "en-US");
    182   EXPECT_TRUE(customization.IsReady());
    183 
    184   EXPECT_EQ("http://mario/promo",
    185             customization.GetInitialStartPage("en-US"));
    186   EXPECT_EQ("http://mario/ru/promo",
    187             customization.GetInitialStartPage("ru-RU"));
    188   EXPECT_EQ("http://mario/global/promo",
    189             customization.GetInitialStartPage("ja"));
    190 
    191   EXPECT_EQ("http://mario/us", customization.GetSupportPage("en-US"));
    192   EXPECT_EQ("http://mario/ru", customization.GetSupportPage("ru-RU"));
    193   EXPECT_EQ("http://mario/global", customization.GetSupportPage("ja"));
    194 
    195   const ServicesCustomizationDocument::CarrierDeal* deal;
    196   deal = customization.GetCarrierDeal("Carrier (country)", true);
    197   EXPECT_TRUE(deal != NULL);
    198   EXPECT_EQ("en-US", deal->deal_locale);
    199   EXPECT_EQ("http://www.carrier.com/", deal->top_up_url);
    200   EXPECT_EQ(1, deal->notification_count);
    201   EXPECT_EQ("3G connectivity : Carrier.",
    202             deal->GetLocalizedString("en-US", "notification_text"));
    203   EXPECT_EQ("default_text.",
    204             deal->GetLocalizedString("en", "notification_text"));
    205 
    206   base::Time reference_time;
    207   base::Time::FromString(L"31/12/12 0:00", &reference_time);
    208   EXPECT_EQ(reference_time, deal->expire_date);
    209 }
    210 
    211 TEST(ServicesCustomizationDocumentTest, OldDeal) {
    212   ServicesCustomizationDocument customization(kOldDealServicesManifest,
    213                                               "en-US");
    214   EXPECT_TRUE(customization.IsReady());
    215 
    216   const ServicesCustomizationDocument::CarrierDeal* deal;
    217   // TODO(nkostylev): Pass fixed time instead of relying on Time::Now().
    218   deal = customization.GetCarrierDeal("Carrier (country)", true);
    219   EXPECT_TRUE(deal == NULL);
    220 }
    221 
    222 TEST(ServicesCustomizationDocumentTest, DealOtherLocale) {
    223   ServicesCustomizationDocument customization(kGoodServicesManifest,
    224                                               "en-GB");
    225   EXPECT_TRUE(customization.IsReady());
    226 
    227   const ServicesCustomizationDocument::CarrierDeal* deal;
    228   deal = customization.GetCarrierDeal("Carrier (country)", true);
    229   EXPECT_TRUE(deal == NULL);
    230 }
    231 
    232 TEST(ServicesCustomizationDocumentTest, BadManifest) {
    233   ServicesCustomizationDocument customization(kBadManifest, "en-US");
    234   EXPECT_FALSE(customization.IsReady());
    235 }
    236 
    237 TEST(ServicesCustomizationDocumentTest, NoDealRestrictions) {
    238   ServicesCustomizationDocument customization_oth_locale(kGoodServicesManifest,
    239                                                          "en-GB");
    240   EXPECT_TRUE(customization_oth_locale.IsReady());
    241   const ServicesCustomizationDocument::CarrierDeal* deal;
    242   deal = customization_oth_locale.GetCarrierDeal("Carrier (country)", false);
    243   EXPECT_TRUE(deal != NULL);
    244 
    245   ServicesCustomizationDocument customization_old_deal(kOldDealServicesManifest,
    246                                                        "en-US");
    247   EXPECT_TRUE(customization_old_deal.IsReady());
    248   deal = customization_old_deal.GetCarrierDeal("Carrier (country)", false);
    249   EXPECT_TRUE(deal != NULL);
    250 }
    251 
    252 }  // namespace chromeos
    253