re-instate check-vsys-defaults as an ignored step
[tests.git] / system / utils.py
index 4468b20..fbdd3f6 100644 (file)
@@ -1,50 +1,81 @@
-# $Id$
-import time
-import os
-import commands
-import pprint
+# Thierry Parmentelat <thierry.parmentelat@inria.fr>
+# Copyright (C) 2010 INRIA 
+#
+import time, os, re, glob, sys
+from pprint import PrettyPrinter
+
+options={}
+
+def init_options(options_arg):
+    global options
+    options=options_arg
 
 # how could this accept a list again ?
 def header(message):
     now=time.strftime("%H:%M:%S", time.localtime())
     print "*",now,'--',message
 
-def show_spec(message,spec,depth=2):
+def pprint(message,spec,depth=2):
     now=time.strftime("%H:%M:%S", time.localtime())
     print ">",now,"--",message
-    pprint.PrettyPrinter(indent=6,depth=depth).pprint(spec)
+    PrettyPrinter(indent=8,depth=depth).pprint(spec)
+
+
+
+def system(command,background=False,silent=False):
+    if getattr(options,'dry_run',None):
+        print 'dry_run:',command
+        return 0
+    
+    if silent :    
+        if command.find(';')>=0: command = "(%s) 2> /dev/null" % command
+        else: command += " 2> /dev/null"
+    if background: command += " &"
+    if silent:
+        print '.',
+        sys.stdout.flush()
+    else:
+        now=time.strftime("%H:%M:%S", time.localtime())
+        # don't show in summary
+        print "->",now,'--',
+        sys.stdout.flush()
+    if not silent:
+        command = "set -x; " + command
+    return os.system(command)
 
-def system(command):
+### WARNING : this ALWAYS does its job, even in dry_run mode
+def output_of (command):
+    import commands
+    (code,string) = commands.getstatusoutput(command)
+    return (code,string)
+
+
+# convenience: translating shell-like pattern into regexp
+def match (string, pattern):
+    # tmp - there's probably much simpler
+    # rewrite * into .*, ? into .
+    pattern=pattern.replace("*",".*")
+    pattern=pattern.replace("?",".")
+    return re.compile(pattern).match(string)
+    
+def locate_hooks_scripts (message,path,extensions):
+    print message,'searching',path,'for extensions',extensions
+    scripts=[]
+    for ext in extensions:
+        # skip helper programs
+        scripts += glob.glob (path+'/[a-zA-Z]*.'+ext)
+    return scripts
+    
+# quick & dirty - should probably use the parseroption object instead
+# and move to TestMain as well
+exclude_options_keys = [ 'ensure_value' , 'read_file', 'read_module' ]
+def show_options (message,options):
     now=time.strftime("%H:%M:%S", time.localtime())
-    print "+",now,':',command
-    return os.system("set -x; " + command)
-
-# checks whether a given hostname/ip responds to ping
-ping_timeout_option = None
-def check_ping (hostname):
-    # check OS (support for macos)
-    global ping_timeout_option
-    if not ping_timeout_option:
-        (status,osname) = commands.getstatusoutput("uname -s")
-        if status != 0:
-            raise Exception, "Cannot figure your OS name"
-        if osname == "Linux":
-            ping_timeout_option="-w"
-        elif osname == "Darwin":
-            ping_timeout_option="-t"
-
-    command="ping -c 1 %s 1 %s"%(ping_timeout_option,hostname)
-    (status,output) = commands.getstatusoutput(command)
-    return status == 0
-
-# inserts a backslash before each occurence of the following chars
-# \ " ' < > & | ; ( ) $ * ~ 
-def backslash_shell_specials (command):
-    result=''
-    for char in command:
-        if char in "\\\"'<>&|;()$*~":
-            result +='\\'+char
-        else:
-            result +=char
-    return result
+    print ">",now,"--",message
+    for k in dir(options):
+        if k.find("_")==0: continue
+        if k in exclude_options_keys: continue
+        print "    ",k,":",getattr(options,k)
+
+