Fix Sonobuoy systemd-image for k8 1.18
[validation.git] / bluval / bluval.py
index 1580a40..f8762bd 100644 (file)
@@ -20,49 +20,60 @@ testcase
 """
 
 import subprocess
 """
 
 import subprocess
-from pathlib import Path
 import sys
 import traceback
 import sys
 import traceback
+from pathlib import Path
+
 import click
 import yaml
 
 import click
 import yaml
 
-class BluvalError(Exception):
-    """Base class for exceptions in this module."""
-    pass
-
-
-class ShowStopperError(Exception):
-    """Showstopper test case failed"""
-    pass
+from bluutil import BluvalError
+from bluutil import ShowStopperError
 
 
+_OPTIONAL_ALSO = False
 
 def run_testcase(testcase):
     """Runs a single testcase
     """
     name = testcase.get('name')
     skip = testcase.get('skip', "False")
 
 def run_testcase(testcase):
     """Runs a single testcase
     """
     name = testcase.get('name')
     skip = testcase.get('skip', "False")
+    optional = testcase.get('optional', "False")
     if skip.lower() == "true":
         # skip is mentioned and true.
         print('Skipping {}'.format(name))
         return
     if skip.lower() == "true":
         # skip is mentioned and true.
         print('Skipping {}'.format(name))
         return
+    print("_OPTIONAL_ALSO {}".format(_OPTIONAL_ALSO))
+    if  not _OPTIONAL_ALSO and optional.lower() == "true":
+        # Optional Test case.
+        print('Ignoring Optional {} testcase'.format(name))
+        return
     show_stopper = testcase.get('show_stopper', "False")
     what = testcase.get('what')
     mypath = Path(__file__).absolute()
     show_stopper = testcase.get('show_stopper', "False")
     what = testcase.get('what')
     mypath = Path(__file__).absolute()
-    results_path = mypath.parents[2].joinpath("results/"+testcase.get('layer')+"/"+what)
-    test_path = mypath.parents[1].joinpath("tests/"+testcase.get('layer')+"/"+what)
+    results_path = mypath.parents[2].joinpath(
+        "results/"+testcase.get('layer')+"/"+what)
+    test_path = mypath.parents[1].joinpath(
+        "tests/"+testcase.get('layer')+"/"+what)
 
     # add to the variables file the path to where to sotre the logs
     variables_file = mypath.parents[1].joinpath("tests/variables.yaml")
     variables_dict = yaml.safe_load(variables_file.open())
     variables_dict['log_path'] = str(results_path)
 
     # add to the variables file the path to where to sotre the logs
     variables_file = mypath.parents[1].joinpath("tests/variables.yaml")
     variables_dict = yaml.safe_load(variables_file.open())
     variables_dict['log_path'] = str(results_path)
-    variables_file.write_text(str(variables_dict))
+    variables_updated_file = mypath.parents[1].joinpath("tests/variables_updated.yaml")
+    variables_updated_file.write_text(str(variables_dict))
+    variables_loglevel = variables_dict['loglevel']
 
     # run the test
 
     # run the test
-    args = ["robot", "-V", str(variables_file), "-d", str(results_path), str(test_path)]
+    args = ["robot", "-V", str(variables_updated_file),
+            "-d", str(results_path),
+            "-n", "non-critical",
+            "-b", "debug.log",
+            "-L", str(variables_loglevel),
+            str(test_path)]
 
     print('Executing testcase {}'.format(name))
     print('show_stopper {}'.format(show_stopper))
 
     print('Executing testcase {}'.format(name))
     print('show_stopper {}'.format(show_stopper))
-    print('Invoking {}'.format(args))
+    print('Invoking {}'.format(args), flush=True)
     try:
         status = subprocess.call(args, shell=False)
         if status != 0 and show_stopper.lower() == "true":
     try:
         status = subprocess.call(args, shell=False)
         if status != 0 and show_stopper.lower() == "true":
@@ -71,6 +82,7 @@ def run_testcase(testcase):
         #print('Error while executing {}'.format(args))
         raise BluvalError(OSError)
 
         #print('Error while executing {}'.format(args))
         raise BluvalError(OSError)
 
+
 def validate_layer(blueprint, layer):
     """validates a layer by validating all testcases under that layer
     """
 def validate_layer(blueprint, layer):
     """validates a layer by validating all testcases under that layer
     """
@@ -87,65 +99,43 @@ def validate_blueprint(yaml_loc, layer):
     with open(str(yaml_loc)) as yaml_file:
         yamldoc = yaml.safe_load(yaml_file)
     blueprint = yamldoc['blueprint']
     with open(str(yaml_loc)) as yaml_file:
         yamldoc = yaml.safe_load(yaml_file)
     blueprint = yamldoc['blueprint']
-    if layer is None or layer == "all":
-        for each_layer in blueprint['layers']:
-            validate_layer(blueprint, each_layer)
-    else:
-        validate_layer(blueprint, layer)
+    validate_layer(blueprint, layer)
 
 
 
 
-def invoke_docker(bluprint, layer):
-    """Start docker container for given layer
+def write_test_info(layer):
+    """writes testing info to test_info.yaml
     """
     """
-    cmd = ("docker run"
-           " -v $HOME/.ssh:/root/.ssh"
-           " -v $HOME/.kube/config:/root/.kube/config"
-           " -v $VALIDATION_HOME/tests/variables.yaml:"
-           "/opt/akraino/validation/tests/variables.yaml"
-           " -v $AKRAINO_HOME/results:/opt/akraino/results"
-           " akraino/validation:{0}-latest"
-           " bin/sh -c"
-           " 'cd /opt/akraino/validation "
-           "&& python bluval/bluval.py -l {0} {1}'").format(layer, bluprint)
-    args = [cmd]
-    try:
-        print('Invoking {}'.format(args))
-        subprocess.call(args, shell=True)
-    except OSError:
-        #print('Error while executing {}'.format(args))
-        raise BluvalError(OSError)
+    data = dict(
+        test_info=dict(
+            layer=layer,
+            optional=_OPTIONAL_ALSO,
+        )
+    )
 
 
-
-def invoke_dockers(yaml_loc, layer, blueprint_name):
-    """Parses yaml file and starts docker container for one/all layers
-    """
-    with open(str(yaml_loc)) as yaml_file:
-        yamldoc = yaml.safe_load(yaml_file)
-    blueprint = yamldoc['blueprint']
-    if layer is None or layer == "all":
-        for each_layer in blueprint['layers']:
-            invoke_docker(blueprint_name, each_layer)
-    else:
-        invoke_docker(blueprint_name, layer)
+    with open('/opt/akraino/results/test_info.yaml', 'w') as outfile:
+        yaml.dump(data, outfile, default_flow_style=False)
 
 
 @click.command()
 @click.argument('blueprint')
 @click.option('--layer', '-l')
 
 
 @click.command()
 @click.argument('blueprint')
 @click.option('--layer', '-l')
-@click.option('--delegate', '-d', is_flag=True)
-def main(blueprint, layer, delegate):
+@click.option('--optional_also', '-o', is_flag=True)
+def main(blueprint, layer, optional_also):
     """Takes blueprint name and optional layer. Validates inputs and derives
     yaml location from blueprint name. Invokes validate on blue print.
     """
     """Takes blueprint name and optional layer. Validates inputs and derives
     yaml location from blueprint name. Invokes validate on blue print.
     """
+    global _OPTIONAL_ALSO  # pylint: disable=global-statement
     mypath = Path(__file__).absolute()
     yaml_loc = mypath.parents[0].joinpath('bluval-{}.yaml'.format(blueprint))
     if layer is not None:
         layer = layer.lower()
     mypath = Path(__file__).absolute()
     yaml_loc = mypath.parents[0].joinpath('bluval-{}.yaml'.format(blueprint))
     if layer is not None:
         layer = layer.lower()
+    if optional_also:
+        _OPTIONAL_ALSO = True
+        print("_OPTIONAL_ALSO {}".format(_OPTIONAL_ALSO))
+
     try:
     try:
-        if delegate is not None:
-            invoke_dockers(yaml_loc, layer, blueprint)
-        else:
-            validate_blueprint(yaml_loc, layer)
+        write_test_info(layer)
+        validate_blueprint(yaml_loc, layer)
     except ShowStopperError as err:
         print('ShowStopperError:', err)
     except BluvalError as err:
     except ShowStopperError as err:
         print('ShowStopperError:', err)
     except BluvalError as err:
@@ -158,6 +148,7 @@ def main(blueprint, layer, delegate):
         print("-"*60)
         raise
 
         print("-"*60)
         raise
 
+
 if __name__ == "__main__":
     # pylint: disable=no-value-for-parameter
     main()
 if __name__ == "__main__":
     # pylint: disable=no-value-for-parameter
     main()