diff options
author | aocampo@chromium.org <aocampo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-06 03:15:29 +0000 |
---|---|---|
committer | aocampo@chromium.org <aocampo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-06 03:15:29 +0000 |
commit | a82aa8513ec8f638ab2d68fca5e6a1a1d5fd1e67 (patch) | |
tree | 257caef65d6476aa0cb5e4e9afd6847b04f77953 | |
parent | 54543699023a921731fad3aa6fb5a1702e955ddd (diff) | |
download | chromium_src-a82aa8513ec8f638ab2d68fca5e6a1a1d5fd1e67.zip chromium_src-a82aa8513ec8f638ab2d68fca5e6a1a1d5fd1e67.tar.gz chromium_src-a82aa8513ec8f638ab2d68fca5e6a1a1d5fd1e67.tar.bz2 |
- Added another class 'EnterpriseTestSetTwo'to test another set of policy values.
- Modified enterprise_helper_linux script to handle changing file permissions for multiple json files.
BUG=NONE
Review URL: http://codereview.chromium.org/7453062
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@95718 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/test/functional/enterprise.py | 261 | ||||
-rw-r--r-- | chrome/test/functional/enterprise_helper_linux.py | 6 |
2 files changed, 265 insertions, 2 deletions
diff --git a/chrome/test/functional/enterprise.py b/chrome/test/functional/enterprise.py index 0e12104..cad9329 100644 --- a/chrome/test/functional/enterprise.py +++ b/chrome/test/functional/enterprise.py @@ -325,6 +325,267 @@ class EnterpriseTest(pyauto.PyUITest): pid = self._GetPluginPID('Java') self.assertTrue(pid, 'No plugin process for java') +class EnterpriseTestReverse(pyauto.PyUITest): + """Test for the Enterprise features that uses the opposite values of the + policies used by above test class 'EnterpriseTest'. + + Browser preferences will be managed using policies. These managed preferences + cannot be modified by user. This works only for Google Chrome, not Chromium. + + On Linux, assume that 'suid-python' (a python binary setuid root) is + available on the machine under /usr/local/bin directory. + """ + assert pyauto.PyUITest.IsWin() or pyauto.PyUITest.IsLinux(), \ + 'Only runs on Win or Linux' + + def Debug(self): + """Test method for experimentation. + + This method will not run automatically. + """ + import pprint + pp = pprint.PrettyPrinter(indent=2) + while True: + raw_input('Interact with the browser and hit <enter> to dump prefs... ') + pp.pprint(self.GetPrefsInfo().Prefs()) + + @staticmethod + def _Cleanup(): + """Removes the registry key and its subkeys(if they exist). + + Win: Registry Key being deleted: HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google + Linux: Removes the chrome directory from /etc/opt + """ + if pyauto.PyUITest.IsWin(): + if subprocess.call( + r'reg query HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google') == 0: + logging.debug(r'Removing HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google') + subprocess.call(r'reg delete HKLM\Software\Policies\Google /f') + elif pyauto.PyUITest.IsLinux(): + sudo_cmd_file = os.path.join(os.path.dirname(__file__), + 'enterprise_helper_linux.py') + if os.path.isdir ('/etc/opt/chrome'): + logging.debug('Removing directory /etc/opt/chrome/') + subprocess.call(['suid-python', sudo_cmd_file, + 'remove_dir', '/etc/opt/chrome']) + + @staticmethod + def _SetUp(): + """Win: Add the registry keys from the .reg file. + + Removes the registry key and its subkeys if they exist. + Adding HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google. + + Linux: Copy the chrome.json file to the managed directory. + Remove /etc/opt/chrome directory if it exists. + """ + EnterpriseTestReverse._Cleanup() + if pyauto.PyUITest.IsWin(): + registry_location = os.path.join(EnterpriseTestReverse.DataDir(), + 'enterprise', 'chrome-add-reverse.reg') + # Add the registry keys + subprocess.call('reg import %s' % registry_location) + elif pyauto.PyUITest.IsLinux(): + chrome_json = os.path.join(EnterpriseTestReverse.DataDir(), + 'enterprise', 'chrome-reverse.json') + sudo_cmd_file = os.path.join(os.path.dirname(__file__), + 'enterprise_helper_linux.py') + policies_location = '/etc/opt/chrome/policies/managed' + subprocess.call(['suid-python', sudo_cmd_file, + 'setup_dir', policies_location]) + # Copy chrome.json file to the managed directory + subprocess.call(['suid-python', sudo_cmd_file, + 'copy', chrome_json, policies_location]) + + def setUp(self): + # Add policies through registry or json file. + self._SetUp() + # Check if registries are created in Win. + if pyauto.PyUITest.IsWin(): + registry_query_code = subprocess.call( + r'reg query HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google') + assert registry_query_code == 0, 'Could not create registries.' + # Check if json file is copied under correct location in Linux. + elif pyauto.PyUITest.IsLinux(): + policy_file_check = os.path.isfile( + '/etc/opt/chrome/policies/managed/chrome-reverse.json') + assert policy_file_check, 'Policy file(s) not set up.' + pyauto.PyUITest.setUp(self) + + def tearDown(self): + pyauto.PyUITest.tearDown(self) + EnterpriseTestReverse._Cleanup() + + def _CheckIfPrefCanBeModified(self, key, defaultval, newval): + """Check if the managed preferences can be modified. + + Args: + key: The preference key that you want to modify + defaultval: Default value of the preference that we are trying to modify + newval: New value that we are trying to set + """ + # Check if the default value of the preference is set as expected. + self.assertEqual(self.GetPrefsInfo().Prefs(key), defaultval, + msg='Default value of the preference is wrong.') + self.assertRaises(pyauto.JSONInterfaceError, + lambda: self.SetPrefs(key, newval)) + + def _GetPluginPID(self, plugin_name): + """Fetch the pid of the plugin process with name |plugin_name|.""" + child_processes = self.GetBrowserInfo()['child_processes'] + plugin_type = 'Plug-in' + for x in child_processes: + if x['type'] == plugin_type and re.search(plugin_name, x['name']): + return x['pid'] + return None + + # Tests for options in Basics + def testStartupPages(self): + """Verify that user cannot modify the startup page options.""" + if self.GetBrowserInfo()['properties']['branding'] != 'Google Chrome': + return + # Verify startup option + self.assertEquals(0, self.GetPrefsInfo().Prefs(pyauto.kRestoreOnStartup)) + self.assertRaises(pyauto.JSONInterfaceError, + lambda: self.SetPrefs(pyauto.kRestoreOnStartup, 1)) + + def testHomePageOptions(self): + """Verify that we cannot modify Homepage settings.""" + if self.GetBrowserInfo()['properties']['branding'] != 'Google Chrome': + return + # Try to configure home page URL + self.assertEquals('http://chromium.org', + self.GetPrefsInfo().Prefs('homepage')) + self.assertRaises(pyauto.JSONInterfaceError, + lambda: self.SetPrefs('homepage', 'http://www.google.com')) + + # Try to reconfigure NTP as home page + self.assertFalse(self.GetPrefsInfo().Prefs(pyauto.kHomePageIsNewTabPage)) + self.assertRaises(pyauto.JSONInterfaceError, + lambda: self.SetPrefs(pyauto.kHomePageIsNewTabPage, True)) + + def testShowHomeButton(self): + """Verify that home button option cannot be modified when it's managed.""" + if self.GetBrowserInfo()['properties']['branding'] != 'Google Chrome': + return + self._CheckIfPrefCanBeModified(pyauto.kShowHomeButton, False, True) + + def testInstant(self): + """Verify that Instant option cannot be modified.""" + if self.GetBrowserInfo()['properties']['branding'] != 'Google Chrome': + return + self._CheckIfPrefCanBeModified(pyauto.kInstantEnabled, False, True) + + # Tests for options in Personal Stuff + def testPasswordManagerEnabled(self): + """Verify that password manager preference cannot be modified.""" + if self.GetBrowserInfo()['properties']['branding'] != 'Google Chrome': + return + self._CheckIfPrefCanBeModified(pyauto.kPasswordManagerEnabled, False, True) + + # Tests for options in Under the Hood + def testPrivacyPrefs(self): + """Verify that the managed preferences cannot be modified.""" + if self.GetBrowserInfo()['properties']['branding'] != 'Google Chrome': + return + prefs_list = [ + # (preference key, default value, new value) + (pyauto.kAlternateErrorPagesEnabled, False, True), + (pyauto.kNetworkPredictionEnabled, False, True), + (pyauto.kSafeBrowsingEnabled, False, True), + (pyauto.kSearchSuggestEnabled, False, True), + ] + # Check if the policies got applied by trying to modify + for key, defaultval, newval in prefs_list: + logging.info('Checking pref %s', key) + self._CheckIfPrefCanBeModified(key, defaultval, newval) + + def testNotClearSiteDataOnExit(self): + """Verify that clear data on exit preference cannot be modified.""" + if self.GetBrowserInfo()['properties']['branding'] != 'Google Chrome': + return + self._CheckIfPrefCanBeModified(pyauto.kClearSiteDataOnExit, False, True) + + def testUnblockThirdPartyCookies(self): + """Verify that block third party cookies preference cannot be modified.""" + if self.GetBrowserInfo()['properties']['branding'] != 'Google Chrome': + return + self._CheckIfPrefCanBeModified(pyauto.kBlockThirdPartyCookies, False, True) + + def testEnableDevTools(self): + """Verify that devtools window can be launched.""" + if self.GetBrowserInfo()['properties']['branding'] != 'Google Chrome': + return + # DevTools process can be seen by PyAuto only when it's undocked. + self.SetPrefs(pyauto.kDevToolsOpenDocked, False) + self.ApplyAccelerator(pyauto.IDC_DEV_TOOLS) + self.assertEquals(2, len(self.GetBrowserInfo()['windows']), + msg='Devtools window not launched.') + + def testEnableSPDY(self): + """Verify that SPDY is enabled.""" + if self.GetBrowserInfo()['properties']['branding'] != 'Google Chrome': + return + self.NavigateToURL('chrome://net-internals/#spdy') + self.assertEquals(0, + self.FindInPage('encrypted.google.com')['match_count']) + self.AppendTab(pyauto.GURL('https://encrypted.google.com')) + self.assertEquals('Google', self.GetActiveTabTitle()) + self.GetBrowserWindow(0).GetTab(0).Reload() + self.assertEquals(1, + self.FindInPage('encrypted.google.com', tab_index=0)['match_count'], + msg='SPDY is not enabled.') + + def testSetDownloadDirectory(self): + """Verify that the downloads directory and prompt for download preferences + can be modified. + """ + if self.GetBrowserInfo()['properties']['branding'] != 'Google Chrome': + return + if self.IsWin(): + download_default_dir = os.path.join(os.getenv('USERPROFILE'),'Downloads') + self.assertEqual(download_default_dir, + self.GetPrefsInfo().Prefs()['download']['default_directory'], + msg='Downloads directory is not set correctly.') + # Check for changing the download directory location + self.SetPrefs(pyauto.kDownloadDefaultDirectory, + os.getenv('USERPROFILE')) + elif self.IsLinux(): + download_default_dir = os.path.join(os.getenv('HOME'), 'Downloads') + self.assertEqual(download_default_dir, + self.GetPrefsInfo().Prefs()['download']['default_directory'], + msg='Downloads directory is not set correctly.') + self.SetPrefs(pyauto.kDownloadDefaultDirectory, + os.getenv('HOME')) + # Check for changing the option 'Ask for each download' + self.SetPrefs(pyauto.kPromptForDownload, False) + + def testIncognitoDisabled(self): + """Verify that incognito window can be launched.""" + if self.GetBrowserInfo()['properties']['branding'] != 'Google Chrome': + return + self.RunCommand(pyauto.IDC_NEW_INCOGNITO_WINDOW) + self.assertEquals(1, self.GetBrowserWindowCount()) + + def testEnableBrowsingHistory(self): + """Verify that browsing history is being saved.""" + if self.GetBrowserInfo()['properties']['branding'] != 'Google Chrome': + return + url = self.GetFileURLForPath(os.path.join(self.DataDir(), 'empty.html')) + self.NavigateToURL(url) + self.assertTrue(self.GetHistoryInfo().History(), + msg='History not is being saved.') + + def testAlwaysAuthorizePluginsDisabled(self): + """Verify plugins are always not allowed to run when policy is set.""" + if self.GetBrowserInfo()['properties']['branding'] != 'Google Chrome': + return + url = self.GetFileURLForDataPath('plugin', 'java_new.html') + self.NavigateToURL(url) + self.assertTrue(self.WaitForInfobarCount(1)) + pid = self._GetPluginPID('Java') + self.assertFalse(pid, 'There is a plugin process for java') + if __name__ == '__main__': pyauto_functional.Main() diff --git a/chrome/test/functional/enterprise_helper_linux.py b/chrome/test/functional/enterprise_helper_linux.py index 1d44eec9..a2e5782 100644 --- a/chrome/test/functional/enterprise_helper_linux.py +++ b/chrome/test/functional/enterprise_helper_linux.py @@ -14,8 +14,10 @@ def main(): assert os.geteuid() == 0, 'Need superuser privileges' if sys.argv[1] == 'copy': shutil.copy(sys.argv[2], sys.argv[3]) - filename = os.path.join(sys.argv[3], 'chrome.json') - os.chmod(filename, 0755) + dirList = os.listdir(sys.argv[3]) + for fname in dirList: + filename = os.path.join(sys.argv[3], fname) + os.chmod(filename, 0755) elif sys.argv[1] == 'setup_dir': os.system('mkdir -p %s' % sys.argv[2]) os.system('chmod -R 755 /etc/opt/chrome/') |