blob: 7ad270ce1c0cdcb745c679f451e19e369a9f45db [file] [log] [blame]
# Copyright 2014 NEC Corporation.
# 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.
from tempest.cli import output_parser
from tempest import exceptions
from tempest.tests import base
class TestOutputParser(base.TestCase):
OUTPUT_LINES = """
+----+------+---------+
| ID | Name | Status |
+----+------+---------+
| 11 | foo | BUILD |
| 21 | bar | ERROR |
| 31 | bee | None |
+----+------+---------+
"""
OUTPUT_LINES2 = """
+----+-------+---------+
| ID | Name2 | Status2 |
+----+-------+---------+
| 41 | aaa | SSSSS |
| 51 | bbb | TTTTT |
| 61 | ccc | AAAAA |
+----+-------+---------+
"""
EXPECTED_TABLE = {'headers': ['ID', 'Name', 'Status'],
'values': [['11', 'foo', 'BUILD'],
['21', 'bar', 'ERROR'],
['31', 'bee', 'None']]}
EXPECTED_TABLE2 = {'headers': ['ID', 'Name2', 'Status2'],
'values': [['41', 'aaa', 'SSSSS'],
['51', 'bbb', 'TTTTT'],
['61', 'ccc', 'AAAAA']]}
def test_table_with_normal_values(self):
actual = output_parser.table(self.OUTPUT_LINES)
self.assertIsInstance(actual, dict)
self.assertEqual(self.EXPECTED_TABLE, actual)
def test_table_with_list(self):
output_lines = self.OUTPUT_LINES.split('\n')
actual = output_parser.table(output_lines)
self.assertIsInstance(actual, dict)
self.assertEqual(self.EXPECTED_TABLE, actual)
def test_table_with_invalid_line(self):
output_lines = self.OUTPUT_LINES + "aaaa"
actual = output_parser.table(output_lines)
self.assertIsInstance(actual, dict)
self.assertEqual(self.EXPECTED_TABLE, actual)
def test_tables_with_normal_values(self):
output_lines = 'test' + self.OUTPUT_LINES +\
'test2' + self.OUTPUT_LINES2
expected = [{'headers': self.EXPECTED_TABLE['headers'],
'label': 'test',
'values': self.EXPECTED_TABLE['values']},
{'headers': self.EXPECTED_TABLE2['headers'],
'label': 'test2',
'values': self.EXPECTED_TABLE2['values']}]
actual = output_parser.tables(output_lines)
self.assertIsInstance(actual, list)
self.assertEqual(expected, actual)
def test_tables_with_invalid_values(self):
output_lines = 'test' + self.OUTPUT_LINES +\
'test2' + self.OUTPUT_LINES2 + '\n'
expected = [{'headers': self.EXPECTED_TABLE['headers'],
'label': 'test',
'values': self.EXPECTED_TABLE['values']},
{'headers': self.EXPECTED_TABLE2['headers'],
'label': 'test2',
'values': self.EXPECTED_TABLE2['values']}]
actual = output_parser.tables(output_lines)
self.assertIsInstance(actual, list)
self.assertEqual(expected, actual)
def test_tables_with_invalid_line(self):
output_lines = 'test' + self.OUTPUT_LINES +\
'test2' + self.OUTPUT_LINES2 +\
'+----+-------+---------+'
expected = [{'headers': self.EXPECTED_TABLE['headers'],
'label': 'test',
'values': self.EXPECTED_TABLE['values']},
{'headers': self.EXPECTED_TABLE2['headers'],
'label': 'test2',
'values': self.EXPECTED_TABLE2['values']}]
actual = output_parser.tables(output_lines)
self.assertIsInstance(actual, list)
self.assertEqual(expected, actual)
LISTING_OUTPUT = """
+----+
| ID |
+----+
| 11 |
| 21 |
| 31 |
+----+
"""
def test_listing(self):
expected = [{'ID': '11'}, {'ID': '21'}, {'ID': '31'}]
actual = output_parser.listing(self.LISTING_OUTPUT)
self.assertIsInstance(actual, list)
self.assertEqual(expected, actual)
def test_details_multiple_with_invalid_line(self):
self.assertRaises(exceptions.InvalidStructure,
output_parser.details_multiple,
self.OUTPUT_LINES)
DETAILS_LINES1 = """First Table
+----------+--------+
| Property | Value |
+----------+--------+
| foo | BUILD |
| bar | ERROR |
| bee | None |
+----------+--------+
"""
DETAILS_LINES2 = """Second Table
+----------+--------+
| Property | Value |
+----------+--------+
| aaa | VVVVV |
| bbb | WWWWW |
| ccc | XXXXX |
+----------+--------+
"""
def test_details_with_normal_line_label_false(self):
expected = {'foo': 'BUILD', 'bar': 'ERROR', 'bee': 'None'}
actual = output_parser.details(self.DETAILS_LINES1)
self.assertEqual(expected, actual)
def test_details_with_normal_line_label_true(self):
expected = {'__label': 'First Table',
'foo': 'BUILD', 'bar': 'ERROR', 'bee': 'None'}
actual = output_parser.details(self.DETAILS_LINES1, with_label=True)
self.assertEqual(expected, actual)
def test_details_multiple_with_normal_line_label_false(self):
expected = [{'foo': 'BUILD', 'bar': 'ERROR', 'bee': 'None'},
{'aaa': 'VVVVV', 'bbb': 'WWWWW', 'ccc': 'XXXXX'}]
actual = output_parser.details_multiple(self.DETAILS_LINES1 +
self.DETAILS_LINES2)
self.assertIsInstance(actual, list)
self.assertEqual(expected, actual)
def test_details_multiple_with_normal_line_label_true(self):
expected = [{'__label': 'First Table',
'foo': 'BUILD', 'bar': 'ERROR', 'bee': 'None'},
{'__label': 'Second Table',
'aaa': 'VVVVV', 'bbb': 'WWWWW', 'ccc': 'XXXXX'}]
actual = output_parser.details_multiple(self.DETAILS_LINES1 +
self.DETAILS_LINES2,
with_label=True)
self.assertIsInstance(actual, list)
self.assertEqual(expected, actual)