diff options
Diffstat (limited to 'tests/unit/test_daisy_server.py')
-rw-r--r-- | tests/unit/test_daisy_server.py | 346 |
1 files changed, 346 insertions, 0 deletions
diff --git a/tests/unit/test_daisy_server.py b/tests/unit/test_daisy_server.py new file mode 100644 index 00000000..ada3c96d --- /dev/null +++ b/tests/unit/test_daisy_server.py @@ -0,0 +1,346 @@ +import os +import pytest +import mock + +from deploy import daisy_server +from deploy.daisy_server import ( + DaisyServer +) + + +@pytest.fixture(scope="session") +def conf_file_dir(data_root): + return os.path.join(data_root, 'lab_conf') + + +daisy_server_info = { + 'name': 'daisy', + 'image': 'daisy.qcow2', + 'address': '10.20.0.2', + 'gateway': '10.20.0.1', + 'password': 'r00tme', + 'disk_size': 50 +} +adapter = 'ipmi' +scenario = 'os-odl-nofeature-ha' +deploy_file_name = 'final_deploy.yml' +net_file_name = 'network_baremetal.yml' +remote_dir = '/home/daisy' +bin_file_name = 'opnfv.bin' + + +def test_create_DaisyServer_instance(tmpdir): + bin_file = os.path.join(tmpdir.dirname, tmpdir.basename, bin_file_name) + DaisyServerInst = DaisyServer(daisy_server_info['name'], + daisy_server_info['address'], + daisy_server_info['password'], + remote_dir, + bin_file, + adapter, + scenario, + deploy_file_name, + net_file_name) + assert (DaisyServerInst.name == daisy_server_info['name'] and + DaisyServerInst.address == daisy_server_info['address'] and + DaisyServerInst.password == daisy_server_info['password'] and + DaisyServerInst.remote_dir == remote_dir and + DaisyServerInst.bin_file == bin_file and + DaisyServerInst.adapter == adapter and + DaisyServerInst.scenario == scenario and + DaisyServerInst.deploy_file_name == deploy_file_name and + DaisyServerInst.net_file_name == net_file_name and + DaisyServerInst.ssh_client is None) + tmpdir.remove() + + +@mock.patch.object(daisy_server.DaisyServer, 'ssh_exec_cmd') +def test_create_dir_DaisyServer(mock_ssh_exec_cmd, tmpdir): + remote_dir_test = '/home/daisy/test' + cmd = 'mkdir -p ' + remote_dir_test + bin_file = os.path.join(tmpdir.dirname, tmpdir.basename, bin_file_name) + DaisyServerInst = DaisyServer(daisy_server_info['name'], + daisy_server_info['address'], + daisy_server_info['password'], + remote_dir, + bin_file, + adapter, + scenario, + deploy_file_name, + net_file_name) + DaisyServerInst.create_dir(remote_dir_test) + DaisyServerInst.ssh_exec_cmd.assert_called_once_with(cmd) + tmpdir.remove() + + +@mock.patch.object(daisy_server.DaisyServer, 'ssh_exec_cmd') +def test_delete_dir_DaisyServer(mock_ssh_exec_cmd, tmpdir): + remote_dir_test = '/home/daisy/test' + cmd = 'if [[ -f {DIR} || -d {DIR} ]]; then rm -fr {DIR}; fi'.format(DIR=remote_dir_test) + bin_file = os.path.join(tmpdir.dirname, tmpdir.basename, bin_file_name) + DaisyServerInst = DaisyServer(daisy_server_info['name'], + daisy_server_info['address'], + daisy_server_info['password'], + remote_dir, + bin_file, + adapter, + scenario, + deploy_file_name, + net_file_name) + DaisyServerInst.delete_dir(remote_dir_test) + DaisyServerInst.ssh_exec_cmd.assert_called_once_with(cmd) + tmpdir.remove() + + +@mock.patch.object(daisy_server.DaisyServer, 'delete_dir') +@mock.patch.object(daisy_server.DaisyServer, 'scp_put') +@mock.patch.object(daisy_server.DaisyServer, 'create_dir') +@mock.patch('deploy.daisy_server.update_config') +def test_prepare_files_DaisyServer(mock_update_config, + mock_create_dir, + mock_scp_put, + mock_delete_dir, + tmpdir): + bin_file = os.path.join(tmpdir.dirname, tmpdir.basename, bin_file_name) + DaisyServerInst = DaisyServer(daisy_server_info['name'], + daisy_server_info['address'], + daisy_server_info['password'], + remote_dir, + bin_file, + adapter, + scenario, + deploy_file_name, + net_file_name) + DaisyServerInst.prepare_files() + DaisyServerInst.delete_dir.assert_called_once_with(remote_dir) + DaisyServerInst.create_dir.assert_called_once_with('/home/daisy_install') + assert DaisyServerInst.scp_put.call_count == 3 + tmpdir.remove() + + +@mock.patch.object(daisy_server.DaisyServer, 'ssh_run') +@mock.patch.object(daisy_server.DaisyServer, 'prepare_files') +def test_install_daisy_DaisyServer(mock_prepare_files, mock_ssh_run, tmpdir): + bin_file = os.path.join(tmpdir.dirname, tmpdir.basename, bin_file_name) + DaisyServerInst = DaisyServer(daisy_server_info['name'], + daisy_server_info['address'], + daisy_server_info['password'], + remote_dir, + bin_file, + adapter, + scenario, + deploy_file_name, + net_file_name) + mock_ssh_run.return_value = 0 + cmd = '%s install' % os.path.join(remote_dir, 'opnfv.bin') + DaisyServerInst.install_daisy() + DaisyServerInst.ssh_run.assert_called_once_with(cmd) + DaisyServerInst.prepare_files.assert_called_once_with() + tmpdir.remove() + + +@mock.patch.object(daisy_server.DaisyServer, 'ssh_run') +def test_prepare_configurations_DaisyServer(mock_ssh_run, tmpdir): + bin_file = os.path.join(tmpdir.dirname, tmpdir.basename, bin_file_name) + adapter = 'libvirt' + DaisyServerInst = DaisyServer(daisy_server_info['name'], + daisy_server_info['address'], + daisy_server_info['password'], + remote_dir, + bin_file, + adapter, + scenario, + deploy_file_name, + net_file_name) + mock_ssh_run.return_value = 0 + cmd = 'export PYTHONPATH={python_path}; python {script} -nw {net_file} -b {is_bare}'.format( + python_path=remote_dir, + script=os.path.join(remote_dir, 'deploy/prepare/execute.py'), + net_file=os.path.join(remote_dir, net_file_name), + is_bare=1 if adapter == 'ipmi' else 0) + DaisyServerInst.prepare_configurations() + DaisyServerInst.ssh_run.assert_called_once_with(cmd) + tmpdir.remove() + + +@mock.patch.object(daisy_server.DaisyServer, 'scp_put') +@mock.patch.object(daisy_server.DaisyServer, 'prepare_configurations') +@mock.patch.object(daisy_server.DaisyServer, 'ssh_run') +def test_prepare_cluster_DaisyServer(mock_scp_put, + mock_prepare_configurations, + mock_ssh_run, + tmpdir): + bin_file = os.path.join(tmpdir.dirname, tmpdir.basename, bin_file_name) + DaisyServerInst = DaisyServer(daisy_server_info['name'], + daisy_server_info['address'], + daisy_server_info['password'], + remote_dir, + bin_file, + adapter, + scenario, + deploy_file_name, + net_file_name) + mock_ssh_run.return_value = 0 + cmd = "python {script} --dha {deploy_file} --network {net_file} --cluster \'yes\'".format( + script=os.path.join(remote_dir, 'deploy/tempest.py'), + deploy_file=os.path.join(remote_dir, deploy_file_name), + net_file=os.path.join(remote_dir, net_file_name)) + deploy_file = os.path.join(tmpdir.dirname, tmpdir.basename, deploy_file_name) + net_file = os.path.join(tmpdir.dirname, tmpdir.basename, net_file_name) + DaisyServerInst.prepare_cluster(deploy_file, net_file) + DaisyServerInst.ssh_run.assert_called_once_with(cmd, check=True) + DaisyServerInst.prepare_configurations.assert_called_once_with() + assert DaisyServerInst.scp_put.call_count == 2 + tmpdir.remove() + + +@mock.patch.object(daisy_server.DaisyServer, 'scp_put') +def test_copy_new_deploy_config_DaisyServer(mock_scp_put, tmpdir): + bin_file = os.path.join(tmpdir.dirname, tmpdir.basename, bin_file_name) + adapter = 'libvirt' + DaisyServerInst = DaisyServer(daisy_server_info['name'], + daisy_server_info['address'], + daisy_server_info['password'], + remote_dir, + bin_file, + adapter, + scenario, + deploy_file_name, + net_file_name) + mock_scp_put.return_value = 0 + data = { + 'adapter': 'ipmi', + 'hosts': [ + { + 'name': 'controller01', + 'roles': ['CONTROLLER_LB'], + 'ipmi_ip': '192.168.1.11', + 'ipmi_user': 'testuser', + 'ipmi_pass': 'testpass' + } + ], + 'disks': { + 'daisy': 50 + }, + 'daisy_passwd': 'r00tme' + } + DaisyServerInst.copy_new_deploy_config(data) + assert DaisyServerInst.scp_put.call_count == 1 + tmpdir.remove() + + +@mock.patch.object(daisy_server.DaisyServer, 'ssh_run') +def test_prepare_host_and_pxe_DaisyServer(mock_ssh_run, tmpdir): + bin_file = os.path.join(tmpdir.dirname, tmpdir.basename, bin_file_name) + adapter = 'libvirt' + DaisyServerInst = DaisyServer(daisy_server_info['name'], + daisy_server_info['address'], + daisy_server_info['password'], + remote_dir, + bin_file, + adapter, + scenario, + deploy_file_name, + net_file_name) + mock_ssh_run.return_value = 0 + cmd = "python {script} --dha {deploy_file} --network {net_file} --host \'yes\' --isbare {is_bare} --scenario {scenario}".format( + script=os.path.join(remote_dir, 'deploy/tempest.py'), + deploy_file=os.path.join(remote_dir, deploy_file_name), + net_file=os.path.join(remote_dir, net_file_name), + is_bare=1 if adapter == 'ipmi' else 0, + scenario=scenario) + DaisyServerInst.prepare_host_and_pxe() + DaisyServerInst.ssh_run.assert_called_once_with(cmd, check=True) + tmpdir.remove() + + +@mock.patch.object(daisy_server.DaisyServer, 'ssh_run') +def test_install_virtual_nodes_DaisyServer(mock_ssh_run, tmpdir): + bin_file = os.path.join(tmpdir.dirname, tmpdir.basename, bin_file_name) + adapter = 'libvirt' + DaisyServerInst = DaisyServer(daisy_server_info['name'], + daisy_server_info['address'], + daisy_server_info['password'], + remote_dir, + bin_file, + adapter, + scenario, + deploy_file_name, + net_file_name) + mock_ssh_run.return_value = 0 + cmd = "python {script} --dha {deploy_file} --network {net_file} --install \'yes\'".format( + script=os.path.join(remote_dir, 'deploy/tempest.py'), + deploy_file=os.path.join(remote_dir, deploy_file_name), + net_file=os.path.join(remote_dir, net_file_name)) + DaisyServerInst.install_virtual_nodes() + DaisyServerInst.ssh_run.assert_called_once_with(cmd, check=True) + tmpdir.remove() + + +@mock.patch.object(daisy_server.DaisyServer, 'ssh_run') +def test_check_os_installation_DaisyServer(mock_ssh_run, tmpdir): + bin_file = os.path.join(tmpdir.dirname, tmpdir.basename, bin_file_name) + adapter = 'libvirt' + DaisyServerInst = DaisyServer(daisy_server_info['name'], + daisy_server_info['address'], + daisy_server_info['password'], + remote_dir, + bin_file, + adapter, + scenario, + deploy_file_name, + net_file_name) + mock_ssh_run.return_value = 0 + nodes_num = 5 + cmd = '{script} -d {is_bare} -n {nodes_num}'.format( + script=os.path.join(remote_dir, 'deploy/check_os_progress.sh'), + is_bare=1 if adapter == 'ipmi' else 0, + nodes_num=nodes_num) + DaisyServerInst.check_os_installation(nodes_num) + DaisyServerInst.ssh_run.assert_called_once_with(cmd, check=True) + tmpdir.remove() + + +@mock.patch.object(daisy_server.DaisyServer, 'ssh_run') +def test_check_openstack_installation_DaisyServer(mock_ssh_run, tmpdir): + bin_file = os.path.join(tmpdir.dirname, tmpdir.basename, bin_file_name) + adapter = 'libvirt' + DaisyServerInst = DaisyServer(daisy_server_info['name'], + daisy_server_info['address'], + daisy_server_info['password'], + remote_dir, + bin_file, + adapter, + scenario, + deploy_file_name, + net_file_name) + mock_ssh_run.return_value = 0 + nodes_num = 5 + cmd = '{script} -n {nodes_num}'.format( + script=os.path.join(remote_dir, 'deploy/check_openstack_progress.sh'), + nodes_num=nodes_num) + DaisyServerInst.check_openstack_installation(nodes_num) + DaisyServerInst.ssh_run.assert_called_once_with(cmd, check=True) + tmpdir.remove() + + +@mock.patch.object(daisy_server.DaisyServer, 'ssh_run') +def test_post_deploy_DaisyServer(mock_ssh_run, tmpdir): + bin_file = os.path.join(tmpdir.dirname, tmpdir.basename, bin_file_name) + adapter = 'libvirt' + DaisyServerInst = DaisyServer(daisy_server_info['name'], + daisy_server_info['address'], + daisy_server_info['password'], + remote_dir, + bin_file, + adapter, + scenario, + deploy_file_name, + net_file_name) + mock_ssh_run.return_value = 0 + cmd = 'export PYTHONPATH={python_path}; python {script} -nw {net_file}'.format( + python_path=remote_dir, + script=os.path.join(remote_dir, 'deploy/post/execute.py'), + net_file=os.path.join(remote_dir, net_file_name)) + DaisyServerInst.post_deploy() + DaisyServerInst.ssh_run.assert_called_once_with(cmd, check=False) + tmpdir.remove() |