1# Copyright 2014 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import unittest
6
7import mergetraces
8
9class GroupByProcessAndThreadIdTestBasic(unittest.TestCase):
10  def runTest(self):
11    # (sec, usec, 'pid:tid', function address).
12    input_trace = [
13        (100, 10, '2000:2001', 0x5),
14        (100, 11, '2000:2001', 0x3),
15        (100, 13, '2000:1999', 0x8),
16        (100, 14, '2000:2000', 0x7),
17        (120, 13, '2001:2003', 0x9),
18        (150, 12, '2001:2004', 0x6),
19        (180, 11, '2000:2000', 0x1),
20    ]
21
22    # Functions should be grouped by thread-id and PIDs should not be
23    # interleaved.
24    expected_trace = [
25        (100, 10, '2000:2001', 0x5),
26        (100, 11, '2000:2001', 0x3),
27        (100, 13, '2000:1999', 0x8),
28        (100, 14, '2000:2000', 0x7),
29        (180, 11, '2000:2000', 0x1),
30        (120, 13, '2001:2003', 0x9),
31        (150, 12, '2001:2004', 0x6),
32    ]
33
34    grouped_trace = mergetraces.GroupByProcessAndThreadId(input_trace)
35
36    self.assertEqual(grouped_trace, expected_trace)
37
38class GroupByProcessAndThreadIdFailsWithNonUniqueTIDs(unittest.TestCase):
39  def runTest(self):
40    # (sec, usec, 'pid:tid', function address).
41    input_trace = [
42        (100, 10, '1999:2001', 0x5),
43        (100, 10, '1988:2001', 0x5),
44    ]
45
46    try:
47      mergetraces.GroupByProcessAndThreadId(input_trace)
48    except Exception:
49      return
50
51    self.fail('Multiple processes should not have a same thread-ID.')
52