diff mbox series

[10/10] trace-cruncher: Add synth. events tests

Message ID 20220124085625.92297-11-y.karadz@gmail.com (mailing list archive)
State Accepted
Headers show
Series trace-cruncher: Synthetic events | expand

Commit Message

Yordan Karadzhov Jan. 24, 2022, 8:56 a.m. UTC
APIs for kernel synthetic events have been added.
Here we add the corresponding test cases.

Signed-off-by: Yordan Karadzhov (VMware) <y.karadz@gmail.com>
---
 .../tests/1_unit/test_01_ftracepy_unit.py     | 86 +++++++++++++++++++
 1 file changed, 86 insertions(+)
diff mbox series

Patch

diff --git a/tracecruncher/tests/1_unit/test_01_ftracepy_unit.py b/tracecruncher/tests/1_unit/test_01_ftracepy_unit.py
index 51970d3..2de3d89 100644
--- a/tracecruncher/tests/1_unit/test_01_ftracepy_unit.py
+++ b/tracecruncher/tests/1_unit/test_01_ftracepy_unit.py
@@ -691,5 +691,91 @@  class HistOopTestCase(unittest.TestCase):
         self.assertTrue(err in str(context.exception))
 
 
+class SyntTestCase(unittest.TestCase):
+    def test_synt_create(self):
+        synth = ft.synth(name='wakeup_lat',
+                         start_sys='sched', start_evt='sched_waking',
+                         end_sys='sched',   end_evt='sched_switch',
+                         start_match='pid', end_match='next_pid',
+                         match_name='pid')
+
+        synth.add_start_fields(fields=['target_cpu', 'prio'],
+                               names=['cpu', None])
+        synth.add_end_fields(fields=['prev_prio', 'next_prio'],
+                             names=[None, 'nxt_p'])
+        synth.register()
+
+        event = synth.repr(event=True, hist_start=False, hist_end=False)
+        hist_s = synth.repr(event=False, hist_start=True, hist_end=False)
+        hist_e = synth.repr(event=False, hist_start=False, hist_end=True)
+
+        self.assertTrue('keys=pid'in hist_s)
+        self.assertTrue('keys=next_pid' in hist_e)
+        self.assertTrue('pid=next_pid' in hist_e)
+        self.assertTrue('onmatch(sched.sched_waking).trace(wakeup_lat,$pid' in hist_e)
+
+        self.assertTrue('s32 cpu;' in event)
+        self.assertTrue('s32 prio;' in event)
+        hist_s = synth.repr(event=False, hist_start=True, hist_end=False)
+        split_1 = hist_s.split('__arg_')
+        arg1 = '__arg_' + split_1[1].split('=')[0]
+        arg2 = '__arg_' + split_1[2].split('=')[0]
+        self.assertTrue(arg1 + '=target_cpu' in hist_s)
+        self.assertTrue(arg2 + '=prio' in hist_s)
+        hist_e = synth.repr(event=False, hist_start=False, hist_end=True)
+        self.assertTrue('cpu=$' + arg1 in hist_e)
+        self.assertTrue('prio=$' + arg2 in hist_e)
+        split_2 = hist_e.split('trace(')
+        self.assertTrue('$pid' in split_2[1])
+        self.assertTrue('$prio' in split_2[1])
+
+        event = synth.repr(event=True, hist_start=False, hist_end=False)
+        self.assertTrue('s32 prev_prio;' in event)
+        self.assertTrue('s32 nxt_p;' in event)
+        hist_e = synth.repr(event=False, hist_start=False, hist_end=True)
+        self.assertTrue('nxt_p=next_prio' in hist_e)
+        split_3 = hist_e.split('__arg_')
+        arg3 = '__arg_' + split_3[3].split('=')[0]
+        self.assertTrue(arg3 + '=prev_prio' in hist_e)
+        split_4 = hist_e.split('trace(')
+        self.assertTrue('$nxt_p' in split_4[1])
+        self.assertTrue('$' + arg3 in split_4[1])
+
+        synth.unregister()
+
+    def test_synt_enable(self):
+        synth = ft.synth(name='wakeup_lat',
+                         start_sys='sched', start_evt='sched_waking',
+                         end_sys='sched',   end_evt='sched_switch',
+                         start_match='pid', end_match='next_pid',
+                         match_name='pid')
+        synth.register()
+        ret = synth.is_enabled()
+        self.assertEqual(ret, '0')
+        synth.enable()
+        ret = synth.is_enabled()
+        self.assertEqual(ret, '1')
+        synth.disable()
+        ret = synth.is_enabled()
+        self.assertEqual(ret, '0')
+        synth.unregister()
+
+    def test_synt_enable(self):
+        evt_filter = 'prio<100'
+        synth = ft.synth(name='wakeup_lat',
+                         start_sys='sched', start_evt='sched_waking',
+                         end_sys='sched',   end_evt='sched_switch',
+                         start_match='pid', end_match='next_pid',
+                         match_name='pid')
+        synth.add_start_fields(fields=['prio'])
+        synth.register()
+        self.assertEqual('none', synth.get_filter())
+        synth.set_filter(filter=evt_filter)
+        self.assertEqual(evt_filter, synth.get_filter())
+        synth.clear_filter()
+        self.assertEqual('none', synth.get_filter())
+        synth.unregister()
+
+
 if __name__ == '__main__':
     unittest.main()