def test_services(confirm, force, action, services, mock_client, cluster_response, print_table, print_single_table): mock_client._request.return_value = cluster_response args = ['lava', 'clusters', 'services', action, 'cluster_id'] + services if force: args.append('--force') with patch('sys.argv', args): main() confirm.assert_not_called() if force else confirm.assert_called() mock_client._request.assert_called_with( 'PUT', 'clusters/cluster_id', json={ 'cluster': { 'control_services': { 'action': action, 'services': [{'name': name} for name in services], } } } ) check_cluster_detail(print_single_table, print_table)
def test_create(services, node_groups, print_table, print_single_table, mock_client, stack_response): mock_client._request.return_value = stack_response args = ['lava', 'stacks', 'create', 'name', 'distro', json.dumps(services)] if node_groups: args.extend(['--node-groups', json.dumps(node_groups)]) with patch('sys.argv', args): main() jsondata = mock_client._request.call_args[1]['json']['stack'] assert jsondata['services'] == services if 'node_groups' in jsondata: assert jsondata['node_groups'] == node_groups assert print_single_table.call_count == 1 (data, header), kwargs = print_single_table.call_args assert data[:5] == [ 'stack_id', 'stack_name', 'distro', datetime(2015, 1, 1), 'description' ] assert data[6] == 'id' pieces = list( sorted(data[5].strip('[]').strip('}{').replace('\n', '').split(','))) assert pieces == ['modes=[mode1]', 'name=service_name'] assert header == StackDetail.table_header assert kwargs['title'] == 'Stack' assert print_table.call_count == 2 (data, header), kwargs = print_table.call_args_list[0] assert list(data) == [['id', 'hadoop1-7', 10, 1024, 1, 10]] assert header == StackNodeGroup.table_header assert kwargs['title'] == 'Node Groups'
def test_ssh_proxy_errors(test_connection, popen, failure, mock_client, cluster_response, nodes_response): del nodes_response['nodes'][0]['components'][0]['uri'] popen.return_value = MagicMock( poll=MagicMock(return_value=None), communicate=MagicMock(return_value=('stdout', 'stderr')) ) if failure: test_connection.side_effect = [failure, 200] else: test_connection.return_value = 200 mock_client._request.side_effect = [cluster_response, nodes_response] with patch('sys.argv', ['lava', 'clusters', 'ssh_proxy', 'cluster_id', '--node-name', 'NODENAME', '--port', '54321']): main() popen.assert_called_with( ['ssh', '-o', 'PasswordAuthentication=no', '-o', 'BatchMode=yes', '-N', '-D', '54321', '[email protected]'], stderr=subprocess.STDOUT, stdout=subprocess.PIPE)
def test_ssh_tunnel_component(popen, mock_client, cluster_response, nodes_response): popen.return_value = MagicMock( poll=MagicMock(return_value=None), communicate=MagicMock(return_value=("stdout", "stderr")) ) mock_client._request.side_effect = [cluster_response, nodes_response] with patch( "sys.argv", ["lava", "clusters", "ssh_tunnel", "cluster_id", "123", "456", "--component", "component_name"] ): main() popen.assert_called_with( [ "ssh", "-o", "PasswordAuthentication=no", "-o", "BatchMode=yes", "-N", "-L", "123:NODENAME:456", "[email protected]", ], stderr=subprocess.STDOUT, stdout=subprocess.PIPE, )
def test_delete(mock_client): pytest.skip('Delete is not yet supported') main() args = mock_client._request.call_args[0] assert args == ('DELETE', 'stacks/stack_id')
def test_update(name, url, script_type, print_single_table, mock_client, script_response): mock_client._request.return_value = script_response args = ['lava', 'scripts', 'update', 'script_id'] if name: args.extend(['--name', name]) if url: args.extend(['--url', url]) if script_type: args.extend(['--type', script_type]) with patch('sys.argv', args): main() kwargs = mock_client._request.call_args[1] assert kwargs['json']['script'].get('name') == name assert kwargs['json']['script'].get('url') == url stype = script_type.upper() if script_type else None assert kwargs['json']['script'].get('type') == stype (data, header), kwargs = print_single_table.call_args assert data == [ 'id', 'name', 'POST_INIT', True, datetime(2015, 1, 1), 'url' ] assert header == Script.table_header assert kwargs['title'] is None
def test_list_noformat(sixprint, mock_client, nodes_response): mock_client._request.return_value = nodes_response main() sixprint.assert_has_calls([ call('node_id,NODENAME,node_group,ACTIVE,1.2.3.4,5.6.7.8') ])
def test_update(name, url, script_type, print_single_table, mock_client, script_response): mock_client._request.return_value = script_response args = ['lava', 'scripts', 'update', 'script_id'] if name: args.extend(['--name', name]) if url: args.extend(['--url', url]) if script_type: args.extend(['--type', script_type]) with patch('sys.argv', args): main() kwargs = mock_client._request.call_args[1] assert kwargs['json']['script'].get('name') == name assert kwargs['json']['script'].get('url') == url stype = script_type.upper() if script_type else None assert kwargs['json']['script'].get('type') == stype (data, header), kwargs = print_single_table.call_args assert data == ['id', 'name', 'POST_INIT', True, datetime(2015, 1, 1), 'url'] assert header == Script.table_header assert kwargs['title'] is None
def test_list(print_table, mock_client, workloads_response): mock_client._request.return_value = workloads_response main() (data, header), kwargs = print_table.call_args assert list(data) == [['id', 'name', 'caption', 'description']] assert header == Workload.table_header assert kwargs['title'] is None
def test_list(print_table, mock_client, clusters_response): mock_client._request.return_value = clusters_response main() (data, header), kwargs = print_table.call_args assert list(data) == [["cluster_id", "cluster_name", "ACTIVE", "stack_id", datetime(2014, 1, 1)]] assert header == Cluster.table_header assert kwargs["title"] is None
def test_list(print_table, mock_client, distros_response): mock_client._request.return_value = distros_response main() (data, header), kwargs = print_table.call_args assert list(data) == [['HDP2.2', 'HortonWorks Data Platform', '2.2']] assert header == ['ID', 'Name', 'Version'] assert kwargs['title'] is None
def test_create_regions(mock_client, cluster_response, region): mock_client._request.return_value = cluster_response args = ["lava", "clusters", "create", "name", "stack_id", "--cluster-region", region] with patch("sys.argv", args): main() kwargs = mock_client._request.call_args[1] assert kwargs["json"]["cluster"]["region"] == region
def test_create_ssh_keys(args, keys, mock_client, print_table, print_single_table, cluster_response): mock_client._request.return_value = cluster_response base_args = ["lava", "clusters", "create", "name", "stack_id"] with patch("sys.argv", base_args + args): main() kwargs = mock_client._request.call_args[1] assert kwargs["json"]["cluster"].get("ssh_keys") == keys
def test_list(print_table, mock_client, scripts_response): mock_client._request.return_value = scripts_response main() (data, header), kwargs = print_table.call_args assert list(data) == [['id', 'name', 'POST_INIT', True, datetime(2015, 1, 1), 'url']] assert header == Script.table_header assert kwargs['title'] is None
def test_create_with_scripts(print_table, print_single_table, mock_client, cluster_response): mock_client._request.return_value = cluster_response with patch( "sys.argv", ["lava", "clusters", "create", "name", "stack_id", "--user-script", "id1", "--user-script", "id2"] ): main() kwargs = mock_client._request.call_args[1] assert kwargs["json"]["cluster"].get("scripts") == [{"id": "id1"}, {"id": "id2"}]
def test_create_ssh_key(print_single_table, mock_client, ssh_key_response): mock_client._request.return_value = ssh_key_response main() assert print_single_table.call_count == 1 (data, header), kwargs = print_single_table.call_args assert data == ['SSH Key', 'mykey'] assert header == ('Type', 'Name') assert kwargs['title'] is None
def test_create_regions(mock_client, cluster_response, region): mock_client._request.return_value = cluster_response args = ['lava', 'clusters', 'create', 'name', 'stack_id', '--cluster-region', region] with patch('sys.argv', args): main() kwargs = mock_client._request.call_args[1] assert kwargs['json']['cluster']['region'] == region
def test_list_ambari(print_table, mock_client, ambari_creds_response): mock_client._request.return_value = ambari_creds_response main() assert print_table.call_count == 1 (data, header), kwargs = print_table.call_args assert list(data) == [['Ambari', 'username']] assert header == ['Type', 'Username'] assert kwargs['title'] is None
def test_list(print_table, mock_client, clusters_response): mock_client._request.return_value = clusters_response main() (data, header), kwargs = print_table.call_args assert list(data) == [['cluster_id', 'cluster_name', 'ACTIVE', 'stack_id', datetime(2014, 1, 1)]] assert header == Cluster.table_header assert kwargs['title'] is None
def test_list_ssh_keys(print_table, mock_client, ssh_keys_response): mock_client._request.return_value = ssh_keys_response main() assert print_table.call_count == 1 (data, header), kwargs = print_table.call_args assert list(data) == [['SSH Key', 'mykey']] assert header == ('Type', 'Name') assert kwargs['title'] is None
def test_list_s3(print_table, mock_client, s3_creds_response): mock_client._request.return_value = s3_creds_response main() assert print_table.call_count == 1 (data, header), kwargs = print_table.call_args assert list(data) == [['Amazon S3', 'access_key_id']] assert header == ('Type', 'Access Key ID') assert kwargs['title'] is None
def test_list(print_table, mock_client, flavors_response): mock_client._request.return_value = flavors_response main() (data, header), kwargs = print_table.call_args assert list(data) == [['hadoop1-15', 'Medium Hadoop Instance', 15360, 4, 2500]] assert header == Flavor.table_header assert kwargs['title'] is None
def test_delete(mock_client, node_response): mock_client._request.return_value = node_response main() assert mock_client._request.call_count == 1 call1 = mock_client._request.call_args assert call1 == call('DELETE', 'clusters/cluster_id/nodes/node_id')
def test_create_with_scripts(print_table, print_single_table, mock_client, cluster_response): mock_client._request.return_value = cluster_response with patch('sys.argv', ['lava', 'clusters', 'create', 'name', 'stack_id', '--user-script', 'id1', '--user-script', 'id2']): main() kwargs = mock_client._request.call_args[1] assert kwargs['json']['cluster'].get('scripts') == [{'id': 'id1'}, {'id': 'id2'}]
def test_resize(args, node_groups, print_table, print_single_table, mock_client, cluster_response): mock_client._request.return_value = cluster_response base_args = ["lava", "clusters", "resize", "cluster_id"] with patch("sys.argv", base_args + args): main() kwargs = mock_client._request.call_args[1] assert kwargs["json"]["cluster"].get("node_groups") == node_groups
def test_create_ssh_keys(args, keys, mock_client, print_table, print_single_table, cluster_response): mock_client._request.return_value = cluster_response base_args = ['lava', 'clusters', 'create', 'name', 'stack_id'] with patch('sys.argv', base_args + args): main() kwargs = mock_client._request.call_args[1] assert kwargs['json']['cluster'].get('ssh_keys') == keys
def test_delete(mock_client, cluster_response, print_single_table): mock_client._request.return_value = cluster_response main() assert mock_client._request.call_count == 2 call1, call2 = mock_client._request.call_args_list assert call1[0] == ('GET', 'clusters/cluster_id') assert call2[0] == ('DELETE', 'clusters/cluster_id')
def test_create_no_ssh_key(mock_client, cluster_response, ssh_key_response): mock_client._request.side_effect = [ RequestError('Cannot find requested ssh_keys: {0}'.format( [DEFAULT_SSH_KEY])), ssh_key_response, cluster_response, ] main() assert mock_client._request.call_count == 3
def test_list(print_table, mock_client, workloads_response): pytest.skip('Workloads is disabled for now') mock_client._request.return_value = workloads_response main() (data, header), kwargs = print_table.call_args assert list(data) == [['id', 'name', 'caption', 'description']] assert header == Workload.table_header assert kwargs['title'] is None
def test_list(print_table, mock_client, flavors_response): mock_client._request.return_value = flavors_response main() (data, header), kwargs = print_table.call_args assert list(data) == [[ 'hadoop1-15', 'Medium Hadoop Instance', 15360, 4, 2500 ]] assert header == Flavor.table_header assert kwargs['title'] is None
def test_create_cloud_files(print_single_table, mock_client, cloud_files_cred_response): mock_client._request.return_value = cloud_files_cred_response main() assert print_single_table.call_count == 1 (data, header), kwargs = print_single_table.call_args assert data == ['Cloud Files', 'username'] assert header == ('Type', 'Username') assert kwargs['title'] is None
def test_nodes(print_table, mock_client, nodes_response): mock_client._request.return_value = nodes_response main() (data, header), kwargs = print_table.call_args alldata = [entry for entry in list(data)[0]] assert alldata[:6] == ['node_id', 'NODENAME', '[]', 'ACTIVE', '1.2.3.4', '5.6.7.8'] assert header == Node.table_header assert kwargs['title'] is None
def test_list(print_table_, mock_client, credentials_response): mock_client._request.return_value = credentials_response main() assert print_table_.call_count == 1 (data, header), kwargs = print_table_.call_args assert list(data) == [('SSH Key', 'mykey'), ('Cloud Files', 'username'), ('Amazon S3', 'access_key_id')] assert header == ('Type', 'Name') assert 'title' not in kwargs
def test_list(print_table, mock_client, scripts_response): mock_client._request.return_value = scripts_response main() (data, header), kwargs = print_table.call_args assert list(data) == [[ 'id', 'name', 'POST_INIT', True, datetime(2015, 1, 1), 'url' ]] assert header == Script.table_header assert kwargs['title'] is None
def test_resize(args, node_groups, print_table, print_single_table, mock_client, cluster_response): mock_client._request.return_value = cluster_response base_args = ['lava', 'clusters', 'resize', 'cluster_id'] with patch('sys.argv', base_args + args): main() kwargs = mock_client._request.call_args[1] assert kwargs['json']['cluster'].get('node_groups') == node_groups
def test_get(print_table, mock_client, limits_response): mock_client._request.return_value = limits_response main() (data, header), kwargs = print_table.call_args assert list(data) == [ ('Nodes', 10, 0), ('RAM', 10, 0), ('Disk', 10, 0), ('VCPUs', 10, 0), ] assert header == ('Property', 'Limit', 'Remaining') assert kwargs['title'] is 'Quotas'
def test_list(print_table, mock_client, stacks_response): mock_client._request.return_value = stacks_response main() assert print_table.call_count == 2 (data, header), kwargs = print_table.call_args_list[0] alldata = list(data) assert len(alldata) == 1 assert list(item[:5] for item in alldata) == [[ 1, 'stack_id', 'stack_name', 'distro', 'description' ]] assert header == ['', 'ID', 'Name', 'Distro', 'Description'] assert kwargs['title'] is 'Stacks'
def test_update_credentials(args, expected, print_table, print_single_table, mock_client, cluster_response): mock_client._request.return_value = cluster_response base_args = ['lava', 'clusters', 'update_credentials', 'cluster_id'] with patch('sys.argv', base_args + args): main() kwargs = mock_client._request.call_args[1] creds = kwargs['json']['cluster']['credentials'] assert len(creds) == len(expected) for cred in creds: assert cred in expected
def test_create_no_ssh_key(confirm, mock_client, cluster_response, ssh_key_response): mock_client._request.side_effect = [ RequestError('Cannot find requested ssh_keys: {0}'.format( [DEFAULT_SSH_KEY])), ssh_key_response, cluster_response, ] confirm.return_value = True with patch.object(mock_client.clusters._args, 'headless', False): main() assert confirm.called assert mock_client._request.call_count == 3
def test_delete_ssh_credentials(print_table, print_single_table, mock_client, cluster_response): mock_client._request.return_value = cluster_response args = ['lava', 'clusters', 'delete_ssh_credentials', 'cluster_id', 'delete_this_key', 'delete_that_key'] expected = {'remove_credentials': [{'name': 'delete_this_key', 'type': 'ssh_keys'}, {'name': 'delete_that_key', 'type': 'ssh_keys'}]} with patch('sys.argv', args): main() kwargs = mock_client._request.call_args[1] assert kwargs['json']['cluster'] == expected
def test_ssh_tunnel_component(popen, mock_client, cluster_response, nodes_response): popen.return_value = MagicMock( poll=MagicMock(return_value=None), communicate=MagicMock(return_value=('stdout', 'stderr')) ) mock_client._request.side_effect = [cluster_response, nodes_response] with patch('sys.argv', ['lava', 'clusters', 'ssh_tunnel', 'cluster_id', '123', '456', '--component', 'component_name']): main() popen.assert_called_with( ['ssh', '-o', 'PasswordAuthentication=no', '-o', 'BatchMode=yes', '-N', '-L', '123:NODENAME:456', '[email protected]'], stderr=subprocess.STDOUT, stdout=subprocess.PIPE)
def test_nodes(print_table, mock_client, nodes_response): mock_client._request.return_value = nodes_response main() assert print_table.call_count == 2 (data, header), kwargs = print_table.call_args_list[0] alldata = [entry for entry in list(data)[0]] assert alldata[:6] == ['node_id', 'NODENAME', 'node_group', 'ACTIVE', '1.2.3.4', '5.6.7.8'] assert header == Node.table_header assert kwargs['title'] == 'Nodes' (data, header), kwargs = print_table.call_args_list[1] alldata = [entry for entry in list(data)[0]] assert alldata[:6] == ['NODENAME', 'component_name', 'Component name', 'http://host'] assert header == ('Node', 'ID', 'Name', 'URI') assert kwargs['title'] == 'Components'
def test_get(print_table, print_single_table, mock_client, distro_response): mock_client._request.return_value = distro_response main() assert print_single_table.call_count == 1 (data, header), kwargs = print_single_table.call_args assert data == ['HDP2.2', 'HortonWorks Data Platform', '2.2'] assert header == DistroDetail.table_header assert kwargs['title'] is 'Distro' assert print_table.call_count == 1 (data, header), kwargs = print_table.call_args_list[0] assert list(data) == [[ 'name', 'version', '[{name=component}]', 'description' ]] assert header == DistroService.table_header assert kwargs['title'] == 'Services'
def test_recommendations(persistence, print_table, mock_client, recommendations_response): pytest.skip('Workloads is disabled for now') mock_client._request.return_value = recommendations_response with patch( 'sys.argv', ['lava', 'workloads', 'recommendations', 'id', '128', persistence]): main() params = mock_client._request.call_args[1]['params'] assert params['storagesize'] == 128 assert params['persistent'] == persistence (data, header), kwargs = print_table.call_args assert len(list(data)) == 1 assert header == ('Name', 'Requires', 'Description', 'Flavor', 'Minutes', 'Nodes', 'Recommended') assert 'title' not in kwargs
def test_get(print_table, print_single_table, mock_client, stack_response): mock_client._request.return_value = stack_response main() assert print_single_table.call_count == 1 (data, header), kwargs = print_single_table.call_args assert data[:5] == [ 'stack_id', 'stack_name', 'distro', datetime(2015, 1, 1), 'description' ] assert data[6] == 'id' pieces = list( sorted(data[5].strip('[]').strip('}{').replace('\n', '').split(','))) assert pieces == ['modes=[mode1]', 'name=service_name'] assert header == StackDetail.table_header assert kwargs['title'] == 'Stack' assert print_table.call_count == 2 (data, header), kwargs = print_table.call_args_list[0] assert list(data) == [['id', 'hadoop1-7', 10, 1024, 1, 10]] assert header == StackNodeGroup.table_header assert kwargs['title'] == 'Node Groups'
def test_wait(stdout, print_table, print_single_table, mock_client, cluster_response): building = deepcopy(cluster_response) building['cluster']['status'] = 'BUILDING' configuring = deepcopy(cluster_response) configuring['cluster']['status'] = 'CONFIGURING' active = deepcopy(cluster_response) active['cluster']['status'] = 'ACTIVE' mock_client._request.side_effect = [building, configuring, active] with patch.object(mock_client.clusters, '_command_line', True): main() stdout.write.assert_has_calls([ call('Waiting for cluster cluster_id'), call('\n'), call('Status: BUILDING (Elapsed time: 0.0 minutes)'), call('{0}Status: CONFIGURING (Elapsed time: 1.0 minutes)'.format( '\b' * 44)), call('{0}Status: ACTIVE (Elapsed time: 2.0 minutes)'.format( '\b' * 47)), ]) check_cluster_detail(print_single_table, print_table)
def test_list_noformat(sixprint, mock_client, nodes_response): mock_client._request.return_value = nodes_response main() sixprint.assert_has_calls( [call('node_id,NODENAME,node_group,ACTIVE,1.2.3.4,5.6.7.8')])
def test_delete(mock_client): main() args = mock_client._request.call_args[0] assert args == ('DELETE', 'scripts/script_id')
def test_delete(print_table, print_single_table, mock_client, stack_response): mock_client._request.return_value = stack_response main() args = mock_client._request.call_args[0] assert args == ('DELETE', 'stacks/stack_id')
def test_get(print_table, print_single_table, mock_client, cluster_response): mock_client._request.return_value = cluster_response main() check_cluster_detail(print_single_table, print_table)