blob: 478207330221f6f617134a720125374d64d5eb9e [file] [log] [blame]
Chris Craikad0b04f2015-07-21 13:44:22 -07001#!/usr/bin/env python
2
3# Copyright (c) 2015 The Chromium Authors. All rights reserved.
4# Use of this source code is governed by a BSD-style license that can be
5# found in the LICENSE file.
6import contextlib
7import unittest
8
9import agents.atrace_agent as atrace_agent
10import systrace
11import util
12
13DEVICE_SERIAL = 'AG8404EC0444AGC'
14LIST_TMP_ARGS = ['ls', '/data/local/tmp']
15ATRACE_ARGS = ['atrace', '-z', '-t', '10']
16CATEGORIES = ['sched', 'gfx', 'view', 'wm']
17ADB_SHELL = ['adb', '-s', DEVICE_SERIAL, 'shell']
18
19SYSTRACE_CMD = ['./systrace.py', '--time', '10', '-o', 'out.html', '-e',
20 DEVICE_SERIAL] + CATEGORIES
21TRACE_CMD = (ADB_SHELL + ATRACE_ARGS + CATEGORIES +
22 [';', 'ps', '-t'])
23
24SYSTRACE_LIST_CATEGORIES_CMD = ['./systrace.py', '-e', DEVICE_SERIAL, '-l']
25TRACE_LIST_CATEGORIES_CMD = (ADB_SHELL + ['atrace', '--list_categories'])
26
27LEGACY_ATRACE_ARGS = ['atrace', '-z', '-t', '10', '-s']
28LEGACY_TRACE_CMD = (ADB_SHELL + LEGACY_ATRACE_ARGS +
29 [';', 'ps', '-t'])
30
31TEST_DIR = 'test_data/'
32ATRACE_DATA = TEST_DIR + 'atrace_data'
33ATRACE_DATA_RAW = TEST_DIR + 'atrace_data_raw'
34ATRACE_DATA_STRIPPED = TEST_DIR + 'atrace_data_stripped'
35ATRACE_DATA_THREAD_FIXED = TEST_DIR + 'atrace_data_thread_fixed'
36ATRACE_DATA_WITH_THREAD_LIST = TEST_DIR + 'atrace_data_with_thread_list'
37ATRACE_THREAD_NAMES = TEST_DIR + 'atrace_thread_names'
38
39
40class UtilUnitTest(unittest.TestCase):
41 def test_construct_adb_shell_command(self):
42 command = util.construct_adb_shell_command(LIST_TMP_ARGS, None)
43 self.assertEqual(' '.join(command), 'adb shell ls /data/local/tmp')
44
45 command = util.construct_adb_shell_command(LIST_TMP_ARGS, DEVICE_SERIAL)
46 self.assertEqual(' '.join(command),
47 'adb -s AG8404EC0444AGC shell ls /data/local/tmp')
48
49 command = util.construct_adb_shell_command(ATRACE_ARGS, DEVICE_SERIAL)
50 self.assertEqual(' '.join(command),
51 'adb -s AG8404EC0444AGC shell atrace -z -t 10')
52
53
54class AtraceAgentUnitTest(unittest.TestCase):
55 def test_construct_trace_command(self):
56 options, categories = systrace.parse_options(SYSTRACE_CMD)
57 agent = atrace_agent.AtraceAgent(options, categories)
58 tracer_args = agent._construct_trace_command()
59 self.assertEqual(' '.join(TRACE_CMD), ' '.join(tracer_args))
60 self.assertEqual(True, agent.expect_trace())
61
62 def test_extract_thread_list(self):
63 with contextlib.nested(open(ATRACE_DATA_WITH_THREAD_LIST, 'r'),
64 open(ATRACE_DATA_RAW, 'r'),
65 open(ATRACE_THREAD_NAMES, 'r')) as (f1, f2, f3):
66 atrace_data_with_thread_list = f1.read()
67 atrace_data_raw = f2.read()
68 atrace_thread_names = f3.read()
69
70 trace_data, thread_names = atrace_agent.extract_thread_list(
71 atrace_data_with_thread_list)
72 self.assertEqual(atrace_data_raw, trace_data)
73 self.assertEqual(atrace_thread_names, str(thread_names))
74
75 def test_strip_and_decompress_trace(self):
76 with contextlib.nested(open(ATRACE_DATA_RAW, 'r'),
77 open(ATRACE_DATA_STRIPPED, 'r')) as (f1, f2):
78 atrace_data_raw = f1.read()
79 atrace_data_stripped = f2.read()
80
81 trace_data = atrace_agent.strip_and_decompress_trace(atrace_data_raw)
82 self.assertEqual(atrace_data_stripped, trace_data)
83
84 def test_fix_thread_names(self):
85 with contextlib.nested(
86 open(ATRACE_DATA_STRIPPED, 'r'),
87 open(ATRACE_THREAD_NAMES, 'r'),
88 open(ATRACE_DATA_THREAD_FIXED, 'r')) as (f1, f2, f3):
89 atrace_data_stripped = f1.read()
90 atrace_thread_names = f2.read()
91 atrace_data_thread_fixed = f3.read()
92 thread_names = eval(atrace_thread_names)
93
94 trace_data = atrace_agent.fix_thread_names(
95 atrace_data_stripped, thread_names)
96 self.assertEqual(atrace_data_thread_fixed, trace_data)
97
98 def test_preprocess_trace_data(self):
99 with contextlib.nested(open(ATRACE_DATA_WITH_THREAD_LIST, 'r'),
100 open(ATRACE_DATA, 'r')) as (f1, f2):
101 atrace_data_with_thread_list = f1.read()
102 atrace_data = f2.read()
103
104 options, categories = systrace.parse_options([])
105 agent = atrace_agent.AtraceAgent(options, categories)
106 trace_data = agent._preprocess_trace_data(atrace_data_with_thread_list)
107 self.assertEqual(atrace_data, trace_data)
108
109 def test_list_categories(self):
110 options, categories = systrace.parse_options(SYSTRACE_LIST_CATEGORIES_CMD)
111 agent = atrace_agent.AtraceAgent(options, categories)
112 tracer_args = agent._construct_trace_command()
113 self.assertEqual(' '.join(TRACE_LIST_CATEGORIES_CMD), ' '.join(tracer_args))
114 self.assertEqual(False, agent.expect_trace())
115
116class AtraceLegacyAgentUnitTest(unittest.TestCase):
117 def test_construct_trace_command(self):
118 options, categories = systrace.parse_options(SYSTRACE_CMD)
119 agent = atrace_agent.AtraceLegacyAgent(options, categories)
120 tracer_args = agent._construct_trace_command()
121 self.assertEqual(' '.join(LEGACY_TRACE_CMD), ' '.join(tracer_args))
122 self.assertEqual(True, agent.expect_trace())
123
124if __name__ == '__main__':
125 unittest.main()