]>
git.ipfire.org Git - nitsi.git/blob - src/nitsi/test.py
12 from nitsi
.virtual_environ
import virtual_environ
13 from nitsi
.recipe
import recipe
17 logger
= logging
.getLogger("nitsi.test")
20 class TestException(Exception):
21 def __init__(self
, message
):
22 self
.message
= message
25 def __init__(self
, path
, log_path
):
27 self
.path
= os
.path
.abspath(path
)
28 self
.log
= logger
.getChild(os
.path
.basename(self
.path
))
29 except BaseException
as e
:
30 logger
.error("Could not get absolute path")
32 self
.log
.debug("Path of this test is: {}".format(self
.path
))
34 self
.log_path
= log_path
36 self
.settings_file
= "{}/settings".format(self
.path
)
37 if not os
.path
.isfile(self
.settings_file
):
38 self
.log
.error("No such file: {}".format(self
.settings_file
))
40 self
.recipe_file
= "{}/recipe".format(self
.path
)
41 if not os
.path
.isfile(self
.recipe_file
):
42 self
.log
.error("No such file: {}".format(self
.recipe_file
))
44 def read_settings(self
):
45 self
.config
= configparser
.ConfigParser()
46 self
.config
.read(self
.settings_file
)
47 self
.name
= self
.config
["DEFAULT"]["Name"]
48 self
.description
= self
.config
["DEFAULT"]["Description"]
49 self
.copy_to
= self
.config
["DEFAULT"]["Copy_to"]
50 self
.copy_from
= self
.config
["DEFAULT"]["Copy_from"]
51 self
.copy_from
= self
.copy_from
.split(",")
54 for file in self
.copy_from
:
56 file = os
.path
.normpath(self
.path
+ "/" + file)
61 self
.virtual_environ_name
= self
.config
["VIRTUAL_ENVIRONMENT"]["Name"]
62 self
.virtual_environ_path
= self
.config
["VIRTUAL_ENVIRONMENT"]["Path"]
63 self
.virtual_environ_path
= os
.path
.normpath(self
.path
+ "/" + self
.virtual_environ_path
)
65 def virtual_environ_setup(self
):
66 self
.virtual_environ
= virtual_environ(self
.virtual_environ_path
)
68 self
.virtual_networks
= self
.virtual_environ
.get_networks()
70 self
.virtual_machines
= self
.virtual_environ
.get_machines()
72 def virtual_environ_start(self
):
73 for name
in self
.virtual_environ
.network_names
:
74 self
.virtual_networks
[name
].define()
75 self
.virtual_networks
[name
].start()
77 for name
in self
.virtual_environ
.machine_names
:
78 self
.virtual_machines
[name
].define()
79 self
.virtual_machines
[name
].create_snapshot()
80 self
.virtual_machines
[name
].copy_in(self
.copy_from
, self
.copy_to
)
81 self
.virtual_machines
[name
].start()
83 # Time to which all serial output log entries are relativ
84 log_start_time
= time
.time()
86 # Number of chars of the longest machine name
87 longest_machine_name
= self
.virtual_environ
.longest_machine_name
89 self
.log
.debug("Try to login on all machines")
90 for name
in self
.virtual_environ
.machine_names
:
91 self
.log
.debug("Try to login on {}".format(name
))
92 self
.virtual_machines
[name
].login("{}/test.log".format(self
.log_path
),
93 log_start_time
=log_start_time
,
94 longest_machine_name
=longest_machine_name
)
96 def load_recipe(self
):
97 self
.log
.info("Going to load the recipe")
99 self
.recipe
= recipe(self
.recipe_file
)
100 for line
in self
.recipe
.recipe
:
103 self
.log
.debug("This was the recipe")
104 except BaseException
as e
:
105 self
.log
.error("Failed to load recipe")
108 def run_recipe(self
):
109 for line
in self
.recipe
.recipe
:
110 return_value
= self
.virtual_machines
[line
[0]].cmd(line
[2])
111 self
.log
.debug("Return value is: {}".format(return_value
))
112 if return_value
!= "0" and line
[1] == "":
113 raise TestException("Failed to execute command '{}' on {}, return code: {}".format(line
[2],line
[0], return_value
))
114 elif return_value
== "0" and line
[1] == "!":
115 raise TestException("Succeded to execute command '{}' on {}, return code: {}".format(line
[2],line
[0],return_value
))
117 self
.log
.debug("Command '{}' on {} returned with: {}".format(line
[2],line
[0],return_value
))
119 def virtual_environ_stop(self
):
120 for name
in self
.virtual_environ
.machine_names
:
121 self
.virtual_machines
[name
].shutdown()
122 self
.virtual_machines
[name
].revert_snapshot()
123 self
.virtual_machines
[name
].undefine()
125 for name
in self
.virtual_environ
.network_names
:
126 self
.virtual_networks
[name
].undefine()