PyTest, test to cover VM creation a ovs nets
[osm/openvim.git] / test / lib / ssh.py
diff --git a/test/lib/ssh.py b/test/lib/ssh.py
new file mode 100644 (file)
index 0000000..5480483
--- /dev/null
@@ -0,0 +1,126 @@
+import subprocess
+import pexpect
+
+
+def execute_local(cmd):
+    """
+    Execute a command in locally    
+    :param cmd: command to be executed
+    :return: 
+    """
+
+    print "execute_local cmd = {}".format(cmd)
+    p = subprocess.Popen(['bash', "-c", cmd], stdout=subprocess.PIPE)
+    out = p.stdout.read()
+    print "execute_local result = {}".format(out)
+    return out
+
+
+def execute_namespace(vlan, cmd):
+    """
+    Execute a command inside a namespace created by openvim 
+    :param vlan: namespace id
+    :param cmd: command to be executed
+    :return: 
+    """
+
+    n_cmd = 'sudo ip netns exec {}-qrouter {} '.format(vlan, cmd)
+    return execute_local(n_cmd)
+
+
+def ping_ok(vlan_id, ip, retries=200):
+    """
+
+    :param vlan_id: namespace id
+    :param ip: vm ip to be pinged
+    :param retries: retries, by default 200
+    :return: 
+    """
+    print 'waiting for vm to be active vm with ip = {}'.format(ip)
+    for i in xrange(retries):
+        try:
+            subprocess.check_output(['bash', "-c", "sudo ip netns exec {}-qrouter ping -c 1 {}".format(vlan_id, ip)])
+            return True
+        except Exception, e:
+            pass
+    return False
+
+
+def ping_ok_btw_2_vms(vlan_id, ip_1, ip_2, retires=8):
+    """
+    Check net connectivity between to VM
+    :param vlan_id: namepsace id
+    :param ip_1: first vm ip
+    :param ip_2: second vm ip
+    :param retires: 
+    :return: 
+    """
+    for i in xrange(retires):
+
+        try:
+            ns_cmd = 'sudo ip netns exec {}-qrouter '.format(vlan_id)
+            cmd = ns_cmd + ' ssh -oStrictHostKeyChecking=no cirros@{} "ping -c 1 {}"'.format(ip_1, ip_2)
+            child = pexpect.spawn(cmd)
+            child.expect('.*assword*')
+            child.sendline('cubswin:)')
+            child.sendline('cubswin:)')
+
+            cmd = ns_cmd + ' ssh -oStrictHostKeyChecking=no  cirros@{} "ping -c 1 {}"'.format(ip_2, ip_1)
+            child = pexpect.spawn(cmd)
+            child.expect('.*assword*')
+            child.sendline('cubswin:)')
+            child.sendline('cubswin:)')
+
+        except EOFError as e:
+            if i == retires:
+                return False
+            pass
+
+    return True
+
+
+def copy_rsa_keys_into_vm(vlan_id, ip, rsa_key_path):
+    """
+    copy an RSA key given by the user to a vm 
+    :param vlan_id: 
+    :param ip: 
+    :param rsa_key_path: 
+    :return: 
+    """
+
+    try:
+        execute_local('sudo ssh-keygen -f "/root/.ssh/known_hosts" -R  {}'.format(ip))
+        cmd = 'sudo ip netns exec {}-qrouter ssh-copy-id -i {} ' \
+              '-oStrictHostKeyChecking=no -f cirros@{}'.format(vlan_id, rsa_key_path + '.pub', ip)
+
+        print 'copy_rsa_keys_into_vm = ' + cmd
+        child = pexpect.spawn(cmd)
+        child.expect('.*assword*')
+        child.sendline('cubswin:)')
+        child.sendline('cubswin:)')
+        return True
+    except EOFError as e:
+        return False
+
+
+def execute_check_output(vlan_id, cmd):
+    """
+    Execute a command inside a namespace and raise an expection in case of command fail
+    :param vlan_id: namepsace id
+    :param cmd: command
+    :return: 
+    """
+    try:
+        cmd = "sudo ip netns exec {}-qrouter  {}".format(vlan_id, cmd)
+        print "execute_check_output = {}".format(cmd)
+        subprocess.check_output(['bash', "-c", cmd])
+        return True
+    except Exception, e:
+        print "error execute_check_output"
+        return False
+
+
+
+
+
+