counter_unittest.py revision cef7893435aa41160dd1255c43cb8498279738cc
1784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi# Copyright 2014 The Chromium Authors. All rights reserved.
2784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi# Use of this source code is governed by a BSD-style license that can be
3784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi# found in the LICENSE file.
4784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi
5784df0c730f522dc4de83fa81c0f6fe211247673Dan Shiimport types
6784df0c730f522dc4de83fa81c0f6fe211247673Dan Shiimport unittest
7784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi
8784df0c730f522dc4de83fa81c0f6fe211247673Dan Shifrom telemetry.timeline import counter as counter_module
9784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi
10784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi
11784df0c730f522dc4de83fa81c0f6fe211247673Dan Shiclass FakeProcess(object):
12784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi  pass
13784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi
14784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi
15784df0c730f522dc4de83fa81c0f6fe211247673Dan Shiclass CounterIterEventsInThisContainerTest(unittest.TestCase):
16784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi
17784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi  def setUp(self):
18784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi    parent = FakeProcess()
19784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi    self.counter = counter_module.Counter(parent, 'cat', 'name')
20784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi
21784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi  def assertIsEmptyIterator(self, itr):
22784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi    self.assertIsInstance(itr, types.GeneratorType)
23784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi    self.assertRaises(StopIteration, itr.next)
24784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi
25784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi  def testEmptyTimestamps(self):
26b9144a457ac2be505eac18f61e75d68751b3cea0Dan Shi    self.assertIsEmptyIterator(self.counter.IterEventsInThisContainer(
27b9144a457ac2be505eac18f61e75d68751b3cea0Dan Shi        event_type_predicate=lambda x: True,
2856f1ba77e4b8b4c13d5bc72b0ebaeabda9f9d0bcDan Shi        event_predicate=lambda x: True))
29784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi
3056f1ba77e4b8b4c13d5bc72b0ebaeabda9f9d0bcDan Shi  def testEventTypeMismatch(self):
31784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi    self.counter.timestamps = [111, 222]
32784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi    self.assertIsEmptyIterator(self.counter.IterEventsInThisContainer(
33784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi        event_type_predicate=lambda x: False,
34784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi        event_predicate=lambda x: True))
35784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi
36784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi  def testNoEventMatch(self):
37784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi    self.counter.timestamps = [111, 222]
38784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi    self.assertIsEmptyIterator(self.counter.IterEventsInThisContainer(
39784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi        event_type_predicate=lambda x: True,
40784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi        event_predicate=lambda x: False))
41784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi
42784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi  def testAllMatch(self):
43784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi    self.counter.timestamps = [111, 222]
44784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi    self.counter.samples = [100, 200]
45784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi    events = self.counter.IterEventsInThisContainer(
46784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi        event_type_predicate=lambda x: True,
47784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi        event_predicate=lambda x: True)
48784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi    self.assertIsInstance(events, types.GeneratorType)
49784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi    eventlist = list(events)
50784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi    self.assertEqual([111, 222], [s.start for s in eventlist])
51784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi    self.assertEqual(['cat.name', 'cat.name'], [s.name for s in eventlist])
52784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi    self.assertEqual([100, 200], [s.value for s in eventlist])
53784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi
54784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi  def testPartialMatch(self):
5556f1ba77e4b8b4c13d5bc72b0ebaeabda9f9d0bcDan Shi    self.counter.timestamps = [111, 222]
5656f1ba77e4b8b4c13d5bc72b0ebaeabda9f9d0bcDan Shi    self.counter.samples = [100, 200]
5756f1ba77e4b8b4c13d5bc72b0ebaeabda9f9d0bcDan Shi    events = self.counter.IterEventsInThisContainer(
5856f1ba77e4b8b4c13d5bc72b0ebaeabda9f9d0bcDan Shi        event_type_predicate=lambda x: True,
5956f1ba77e4b8b4c13d5bc72b0ebaeabda9f9d0bcDan Shi        event_predicate=lambda x: x.start > 200)
6056f1ba77e4b8b4c13d5bc72b0ebaeabda9f9d0bcDan Shi    self.assertIsInstance(events, types.GeneratorType)
6156f1ba77e4b8b4c13d5bc72b0ebaeabda9f9d0bcDan Shi    eventlist = list(events)
62784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi    self.assertEqual([222], [s.start for s in eventlist])
63784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi    self.assertEqual(['cat.name'], [s.name for s in eventlist])
64784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi    self.assertEqual([200], [s.value for s in eventlist])
65784df0c730f522dc4de83fa81c0f6fe211247673Dan Shi