bluval engine refactoring 63/563/17
authorNaga Sugguna <ns156u@att.com>
Wed, 17 Apr 2019 12:56:05 +0000 (07:56 -0500)
committerNaga Sugguna <ns156u@att.com>
Fri, 24 May 2019 13:11:06 +0000 (13:11 +0000)
actual .robot testcases used instead of helloworld
bluval-dummy.yaml is added for dummy blue print to test easily
All the rebot results redirected to one directory results
click is used to take parameters from CLI
optional --layer/l is taken as parameter
Deriving yaml location from blue print name
Sections named as layers and layer names expanded hw -> hardware
.py code refactored, mode functions added.

Change-Id: Id916a79301d32ed64afc398fb486ba71b81a1dea
Signed-off-by: Naga Sugguna <ns156u@att.com>
bluval/bluval-base.yaml
bluval/bluval-dummy.yaml [new file with mode: 0644]
bluval/bluval.py
bluval/requirements.txt

index 4a9ce70..d9cf68b 100644 (file)
@@ -17,8 +17,8 @@
 ##############################################################################
 blueprint:
     name: base
-    sections:
-        - hw
+    layers:
+        - hardware
         - os
         - networking
         - k8s
@@ -27,51 +27,54 @@ blueprint:
         - sdn
         - vim
     # Any hardware some basic tests
-    hw: &hw_base
+    hardware: &hardware_base
         -
             name: bios_version
             # something that can be evaluated to true or false
             condition: true
-            what: /opt/akraino/validation/helloworld
+            what: bios_version
             # true or false, default is false
             show_stopper: false
+        -
+            name: baremetal_hw
+            what: baremetal_hw
     os: &os_base
         -
-            name: os_version
-            what: /opt/akraino/validation/helloworld
+            name: latency_cyclic
+            what: latency_cyclic
     networking: &networking
         -
             name: pxe_networking_test
-            what: /opt/akraino/validation/helloworld
+            what: helloworld
         -
             name: routes_test
-            what: /opt/akraino/validation/helloworld
+            what: helloworld
     k8s: &k8s
         -
             name: conformance
-            what: /opt/akraino/validation/helloworld
+            what: conformance
         -
-            name: e2e
-            what: /opt/akraino/validation/helloworld
+            name: ha
+            what: ha
     k8s_networking: &k8s_networking
         -
             name: node_connectivity
-            what: /opt/akraino/validation/helloworld
+            what: helloworld
         -
             name: pod_connectivity
-            what: /opt/akraino/validation/helloworld
+            what: helloworld
     # software defined storage
     sds: &sds
         -
             name: sds
-            what: /opt/akraino/validation/helloworld
+            what: helloworld
     # software defined network
     sdn: &sdn
         -
             name: sns
-            what: /opt/akraino/validation/helloworld
+            what: helloworld
     # Virtual Infrastructure Manager
     vim: &vim
         -
             name: vim_basic
-            what: /opt/akraino/validation/helloworld
+            what: helloworld
diff --git a/bluval/bluval-dummy.yaml b/bluval/bluval-dummy.yaml
new file mode 100644 (file)
index 0000000..f719c92
--- /dev/null
@@ -0,0 +1,74 @@
+---
+##############################################################################
+# Copyright (c) 2019 AT&T Intellectual Property.                             #
+# Copyright (c) 2019 Nokia.                                                  #
+#                                                                            #
+# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
+# not use this file except in compliance with the License.                   #
+#                                                                            #
+# You may obtain a copy of the License at                                    #
+#       http://www.apache.org/licenses/LICENSE-2.0                           #
+#                                                                            #
+# Unless required by applicable law or agreed to in writing, software        #
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT  #
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.           #
+# See the License for the specific language governing permissions and        #
+# limitations under the License.                                             #
+##############################################################################
+blueprint:
+    name: dummy
+    layers:
+        - hardware
+        - vim
+    # Any hardware some basic tests
+    hardware: &hardware_dummy
+        -
+            name: bios_version
+            # something that can be evaluated to true or false
+            condition: true
+            what: bios_version
+            # true or false, default is false
+            show_stopper: false
+        -
+            name: baremetal_hw
+            what: baremetal_hw
+    os: &os_base
+        -
+            name: latency_cyclic
+            what: latency_cyclic
+    networking: &networking
+        -
+            name: pxe_networking_test
+            what: helloworld
+        -
+            name: routes_test
+            what: helloworld
+    k8s: &k8s
+        -
+            name: conformance
+            what: conformance
+        -
+            name: ha
+            what: ha
+    k8s_networking: &k8s_networking
+        -
+            name: node_connectivity
+            what: helloworld
+        -
+            name: pod_connectivity
+            what: helloworld
+    # software defined storage
+    sds: &sds
+        -
+            name: sds
+            what: helloworld
+    # software defined network
+    sdn: &sdn
+        -
+            name: sns
+            what: helloworld
+    # Virtual Infrastructure Manager
+    vim: &vim
+        -
+            name: vim_basic
+            what: helloworld
index c0c16de..4a01a92 100644 (file)
 # See the License for the specific language governing permissions and        #
 # limitations under the License.                                             #
 ##############################################################################
-"""This module parses yaml file, reads sections, testcases and executes each
+"""This module parses yaml file, reads layers, testcases and executes each
 testcase
 """
 
 import subprocess
-import sys
+import click
 import yaml
 
 def run_testcase(testcase):
     """Runs a single testcase
     """
     show_stopper = testcase.get('show_stopper', False)
+    what = testcase.get('what')
+    results = "results/"+what
+    command = '{} {} {} {}'.format("robot", "-d", results, what)
 
     print('Executing testcase {}'.format(testcase['name']))
     print('          show_stopper {}'.format(show_stopper))
-    cmd = 'robot {}'.format(testcase['what'])
-    print('Invoking {}'.format(cmd))
+    print('Invoking {}'.format(command))
     try:
-        status = subprocess.call(cmd, shell=True)
+        status = subprocess.call(command, shell=True)
         if status != 0 and show_stopper:
             print('Show stopper testcase failed')
             return status
     except OSError:
-        print('Error while executing {}'.format(cmd))
+        print('Error while executing {}'.format(command))
         return -1
     return status
 
 
-def parse_yaml(testcase_loc):
-    """Parse yaml file and do tasks on each testcase
+def validate_layer(blueprint, layer):
+    """validates a layer by validating all testcases under that layer
     """
-    with open(testcase_loc) as testcase_file:
-        testcases = yaml.safe_load(testcase_file)
-    blueprint = testcases['blueprint']
-    for section in blueprint['sections']:
-        print('## Section {}'.format(section))
-        for testcase in blueprint[section]:
-            run_testcase(testcase)
+    print('## Layer {}'.format(layer))
+    for testcase in blueprint[layer]:
+        run_testcase(testcase)
+
+
+def validate_blueprint(yaml_loc, layer):
+    """Parse yaml file and validates given layer. If no layer given all layers
+    validated
+    """
+    with open(yaml_loc) as yaml_file:
+        yamldoc = yaml.safe_load(yaml_file)
+    blueprint = yamldoc['blueprint']
+    if layer is None:
+        for each_layer in blueprint['layers']:
+            validate_layer(blueprint, each_layer)
+    else:
+        validate_layer(blueprint, layer)
+
+
+@click.command()
+@click.argument('blueprint')
+@click.option('--layer', '-l')
+def main(blueprint, layer):
+    """Takes blueprint name and optional layer. Validates inputs and derives
+    yaml location from blueprint name. Invokes validate on blue print.
+    """
+    yaml_loc = 'bluval/bluval-{}.yaml'.format(blueprint)
+    layer = layer.lower()
+    validate_blueprint(yaml_loc, layer)
 
 
 if __name__ == "__main__":
-    if len(sys.argv) != 2:
-        print('usage: bluval.py <testcase.yaml>')
-        sys.exit(1)
-    parse_yaml(sys.argv[1])
+    # pylint: disable=no-value-for-parameter
+    main()