# 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_lib.cli import output_parser from tempest_lib import exceptions from tempest_lib.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)