178 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			178 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# 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)
 |