added headers and added a non-working first draft of nodhcp ping test 21/18421/1
authorJuraj Linkes <jlinkes@cisco.com>
Thu, 11 Aug 2016 12:08:57 +0000 (14:08 +0200)
committerJuraj Linkes <jlinkes@cisco.com>
Thu, 11 Aug 2016 12:08:57 +0000 (14:08 +0200)
Change-Id: I0c02184cc2b6f43cc8a8a6ede4ca3fcf3a2285d3
Signed-off-by: Juraj Linkes <jlinkes@cisco.com>
testing/robot/data/test_data.py
testing/robot/lib/FDSLibrary.py
testing/robot/smoke.robot

index cd3b170..d78ce4f 100644 (file)
@@ -1,3 +1,12 @@
+##############################################################################
+# Copyright (c) 2016 Juraj Linkes (Cisco) and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
 import uuid
 
 run_uuid = str(uuid.uuid4())
@@ -12,3 +21,7 @@ port2_name = 'fds_smoke_port2_' + run_uuid
 subnet_cidr = '192.168.10.0/24'
 vm_flavor = 'm1.small'
 vm_image = 'cirros-0.3.3'
+userdata1 = "#!/bin/sh\n\nsudo ip a add {}/24 dev eth0\n".format(vm1_address)
+userdata2 = "#!/bin/sh\n\nsudo ip a add {}/24 dev eth0\nwhile true; do\n ping -c 1 {} 2>&1 >/dev/null\n " \
+            "RES=$?\n if [ \"Z$RES\" = \"Z0\" ] ; then\n  echo 'ping PASSED'\n break\n else\n  echo " \
+            "'ping FAILED'\n fi\n sleep 1\ndone\n".format(vm2_address, vm1_address)
index 2e29d6c..0cb43ee 100644 (file)
@@ -1,3 +1,12 @@
+##############################################################################
+# Copyright (c) 2016 Juraj Linkes (Cisco) and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
 from neutronclient.v2_0 import client as neutron
 from novaclient import client as nova
 from novaclient.exceptions import NotFound
@@ -19,6 +28,14 @@ class FDSLibrary():
                                        os.getenv('OS_TENANT_NAME'),
                                        os.getenv('OS_AUTH_URL'))
 
+    def check_flavor_exists(self, flavor):
+        flavor_list_names = [x.name for x in self.nova_client.flavors.list()]
+        return flavor in flavor_list_names
+
+    def check_image_exists(self, image):
+        image_list_names = [x.name for x in self.nova_client.images.list()]
+        return image in image_list_names
+
     def create_network(self, name):
         body = {'network': {'name': name}}
         response = self.neutron_client.create_network(body=body)
@@ -52,16 +69,44 @@ class FDSLibrary():
         response = self.neutron_client.create_port(body=body)
         return response
 
-    def create_server(self, name, image, flavor, port_ids, security_groups=None):
+    def create_server(self, name, image, flavor, port_ids, security_groups=None, userdata=None):
         image = self.nova_client.images.find(name=image)
         flavor = self.nova_client.flavors.find(name=flavor)
         nics = [{'port-id': port_id} for port_id in port_ids]
         response = self.nova_client.servers.create(name=name, image=image.id, flavor=flavor.id,
-                                                   security_groups=security_groups, nics=nics)
+                                                   security_groups=security_groups, nics=nics,
+                                                   userdata=userdata)
         for key in dir(response):
             print key, getattr(response, key)
         return response
 
+    def format_string(self, string, substitute):
+        return string.format(substitute)
+
+    def check_server_console(self, vm_id, string):
+        vm_obj = self.nova_client.servers.get(vm_id)
+        timeout = 0
+        while timeout < 100:
+            console_out = vm_obj.get_console_output()
+            print "console output is: '{}'".format(console_out[-200:])
+            failed_to_read_metadata = 'failed to read iid from metadata'
+            if string in console_out:
+                return True
+            elif 'request failed' in console_out:
+                print 'retrying'
+            elif failed_to_read_metadata in console_out:
+                print failed_to_read_metadata
+                return False
+            timeout += 1
+            time.sleep(5)
+        return False
+
+    def create_security_group(self):
+        pass
+
+    def create_security_rule(self):
+        pass
+
     def poll_server(self, vm_id, status, timeout=300):
         try:
             start = datetime.datetime.now()
index 17b19bf..fddac5d 100644 (file)
@@ -1,3 +1,12 @@
+##############################################################################
+# Copyright (c) 2016 Juraj Linkes (Cisco) and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
 *** Settings ***
 Library         OperatingSystem
 Library         lib/FDSLibrary.py
@@ -24,27 +33,25 @@ Create port for VM2
 
 Create VM1
     ${port_ids} =   Create List     ${port1_id}
-    ${result} =     Create vm       ${vm1_name}     ${port_ids}
+    ${result} =     Create vm       ${vm1_name}     ${port_ids}     userdata=${userdata1}
     Set Suite Variable  ${vm1_id}   ${result}
 
-Create VM2
-    ${port_ids} =   Create List     ${port2_id}
-    ${result} =     Create vm       ${vm2_name}     ${port_ids}
-    Set Suite Variable  ${vm2_id}   ${result}
-
 Wait for VM1 to be active
     Should Be True  $vm1_id is not $None
     Poll vm     ${vm1_id}   active
 
+Create VM2
+    ${port_ids} =   Create List     ${port2_id}
+    ${result} =     Create vm       ${vm2_name}     ${port_ids}     userdata=${userdata2}
+    Set Suite Variable  ${vm2_id}   ${result}
+
 Wait for VM2 to be active
     Should Be True  $vm2_id is not $None
     Poll vm     ${vm2_id}   active
 
-Ping VM1
-    Ping vm     ${vm1_address}
-
-Ping VM2
-    Ping vm     ${vm2_address}
+Check VM2 userdata
+    ${result} =     Check vm console    ${vm2_id}   PASSED
+    Should Be True  ${result}
 
 *** Keywords ***
 Setup Suite
@@ -54,6 +61,12 @@ Setup Suite
     Set Suite Variable  ${port2_id}     ${None}
     Set Suite Variable  ${vm1_id}       ${None}
     Set Suite Variable  ${vm2_id}       ${None}
+    ${result} =     Check Flavor Exists     ${vm_flavor}
+    Log     ${vm_flavor}
+    Should be True      ${result}
+    ${result} =     Check Image Exists  ${vm_image}
+    Log     ${vm_image}
+    Should be True      ${result}
 
 Teardown Suite
     Run Keyword If  $vm1_id is not $None        Delete vm       ${vm1_id}
@@ -82,12 +95,19 @@ Create port with ip
     [Return]    ${response.port['id']}
 
 Create vm
-    [Arguments]     ${vm_name}     ${port_ids}
-    ${response} =   create server   ${vm_name}     ${vm_image}     ${vm_flavor}    ${port_ids}
+    [Arguments]     ${vm_name}     ${port_ids}  ${security_groups}=${None}  ${userdata}=${None}
+    Log Many    ${vm_name}  ${vm_image}     ${vm_flavor}    ${port_ids}     ${userdata}
+    ${response} =   create server   ${vm_name}     ${vm_image}     ${vm_flavor}    ${port_ids}  ${security_groups}
+    ...                             ${userdata}
     log many    ${response}
     log         ${response.id}
     [Return]    ${response.id}
 
+Check vm console
+    [Arguments]     ${vm_id}    ${string}
+    ${response} =   check server console    ${vm_id}    ${string}
+    [Return]    ${response}
+
 Poll vm
     [Arguments]     ${id}   ${state}
     poll server     ${id}   ${state}