python-manilaclient/manilaclient/tests/unit/test_functional_utils.py
Igor Malinovskiy b44218141c Implement wrapper for ascii table parser from tempest_lib.cli
Implement wrapper for ascii table parser from tempest_lib.cli
to parse manila specific output from console client in
functional tests.

Partially implements bp functional-tests

Change-Id: Id22e8f89cad311c6dabbf1d4069e50d33ac658ce
2015-04-23 16:53:40 +03:00

226 lines
7.6 KiB
Python

# Copyright 2015 Mirantis Inc.
# All Rights Reserved.
#
# 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.
import ddt
from manilaclient.tests.functional import utils as func_utils
from manilaclient.tests.unit import utils
@ddt.ddt
class ShellTest(utils.TestCase):
OUTPUT_LINES_SIMPLE = """
+----+------+---------+
| ID | Name | Status |
+----+------+---------+
| 11 | foo | BUILD |
| 21 | bar | ERROR |
+----+------+---------+
"""
OUTPUT_LINES_ONE_MULTI_ROW = """
+----+------+---------+
| ID | Name | Status |
+----+------+---------+
| 11 | foo | BUILD |
| 21 | bar | ERROR |
| | | ERROR2 |
| 31 | bee | None |
+----+------+---------+
"""
OUTPUT_LINES_COMPLICATED_MULTI_ROW = """
+----+------+---------+
| ID | Name | Status |
+----+------+---------+
| 11 | foo | BUILD |
| 21 | bar | ERROR |
| | | ERROR2 |
| | | ERROR3 |
| 31 | bee | None |
| | bee2 | |
| | bee3 | |
| 41 | rand | None |
| | rend | None2 |
| | | |
+----+------+---------+
"""
OUTPUT_LINES_COMPLICATED_MULTI_ROW_WITH_SHIFTED_ID = """
+----+----+------+---------+
| ** | ID | Name | Status |
+----+----+------+---------+
| ** | 11 | foo | BUILD |
| | 21 | bar | ERROR |
| | | | ERROR2 |
| | | | ERROR3 |
| | | | |
| ** | 31 | bee | None |
| | | bee2 | |
| | | | |
+----+----+------+---------+
"""
OUTPUT_LINES_NESTED_TABLE = """
+----+----+------+--------------+
| ** | ID | Name | Status |
+----+----+------+--------------+
| ** | 11 | foo | +----+----+ |
| | | | | aa | bb | |
| | | | +----+----+ |
| | | | +----+----+ |
| | 21 | bar | ERROR |
| | | | ERROR2 |
| | | | ERROR3 |
+----+----+------+--------------+
"""
OUTPUT_LINES_NESTED_TABLE_MULTI_LINE = """
+----+----+------+--------------+
| ** | ID | Name | Status |
+----+----+------+--------------+
| ** | 11 | foo | +----+----+ |
| | | | | id | bb | |
| | | | +----+----+ |
| | | | | 01 | a1 | |
| | | | | | a2 | |
| | | | +----+----+ |
| | 21 | bar | ERROR |
| | | | ERROR2 |
| | | | ERROR3 |
+----+----+------+--------------+
"""
OUTPUT_LINES_DETAILS = """
+----------+--------+
| Property | Value |
+----------+--------+
| foo | BUILD |
| bar | ERROR |
| | ERROR2 |
| | ERROR3 |
| bee | None |
+----------+--------+
"""
@ddt.data({'input': OUTPUT_LINES_SIMPLE,
'valid_values': [
['11', 'foo', 'BUILD'],
['21', 'bar', 'ERROR']
]},
{'input': OUTPUT_LINES_ONE_MULTI_ROW,
'valid_values': [
['11', 'foo', 'BUILD'],
['21', 'bar', ['ERROR', 'ERROR2']],
['31', 'bee', 'None'],
]},
{'input': OUTPUT_LINES_COMPLICATED_MULTI_ROW,
'valid_values': [
['11', 'foo', 'BUILD'],
['21', 'bar', ['ERROR', 'ERROR2', 'ERROR3']],
['31', ['bee', 'bee2', 'bee3'], 'None'],
['41', ['rand', 'rend'], ['None', 'None2']],
['', '', '']
]})
@ddt.unpack
def test_multi_line_row_table(self, input, valid_values):
actual_result = func_utils.multi_line_row_table(input)
self.assertEqual(['ID', 'Name', 'Status'], actual_result['headers'])
self.assertEqual(valid_values, actual_result['values'])
def test_multi_line_row_table_shifted_id_column(self):
input = self.OUTPUT_LINES_COMPLICATED_MULTI_ROW_WITH_SHIFTED_ID
valid_values = [
['**', '11', 'foo', 'BUILD'],
['', '21', 'bar', ['ERROR', 'ERROR2', 'ERROR3']],
['', '', '', ''],
['**', '31', ['bee', 'bee2'], 'None'],
['', '', '', '']
]
actual_result = func_utils.multi_line_row_table(
input, group_by_column_index=1)
self.assertEqual(['**', 'ID', 'Name', 'Status'],
actual_result['headers'])
self.assertEqual(valid_values, actual_result['values'])
@ddt.data({'input': OUTPUT_LINES_NESTED_TABLE,
'valid_nested': {
'headers': ['aa', 'bb'],
'values': []
}},
{'input': OUTPUT_LINES_NESTED_TABLE_MULTI_LINE,
'valid_nested': {
'headers': ['id', 'bb'],
'values': [['01', ['a1', 'a2']]]
}},)
@ddt.unpack
def test_nested_tables(self, input, valid_nested):
actual_result = func_utils.multi_line_row_table(
input, group_by_column_index=1)
self.assertEqual(['**', 'ID', 'Name', 'Status'],
actual_result['headers'])
self.assertEqual(2, len(actual_result['values']))
self.assertEqual(valid_nested, actual_result['values'][0][3])
@ddt.data({'input': OUTPUT_LINES_DETAILS,
'valid_values': [
['foo', 'BUILD'],
['bar', ['ERROR', 'ERROR2', 'ERROR3']],
['bee', 'None'],
]})
@ddt.unpack
def test_details(self, input, valid_values):
actual_result = func_utils.multi_line_row_table(input)
self.assertEqual(['Property', 'Value'], actual_result['headers'])
self.assertEqual(valid_values, actual_result['values'])
@ddt.data({'input_data': OUTPUT_LINES_DETAILS,
'output_data': [
{'Property': 'foo', 'Value': 'BUILD'},
{'Property': 'bar', 'Value': ['ERROR', 'ERROR2', 'ERROR3']},
{'Property': 'bee', 'Value': 'None'}]},
{'input_data': OUTPUT_LINES_SIMPLE,
'output_data': [
{'ID': '11', 'Name': 'foo', 'Status': 'BUILD'},
{'ID': '21', 'Name': 'bar', 'Status': 'ERROR'},
]},
{'input_data': OUTPUT_LINES_ONE_MULTI_ROW,
'output_data': [
{'ID': '11', 'Name': 'foo', 'Status': 'BUILD'},
{'ID': '21', 'Name': 'bar', 'Status': ['ERROR', 'ERROR2']},
{'ID': '31', 'Name': 'bee', 'Status': 'None'},
]},
{'input_data': OUTPUT_LINES_COMPLICATED_MULTI_ROW,
'output_data': [
{'ID': '11', 'Name': 'foo', 'Status': 'BUILD'},
{'ID': '21', 'Name': 'bar',
'Status': ['ERROR', 'ERROR2', 'ERROR3']},
{'ID': '31', 'Name': ['bee', 'bee2', 'bee3'],
'Status': 'None'},
{'ID': '41', 'Name': ['rand', 'rend'],
'Status': ['None', 'None2']},
{'ID': '', 'Name': '', 'Status': ''},
]})
@ddt.unpack
def test_listing(self, input_data, output_data):
actual_result = func_utils.listing(input_data)
self.assertEqual(output_data, actual_result)