1 // Copyright 2014 The Crashpad Authors. All rights reserved.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //     http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #ifndef CRASHPAD_SNAPSHOT_TEST_TEST_SYSTEM_SNAPSHOT_H_
16 #define CRASHPAD_SNAPSHOT_TEST_TEST_SYSTEM_SNAPSHOT_H_
17 
18 #include <stdint.h>
19 
20 #include <string>
21 
22 #include "base/macros.h"
23 #include "snapshot/system_snapshot.h"
24 
25 namespace crashpad {
26 namespace test {
27 
28 //! \brief A test SystemSnapshot that can carry arbitrary data for testing
29 //!     purposes.
30 class TestSystemSnapshot final : public SystemSnapshot {
31  public:
32   TestSystemSnapshot();
33   ~TestSystemSnapshot() override;
34 
SetCPUArchitecture(CPUArchitecture cpu_architecture)35   void SetCPUArchitecture(CPUArchitecture cpu_architecture) {
36     cpu_architecture_ = cpu_architecture;
37   }
SetCPURevision(uint32_t cpu_revision)38   void SetCPURevision(uint32_t cpu_revision) { cpu_revision_ = cpu_revision; }
SetCPUCount(uint8_t cpu_count)39   void SetCPUCount(uint8_t cpu_count) { cpu_count_ = cpu_count; }
SetCPUVendor(const std::string & cpu_vendor)40   void SetCPUVendor(const std::string& cpu_vendor) { cpu_vendor_ = cpu_vendor; }
SetCPUFrequency(uint64_t current_hz,uint64_t max_hz)41   void SetCPUFrequency(uint64_t current_hz, uint64_t max_hz) {
42     cpu_frequency_current_hz_ = current_hz;
43     cpu_frequency_max_hz_ = max_hz;
44   }
SetCPUX86Signature(uint32_t cpu_x86_signature)45   void SetCPUX86Signature(uint32_t cpu_x86_signature) {
46     cpu_x86_signature_ = cpu_x86_signature;
47   }
SetCPUX86Features(uint64_t cpu_x86_features)48   void SetCPUX86Features(uint64_t cpu_x86_features) {
49     cpu_x86_features_ = cpu_x86_features;
50   }
SetCPUX86ExtendedFeatures(uint64_t cpu_x86_extended_features)51   void SetCPUX86ExtendedFeatures(uint64_t cpu_x86_extended_features) {
52     cpu_x86_extended_features_ = cpu_x86_extended_features;
53   }
SetCPUX86Leaf7Features(uint32_t cpu_x86_leaf_7_features)54   void SetCPUX86Leaf7Features(uint32_t cpu_x86_leaf_7_features) {
55     cpu_x86_leaf_7_features_ = cpu_x86_leaf_7_features;
56   }
SetCPUX86SupportsDAZ(bool cpu_x86_supports_daz)57   void SetCPUX86SupportsDAZ(bool cpu_x86_supports_daz) {
58     cpu_x86_supports_daz_ = cpu_x86_supports_daz;
59   }
SetOperatingSystem(OperatingSystem operating_system)60   void SetOperatingSystem(OperatingSystem operating_system) {
61     operating_system_ = operating_system;
62   }
SetOSServer(bool os_server)63   void SetOSServer(bool os_server) { os_server_ = os_server; }
SetOSVersion(int major,int minor,int bugfix,const std::string & build)64   void SetOSVersion(
65       int major, int minor, int bugfix, const std::string& build) {
66     os_version_major_ = major;
67     os_version_minor_ = minor;
68     os_version_bugfix_ = bugfix;
69     os_version_build_ = build;
70   }
SetOSVersionFull(const std::string & os_version_full)71   void SetOSVersionFull(const std::string& os_version_full) {
72     os_version_full_ = os_version_full;
73   }
SetNXEnabled(bool nx_enabled)74   void SetNXEnabled(bool nx_enabled) { nx_enabled_ = nx_enabled; }
SetMachineDescription(const std::string & machine_description)75   void SetMachineDescription(const std::string& machine_description) {
76     machine_description_ = machine_description;
77   }
SetTimeZone(DaylightSavingTimeStatus dst_status,int standard_offset_seconds,int daylight_offset_seconds,const std::string & standard_name,const std::string & daylight_name)78   void SetTimeZone(DaylightSavingTimeStatus dst_status,
79                    int standard_offset_seconds,
80                    int daylight_offset_seconds,
81                    const std::string& standard_name,
82                    const std::string& daylight_name) {
83     time_zone_dst_status_ = dst_status;
84     time_zone_standard_offset_seconds_ = standard_offset_seconds;
85     time_zone_daylight_offset_seconds_ = daylight_offset_seconds;
86     time_zone_standard_name_ = standard_name;
87     time_zone_daylight_name_ = daylight_name;
88   }
89 
90   // SystemSnapshot:
91 
92   CPUArchitecture GetCPUArchitecture() const override;
93   uint32_t CPURevision() const override;
94   uint8_t CPUCount() const override;
95   std::string CPUVendor() const override;
96   void CPUFrequency(uint64_t* current_hz, uint64_t* max_hz) const override;
97   uint32_t CPUX86Signature() const override;
98   uint64_t CPUX86Features() const override;
99   uint64_t CPUX86ExtendedFeatures() const override;
100   uint32_t CPUX86Leaf7Features() const override;
101   bool CPUX86SupportsDAZ() const override;
102   OperatingSystem GetOperatingSystem() const override;
103   bool OSServer() const override;
104   void OSVersion(
105       int* major, int* minor, int* bugfix, std::string* build) const override;
106   std::string OSVersionFull() const override;
107   bool NXEnabled() const override;
108   std::string MachineDescription() const override;
109   void TimeZone(DaylightSavingTimeStatus* dst_status,
110                 int* standard_offset_seconds,
111                 int* daylight_offset_seconds,
112                 std::string* standard_name,
113                 std::string* daylight_name) const override;
114 
115  private:
116   CPUArchitecture cpu_architecture_;
117   uint32_t cpu_revision_;
118   uint8_t cpu_count_;
119   std::string cpu_vendor_;
120   uint64_t cpu_frequency_current_hz_;
121   uint64_t cpu_frequency_max_hz_;
122   uint32_t cpu_x86_signature_;
123   uint64_t cpu_x86_features_;
124   uint64_t cpu_x86_extended_features_;
125   uint32_t cpu_x86_leaf_7_features_;
126   bool cpu_x86_supports_daz_;
127   OperatingSystem operating_system_;
128   bool os_server_;
129   int os_version_major_;
130   int os_version_minor_;
131   int os_version_bugfix_;
132   std::string os_version_build_;
133   std::string os_version_full_;
134   bool nx_enabled_;
135   std::string machine_description_;
136   DaylightSavingTimeStatus time_zone_dst_status_;
137   int time_zone_standard_offset_seconds_;
138   int time_zone_daylight_offset_seconds_;
139   std::string time_zone_standard_name_;
140   std::string time_zone_daylight_name_;
141 
142   DISALLOW_COPY_AND_ASSIGN(TestSystemSnapshot);
143 };
144 
145 }  // namespace test
146 }  // namespace crashpad
147 
148 #endif  // CRASHPAD_SNAPSHOT_TEST_TEST_SYSTEM_SNAPSHOT_H_
149