xref: /aosp_15_r20/external/cronet/base/ios/device_util_unittest.mm (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker// Copyright 2012 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker// found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker
5*6777b538SAndroid Build Coastguard Worker#import <UIKit/UIKit.h>
6*6777b538SAndroid Build Coastguard Worker
7*6777b538SAndroid Build Coastguard Worker#include "base/ios/device_util.h"
8*6777b538SAndroid Build Coastguard Worker#include "base/strings/sys_string_conversions.h"
9*6777b538SAndroid Build Coastguard Worker#include "testing/gtest/include/gtest/gtest.h"
10*6777b538SAndroid Build Coastguard Worker#include "testing/gtest_mac.h"
11*6777b538SAndroid Build Coastguard Worker#include "testing/platform_test.h"
12*6777b538SAndroid Build Coastguard Worker
13*6777b538SAndroid Build Coastguard Workernamespace {
14*6777b538SAndroid Build Coastguard Worker
15*6777b538SAndroid Build Coastguard Worker// The behavior of most of these utility functions depends on what they are run
16*6777b538SAndroid Build Coastguard Worker// on, so there is not much to unittest them. The APIs are run to make sure they
17*6777b538SAndroid Build Coastguard Worker// don't choke. Additional checks are added for particular APIs when needed.
18*6777b538SAndroid Build Coastguard Worker
19*6777b538SAndroid Build Coastguard Workertypedef PlatformTest DeviceUtilTest;
20*6777b538SAndroid Build Coastguard Worker
21*6777b538SAndroid Build Coastguard Workervoid CleanNSUserDefaultsForDeviceId() {
22*6777b538SAndroid Build Coastguard Worker  NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
23*6777b538SAndroid Build Coastguard Worker  [defaults removeObjectForKey:@"ChromeClientID"];
24*6777b538SAndroid Build Coastguard Worker  [defaults removeObjectForKey:@"ChromiumClientID"];
25*6777b538SAndroid Build Coastguard Worker  [defaults removeObjectForKey:@"ClientIDGenerationHardwareType"];
26*6777b538SAndroid Build Coastguard Worker  [defaults synchronize];
27*6777b538SAndroid Build Coastguard Worker}
28*6777b538SAndroid Build Coastguard Worker
29*6777b538SAndroid Build Coastguard WorkerTEST_F(DeviceUtilTest, IsSingleCoreDevice) {
30*6777b538SAndroid Build Coastguard Worker  ios::device_util::IsSingleCoreDevice();
31*6777b538SAndroid Build Coastguard Worker}
32*6777b538SAndroid Build Coastguard Worker
33*6777b538SAndroid Build Coastguard WorkerTEST_F(DeviceUtilTest, GetMacAddress) {
34*6777b538SAndroid Build Coastguard Worker  GTEST_ASSERT_GT(ios::device_util::GetMacAddress("en0").length(), 0U);
35*6777b538SAndroid Build Coastguard Worker}
36*6777b538SAndroid Build Coastguard Worker
37*6777b538SAndroid Build Coastguard WorkerTEST_F(DeviceUtilTest, GetRandomId) {
38*6777b538SAndroid Build Coastguard Worker  GTEST_ASSERT_GT(ios::device_util::GetRandomId().length(), 0U);
39*6777b538SAndroid Build Coastguard Worker}
40*6777b538SAndroid Build Coastguard Worker
41*6777b538SAndroid Build Coastguard WorkerTEST_F(DeviceUtilTest, GetDeviceIdentifier) {
42*6777b538SAndroid Build Coastguard Worker  CleanNSUserDefaultsForDeviceId();
43*6777b538SAndroid Build Coastguard Worker
44*6777b538SAndroid Build Coastguard Worker  std::string default_id = ios::device_util::GetDeviceIdentifier(NULL);
45*6777b538SAndroid Build Coastguard Worker  std::string other_id = ios::device_util::GetDeviceIdentifier("ForTest");
46*6777b538SAndroid Build Coastguard Worker  EXPECT_NE(default_id, other_id);
47*6777b538SAndroid Build Coastguard Worker
48*6777b538SAndroid Build Coastguard Worker  CleanNSUserDefaultsForDeviceId();
49*6777b538SAndroid Build Coastguard Worker
50*6777b538SAndroid Build Coastguard Worker  std::string new_default_id = ios::device_util::GetDeviceIdentifier(NULL);
51*6777b538SAndroid Build Coastguard Worker  if (![[[[UIDevice currentDevice] identifierForVendor] UUIDString]
52*6777b538SAndroid Build Coastguard Worker          isEqualToString:@"00000000-0000-0000-0000-000000000000"]) {
53*6777b538SAndroid Build Coastguard Worker    EXPECT_EQ(default_id, new_default_id);
54*6777b538SAndroid Build Coastguard Worker  } else {
55*6777b538SAndroid Build Coastguard Worker    EXPECT_NE(default_id, new_default_id);
56*6777b538SAndroid Build Coastguard Worker  }
57*6777b538SAndroid Build Coastguard Worker
58*6777b538SAndroid Build Coastguard Worker  CleanNSUserDefaultsForDeviceId();
59*6777b538SAndroid Build Coastguard Worker}
60*6777b538SAndroid Build Coastguard Worker
61*6777b538SAndroid Build Coastguard WorkerTEST_F(DeviceUtilTest, CheckMigration) {
62*6777b538SAndroid Build Coastguard Worker  CleanNSUserDefaultsForDeviceId();
63*6777b538SAndroid Build Coastguard Worker
64*6777b538SAndroid Build Coastguard Worker  NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
65*6777b538SAndroid Build Coastguard Worker  [defaults setObject:@"10000000-0000-0000-0000-000000000000"
66*6777b538SAndroid Build Coastguard Worker               forKey:@"ChromeClientID"];
67*6777b538SAndroid Build Coastguard Worker  [defaults synchronize];
68*6777b538SAndroid Build Coastguard Worker  std::string expected_id = ios::device_util::GetDeviceIdentifier(NULL);
69*6777b538SAndroid Build Coastguard Worker  [defaults removeObjectForKey:@"ChromeClientID"];
70*6777b538SAndroid Build Coastguard Worker  [defaults setObject:@"10000000-0000-0000-0000-000000000000"
71*6777b538SAndroid Build Coastguard Worker               forKey:@"ChromiumClientID"];
72*6777b538SAndroid Build Coastguard Worker  [defaults synchronize];
73*6777b538SAndroid Build Coastguard Worker  std::string new_id = ios::device_util::GetDeviceIdentifier(NULL);
74*6777b538SAndroid Build Coastguard Worker  EXPECT_EQ(expected_id, new_id);
75*6777b538SAndroid Build Coastguard Worker
76*6777b538SAndroid Build Coastguard Worker  CleanNSUserDefaultsForDeviceId();
77*6777b538SAndroid Build Coastguard Worker}
78*6777b538SAndroid Build Coastguard Worker
79*6777b538SAndroid Build Coastguard WorkerTEST_F(DeviceUtilTest, CheckMigrationFromZero) {
80*6777b538SAndroid Build Coastguard Worker  CleanNSUserDefaultsForDeviceId();
81*6777b538SAndroid Build Coastguard Worker
82*6777b538SAndroid Build Coastguard Worker  NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
83*6777b538SAndroid Build Coastguard Worker  [defaults setObject:@"00000000-0000-0000-0000-000000000000"
84*6777b538SAndroid Build Coastguard Worker               forKey:@"ChromeClientID"];
85*6777b538SAndroid Build Coastguard Worker  [defaults synchronize];
86*6777b538SAndroid Build Coastguard Worker  std::string zero_id = ios::device_util::GetDeviceIdentifier(NULL);
87*6777b538SAndroid Build Coastguard Worker  [defaults removeObjectForKey:@"ChromeClientID"];
88*6777b538SAndroid Build Coastguard Worker  [defaults setObject:@"00000000-0000-0000-0000-000000000000"
89*6777b538SAndroid Build Coastguard Worker               forKey:@"ChromiumClientID"];
90*6777b538SAndroid Build Coastguard Worker  [defaults synchronize];
91*6777b538SAndroid Build Coastguard Worker  std::string new_id = ios::device_util::GetDeviceIdentifier(NULL);
92*6777b538SAndroid Build Coastguard Worker  EXPECT_NE(zero_id, new_id);
93*6777b538SAndroid Build Coastguard Worker
94*6777b538SAndroid Build Coastguard Worker  CleanNSUserDefaultsForDeviceId();
95*6777b538SAndroid Build Coastguard Worker}
96*6777b538SAndroid Build Coastguard Worker
97*6777b538SAndroid Build Coastguard WorkerTEST_F(DeviceUtilTest, GetSaltedStringEquals) {
98*6777b538SAndroid Build Coastguard Worker  std::string string1("The quick brown fox jumps over the lazy dog");
99*6777b538SAndroid Build Coastguard Worker  std::string string2("The quick brown fox jumps over the lazy dog");
100*6777b538SAndroid Build Coastguard Worker  std::string salt("salt");
101*6777b538SAndroid Build Coastguard Worker  // Same string and same salt should result in the same salted string.
102*6777b538SAndroid Build Coastguard Worker  EXPECT_EQ(ios::device_util::GetSaltedString(string1, salt),
103*6777b538SAndroid Build Coastguard Worker            ios::device_util::GetSaltedString(string2, salt));
104*6777b538SAndroid Build Coastguard Worker}
105*6777b538SAndroid Build Coastguard Worker
106*6777b538SAndroid Build Coastguard WorkerTEST_F(DeviceUtilTest, GetSaltedStringNotEquals) {
107*6777b538SAndroid Build Coastguard Worker  std::string string1("The quick brown fox jumps over the lazy dog");
108*6777b538SAndroid Build Coastguard Worker  std::string string2("The lazy brown fox jumps over the quick dog");
109*6777b538SAndroid Build Coastguard Worker  std::string salt("salt");
110*6777b538SAndroid Build Coastguard Worker  // Different string and same salt should result in different salted strings.
111*6777b538SAndroid Build Coastguard Worker  EXPECT_NE(ios::device_util::GetSaltedString(string1, salt),
112*6777b538SAndroid Build Coastguard Worker            ios::device_util::GetSaltedString(string2, salt));
113*6777b538SAndroid Build Coastguard Worker}
114*6777b538SAndroid Build Coastguard Worker
115*6777b538SAndroid Build Coastguard WorkerTEST_F(DeviceUtilTest, GetSaltedStringDifferentSalt) {
116*6777b538SAndroid Build Coastguard Worker  std::string string1("The quick brown fox jumps over the lazy dog");
117*6777b538SAndroid Build Coastguard Worker  std::string salt1("salt");
118*6777b538SAndroid Build Coastguard Worker  std::string salt2("pepper");
119*6777b538SAndroid Build Coastguard Worker  // Same string with different salt should result in different salted strings.
120*6777b538SAndroid Build Coastguard Worker  EXPECT_NE(ios::device_util::GetSaltedString(string1, salt1),
121*6777b538SAndroid Build Coastguard Worker            ios::device_util::GetSaltedString(string1, salt2));
122*6777b538SAndroid Build Coastguard Worker}
123*6777b538SAndroid Build Coastguard Worker
124*6777b538SAndroid Build Coastguard WorkerTEST_F(DeviceUtilTest, CheckDeviceMigration) {
125*6777b538SAndroid Build Coastguard Worker  CleanNSUserDefaultsForDeviceId();
126*6777b538SAndroid Build Coastguard Worker
127*6777b538SAndroid Build Coastguard Worker  NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
128*6777b538SAndroid Build Coastguard Worker  [defaults setObject:@"10000000-0000-0000-0000-000000000000"
129*6777b538SAndroid Build Coastguard Worker               forKey:@"ChromeClientID"];
130*6777b538SAndroid Build Coastguard Worker  [defaults synchronize];
131*6777b538SAndroid Build Coastguard Worker  std::string base_id = ios::device_util::GetDeviceIdentifier(NULL);
132*6777b538SAndroid Build Coastguard Worker  [defaults setObject:@"Foo" forKey:@"ClientIDGenerationHardwareType"];
133*6777b538SAndroid Build Coastguard Worker  [defaults synchronize];
134*6777b538SAndroid Build Coastguard Worker  std::string new_id = ios::device_util::GetDeviceIdentifier(NULL);
135*6777b538SAndroid Build Coastguard Worker  EXPECT_NE(new_id, base_id);
136*6777b538SAndroid Build Coastguard Worker
137*6777b538SAndroid Build Coastguard Worker  CleanNSUserDefaultsForDeviceId();
138*6777b538SAndroid Build Coastguard Worker}
139*6777b538SAndroid Build Coastguard Worker
140*6777b538SAndroid Build Coastguard Worker}  // namespace
141