f65b6fc55a942d1ba4b07d8245467c5c0cff8405
[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 TestDarwinLogFilterMatchCategory(darwin_log.DarwinLogTestBase):
18
19     mydir = lldbtest.TestBase.compute_mydir(__file__)
20
21     def setUp(self):
22         # Call super's setUp().
23         super(TestDarwinLogFilterMatchCategory, 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(TestDarwinLogFilterMatchCategory, 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 match single category works."""
52         self.do_test(
53             ["--no-match-accepts false",
54              "--filter \"accept category match 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_reject_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              # Fully match the second message.
73              "--filter \"accept category match cat2\"",
74              "--filter \"accept category match at1\""]   # Only partially match first message.  Should not show up.
75         )
76
77         # We should only see the second log message as we only accept
78         # that category.
79         self.assertIsNotNone(self.child.match)
80         self.assertTrue(
81             (len(
82                 self.child.match.groups()) > 1) and (
83                 self.child.match.group(2) == "cat2"),
84             "first log line should not be present, second log line "
85             "should be")
86
87     @decorators.skipUnlessDarwin
88     def test_filter_reject_category_full_match(self):
89         """Test that fall-through accept, reject match category works."""
90         self.do_test(
91             ["--no-match-accepts true",
92              "--filter \"reject category match cat1\""]
93         )
94
95         # We should only see the second log message as we rejected the first
96         # via category rejection.
97         self.assertIsNotNone(self.child.match)
98         self.assertTrue(
99             (len(
100                 self.child.match.groups()) > 1) and (
101                 self.child.match.group(2) == "cat2"),
102             "first log line should not be present, second log line "
103             "should be")
104
105     @decorators.skipUnlessDarwin
106     def test_filter_accept_category_second_rule(self):
107         """Test that fall-through reject, accept match category on second rule works."""
108         self.do_test(
109             ["--no-match-accepts false",
110              "--filter \"accept category match non-existent\"",
111              "--filter \"accept category match cat2\""
112              ]
113         )
114
115         # We should only see the second message since we reject by default,
116         # the first filter doesn't match any, and the second filter matches
117         # the category of the second log message.
118         self.assertIsNotNone(self.child.match)
119         self.assertTrue(
120             (len(
121                 self.child.match.groups()) > 1) and (
122                 self.child.match.group(2) == "cat2"),
123             "first log line should not be present, second log line "
124             "should be")