File: install_details_unittest.cc

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (104 lines) | stat: -rw-r--r-- 3,210 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
// Copyright 2016 The Chromium Authors
// 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/version_info/version_info_values.h"
#include "chrome/install_static/buildflags.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"";
#if BUILDFLAG(USE_GOOGLE_UPDATE_INTEGRATION)
    constants.app_guid = L"testguid";
    constants.channel_strategy = ChannelStrategy::FIXED;
#else
    constants.app_guid = L"";
    constants.channel_strategy = ChannelStrategy::UNSUPPORTED;
#endif
    payload.size = sizeof(payload);
    payload.product_version = product_version.c_str();
    payload.mode = &constants;
    payload.channel = channel.c_str();
    payload.channel_length = channel.length();
  }

  FakeInstallDetails(const FakeInstallDetails&) = delete;
  FakeInstallDetails& operator=(const FakeInstallDetails&) = delete;

  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();
};

TEST(InstallDetailsTest, GetClientStateKeyPath) {
  FakeInstallDetails details;
#if BUILDFLAG(USE_GOOGLE_UPDATE_INTEGRATION)
  EXPECT_THAT(details.GetClientStateKeyPath(),
              StrEq(L"Software\\Google\\Update\\ClientState\\testguid"));
#else
  EXPECT_THAT(details.GetClientStateKeyPath(),
              StrEq(std::wstring(L"Software\\").append(kProductPathName)));
#endif
}

TEST(InstallDetailsTest, GetClientStateMediumKeyPath) {
  FakeInstallDetails details;
#if BUILDFLAG(USE_GOOGLE_UPDATE_INTEGRATION)
  EXPECT_THAT(details.GetClientStateMediumKeyPath(),
              StrEq(L"Software\\Google\\Update\\ClientStateMedium\\testguid"));
#else
  EXPECT_THAT(details.GetClientStateKeyPath(),
              StrEq(std::wstring(L"Software\\").append(kProductPathName)));
#endif
}

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