Upstream version 8.37.180.0
[platform/framework/web/crosswalk.git] / src / tools / android / adb_profile_chrome / profiler_unittest.py
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
5 import os
6 import tempfile
7 import unittest
8 import zipfile
9
10 from adb_profile_chrome import profiler
11 from adb_profile_chrome import ui
12
13
14 class FakeController(object):
15   def __init__(self, contents='fake-contents'):
16     self.contents = contents
17     self.interval = None
18     self.stopped = False
19     self.filename = None
20
21   def StartTracing(self, interval):
22     self.interval = interval
23
24   def StopTracing(self):
25     self.stopped = True
26
27   def PullTrace(self):
28     with tempfile.NamedTemporaryFile(delete=False) as f:
29       self.filename = f.name
30       f.write(self.contents)
31       return f.name
32
33   def __repr__(self):
34     return 'faketrace'
35
36
37 class ProfilerTest(unittest.TestCase):
38   def setUp(self):
39     ui.EnableTestMode()
40
41   def testCaptureBasicProfile(self):
42     controller = FakeController()
43     interval = 1.5
44     result = profiler.CaptureProfile([controller], interval)
45
46     try:
47       self.assertEquals(controller.interval, interval)
48       self.assertTrue(controller.stopped)
49       self.assertTrue(os.path.exists(result))
50       self.assertFalse(os.path.exists(controller.filename))
51       self.assertTrue(result.endswith('.html'))
52     finally:
53       os.remove(result)
54
55   def testCaptureJsonProfile(self):
56     controller = FakeController()
57     result = profiler.CaptureProfile([controller], 1, write_json=True)
58
59     try:
60       self.assertFalse(result.endswith('.html'))
61       with open(result) as f:
62         self.assertEquals(f.read(), controller.contents)
63     finally:
64       os.remove(result)
65
66   def testCaptureMultipleProfiles(self):
67     controllers = [FakeController('c1'), FakeController('c2')]
68     result = profiler.CaptureProfile(controllers, 1, write_json=True)
69
70     try:
71       self.assertTrue(result.endswith('.zip'))
72       self.assertTrue(zipfile.is_zipfile(result))
73       with zipfile.ZipFile(result) as f:
74         self.assertEquals(
75             f.namelist(),
76             [controllers[0].filename[1:], controllers[1].filename[1:]])
77     finally:
78       os.remove(result)