| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/install_static/install_details.h" |
| |
| #include <string> |
| |
| #include "base/macros.h" |
| #include "chrome/install_static/install_modes.h" |
| #include "components/version_info/version_info_values.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| using ::testing::StrEq; |
| |
| namespace install_static { |
| |
| class FakeInstallDetails : public InstallDetails { |
| public: |
| FakeInstallDetails() : InstallDetails(&payload) { |
| constants.size = sizeof(constants); |
| constants.install_suffix = L""; |
| constants.default_channel_name = L""; |
| constants.supported_multi_install = true; |
| if (kUseGoogleUpdateIntegration) { |
| constants.app_guid = L"testguid"; |
| constants.channel_strategy = ChannelStrategy::FIXED; |
| } else { |
| constants.app_guid = L""; |
| constants.channel_strategy = ChannelStrategy::UNSUPPORTED; |
| } |
| payload.size = sizeof(payload); |
| payload.product_version = product_version.c_str(); |
| payload.mode = &constants; |
| payload.channel = channel.c_str(); |
| payload.channel_length = channel.length(); |
| } |
| |
| void set_product_version(const char* version) { |
| product_version.assign(version); |
| payload.product_version = product_version.c_str(); |
| } |
| |
| void set_payload_size(size_t size) { payload.size = size; } |
| |
| void set_mode_size(size_t size) { constants.size = size; } |
| |
| InstallConstants constants = InstallConstants(); |
| std::wstring channel = std::wstring(L"testchannel"); |
| std::string product_version = std::string(PRODUCT_VERSION); |
| Payload payload = Payload(); |
| |
| DISALLOW_COPY_AND_ASSIGN(FakeInstallDetails); |
| }; |
| |
| TEST(InstallDetailsTest, GetClientStateKeyPath) { |
| FakeInstallDetails details; |
| if (kUseGoogleUpdateIntegration) { |
| EXPECT_THAT(details.GetClientStateKeyPath(), |
| StrEq(L"Software\\Google\\Update\\ClientState\\testguid")); |
| } else { |
| EXPECT_THAT(details.GetClientStateKeyPath(), |
| StrEq(std::wstring(L"Software\\").append(kProductPathName))); |
| } |
| } |
| |
| TEST(InstallDetailsTest, GetClientStateMediumKeyPath) { |
| FakeInstallDetails details; |
| if (kUseGoogleUpdateIntegration) { |
| EXPECT_THAT( |
| details.GetClientStateMediumKeyPath(), |
| StrEq(L"Software\\Google\\Update\\ClientStateMedium\\testguid")); |
| } else { |
| EXPECT_THAT(details.GetClientStateKeyPath(), |
| StrEq(std::wstring(L"Software\\").append(kProductPathName))); |
| } |
| } |
| |
| TEST(InstallDetailsTest, VersionMismatch) { |
| // All is well to begin with. |
| EXPECT_FALSE(FakeInstallDetails().VersionMismatch()); |
| |
| // Bad product version. |
| { |
| FakeInstallDetails details; |
| details.set_product_version("0.1.2.3"); |
| EXPECT_TRUE(details.VersionMismatch()); |
| } |
| |
| // Bad Payload size. |
| { |
| FakeInstallDetails details; |
| details.set_payload_size(sizeof(InstallDetails::Payload) + 1); |
| EXPECT_TRUE(details.VersionMismatch()); |
| } |
| |
| // Bad InstallConstants size. |
| { |
| FakeInstallDetails details; |
| details.set_mode_size(sizeof(InstallConstants) + 1); |
| EXPECT_TRUE(details.VersionMismatch()); |
| } |
| } |
| |
| } // namespace install_static |