Home | History | Annotate | Download | only in trace_data
      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 datetime
      6 import exceptions
      7 import os
      8 import shutil
      9 import tempfile
     10 import unittest
     11 
     12 from tracing.trace_data import trace_data
     13 from tracing_build import html2trace
     14 
     15 
     16 class TraceDataTest(unittest.TestCase):
     17   def testSerialize(self):
     18     test_dir = tempfile.mkdtemp()
     19     trace_path = os.path.join(test_dir, 'test_trace.json')
     20     try:
     21       ri = trace_data.CreateTraceDataFromRawData({'traceEvents': [1, 2, 3]})
     22       ri.Serialize(trace_path)
     23       with open(trace_path) as f:
     24         json_traces = html2trace.ReadTracesFromHTMLFilePath(f)
     25       self.assertEqual(json_traces, [{'traceEvents': [1, 2, 3]}])
     26     finally:
     27       shutil.rmtree(test_dir)
     28 
     29   def testEmptyArrayValue(self):
     30     # We can import empty lists and empty string.
     31     d = trace_data.CreateTraceDataFromRawData([])
     32     self.assertFalse(d.HasTracesFor(trace_data.CHROME_TRACE_PART))
     33 
     34   def testInvalidTrace(self):
     35     with self.assertRaises(AssertionError):
     36       trace_data.CreateTraceDataFromRawData({'hello': 1})
     37 
     38   def testListForm(self):
     39     d = trace_data.CreateTraceDataFromRawData([{'ph': 'B'}])
     40     self.assertTrue(d.HasTracesFor(trace_data.CHROME_TRACE_PART))
     41     events = d.GetTracesFor(trace_data.CHROME_TRACE_PART)[0].get(
     42         'traceEvents', [])
     43     self.assertEquals(1, len(events))
     44 
     45   def testStringForm(self):
     46     d = trace_data.CreateTraceDataFromRawData('[{"ph": "B"}]')
     47     self.assertTrue(d.HasTracesFor(trace_data.CHROME_TRACE_PART))
     48     events = d.GetTracesFor(trace_data.CHROME_TRACE_PART)[0].get(
     49         'traceEvents', [])
     50     self.assertEquals(1, len(events))
     51 
     52 
     53 class TraceDataBuilderTest(unittest.TestCase):
     54   def testBasicChrome(self):
     55     builder = trace_data.TraceDataBuilder()
     56     builder.AddTraceFor(trace_data.CHROME_TRACE_PART,
     57                         {'traceEvents': [1, 2, 3]})
     58     builder.AddTraceFor(trace_data.TAB_ID_PART, ['tab-7'])
     59     builder.AddTraceFor(trace_data.BATTOR_TRACE_PART, 'battor data here')
     60 
     61     d = builder.AsData()
     62     self.assertTrue(d.HasTracesFor(trace_data.CHROME_TRACE_PART))
     63     self.assertTrue(d.HasTracesFor(trace_data.TAB_ID_PART))
     64     self.assertTrue(d.HasTracesFor(trace_data.BATTOR_TRACE_PART))
     65 
     66     self.assertRaises(Exception, builder.AsData)
     67 
     68   def testSetTraceFor(self):
     69     telemetry_trace = {
     70         'traceEvents': [1, 2, 3],
     71         'metadata': {
     72             'field1': 'value1'
     73         }
     74     }
     75 
     76     builder = trace_data.TraceDataBuilder()
     77     builder.AddTraceFor(trace_data.TELEMETRY_PART, telemetry_trace)
     78     d = builder.AsData()
     79 
     80     self.assertEqual(d.GetTracesFor(trace_data.TELEMETRY_PART),
     81                      [telemetry_trace])
     82 
     83   def testSetTraceForRaisesWithInvalidPart(self):
     84     builder = trace_data.TraceDataBuilder()
     85 
     86     self.assertRaises(exceptions.AssertionError,
     87                       lambda: builder.AddTraceFor('not_a_trace_part', {}))
     88 
     89   def testSetTraceForRaisesWithInvalidTrace(self):
     90     builder = trace_data.TraceDataBuilder()
     91 
     92     self.assertRaises(
     93         exceptions.AssertionError,
     94         lambda: builder.AddTraceFor(trace_data.TELEMETRY_PART,
     95                                     datetime.time.min))
     96 
     97   def testSetTraceForRaisesAfterAsData(self):
     98     builder = trace_data.TraceDataBuilder()
     99     builder.AsData()
    100 
    101     self.assertRaises(
    102         exceptions.Exception,
    103         lambda: builder.AddTraceFor(trace_data.TELEMETRY_PART, {}))
    104