Files
OpenCellular/extra/usb_power/stats_manager_unittest.py
Mengqi Guo aaf0169b11 sweetberry: print MEAN in json format
This CL adds the flag --save_stats_json which prints the MEAN
of sweetberry readings into json format. Corresponding unit
test has been added too. Printing just the MEAN in json format
makes it easier to read it back in power_telemetry_logger,
which uploads the stats to the dashboard.

This CL is part of the effort to start sweetberry measurements
while running power autotests.

BRANCH=None
BUG=b:68956240
TEST=./powerlog.py -b xxx.board -c xxx.scenario \
--save_stats_json [directory to store it]
python -m  unittest -v stats_manager_unittest

Change-Id: I8274bcac21175f6c53184ced79b6ffe5e7d7a72a
Signed-off-by: Mengqi Guo <mqg@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/807636
Reviewed-by: Nick Sanders <nsanders@chromium.org>
Reviewed-by: Puthikorn Voravootivat <puthik@chromium.org>
Reviewed-by: Todd Broch <tbroch@chromium.org>
2017-12-05 22:43:45 -08:00

98 lines
3.3 KiB
Python

# Copyright 2017 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.
"""Unit tests for StatsManager."""
from __future__ import print_function
import json
import os
import shutil
import tempfile
import unittest
from stats_manager import StatsManager
class TestStatsManager(unittest.TestCase):
"""Test to verify StatsManager methods work as expected.
StatsManager should collect raw data, calculate their statistics, and save
them in expected format.
"""
def setUp(self):
"""Set up data and create a temporary directory to save data and stats."""
self.tempdir = tempfile.mkdtemp()
self.data = StatsManager()
self.data.AddValue('A', 99999.5)
self.data.AddValue('A', 100000.5)
self.data.AddValue('A', 'ERROR')
self.data.AddValue('B', 1.5)
self.data.AddValue('B', 2.5)
self.data.AddValue('B', 3.5)
self.data.CalculateStats()
def tearDown(self):
"""Delete the temporary directory and its content."""
shutil.rmtree(self.tempdir)
def test_GetRawData(self):
raw_data = self.data.GetRawData()
self.assertListEqual([99999.5, 100000.5], raw_data['A'])
self.assertListEqual([1.5, 2.5, 3.5], raw_data['B'])
def test_GetSummary(self):
summary = self.data.GetSummary()
self.assertEqual(2, summary['A']['count'])
self.assertAlmostEqual(100000.5, summary['A']['max'])
self.assertAlmostEqual(99999.5, summary['A']['min'])
self.assertAlmostEqual(0.5, summary['A']['stddev'])
self.assertAlmostEqual(100000.0, summary['A']['mean'])
self.assertEqual(3, summary['B']['count'])
self.assertAlmostEqual(3.5, summary['B']['max'])
self.assertAlmostEqual(1.5, summary['B']['min'])
self.assertAlmostEqual(0.81649658092773, summary['B']['stddev'])
self.assertAlmostEqual(2.5, summary['B']['mean'])
def test_SaveRawData(self):
dirname = 'unittest_raw_data'
self.data.SaveRawData(self.tempdir, dirname)
dirname = os.path.join(self.tempdir, dirname)
fileA = os.path.join(dirname, 'A.txt')
fileB = os.path.join(dirname, 'B.txt')
with open(fileA, 'r') as fA:
self.assertEqual('99999.50', fA.readline().strip())
self.assertEqual('100000.50', fA.readline().strip())
with open(fileB, 'r') as fB:
self.assertEqual('1.50', fB.readline().strip())
self.assertEqual('2.50', fB.readline().strip())
self.assertEqual('3.50', fB.readline().strip())
def test_SaveSummary(self):
fname = 'unittest_summary.txt'
self.data.SaveSummary(self.tempdir, fname)
fname = os.path.join(self.tempdir, fname)
with open(fname, 'r') as f:
self.assertEqual(
'@@ NAME COUNT MEAN STDDEV MAX MIN\n',
f.readline())
self.assertEqual(
'@@ A 2 100000.00 0.50 100000.50 99999.50\n',
f.readline())
self.assertEqual(
'@@ B 3 2.50 0.82 3.50 1.50\n',
f.readline())
def test_SaveSummaryJSON(self):
fname = 'unittest_summary.json'
self.data.SaveSummaryJSON(self.tempdir, fname)
fname = os.path.join(self.tempdir, fname)
with open(fname, 'r') as f:
mean_json = json.load(f)
self.assertAlmostEqual(100000.0, mean_json['A'])
self.assertAlmostEqual(2.5, mean_json['B'])
if __name__ == '__main__':
unittest.main()