wintest: added del_files, write_file and casefold
authorAndrew Tridgell <tridge@samba.org>
Fri, 19 Nov 2010 03:08:18 +0000 (14:08 +1100)
committerAndrew Tridgell <tridge@samba.org>
Fri, 19 Nov 2010 04:17:44 +0000 (15:17 +1100)
wintest/test-s4-howto.py
wintest/wintest.py

index 6afea1a89bb28a0344aa3e26aacedde341a64a70..b925973df1fec4503750baf62e18a5d2bc1169b1 100755 (executable)
@@ -6,8 +6,6 @@ import sys, os
 import optparse
 import wintest
 
-vars = {}
-
 def check_prerequesites(t):
     t.info("Checking prerequesites")
     t.setvar('HOSTNAME', t.cmd_output("hostname -s").strip())
@@ -30,8 +28,7 @@ def provision_s4(t, func_level="2008", interfaces=None):
     '''provision s4 as a DC'''
     t.info('Provisioning s4')
     t.chdir('${PREFIX}')
-    t.run_cmd("rm -rf etc private")
-    t.run_cmd("find var -type f | xargs rm -f")
+    t.del_files(["var", "etc", "private"])
     options=' --function-level=%s -d${DEBUGLEVEL}' % func_level
     if interfaces:
         options += ' --option=interfaces=%s' % interfaces
@@ -68,16 +65,15 @@ def test_smbclient(t):
 def create_shares(t):
     t.info("Adding test shares")
     t.chdir('${PREFIX}')
-    f = open("etc/smb.conf", mode='a')
-    f.write(t.substitute('''
+    t.write_file("etc/smb.conf", '''
 [test]
        path = ${PREFIX}/test
        read only = no
 [profiles]
        path = ${PREFIX}/var/profiles
        read only = no
-    '''))
-    f.close()
+    ''',
+                 mode='a')
     t.run_cmd("mkdir -p test")
     t.run_cmd("mkdir -p var/profiles")
 
@@ -592,19 +588,28 @@ if __name__ == '__main__':
     parser.add_option("--list", action='store_true', default=False, help='list the available steps')
     parser.add_option("--rebase", action='store_true', default=False, help='do a git pull --rebase')
     parser.add_option("--clean", action='store_true', default=False, help='clean the tree')
+    parser.add_option("--prefix", type='string', default=None, help='override install prefix')
+    parser.add_option("--sourcetree", type='string', default=None, help='override sourcetree location')
 
     opts, args = parser.parse_args()
 
     if not opts.conf:
-        t.info("Please specify a config file with --conf")
+        print("Please specify a config file with --conf")
         sys.exit(1)
 
     t = wintest.wintest()
     t.load_config(opts.conf)
     t.set_skip(opts.skip)
+
     if opts.list:
         t.list_steps_mode()
 
+    if opts.prefix:
+        t.setvar('PREFIX', opts.prefix)
+
+    if opts.sourcetree:
+        t.setvar('SOURCETREE', opts.sourcetree)
+
     if opts.rebase:
         t.info('rebasing')
         t.chdir('${SOURCETREE}')
index f871462fbaea84517ca30595e62b6d5da22930c3..5706f88aa91d9757a0b108bf95980342aca43ed3 100644 (file)
@@ -96,6 +96,16 @@ class wintest():
         '''chdir with substitution'''
         os.chdir(self.substitute(dir))
 
+    def del_files(self, dirs):
+        '''delete all files in the given directory'''
+        for d in dirs:
+            self.run_cmd("find %s -type f | xargs rm -f" % d)
+
+    def write_file(self, filename, text, mode='w'):
+        '''write to a file'''
+        f = open(self.substitute(filename), mode=mode)
+        f.write(self.substitute(text))
+        f.close()
 
     def run_cmd(self, cmd, dir=".", show=None, output=False, checkfail=True):
         cmd = self.substitute(cmd)
@@ -120,8 +130,13 @@ class wintest():
         cmd = self.substitute(cmd)
         return self.run_cmd(cmd, output=True)
 
-    def cmd_contains(self, cmd, contains, nomatch=False, ordered=False, regex=False):
+    def cmd_contains(self, cmd, contains, nomatch=False, ordered=False, regex=False,
+                     casefold=False):
         '''check that command output contains the listed strings'''
+
+        if isinstance(contains, str):
+            contains = [contains]
+
         out = self.cmd_output(cmd)
         self.info(out)
         for c in self.substitute(contains):
@@ -133,6 +148,9 @@ class wintest():
                 else:
                     start = m.start()
                     end = m.end()
+            elif casefold:
+                start = out.upper().find(c.upper())
+                end = start + len(c)
             else:
                 start = out.find(c)
                 end = start + len(c)
@@ -146,12 +164,12 @@ class wintest():
                 out = out[end:]
 
     def retry_cmd(self, cmd, contains, retries=30, delay=2, wait_for_fail=False,
-                  ordered=False, regex=False):
+                  ordered=False, regex=False, casefold=False):
         '''retry a command a number of times'''
         while retries > 0:
             try:
                 self.cmd_contains(cmd, contains, nomatch=wait_for_fail,
-                                  ordered=ordered, regex=regex)
+                                  ordered=ordered, regex=regex, casefold=casefold)
                 return
             except:
                 time.sleep(delay)