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