OLD | NEW |
(Empty) | |
| 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. |
| 5 |
| 6 import chromium_proxy_server_ex |
| 7 import commands |
| 8 import logging |
| 9 import optparse |
| 10 import os |
| 11 import re |
| 12 import selenium.selenium |
| 13 import shutil |
| 14 import subprocess |
| 15 import sys |
| 16 import tempfile |
| 17 import time |
| 18 import unittest |
| 19 import _winreg |
| 20 import selenium.webdriver.common.keys |
| 21 |
| 22 from selenium import webdriver |
| 23 from selenium.webdriver.common.keys import Keys as Keys |
| 24 from selenium.webdriver.support.ui import WebDriverWait |
| 25 |
| 26 class RlzTest(unittest.TestCase): |
| 27 |
| 28 proxy_server_file = '' |
| 29 chrome_driver_path = '' |
| 30 |
| 31 def setUp(self): |
| 32 """Performs necessary setup work before running each test in this class.""" |
| 33 # Delete RLZ key Folder |
| 34 self.deleteRegistryKey() |
| 35 # Launch Proxy Server |
| 36 print ('Serving clients: 127.0.0.1') |
| 37 self.proxy_server = subprocess.Popen([ |
| 38 'python', |
| 39 RlzTest.proxy_server_file, |
| 40 '--client=127.0.0.1', |
| 41 '--port=8080', |
| 42 '--urls=http://clients1.google.com/tools/pso/ping,www.google.com']) |
| 43 print('\nLaunching Chrome...') |
| 44 # Launch chrome and set proxy. |
| 45 self.temp_data_dir = tempfile.mkdtemp() |
| 46 self.launchChrome(self.temp_data_dir) |
| 47 |
| 48 def tearDown(self): |
| 49 """Kills the chrome driver after after the test method has been called.""" |
| 50 # Terminate the chrome driver. |
| 51 print '\nTerminating Chrome Driver...' |
| 52 self.driver.quit() |
| 53 |
| 54 # Kill proxy server. |
| 55 print '\nKilling Proxy Server...' |
| 56 subprocess.Popen.kill(self.proxy_server) |
| 57 |
| 58 # Delete temp profile directory |
| 59 try: |
| 60 shutil.rmtree(self.temp_data_dir) # delete directory |
| 61 except OSError, e: |
| 62 if e.errno != 2: # code 2 - no such file or directory |
| 63 raise |
| 64 |
| 65 def launchChrome(self, data_directory): |
| 66 """Launch chrome using chrome driver. |
| 67 |
| 68 Args: |
| 69 data_directory: Temp directory to store preference data. |
| 70 """ |
| 71 service = webdriver.chrome.service.Service(RlzTest.chrome_driver_path) |
| 72 service.start() |
| 73 self.driver = webdriver.Remote( |
| 74 service.service_url, { |
| 75 'proxy': {'proxyType': 'manual', 'httpProxy': 'localhost:8080'}, |
| 76 'chrome.nativeEvents': True, |
| 77 'chrome.switches': ['disable-extensions', |
| 78 r'user-data-dir=' + data_directory]}) |
| 79 |
| 80 def deleteRegistryKey(self): |
| 81 """Delete RLZ key Folder from win registry.""" |
| 82 try: |
| 83 hkey = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, |
| 84 'Software\\Google\\Common\\Rlz') |
| 85 except _winreg.error, err: |
| 86 return True |
| 87 if(hkey): |
| 88 _winreg.DeleteKey(_winreg.HKEY_CURRENT_USER, |
| 89 'Software\\Google\\Common\\Rlz\\Events\\C') |
| 90 _winreg.DeleteKey(_winreg.HKEY_CURRENT_USER, |
| 91 'Software\\Google\\Common\\Rlz\\StatefulEvents\\C') |
| 92 _winreg.DeleteKey(_winreg.HKEY_CURRENT_USER, |
| 93 'Software\\Google\\Common\\Rlz\\Events') |
| 94 _winreg.DeleteKey(_winreg.HKEY_CURRENT_USER, |
| 95 'Software\\Google\\Common\\Rlz\\StatefulEvents') |
| 96 _winreg.DeleteKey(_winreg.HKEY_CURRENT_USER, |
| 97 'Software\\Google\\Common\\Rlz\\PTimes') |
| 98 _winreg.DeleteKey(_winreg.HKEY_CURRENT_USER, |
| 99 'Software\\Google\\Common\\Rlz\\RLZs') |
| 100 _winreg.DeleteKey(_winreg.HKEY_CURRENT_USER, |
| 101 'Software\\Google\\Common\\Rlz') |
| 102 |
| 103 def GetKeyValueNames(self, key, subkey): |
| 104 """Get the values for particular subkey |
| 105 |
| 106 Args: |
| 107 key: Key is one of the predefined HKEY_* constants. |
| 108 subkey: It is a string that identifies the sub_key to delete. |
| 109 """ |
| 110 list_names = [] |
| 111 counter = 0 |
| 112 try: |
| 113 hkey = _winreg.OpenKey(key, subkey) |
| 114 except _winreg.error, err: |
| 115 return -1 |
| 116 while True: |
| 117 try: |
| 118 value = _winreg.EnumValue(hkey, counter) |
| 119 list_names.append(value[0]) |
| 120 counter += 1 |
| 121 except _winreg.error: |
| 122 break |
| 123 hkey.Close() |
| 124 return list_names |
| 125 |
| 126 def _AssertEventsInPing(self, log_file, excepted_event_list, readFile=1): |
| 127 """ Asserts events in ping appended. |
| 128 |
| 129 Args: |
| 130 contents: String variable contains contents of log file. |
| 131 excepted_event_list: List of expected events in ping. |
| 132 readFile: Reading order for file. Default is 1 (Top to Bottom). |
| 133 """ |
| 134 for line in log_file[::readFile]: |
| 135 if(re.search('events=', line)): |
| 136 event_start = line.find('events=') |
| 137 event_end = line.find('&rep', event_start) |
| 138 events = line[event_start + 7 : event_end] |
| 139 events_List = events.split(',') |
| 140 print 'event_list',events_List |
| 141 break |
| 142 # Validate events in url ping. |
| 143 for event in excepted_event_list: |
| 144 self.assertTrue(event in events_List) |
| 145 # Validate brand code in url ping. |
| 146 self.assertTrue(re.search('CHMZ', line)) |
| 147 # Print first chrome launch ping on Console. |
| 148 start = line.find('http://clients1.google.com/tools/'+ |
| 149 'pso/ping?as=chrome&brand=CHMZ') |
| 150 end = line.find('http://www', start) |
| 151 print '\nChrome Launch ping sent :\n', line[start:end] |
| 152 |
| 153 |
| 154 def _AssertEventsInRegistry(self, excepted_reg_keys): |
| 155 """ Asserts events reported in win registry. |
| 156 |
| 157 Args: |
| 158 excepted_reg_keys: List of expected events in win registry. |
| 159 """ |
| 160 list_key=self.GetKeyValueNames(_winreg.HKEY_CURRENT_USER, |
| 161 'Software\Google\Common\Rlz\StatefulEvents\C') |
| 162 print ('\nList of event reported to registry-' |
| 163 'Software\Google\Common\Rlz\StatefulEvents:', list_key) |
| 164 for key in excepted_reg_keys: |
| 165 self.assertTrue(key in list_key) |
| 166 |
| 167 def _AssertRlzValues(self, log_file, readFile=1): |
| 168 """ Asserts RLZ values. |
| 169 |
| 170 Args: |
| 171 log_file: String variable contains contents of log file. |
| 172 readFile: Reading order for file. Default is 1 (Top to Bottom). |
| 173 """ |
| 174 for line in log_file[::readFile]: |
| 175 if(re.search('events=', line)): |
| 176 event_start = line.find('rlz=') |
| 177 event_end = line.find('&id', event_start) |
| 178 events = line[event_start + 4 : event_end] |
| 179 events_List = events.split(',') |
| 180 self.assertTrue('C1:' in events_List) |
| 181 self.assertTrue('C2:' in events_List) |
| 182 |
| 183 def _searchFromOmnibox(self, searchString): |
| 184 """ Asserts RLZ values. |
| 185 |
| 186 Args: |
| 187 searchString: Input string to be searched. |
| 188 """ |
| 189 self.driver.switch_to_active_element().send_keys(Keys.CONTROL + 'l') |
| 190 self.driver.switch_to_active_element().send_keys(searchString) |
| 191 self.driver.switch_to_active_element().send_keys(Keys.ENTER) |
| 192 time.sleep(2) |
| 193 |
| 194 def testRlzPingAtFirstChromeLaunch(self): |
| 195 """Test rlz ping when chrome is launched for first time.""" |
| 196 # Wait for 100 sec till chrome sends ping to server. |
| 197 time.sleep(100) |
| 198 self.driver.get('http://www.google.com') |
| 199 |
| 200 # Open log file. |
| 201 log_file = open( |
| 202 os.getcwd() + '\chromium_proxy_server.log', 'r', 1).readlines() |
| 203 |
| 204 # Validate events first chrome launch(C1I,C2I,C1S) are appended in ping. |
| 205 excepted_events = ['C1S', 'C1I', 'C2I'] |
| 206 self._AssertEventsInPing(log_file, excepted_events) |
| 207 |
| 208 # Validate events in win registry. |
| 209 excepted_reg_keys = ['C1I', 'C2I'] |
| 210 self._AssertEventsInRegistry(excepted_reg_keys) |
| 211 |
| 212 def testRlzPingForFirstSearch(self): |
| 213 """Test rlz ping when first search is performed in chrome.""" |
| 214 # Type search string in omnibox. |
| 215 self._searchFromOmnibox('java') |
| 216 print '\nCurrent Url before chrome ping sent:\n', self.driver.current_url |
| 217 |
| 218 # Assert brand code 'CHMZ' is not appended in search string. |
| 219 self.assertFalse(re.search('CHMZ', self.driver.current_url)) |
| 220 |
| 221 # Wait for 100 sec till chrome sends ping to server. |
| 222 time.sleep(100) |
| 223 |
| 224 # Open log file. |
| 225 log_file = open( |
| 226 os.getcwd() + '\chromium_proxy_server.log', 'r', 1).readlines() |
| 227 |
| 228 # Validate events first chrome launch(C1I,C2I,C1S) and |
| 229 # first search(C1F) are appended in ping. |
| 230 excepted_events = ['C1S', 'C1I', 'C2I', 'C1F'] |
| 231 self._AssertEventsInPing(log_file, excepted_events) |
| 232 |
| 233 # Assert C1, C2 rlz value appended in ping |
| 234 self._AssertRlzValues(log_file) |
| 235 |
| 236 # Type search string in omnibox after ping is sent to server. |
| 237 self._searchFromOmnibox('java') |
| 238 print '\nCurrent Url after chrome ping sent:\n', self.driver.current_url |
| 239 |
| 240 # Assert brand code 'CHMZ' is appended in search string. |
| 241 self.assertTrue(re.search('CHMZ', self.driver.current_url)) |
| 242 |
| 243 # Validate events in win registry. |
| 244 excepted_reg_keys=['C1I', 'C2I', 'C1F'] |
| 245 self._AssertEventsInRegistry(excepted_reg_keys) |
| 246 |
| 247 # Assert the log for search ping with query string/brand code appended. |
| 248 log_file = open( |
| 249 os.getcwd() + '\chromium_proxy_server.log', 'r', 1).readlines() |
| 250 searchStringFound = False |
| 251 for line in log_file[::-1]: |
| 252 if(re.search('search?', line)): |
| 253 self.assertTrue(re.search('java', line)) |
| 254 self.assertTrue(re.search('CHMZ', line)) |
| 255 print '\nChrome search ping send\n', line |
| 256 searchStringFound = True |
| 257 break |
| 258 self.assertTrue(searchStringFound, 'Search Query String Not Found') |
| 259 |
| 260 def rlzInput(): |
| 261 proxy_server_file = raw_input("Enter Proxy Server File Name: ") |
| 262 chrome_driver_path = raw_input("Enter chrome driver path in"+ |
| 263 "your system(c:\\chrome\\..):") |
| 264 return (proxy_server_file, chrome_driver_path) |
| 265 |
| 266 if __name__ == '__main__': |
| 267 server, driver = rlzInput() |
| 268 RlzTest.proxy_server_file = server |
| 269 RlzTest.chrome_driver_path = driver |
| 270 unittest.main() |
OLD | NEW |