Chromium Code Reviews| Index: enterprise.py |
| =================================================================== |
| --- enterprise.py (revision 95020) |
| +++ enterprise.py (working copy) |
| @@ -307,6 +307,265 @@ |
| self.assertFalse(self.GetHistoryInfo().History(), |
| msg='History is being saved.') |
| +class EnterpriseTestSetTwo(pyauto.PyUITest): |
|
Nirnimesh
2011/08/05 19:05:23
'SetTwo' is not informative enough.
In the docstr
aocampo
2011/08/05 23:04:32
Done.
|
| + """Test for Enterprise features. |
| + 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. |
| + """ |
| + EnterpriseTestSetTwo._Cleanup() |
| + if pyauto.PyUITest.IsWin(): |
| + registry_location = os.path.join(EnterpriseTestSetTwo.DataDir(), 'enterprise', |
|
Nirnimesh
2011/08/05 19:05:23
>80 chars
|
| + 'chrome-add-reverse.reg') |
| + # Add the registry keys |
| + subprocess.call('reg import %s' % registry_location) |
| + elif pyauto.PyUITest.IsLinux(): |
| + chrome_json = os.path.join(EnterpriseTestSetTwo.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') |
|
Nirnimesh
2011/08/05 19:05:23
>80 chars
aocampo
2011/08/05 23:04:32
Done.
|
| + assert policy_file_check, 'Policy file(s) not set up.' |
| + pyauto.PyUITest.setUp(self) |
| + |
| + def tearDown(self): |
| + pyauto.PyUITest.tearDown(self) |
| + EnterpriseTestSetTwo._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') |
| + |
|
Nirnimesh
2011/08/05 19:05:23
leave another blank line here
|
| if __name__ == '__main__': |
| pyauto_functional.Main() |