From: Thierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Date: Tue, 18 Nov 2008 20:57:31 +0000 (+0000)
Subject: interactive mode & dryrun step
X-Git-Tag: tests-4.3-0~79
X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=93c4e3f7fffb61c7e3ad9c7687154f5e3540a610;p=tests.git

interactive mode & dryrun step
---

diff --git a/system/TestApiserver.py b/system/TestApiserver.py
index d4eb2c1..740ae85 100644
--- a/system/TestApiserver.py
+++ b/system/TestApiserver.py
@@ -63,3 +63,8 @@ class TestApiserver:
         self.dry_run=dry_run
         for (method,defaults) in server_methods:
             setattr(self,method,TestApiserver.Callable(self.apiserver,dry_run,method,defaults))
+    
+    def set_dry_run (self, dry_run):
+        self.dry_run=dry_run
+        for (method,defaults) in server_methods:
+            getattr(self,method).dry_run = dry_run
diff --git a/system/TestMain.py b/system/TestMain.py
index b0db61f..2df32b8 100755
--- a/system/TestMain.py
+++ b/system/TestMain.py
@@ -278,16 +278,34 @@ steps refer to a method in TestPlc or to a step_* module
                 # run the step
                 time=strftime("%Y-%m-%d-%H-%M")
                 if not spec['disabled'] or force or self.options.interactive:
+                    skip_step=False
                     if self.options.interactive:
-                        msg="Run step %s on %s [y]/n/q ? "%(stepname,plcname)
-                        answer=raw_input(msg).strip().lower() or "y"
-                        answer=answer[0]
-                        if answer in ['n']:
-                            print '%s on %s skipped'%(stepname,plcname)
-                            continue
-                        elif answer in ['q','b']:
-                            print 'Exiting'
-                            return
+                        prompting=True
+                        while prompting:
+                            msg="Run step %s on %s [r](un)/d(ry_run)/s(kip)/q(uit) ? "%(stepname,plcname)
+                            answer=raw_input(msg).strip().lower() or "r"
+                            answer=answer[0]
+                            if answer in ['s','n']:     # skip/no/next
+                                print '%s on %s skipped'%(stepname,plcname)
+                                prompting=False
+                                skip_step=True
+                            elif answer in ['q','b']:   # quit/bye
+                                print 'Exiting'
+                                return
+                            elif answer in ['d']:       # dry_run
+                                dry_run=self.options.dry_run
+                                self.options.dry_run=True
+                                obj.options.dry_run=True
+                                obj.apiserver.set_dry_run(True)
+                                step_result=method(obj)
+                                print 'dry_run step ->',step_result
+                                self.options.dry_run=dry_run
+                                obj.options.dry_run=dry_run
+                                obj.apiserver.set_dry_run(dry_run)
+                            elif answer in ['r','y']:   # run/yes
+                                prompting=False
+                    if skip_step:
+                        continue
                     try:
                         force_msg=""
                         if force: force_msg=" (forced)"