From ecf608ed0d843e2d79c1369802571ffcaa872594 Mon Sep 17 00:00:00 2001 From: Masayuki Igawa Date: Tue, 25 Mar 2014 11:49:58 +0900 Subject: [PATCH] Add unit tests for cli.output_parser This commit adds unit tests for cli.output_parser. Partially implements bp unit-tests Change-Id: Ib5d2df61b791e9d76e0897609eb753e7440558ae --- __init__.py | 0 test_output_parser.py | 177 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 177 insertions(+) create mode 100644 __init__.py create mode 100644 test_output_parser.py diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/test_output_parser.py b/test_output_parser.py new file mode 100644 index 0000000..7ad270c --- /dev/null +++ b/test_output_parser.py @@ -0,0 +1,177 @@ +# 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)