# Copyright 2014 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import os import tempfile import unittest import zipfile from profile_chrome import profiler from profile_chrome import ui class FakeController(object): def __init__(self, contents='fake-contents'): self.contents = contents self.interval = None self.stopped = False self.filename = None def StartTracing(self, interval): self.interval = interval def StopTracing(self): self.stopped = True def PullTrace(self): with tempfile.NamedTemporaryFile(delete=False) as f: self.filename = f.name f.write(self.contents) return f.name def __repr__(self): return 'faketrace' class ProfilerTest(unittest.TestCase): def setUp(self): ui.EnableTestMode() def testCaptureBasicProfile(self): controller = FakeController() interval = 1.5 result = profiler.CaptureProfile([controller], interval) try: self.assertEquals(controller.interval, interval) self.assertTrue(controller.stopped) self.assertTrue(os.path.exists(result)) self.assertFalse(os.path.exists(controller.filename)) self.assertTrue(result.endswith('.html')) finally: os.remove(result) def testCaptureJsonProfile(self): controller = FakeController() result = profiler.CaptureProfile([controller], 1, write_json=True) try: self.assertFalse(result.endswith('.html')) with open(result) as f: self.assertEquals(f.read(), controller.contents) finally: os.remove(result) def testCaptureMultipleProfiles(self): controllers = [FakeController('c1'), FakeController('c2')] result = profiler.CaptureProfile(controllers, 1, write_json=True) try: self.assertTrue(result.endswith('.zip')) self.assertTrue(zipfile.is_zipfile(result)) with zipfile.ZipFile(result) as f: self.assertEquals( f.namelist(), [controllers[0].filename[1:], controllers[1].filename[1:]]) finally: os.remove(result)