96336093a745741a646413b4da4793a265fcc19f
[openbsd] /
1 """
2 Test basic DarwinLog functionality provided by the StructuredDataDarwinLog
3 plugin.
4
5 These tests are currently only supported when running against Darwin
6 targets.
7 """
8
9
10 import lldb
11
12 from lldbsuite.test import decorators
13 from lldbsuite.test import lldbtest
14 from lldbsuite.test import darwin_log
15
16
17 class TestDarwinLogFilterRegexCategory(darwin_log.DarwinLogTestBase):
18
19     mydir = lldbtest.TestBase.compute_mydir(__file__)
20
21     def setUp(self):
22         # Call super's setUp().
23         super(TestDarwinLogFilterRegexCategory, self).setUp()
24
25         # Source filename.
26         self.source = 'main.c'
27
28         # Output filename.
29         self.exe_name = self.getBuildArtifact("a.out")
30         self.d = {'C_SOURCES': self.source, 'EXE': self.exe_name}
31
32         # Locate breakpoint.
33         self.line = lldbtest.line_number(self.source, '// break here')
34
35     def tearDown(self):
36         # Shut down the process if it's still running.
37         if self.child:
38             self.runCmd('process kill')
39             self.expect_prompt()
40             self.runCmd('quit')
41
42         # Let parent clean up
43         super(TestDarwinLogFilterRegexCategory, self).tearDown()
44
45     # ==========================================================================
46     # category filter tests
47     # ==========================================================================
48
49     @decorators.skipUnlessDarwin
50     def test_filter_accept_category_full_match(self):
51         """Test that fall-through reject, accept regex single category works."""
52         self.do_test(
53             ["--no-match-accepts false",
54              "--filter \"accept category regex cat2\""]
55         )
56
57         # We should only see the second log message as we only accept
58         # that category.
59         self.assertIsNotNone(self.child.match)
60         self.assertTrue(
61             (len(
62                 self.child.match.groups()) > 1) and (
63                 self.child.match.group(2) == "cat2"),
64             "first log line should not be present, second log line "
65             "should be")
66
67     @decorators.skipUnlessDarwin
68     def test_filter_accept_category_partial_match(self):
69         """Test that fall-through reject, accept regex category via partial match works."""
70         self.do_test(
71             ["--no-match-accepts false",
72              "--filter \"accept category regex .+2\""]
73         )
74
75         # We should only see the second log message as we only accept
76         # that category.
77         self.assertIsNotNone(self.child.match)
78         self.assertTrue(
79             (len(
80                 self.child.match.groups()) > 1) and (
81                 self.child.match.group(2) == "cat2"),
82             "first log line should not be present, second log line "
83             "should be")
84
85     @decorators.skipUnlessDarwin
86     def test_filter_reject_category_full_match(self):
87         """Test that fall-through accept, reject regex category works."""
88         self.do_test(
89             ["--no-match-accepts true",
90              "--filter \"reject category regex cat1\""]
91         )
92
93         # We should only see the second log message as we rejected the first
94         # via category rejection.
95         self.assertIsNotNone(self.child.match)
96         self.assertTrue(
97             (len(
98                 self.child.match.groups()) > 1) and (
99                 self.child.match.group(2) == "cat2"),
100             "first log line should not be present, second log line "
101             "should be")
102
103     @decorators.skipUnlessDarwin
104     def test_filter_reject_category_partial_match(self):
105         """Test that fall-through accept, reject regex category by partial match works."""
106         self.do_test(
107             ["--no-match-accepts true",
108              "--filter \"reject category regex t1\""]
109         )
110
111         # We should only see the second log message as we rejected the first
112         # via category rejection.
113         self.assertIsNotNone(self.child.match)
114         self.assertTrue(
115             (len(
116                 self.child.match.groups()) > 1) and (
117                 self.child.match.group(2) == "cat2"),
118             "first log line should not be present, second log line "
119             "should be")
120
121     @decorators.skipUnlessDarwin
122     def test_filter_accept_category_second_rule(self):
123         """Test that fall-through reject, accept regex category on second rule works."""
124         self.do_test(
125             ["--no-match-accepts false",
126              "--filter \"accept category regex non-existent\"",
127              "--filter \"accept category regex cat2\""
128              ]
129         )
130
131         # We should only see the second message since we reject by default,
132         # the first filter doesn't match any, and the second filter matches
133         # the category of the second log message.
134         self.assertIsNotNone(self.child.match)
135         self.assertTrue(
136             (len(
137                 self.child.match.groups()) > 1) and (
138                 self.child.match.group(2) == "cat2"),
139             "first log line should not be present, second log line "
140             "should be")