| OLD | NEW |
| 1 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 1 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import logging, os, stat, time, utils | 5 import logging, os, stat, time, utils |
| 6 from autotest_lib.client.bin import chromeos_constants, site_cryptohome | 6 from autotest_lib.client.bin import chromeos_constants, site_cryptohome |
| 7 from autotest_lib.client.bin import site_login, test | 7 from autotest_lib.client.bin import site_login, site_ui_test |
| 8 from autotest_lib.client.common_lib import error, site_httpd, site_ui | 8 from autotest_lib.client.common_lib import error, site_httpd, site_ui |
| 9 | 9 |
| 10 def respond_with_cookies(handler, url_args): | 10 def respond_with_cookies(handler, url_args): |
| 11 """Responds with a Set-Cookie header to any GET request, and redirects | 11 """Responds with a Set-Cookie header to any GET request, and redirects |
| 12 to a chosen URL. | 12 to a chosen URL. |
| 13 """ | 13 """ |
| 14 handler.send_response(303) | 14 handler.send_response(303) |
| 15 handler.send_header('Set-Cookie', 'name=value') | 15 handler.send_header('Set-Cookie', 'name=value') |
| 16 handler.send_header('Location', url_args['continue'][0]) | 16 handler.send_header('Location', url_args['continue'][0]) |
| 17 handler.end_headers() | 17 handler.end_headers() |
| 18 handler.wfile.write('Got form data:\n') | 18 handler.wfile.write('Got form data:\n') |
| 19 handler.wfile.write('%s:\n' % url_args) | 19 handler.wfile.write('%s:\n' % url_args) |
| 20 | 20 |
| 21 | 21 |
| 22 class login_ChromeProfileSanitary(test.test): | 22 class login_ChromeProfileSanitary(site_ui_test.UITest): |
| 23 version = 1 | 23 version = 1 |
| 24 | 24 |
| 25 def __wait_for_login_profile(self, timeout = 10): | 25 def __wait_for_login_profile(self, timeout=10): |
| 26 start_time = time.time() | 26 start_time = time.time() |
| 27 while time.time() - start_time < timeout: | 27 while time.time() - start_time < timeout: |
| 28 if os.path.exists(chromeos_constants.LOGIN_PROFILE + '/Cookies'): | 28 if os.path.exists(chromeos_constants.LOGIN_PROFILE + '/Cookies'): |
| 29 break; | 29 break; |
| 30 time.sleep(1) | 30 time.sleep(1) |
| 31 else: | 31 else: |
| 32 raise error.TestError('Login Profile took too long to populate') | 32 raise error.TestError('Login Profile took too long to populate') |
| 33 | 33 |
| 34 | 34 |
| 35 def initialize(self): | 35 def initialize(self, creds='$default'): |
| 36 spec = 'http://localhost:8000' | 36 spec = 'http://localhost:8000' |
| 37 path = '/set_cookie' | 37 path = '/set_cookie' |
| 38 self._wait_path = '/test_over' | 38 self._wait_path = '/test_over' |
| 39 self._test_url = spec + path + '?continue=' + spec + self._wait_path | 39 self._test_url = spec + path + '?continue=' + spec + self._wait_path |
| 40 self._testServer = site_httpd.HTTPListener(8000, docroot=self.srcdir) | 40 self._testServer = site_httpd.HTTPListener(8000, docroot=self.srcdir) |
| 41 self._testServer.add_url_handler('/set_cookie', respond_with_cookies) | 41 self._testServer.add_url_handler('/set_cookie', respond_with_cookies) |
| 42 self._testServer.run() | 42 self._testServer.run() |
| 43 | 43 |
| 44 | 44 site_ui_test.UITest.initialize(self, creds) |
| 45 def setup(self): | |
| 46 site_login.setup_autox(self) | |
| 47 | 45 |
| 48 | 46 |
| 49 def cleanup(self): | 47 def cleanup(self): |
| 50 self._testServer.stop() | 48 self._testServer.stop() |
| 49 site_ui_test.UITest.cleanup(self) |
| 51 | 50 |
| 52 | 51 |
| 53 def run_once(self, script = 'autox_script.json', timeout = 10): | 52 def run_once(self, timeout = 10): |
| 54 logged_in = site_login.logged_in() | |
| 55 | |
| 56 if not logged_in: | |
| 57 # Test account information embedded into json file. | |
| 58 site_login.attempt_login(self, script) | |
| 59 | |
| 60 # Get Default/Cookies mtime. | 53 # Get Default/Cookies mtime. |
| 61 cookies_info = os.stat(chromeos_constants.LOGIN_PROFILE + '/Cookies') | 54 cookies_info = os.stat(chromeos_constants.LOGIN_PROFILE + '/Cookies') |
| 62 cookies_mtime = cookies_info[stat.ST_MTIME] | 55 cookies_mtime = cookies_info[stat.ST_MTIME] |
| 63 | 56 |
| 64 # "crash" chrome. | 57 # "crash" chrome. |
| 65 site_login.wait_for_initial_chrome_window() | 58 site_login.wait_for_initial_chrome_window() |
| 66 site_login.nuke_process_by_name(chromeos_constants.BROWSER, | 59 site_login.nuke_process_by_name(chromeos_constants.BROWSER, |
| 67 with_prejudice = True) | 60 with_prejudice = True) |
| 68 site_login.wait_for_browser() | 61 site_login.wait_for_browser() |
| 69 | 62 |
| 70 # Navigate to site that leaves cookies. | 63 # Navigate to site that leaves cookies. |
| 71 latch = self._testServer.add_wait_url(self._wait_path) | 64 latch = self._testServer.add_wait_url(self._wait_path) |
| 72 cookie_fetch_args = ("--user-data-dir=" + | 65 cookie_fetch_args = ("--user-data-dir=" + |
| 73 chromeos_constants.USER_DATA_DIR + ' ' + | 66 chromeos_constants.USER_DATA_DIR + ' ' + |
| 74 self._test_url) | 67 self._test_url) |
| 75 session = site_ui.ChromeSession(args=cookie_fetch_args, | 68 session = site_ui.ChromeSession(args=cookie_fetch_args, |
| 76 clean_state=False) | 69 clean_state=False) |
| 77 logging.debug('Chrome session started.') | 70 logging.debug('Chrome session started.') |
| 78 latch.wait(timeout) | 71 latch.wait(timeout) |
| 79 | 72 |
| 80 # Ensure chrome writes state to disk. | 73 # Ensure chrome writes state to disk. |
| 81 site_login.attempt_logout() | 74 self.logout() |
| 82 site_login.attempt_login(self, script) | 75 self.login() |
| 83 | 76 |
| 84 if not latch.is_set(): | 77 if not latch.is_set(): |
| 85 raise error.TestError('Never received callback from browser.') | 78 raise error.TestError('Never received callback from browser.') |
| 86 | 79 |
| 87 # Check mtime of Default/Cookies. If changed, KABLOOEY. | 80 # Check mtime of Default/Cookies. If changed, KABLOOEY. |
| 88 self.__wait_for_login_profile() | 81 self.__wait_for_login_profile() |
| 89 cookies_info = os.stat(chromeos_constants.LOGIN_PROFILE + '/Cookies') | 82 cookies_info = os.stat(chromeos_constants.LOGIN_PROFILE + '/Cookies') |
| 90 # TODO: Note that this currently (20100329) fails and will continue to | 83 # TODO: Note that this currently (20100329) fails and will continue to |
| 91 # do so until http://crosbug.com/1967 is fixed. | 84 # do so until http://crosbug.com/1967 is fixed. |
| 92 if cookies_mtime != cookies_info[stat.ST_MTIME]: | 85 if cookies_mtime != cookies_info[stat.ST_MTIME]: |
| 93 raise error.TestFail('Cookies in Default profile changed!') | 86 raise error.TestFail('Cookies in Default profile changed!') |
| 94 | |
| 95 # If we started logged out, log back out. | |
| 96 if not logged_in: | |
| 97 site_login.attempt_logout() | |
| OLD | NEW |