Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7196)

Unified Diff: chrome/test/pyautolib/chromoting_helper.py

Issue 10821015: Initial checkin of the me2me pyauto automation: (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« chrome/test/pyautolib/chromoting.py ('K') | « chrome/test/pyautolib/chromoting.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/pyautolib/chromoting_helper.py
===================================================================
--- chrome/test/pyautolib/chromoting_helper.py (revision 0)
+++ chrome/test/pyautolib/chromoting_helper.py (revision 0)
@@ -0,0 +1,163 @@
+# Copyright (c) 2012 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Chromoting helper script to install/uninstall/enable/disable host."""
+
+import os
+import sys
+import subprocess
+
+
+class ChromotingHelper(object):
Nirnimesh 2012/08/08 19:46:10 Create a base class with abstract methods: Install
yihongg 2012/08/10 20:42:52 Done.
+ """Chromting Helper class."""
Nirnimesh 2012/08/08 19:46:10 Chromoting
Nirnimesh 2012/08/08 19:46:10 Mention the purpose too
yihongg 2012/08/10 20:42:52 Done.
yihongg 2012/08/10 20:42:52 Done.
yihongg 2012/08/10 20:42:52 Done.
+
+ def InstallHostMac(self, bin_dir):
+ """Installs host on Mac."""
+ assert os.geteuid() == 0, 'Need superuser privileges'
+
+ # Run most of the steps here with login user
+ login_uid = os.getuid()
+ os.seteuid(login_uid)
+
+ # Change the working dir to the dir that has the host zip file
+ current_dir = os.getcwd()
+ os.chdir(bin_dir)
Nirnimesh 2012/08/08 19:46:10 Why is this necessary?
yihongg 2012/08/10 20:42:52 Some of the steps (do_signing) below only works if
+ host_dir = 'remoting-me2me-host-mac'
+ output_dir = os.path.join(host_dir, 'output')
+
+ # Remove remoting-me2me-host-mac dir just in case
+ subprocess.call('rm -f -R ' + host_dir, shell=True)
Nirnimesh 2012/08/08 19:46:10 use shutil.rmtree
yihongg 2012/08/10 20:42:52 Done.
+
+ # Unzip the host archive and prepare the files/dirs
+ subprocess.call('unzip remoting-me2me-host-mac.zip', shell=True)
Nirnimesh 2012/08/08 19:46:10 make the first arg a list. Remove shell=True Repe
yihongg 2012/08/10 20:42:52 Tried that and didn't work.
+ subprocess.call('mkdir ' + output_dir, shell=True)
+
+ # Prepare security identity for code signing purpose
+ os.seteuid(0)
+ key_chain = '/Library/Keychains/ChromotingTest'
+ password = '1111'
+ chromoting_test_dir = os.path.join(current_dir, 'chrome', 'test',
+ 'functional', 'chromoting')
Nirnimesh 2012/08/08 19:46:10 Do not reach into the functional dir. If you need
yihongg 2012/08/10 20:42:52 Done.
+ key = os.path.join(chromoting_test_dir, 'chromoting_key.p12')
+ cert = os.path.join(chromoting_test_dir, 'chromoting_cert.p12')
+ subprocess.call(['security', 'delete-keychain', key_chain])
+ subprocess.call(['security', 'create-keychain', '-p',
+ password, key_chain])
+ subprocess.call(['security', 'import', key,
+ '-k', key_chain, '-P', password, '-A'])
+ subprocess.call(['security', 'import', cert,
+ '-k', key_chain, '-P', password])
+ os.seteuid(login_uid)
+
+ # Sign the host
+ do_signing = os.path.join(host_dir, 'do_signing.sh')
+ subprocess.call(do_signing + ' ' + output_dir + ' ' + host_dir + ' ' +
+ key_chain + ' "Chromoting Test"', shell=True)
+
+ # Remove security identify
+ os.seteuid(0)
+ subprocess.call(['security', 'delete-keychain', key_chain])
+ os.seteuid(login_uid)
+
+ # Figure out the dmg name
+ version = ""
+ for output_file in os.listdir(output_dir):
+ if output_file.endswith('.dmg'):
+ version = os.path.basename(output_file)[len('ChromotingHost-'):-4]
+
+ # Mount before installation
+ dmg = os.path.join(output_dir, 'ChromotingHost-' + version + '.dmg')
+ subprocess.call('hdiutil' + ' mount ' + dmg, shell=True)
+
+ # Install host
+ os.seteuid(0)
+ mpkg = os.path.join('/Volumes', 'Chromoting Host ' + version,
+ 'Chromoting Host.mpkg')
+ subprocess.call(['/usr/sbin/installer', '-pkg',
+ mpkg, '-target', '/'])
+ os.seteuid(login_uid)
+
+ # Unmount after installation
+ mounted = os.path.join('/Volumes', 'Chromoting Host ' + version)
+ subprocess.call('hdiutil unmount "' + mounted + '"', shell=True)
+
+ # Clean up remoting-me2me-host-mac dir
+ subprocess.call('rm -f -R ' + host_dir, shell=True)
+
+ # Resume the original working dir
+ os.chdir(current_dir)
+
+ def UninstallHostMac(self):
+ """Uninstalls host on Mac."""
+ assert os.geteuid() == 0, 'Need superuser privileges'
+ uninstall_app = os.path.join('/', 'Applications',
+ 'Chromoting Host Uninstaller.app')
+ subprocess.call(['open', '-a', uninstall_app])
+
+ def ReplacePrefPaneMac(self, operation):
+ """Constructs mock pref pane to replace the actual pref pane on Mac."""
+ assert os.geteuid() == 0, 'Need superuser privileges'
+
+ pref_pane_dir = os.path.join('/Library', 'PreferencePanes')
+
+ mock_pref_pane = os.path.join(pref_pane_dir, 'mock_pref_pane')
+ pref_pane = os.path.join(pref_pane_dir, 'org.chromium.chromoting.prefPane')
+ mock_pref_pane_python = os.path.join(os.getcwd(), 'chrome', 'test',
+ 'functional', 'chromoting',
+ 'mock_pref_pane.py')
+
+ subprocess.call(['rm', '-rf', mock_pref_pane])
+
+ mock_pref_pane_file = open(mock_pref_pane, 'w')
+ mock_pref_pane_file.write('#!/bin/bash\n')
+ mock_pref_pane_file.write('\n')
+ mock_pref_pane_file.write('suid-python' +
+ ' ' + mock_pref_pane_python + ' ' + operation)
+ mock_pref_pane_file.close()
+
+ subprocess.call(['chmod', 'a+x', mock_pref_pane])
+ subprocess.call(['rm', '-rf', pref_pane])
+ subprocess.call(['ln', '-s', mock_pref_pane, pref_pane])
+
+ def InstallHostWindows(self, bin_dir):
+ """Installs host on Windows."""
+ host_msi = os.path.join(bin_dir, 'remoting-host.msi')
+ subprocess.Popen(['msiexec', '/i', host_msi, '/passive']).wait()
+
+ def UninstallHostWindows(self, bin_dir):
+ """Uninstalls host on Windows."""
+ host_msi = os.path.join(bin_dir, 'remoting-host.msi')
+ subprocess.Popen(['msiexec', '/x', host_msi, '/passive']).wait()
+
+
+def Main():
+ """Main function to dispatch operations."""
Nirnimesh 2012/08/08 19:46:10 assert IsMac() or IsWin()
yihongg 2012/08/10 20:42:52 Done.
+ helper = ChromotingHelper()
+
+ if sys.argv[1] == 'install':
+ if sys.platform.startswith('win'):
+ helper.InstallHostWindows(sys.argv[2])
+ elif sys.platform.startswith('darwin'):
+ helper.InstallHostMac(sys.argv[2])
+ else:
+ print 'Nothing to be done for install'
+ elif sys.argv[1] == 'uninstall':
+ if sys.platform.startswith('win'):
+ helper.UninstallHostWindows(sys.argv[2])
+ elif sys.platform.startswith('darwin'):
+ helper.UninstallHostmac()
+ else:
+ print 'Nothing to be done for uninstall'
+ elif sys.argv[1] in ['enable', 'disable', 'changepin']:
+ if sys.platform.startswith('darwin'):
+ helper.ReplacePrefPaneMac(sys.argv[1])
+ else:
+ print 'Nothing to be done for enable'
Nirnimesh 2012/08/08 19:46:10 enable -> sys.argv[1]
yihongg 2012/08/10 20:42:52 Done.
+ else:
+ print >>sys.stderr, 'Invalid syntax'
+ return 1
+
+
+if __name__ == '__main__':
+ sys.exit(Main())
« chrome/test/pyautolib/chromoting.py ('K') | « chrome/test/pyautolib/chromoting.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698