[Libreoffice-commits] dev-tools.git: test-bugzilla-files/execute.sh test-bugzilla-files/new-control.py test-bugzilla-files/test-bugzilla-files.py

Markus Mohrhard markus.mohrhard at googlemail.com
Sat Nov 1 14:25:44 PDT 2014


 test-bugzilla-files/execute.sh             |    2 
 test-bugzilla-files/new-control.py         |   77 +++++++++++++++++++++--------
 test-bugzilla-files/test-bugzilla-files.py |   22 +-------
 3 files changed, 63 insertions(+), 38 deletions(-)

New commits:
commit 77eb5fd822f0827e288e26940eb867858d6a6f7b
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Sat Nov 1 22:22:57 2014 +0100

    move from dir based testing to task list based
    
    Instead of going through a whole directory in one task split the whole
    into 100 file tasks. This should make sure that all cores are always
    doing some work.

diff --git a/test-bugzilla-files/execute.sh b/test-bugzilla-files/execute.sh
index 9203a7e..e2c6076 100755
--- a/test-bugzilla-files/execute.sh
+++ b/test-bugzilla-files/execute.sh
@@ -1,4 +1,4 @@
 mkdir /srv/crashtestdata/control/$1
 cd /srv/crashtestdata/control/$1
-TMPDIR=/srv/crashtestdata/tmpdir /home/buildslave/build/instdir/program/python /home/buildslave/source/dev-tools/test-bugzilla-files/test-bugzilla-files.py --soffice=path:/home/buildslave/build/instdir/program/soffice --userdir=file:///home/buildslave/.config/libreoffice_$1/4 /home/buildslave/source/bugdocs3/$1 2>&1 | tee /srv/crashtestdata/console_$i.log
+TMPDIR=/srv/crashtestdata/tmpdir /home/buildslave/build/instdir/program/python /home/buildslave/source/dev-tools/test-bugzilla-files/test-bugzilla-files.py --soffice=path:/home/buildslave/build/instdir/program/soffice --userdir=file:///home/buildslave/.config/libreoffice_$1/4 $1 2>&1 | tee /srv/crashtestdata/console_$i.log
 rm core*
diff --git a/test-bugzilla-files/new-control.py b/test-bugzilla-files/new-control.py
index 25617a7..c27cb5f 100644
--- a/test-bugzilla-files/new-control.py
+++ b/test-bugzilla-files/new-control.py
@@ -21,26 +21,63 @@ import os.path
 import concurrent.futures
 import time
 import subprocess
+import getopt
+import sys
 
-def get_directories():
-    d='.'
-    directories = [o for o in os.listdir(d) if os.path.isdir(os.path.join(d,o))]
-    return directories
+def partition(l, n):
+    for i in range(0, len(l), n):
+        yield l[i:i+n]
+
+def get_tasks(directory, files_per_task):
+    flist = [os.path.join(dirpath, f) for dirpath, dirnames, fnames in os.walk(directory) for f in fnames]
+
+    partitioned_list = list(partition(flist, files_per_task))
+    task_files = []
+    i = 0
+    for list_item in partitioned_list:
+        filename = "task" + str(i)
+        task_file = open(filename, "w")
+        for item in list_item:
+            task_file.write("%s\n" % item)
+        task_files.append(filename)
+        i += 1
+    return task_files
+
+def execute_task(task_file):
+    # subprocess.call("./execute.sh " + task_file, shell=True)
+    time.sleep(1)
+
+def usage():
+    message = """usage: {program} [option] dir"
+ - h | --help: print usage information
+ 
+ 'dir' is the path to the directory with the test files"""
+    print(message.format(program = os.path.basename(sys.argv[0])))
+
+if __name__ == "__main__":
+    opts, args = getopt.getopt(sys.argv[1:], "hd:", ["help", "directory="])
+    print(args)
+    print(opts)
+    if "-h" in opts or "--help" in opts:
+        usage()
+        sys.exit()
+
+    for opt, arg in opts:
+        if opt in ("-d", "--directory"):
+            directory = arg
 
-def execute_task(directory):
-    print("Yeah")
     print(directory)
-    subprocess.call("./execute.sh " + directory, shell=True)
-    time.sleep(10)
-    return 
-
-with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
-    future_to_task = {executor.submit(execute_task, dirs): dirs for dirs in get_directories()}
-    for future in concurrent.futures.as_completed(future_to_task):
-        task = future_to_task[future]
-        try:
-            future.result()
-        except Exception as exc:
-            print('%r generated an exception: %s' % (task, exc))
-        else:
-            print('%r successfully passed' % (task))
+    if not os.path.isdir(directory):
+        sys.exit(1)
+
+    task_size = 100
+    with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
+        future_to_task = {executor.submit(execute_task, task_file): task_file for task_file in get_tasks(directory, task_size)}
+        for future in concurrent.futures.as_completed(future_to_task):
+            task = future_to_task[future]
+            try:
+                future.result()
+            except Exception as exc:
+                print('%r generated an exception: %s' % (task, exc))
+            else:
+                print('%r successfully passed' % (task))
diff --git a/test-bugzilla-files/test-bugzilla-files.py b/test-bugzilla-files/test-bugzilla-files.py
index 2bd907e..11cf41c 100644
--- a/test-bugzilla-files/test-bugzilla-files.py
+++ b/test-bugzilla-files/test-bugzilla-files.py
@@ -69,21 +69,9 @@ def partition(list, pred):
             right.append(e)
     return (left, right)
 
-def filelist(dir, suffix):
-    if len(dir) == 0:
-        raise Exception("filelist: empty directory")
-    if not(dir[-1] == "/"):
-        dir += "/"
-    files = [dir + f for f in os.listdir(dir)]
-#    print(files)
-    return [f for f in files
-                    if os.path.isfile(f) and os.path.splitext(f)[1] == suffix]
-
-def getFiles(dirs, suffix):
-#    print( dirs )
-    files = []
-    for dir in dirs:
-        files += filelist(dir, suffix)
+def getFiles(file_list_name):
+    file_list = open(file_list_name, "r")
+    files = file_list.readlines()
     return files
 
 ### UNO utilities ###
@@ -593,7 +581,7 @@ def parseArgs(argv):
     return (dict(optlist), args)
 
 def usage():
-    message = """usage: {program} [option]... [directory]..."
+    message = """usage: {program} [option]... [task_file]..."
  -h | --help:      print usage information
  --soffice=method:location
                    specify soffice instance to connect to
@@ -601,7 +589,7 @@ def usage():
  --userdir=URL     specify user installation directory for 'path' method
  --valgrind        pass --valgrind to soffice for 'path' method
 
- 'location' is a pathname, not a URL. 'userdir' is a URL. the 'directory' parameters should be
+ 'location' is a pathname, not a URL. 'userdir' is a URL. the 'task_file' parameters should be
   full absolute pathnames, not URLs."""
     print(message.format(program = os.path.basename(sys.argv[0])))
 


More information about the Libreoffice-commits mailing list