blob: cccf0bfc7fc4a1660f01e3f4b9f15495d5ba2b46 [file] [log] [blame]
#!/usr/bin/python
# Copyright 2018 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import copy
import csv
import mock
import os
import tempfile
import unittest
import graphyte_common # pylint: disable=unused-import
from graphyte import result_writer
from graphyte import testplan
class ResultWriterTest(unittest.TestCase):
def setUp(self):
self.temp_csv = tempfile.mktemp(suffix='.csv', prefix='testplan_')
self.writer = result_writer.ResultWriter(self.temp_csv)
def tearDown(self):
if os.path.exists(self.temp_csv):
os.remove(self.temp_csv)
def _CompareResultList(self, correct_data):
"""Compare the output CSV file and the correct data.
Because the order of the data is not guaranteed, we search each data from
the list and remove it. If all data are matched, the list should be empty at
the end.
Args:
correct_data: the list of the data.
Raise:
ValueError if any data is not matched.
"""
del self.writer
with open(self.temp_csv) as f:
reader = csv.DictReader(f)
for data in reader:
try:
correct_data.remove(data)
except ValueError:
raise ValueError('%s is not in correct data' % data)
if correct_data:
raise ValueError('%r are missing' % correct_data)
def testSingleAntennaResult(self):
test_case = mock.create_autospec(spec=testplan.TestCase)
test_case.name = 'FAKE_TEST_CASE'
test_case.args = {'power_level': 10}
test_case.result_limit = {'avg_power': (9, 11)}
test_case.Copy.return_value = copy.copy(test_case)
result = {'avg_power': 10.1}
correct_data = [
{'test_item': 'FAKE_TEST_CASE',
'power_level': '10',
'result_name': 'avg_power',
'result': '10.1',
'lower_bound': '9',
'upper_bound': '11',
'pass_or_fail': 'PASS'}]
self.writer.WriteResult(test_case, result)
self._CompareResultList(correct_data)
def testSingleAntennaMultiResult(self):
test_case = mock.create_autospec(spec=testplan.TestCase)
test_case.name = 'FAKE_TEST_CASE'
test_case.args = {'power_level': 10}
test_case.result_limit = {
'avg_power': (9, 11),
'evm': (None, -25)}
test_case.Copy.return_value = copy.copy(test_case)
result = {
'avg_power': 10.1,
'evm': 0}
correct_data = [
{'test_item': 'FAKE_TEST_CASE',
'power_level': '10',
'result_name': 'avg_power',
'result': '10.1',
'lower_bound': '9',
'upper_bound': '11',
'pass_or_fail': 'PASS'},
{'test_item': 'FAKE_TEST_CASE',
'power_level': '10',
'result_name': 'evm',
'result': '0',
'lower_bound': 'None',
'upper_bound': '-25',
'pass_or_fail': 'FAIL'},
]
self.writer.WriteResult(test_case, result)
self._CompareResultList(correct_data)
def testMultiAntennaSingleResult(self):
test_case = mock.create_autospec(spec=testplan.TestCase)
test_case.name = 'FAKE_TEST_CASE ANTENNA-01'
test_case.args = {
'power_level': 10,
'chain_mask': 3} # 3 => b'0011, which means antenna 0 and 1 enabled.
test_case.result_limit = {'avg_power': (9, 11)}
test_case.Copy.return_value = copy.copy(test_case)
result = {'avg_power': 10.1}
correct_data = [
{'test_item': 'FAKE_TEST_CASE ANTENNA-01-0',
'power_level': '10',
'result_name': 'avg_power',
'result': '10.1',
'lower_bound': '9',
'upper_bound': '11',
'pass_or_fail': 'PASS'},
{'test_item': 'FAKE_TEST_CASE ANTENNA-01-1',
'power_level': '10',
'result_name': 'avg_power',
'result': '10.1',
'lower_bound': '9',
'upper_bound': '11',
'pass_or_fail': 'PASS'},
]
self.writer.WriteResult(test_case, result)
self._CompareResultList(correct_data)
def testMultiAntennaResult(self):
test_case = mock.create_autospec(spec=testplan.TestCase)
test_case.name = 'FAKE_TEST_CASE ANTENNA-01'
test_case.args = {
'power_level': 10,
'chain_mask': 3} # 3 => b'0011, which means antenna 0 and 1 enabled.
test_case.result_limit = {'avg_power': (9, 11)}
test_case.Copy.return_value = copy.copy(test_case)
result = {'avg_power': {0: 10.1, 1: 9.9}}
correct_data = [
{'test_item': 'FAKE_TEST_CASE ANTENNA-01-0',
'power_level': '10',
'result_name': 'avg_power',
'result': '10.1',
'lower_bound': '9',
'upper_bound': '11',
'pass_or_fail': 'PASS'},
{'test_item': 'FAKE_TEST_CASE ANTENNA-01-1',
'power_level': '10',
'result_name': 'avg_power',
'result': '9.9',
'lower_bound': '9',
'upper_bound': '11',
'pass_or_fail': 'PASS'},
]
self.writer.WriteResult(test_case, result)
self._CompareResultList(correct_data)
def testSingleAntennaMissingResult(self):
test_case = mock.create_autospec(spec=testplan.TestCase)
test_case.name = 'FAKE_TEST_CASE'
test_case.args = {'power_level': 10}
test_case.result_limit = {'avg_power': (9, 11)}
test_case.Copy.return_value = copy.copy(test_case)
result = {}
correct_data = [
{'test_item': 'FAKE_TEST_CASE',
'power_level': '10',
'result_name': 'avg_power',
'result': 'None',
'lower_bound': '9',
'upper_bound': '11',
'pass_or_fail': 'FAIL'}]
self.writer.WriteResult(test_case, result)
self._CompareResultList(correct_data)
def testMultiAntennaMissingResult(self):
test_case = mock.create_autospec(spec=testplan.TestCase)
test_case.name = 'FAKE_TEST_CASE ANTENNA-01'
test_case.args = {
'power_level': 10,
'chain_mask': 3} # 3 => b'0011, which means antenna 0 and 1 enabled.
test_case.result_limit = {'avg_power': (9, 11)}
test_case.Copy.return_value = copy.copy(test_case)
result = {'avg_power': {0: 10.1}}
correct_data = [
{'test_item': 'FAKE_TEST_CASE ANTENNA-01-0',
'power_level': '10',
'result_name': 'avg_power',
'result': '10.1',
'lower_bound': '9',
'upper_bound': '11',
'pass_or_fail': 'PASS'},
{'test_item': 'FAKE_TEST_CASE ANTENNA-01-1',
'power_level': '10',
'result_name': 'avg_power',
'result': 'None',
'lower_bound': '9',
'upper_bound': '11',
'pass_or_fail': 'FAIL'},
]
self.writer.WriteResult(test_case, result)
self._CompareResultList(correct_data)
if __name__ == '__main__':
unittest.main()