]> git.ipfire.org Git - nitsi.git/blobdiff - src/nitsi/test.py
Rework the connection handling of the serial console
[nitsi.git] / src / nitsi / test.py
index 5ea928fab4fe36308ad5f3cf6efada725a4b9bc9..cced43157ea2bb52e58ff5338d898b7b513c5e47 100755 (executable)
@@ -137,19 +137,36 @@ class Test():
             self.log.debug("{}: {}".format(key, self.settings[key]))
 
 
-    def virtual_environ_setup(self):
+    def virtual_environ_setup_stage_1(self):
         self.virtual_environ = virtual_environ.VirtualEnviron(self.settings["virtual_environ_path"])
 
         self.virtual_networks = self.virtual_environ.get_networks()
 
         self.virtual_machines = self.virtual_environ.get_machines()
 
+    def virtual_environ_setup_stage_2(self):
+        # built up which machines which are used in our recipe
+        used_machines = []
+
+        for line in self.recipe.recipe:
+            if not line[0] in used_machines:
+                used_machines.append(line[0])
+
+        self.log.debug("Machines used in this recipe {}".format(used_machines))
+
+        self.used_machine_names = used_machines
+
+        for machine in self.used_machine_names:
+            if not machine in self.virtual_environ.machine_names:
+                raise TestException("{} is listed as machine in the recipe, but the virtual environmet does not have such a machine".format(machine))
+
+
     def virtual_environ_start(self):
         for name in self.virtual_environ.network_names:
             self.virtual_networks[name].define()
             self.virtual_networks[name].start()
 
-        for name in self.virtual_environ.machine_names:
+        for name in self.used_machine_names:
             self.virtual_machines[name].define()
             self.virtual_machines[name].create_snapshot()
             # We can only copy files when we know which and to which dir
@@ -163,17 +180,20 @@ class Test():
         # Number of chars of the longest machine name
         longest_machine_name = self.virtual_environ.longest_machine_name
 
-        self.log.info("Try to login on all machines")
-        for name in self.virtual_environ.machine_names:
-            self.log.info("Try to login on {}".format(name))
-            self.virtual_machines[name].login("{}/test.log".format(self.log_path),
+        self.log.info("Try to intialize the serial connection, connect and login on all machines")
+        for name in self.used_machine_names:
+            self.log.info("Try to initialize the serial connection connect and login on {}".format(name))
+            self.virtual_machines[name].serial_init(log_file="{}/test.log".format(self.log_path),
                                                 log_start_time=log_start_time,
                                                 longest_machine_name=longest_machine_name)
+            self.virtual_machines[name].serial_connect()
 
     def load_recipe(self):
         self.log.info("Going to load the recipe")
         try:
-            self.recipe = recipe.Recipe(self.recipe_file, machines=self.virtual_environ.machine_names)
+            self.recipe = recipe.Recipe(self.recipe_file,
+                fallback_machines=self.virtual_environ.machine_names)
+
             for line in self.recipe.recipe:
                 self.log.debug(line)
 
@@ -194,7 +214,7 @@ class Test():
                 self.log.debug("Command '{}' on {} returned with: {}".format(line[2],line[0],return_value))
 
     def virtual_environ_stop(self):
-        for name in self.virtual_environ.machine_names:
+        for name in self.used_machine_names:
             # We just catch exception here to avoid
             # that we stop the cleanup process if only  one command fails
             try: