Skip to content
This repository has been archived by the owner on Aug 20, 2018. It is now read-only.

Commit

Permalink
Create script for daily test-runs and smaller fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
whimboo committed May 19, 2010
1 parent c9c627b commit 8e442ab
Show file tree
Hide file tree
Showing 4 changed files with 130 additions and 11 deletions.
13 changes: 13 additions & 0 deletions scripts/firefox-automation/configs/testrun_daily.ini.example
@@ -0,0 +1,13 @@
[reports]
url=

[darwin]
shiretoko=/Applications/Shiretoko.app
namoroka=/Applications/Namoroka.app
minefield=/Applications/Minefield.app

[linux2]
namoroka=/home/user/namoroka/firefox

[win32]
firefox=c:\Program Files\Mozilla Firefox\firefox.exe
14 changes: 14 additions & 0 deletions scripts/firefox-automation/libs/application.py
Expand Up @@ -61,12 +61,26 @@ def get_binary(app_folder):

def is_app_folder(path):
""" Checks if the folder is an application folder. """
if sys.platform not in ("darwin"):
path = os.path.dirname(path)

file = os.path.join(get_bin_folder(path),
"application.ini")

return os.path.exists(file)


def is_installer(path):
""" Checks if a binary is an installer. """
try:
if (os.path.splitext(path)[1] in (".bz2", ".dmg", ".exe")):
return os.path.basename(path) not in ("firefox.exe")
else:
return False
except Exception, e:
return False


class ApplicationIni(object):
""" Class to retrieve entries from the application.ini file. """

Expand Down
15 changes: 4 additions & 11 deletions scripts/firefox-automation/libs/testrun.py
Expand Up @@ -77,20 +77,20 @@ def _set_binaries(self, value):
raise Exception("Path '%s' cannot be found." % (path))

# Check if it's an installer or an already installed build
if self.is_installer(path) or application.is_app_folder(path):
if application.is_installer(path) or application.is_app_folder(path):
self._binaries.append(os.path.abspath(path))
continue
# Otherwise recursivily scan the folder and add existing files
for root, dirs, files in os.walk(path):
for file in files:
if not file in [".DS_Store"] and self.is_installer(file):
if not file in [".DS_Store"] and application.is_installer(file):
self._binaries.append(os.path.abspath(os.path.join(root, file)))

binaries = property(_get_binaries, _set_binaries, None)

def cleanup_binary(self, binary, *args, **kwargs):
""" Remove the build when it has been installed before. """
if self.is_installer(binary):
if application.is_installer(binary):
install.Installer().uninstall(self._folder)

def cleanup_repository(self, *args, **kwargs):
Expand All @@ -108,17 +108,10 @@ def clone_repository(self, *args, **kwargs):
raise Exception("Failure in setting up the mozmill-tests repository. " +
e.message)

def is_installer(self, path):
""" Checks if a binary is an installer. """
try:
return os.path.splitext(path)[1] in (".bz2", ".dmg", ".exe", ".zip")
except Exception, e:
return False

def prepare_binary(self, binary, *args, **kwargs):
""" Prepare the binary for the test run. """

if self.is_installer(binary):
if application.is_installer(binary):
install_path = tempfile.mkdtemp(".binary")
self._folder = install.Installer().install(binary, install_path)
self._application = application.get_binary(self._folder)
Expand Down
99 changes: 99 additions & 0 deletions scripts/firefox-automation/testrun_daily.py
@@ -0,0 +1,99 @@
#!/usr/bin/env python

# ***** BEGIN LICENSE BLOCK *****
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
#
# The contents of this file are subject to the Mozilla Public License Version
# 1.1 (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
# for the specific language governing rights and limitations under the
# License.
#
# The Original Code is MozMill automation code.
#
# The Initial Developer of the Original Code is the Mozilla Foundation.
# Portions created by the Initial Developer are Copyright (C) 2010
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Henrik Skupin <hskupin@mozilla.com>
#
# Alternatively, the contents of this file may be used under the terms of
# either the GNU General Public License Version 2 or later (the "GPL"), or
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
# in which case the provisions of the GPL or the LGPL are applicable instead
# of those above. If you wish to allow use of your version of this file only
# under the terms of either the GPL or the LGPL, and not to allow others to
# use your version of this file under the terms of the MPL, indicate your
# decision by deleting the provisions above and replace them with the notice
# and other provisions required by the GPL or the LGPL. If you do not delete
# the provisions above, a recipient may use your version of this file under
# the terms of any one of the MPL, the GPL or the LGPL.
#
# ***** END LICENSE BLOCK *****

import ConfigParser
import optparse
import os
import subprocess
import sys

BASE_PATH = os.path.dirname(os.path.abspath(__file__))
DEFAULT_SCRIPT = os.path.abspath(os.path.join(BASE_PATH, "testrun_all.py"))
DEFAULT_CONFIG = os.path.join(BASE_PATH, "configs/testrun_daily.ini.example")

def main():
usage = "usage: %prog [options]"
parser = optparse.OptionParser(usage=usage, version="%prog 0.1")
parser.add_option("--config",
default=DEFAULT_CONFIG,
dest="config",
metavar="PATH",
help="Path to the config file")
parser.add_option('--display',
default=":0.0",
dest="display",
help="Display to run Firefox on")
parser.add_option("--logfile",
default=None,
dest="logfile",
metavar="PATH",
help="Path to the log file")
(options, binaries) = parser.parse_args()

# To run the script via crontab on Linux we have to set the display
if sys.platform in ("linux2", "sunos5"):
os.putenv('DISPLAY', options.display)

# Read all data from the config file
try:
filename = os.path.abspath(options.config)
config = ConfigParser.RawConfigParser()
config.read(filename)

# Get the url of the report server
report_url = config.get("reports", "url")
report_option = '--report=%s' % report_url if report_url != '' else None

# Get the list of binaries for the current platform
binaries = [binary for name, binary in config.items(sys.platform)]
except Exception, e:
print "Failure in reading the config file at '%s'" % filename
sys.exit(1)

# Run tests for each binary (we can't run a fallback update test)
for binary in binaries:
cmdArgs = ["python", DEFAULT_SCRIPT, "--no-fallback"]
if report_option is not None:
cmdArgs.append(report_option)
if options.logfile is not None:
cmdArgs.append("--logfile=%s" % options.logfile)
cmdArgs.append(binary)
result = subprocess.call(cmdArgs)

if __name__ == '__main__':
main()

0 comments on commit 8e442ab

Please sign in to comment.