146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)# Copyright 2014 The Chromium Authors. All rights reserved. 246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)# found in the LICENSE file. 446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)import json 646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)import tempfile 746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)import unittest 846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)from profile_chrome import trace_packager 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class TracePackagerTest(unittest.TestCase): 1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) def testJsonTraceMerging(self): 1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) t1 = {'traceEvents': [{'ts': 123, 'ph': 'b'}]} 1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) t2 = {'traceEvents': [], 'stackFrames': ['blah']} 1646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) # Both trace files will be merged to a third file and will get deleted in 1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) # the process, so there's no need for NamedTemporaryFile to do the 1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) # deletion. 2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) with tempfile.NamedTemporaryFile(delete=False) as f1, \ 2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) tempfile.NamedTemporaryFile(delete=False) as f2: 2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) f1.write(json.dumps(t1)) 2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) f2.write(json.dumps(t2)) 2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) f1.flush() 2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) f2.flush() 2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) with tempfile.NamedTemporaryFile() as output: 2846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) trace_packager.PackageTraces([f1.name, f2.name], 2946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) output.name, 3046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) compress=False, 3146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) write_json=True) 3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) with open(output.name) as output: 3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) output = json.load(output) 3446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) self.assertEquals(output['traceEvents'], t1['traceEvents']) 3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) self.assertEquals(output['stackFrames'], t2['stackFrames']) 36