summaryrefslogtreecommitdiff
path: root/systrace/catapult/tracing/tracing/trace_data/trace_data_unittest.py
diff options
context:
space:
mode:
Diffstat (limited to 'systrace/catapult/tracing/tracing/trace_data/trace_data_unittest.py')
-rw-r--r--systrace/catapult/tracing/tracing/trace_data/trace_data_unittest.py181
1 files changed, 85 insertions, 96 deletions
diff --git a/systrace/catapult/tracing/tracing/trace_data/trace_data_unittest.py b/systrace/catapult/tracing/tracing/trace_data/trace_data_unittest.py
index fdc48e2..b065b4f 100644
--- a/systrace/catapult/tracing/tracing/trace_data/trace_data_unittest.py
+++ b/systrace/catapult/tracing/tracing/trace_data/trace_data_unittest.py
@@ -2,113 +2,102 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-import base64
-import json
+import datetime
+import exceptions
import os
+import shutil
import tempfile
import unittest
-from py_utils import tempfile_ext
from tracing.trace_data import trace_data
+from tracing_build import html2trace
class TraceDataTest(unittest.TestCase):
- def testHasTracesForChrome(self):
- d = trace_data.CreateFromRawChromeEvents([{'ph': 'B'}])
+ def testSerialize(self):
+ test_dir = tempfile.mkdtemp()
+ trace_path = os.path.join(test_dir, 'test_trace.json')
+ try:
+ ri = trace_data.CreateTraceDataFromRawData({'traceEvents': [1, 2, 3]})
+ ri.Serialize(trace_path)
+ with open(trace_path) as f:
+ json_traces = html2trace.ReadTracesFromHTMLFilePath(f)
+ self.assertEqual(json_traces, [{'traceEvents': [1, 2, 3]}])
+ finally:
+ shutil.rmtree(test_dir)
+
+ def testEmptyArrayValue(self):
+ # We can import empty lists and empty string.
+ d = trace_data.CreateTraceDataFromRawData([])
+ self.assertFalse(d.HasTracesFor(trace_data.CHROME_TRACE_PART))
+
+ def testInvalidTrace(self):
+ with self.assertRaises(AssertionError):
+ trace_data.CreateTraceDataFromRawData({'hello': 1})
+
+ def testListForm(self):
+ d = trace_data.CreateTraceDataFromRawData([{'ph': 'B'}])
self.assertTrue(d.HasTracesFor(trace_data.CHROME_TRACE_PART))
+ events = d.GetTracesFor(trace_data.CHROME_TRACE_PART)[0].get(
+ 'traceEvents', [])
+ self.assertEquals(1, len(events))
- def testHasNotTracesForCpu(self):
- d = trace_data.CreateFromRawChromeEvents([{'ph': 'B'}])
- self.assertFalse(d.HasTracesFor(trace_data.CPU_TRACE_DATA))
+ def testStringForm(self):
+ d = trace_data.CreateTraceDataFromRawData('[{"ph": "B"}]')
+ self.assertTrue(d.HasTracesFor(trace_data.CHROME_TRACE_PART))
+ events = d.GetTracesFor(trace_data.CHROME_TRACE_PART)[0].get(
+ 'traceEvents', [])
+ self.assertEquals(1, len(events))
+
+
+class TraceDataBuilderTest(unittest.TestCase):
+ def testBasicChrome(self):
+ builder = trace_data.TraceDataBuilder()
+ builder.AddTraceFor(trace_data.CHROME_TRACE_PART,
+ {'traceEvents': [1, 2, 3]})
+ builder.AddTraceFor(trace_data.TAB_ID_PART, ['tab-7'])
+ builder.AddTraceFor(trace_data.BATTOR_TRACE_PART, 'battor data here')
+
+ d = builder.AsData()
+ self.assertTrue(d.HasTracesFor(trace_data.CHROME_TRACE_PART))
+ self.assertTrue(d.HasTracesFor(trace_data.TAB_ID_PART))
+ self.assertTrue(d.HasTracesFor(trace_data.BATTOR_TRACE_PART))
- def testGetTracesForChrome(self):
- d = trace_data.CreateFromRawChromeEvents([{'ph': 'B'}])
- ts = d.GetTracesFor(trace_data.CHROME_TRACE_PART)
- self.assertEqual(len(ts), 1)
- self.assertEqual(ts[0], {'traceEvents': [{'ph': 'B'}]})
+ self.assertRaises(Exception, builder.AsData)
- def testGetNoTracesForCpu(self):
- d = trace_data.CreateFromRawChromeEvents([{'ph': 'B'}])
- ts = d.GetTracesFor(trace_data.CPU_TRACE_DATA)
- self.assertEqual(ts, [])
+ def testSetTraceFor(self):
+ telemetry_trace = {
+ 'traceEvents': [1, 2, 3],
+ 'metadata': {
+ 'field1': 'value1'
+ }
+ }
+ builder = trace_data.TraceDataBuilder()
+ builder.AddTraceFor(trace_data.TELEMETRY_PART, telemetry_trace)
+ d = builder.AsData()
-class TraceDataBuilderTest(unittest.TestCase):
- def testAddTraceDataAndSerialize(self):
- with tempfile_ext.TemporaryFileName() as trace_path:
- with trace_data.TraceDataBuilder() as builder:
- builder.AddTraceFor(trace_data.CHROME_TRACE_PART,
- {'traceEvents': [1, 2, 3]})
- builder.Serialize(trace_path)
- self.assertTrue(os.path.exists(trace_path))
- self.assertGreater(os.stat(trace_path).st_size, 0) # File not empty.
-
- def testAddTraceForRaisesWithInvalidPart(self):
- with trace_data.TraceDataBuilder() as builder:
- with self.assertRaises(TypeError):
- builder.AddTraceFor('not_a_trace_part', {})
-
- def testAddTraceWithUnstructuredData(self):
- with trace_data.TraceDataBuilder() as builder:
- builder.AddTraceFor(trace_data.TELEMETRY_PART, 'unstructured trace',
- allow_unstructured=True)
-
- def testAddTraceRaisesWithImplicitUnstructuredData(self):
- with trace_data.TraceDataBuilder() as builder:
- with self.assertRaises(ValueError):
- builder.AddTraceFor(trace_data.TELEMETRY_PART, 'unstructured trace')
-
- def testAddTraceFileFor(self):
- original_data = {'msg': 'The answer is 42'}
- with tempfile.NamedTemporaryFile(delete=False) as source:
- json.dump(original_data, source)
- with trace_data.TraceDataBuilder() as builder:
- builder.AddTraceFileFor(trace_data.CHROME_TRACE_PART, source.name)
- self.assertFalse(os.path.exists(source.name))
- out_data = builder.AsData().GetTraceFor(trace_data.CHROME_TRACE_PART)
-
- self.assertEqual(original_data, out_data)
-
- def testOpenTraceHandleFor(self):
- original_data = {'msg': 'The answer is 42'}
- with trace_data.TraceDataBuilder() as builder:
- with builder.OpenTraceHandleFor(trace_data.CHROME_TRACE_PART) as handle:
- handle.write(json.dumps(original_data))
- out_data = builder.AsData().GetTraceFor(trace_data.CHROME_TRACE_PART)
-
- # Trace handle should be cleaned up.
- self.assertFalse(os.path.exists(handle.name))
- self.assertEqual(original_data, out_data)
-
- def testOpenTraceHandleForCompressedData(self):
- original_data = {'msg': 'The answer is 42'}
- # gzip.compress() does not work in python 2, so hardcode the encoded data.
- compressed_data = base64.b64decode(
- 'H4sIAIDMblwAA6tWyi1OV7JSUArJSFVIzCsuTy1SyCxWMDFSquUCAA4QMtscAAAA')
- with trace_data.TraceDataBuilder() as builder:
- with builder.OpenTraceHandleFor(
- trace_data.CHROME_TRACE_PART, compressed=True) as handle:
- handle.write(compressed_data)
- out_data = builder.AsData().GetTraceFor(trace_data.CHROME_TRACE_PART)
-
- # Trace handle should be cleaned up.
- self.assertFalse(os.path.exists(handle.name))
- self.assertEqual(original_data, out_data)
-
- def testCantWriteAfterCleanup(self):
- with trace_data.TraceDataBuilder() as builder:
- builder.AddTraceFor(trace_data.CHROME_TRACE_PART,
- {'traceEvents': [1, 2, 3]})
- builder.CleanUpTraceData()
- with self.assertRaises(RuntimeError):
- builder.AddTraceFor(trace_data.CHROME_TRACE_PART,
- {'traceEvents': [1, 2, 3]})
-
- def testCantWriteAfterFreeze(self):
- with trace_data.TraceDataBuilder() as builder:
- builder.AddTraceFor(trace_data.CHROME_TRACE_PART,
- {'traceEvents': [1, 2, 3]})
- builder.Freeze()
- with self.assertRaises(RuntimeError):
- builder.AddTraceFor(trace_data.CHROME_TRACE_PART,
- {'traceEvents': [1, 2, 3]})
+ self.assertEqual(d.GetTracesFor(trace_data.TELEMETRY_PART),
+ [telemetry_trace])
+
+ def testSetTraceForRaisesWithInvalidPart(self):
+ builder = trace_data.TraceDataBuilder()
+
+ self.assertRaises(exceptions.AssertionError,
+ lambda: builder.AddTraceFor('not_a_trace_part', {}))
+
+ def testSetTraceForRaisesWithInvalidTrace(self):
+ builder = trace_data.TraceDataBuilder()
+
+ self.assertRaises(
+ exceptions.AssertionError,
+ lambda: builder.AddTraceFor(trace_data.TELEMETRY_PART,
+ datetime.time.min))
+
+ def testSetTraceForRaisesAfterAsData(self):
+ builder = trace_data.TraceDataBuilder()
+ builder.AsData()
+
+ self.assertRaises(
+ exceptions.Exception,
+ lambda: builder.AddTraceFor(trace_data.TELEMETRY_PART, {}))