Pylog test suite
[logging-analytics.git] / pylog / tests / test_mdc_formatter.py
1 # Copyright (c) 2020 Deutsche Telekom.
2 # Licensed under the Apache License, Version 2.0 (the "License");
3 # you may not use this file except in compliance with the License.
4 # You may obtain a copy of the License at:
5 #       http://www.apache.org/licenses/LICENSE-2.0
6 #
7 # Unless required by applicable law or agreed to in writing, software
8 # distributed under the License is distributed on an "AS IS" BASIS,
9 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10
11 import sys
12 import unittest
13
14 if sys.version_info[0] < 3:
15     from mock import MagicMock, patch
16 if sys.version_info[0] >= 3:
17     from unittest.mock import MagicMock, patch
18
19 import pytest
20
21 from onaplogging.mdcformatter import MDCFormatter
22
23
24 class TestMdcFormatter(unittest.TestCase):
25
26     def test_mdc_formatter_init(self):
27         mdc_formatter = MDCFormatter()
28         self.assertEqual(mdc_formatter.style, "%")
29         self.assertEqual(mdc_formatter._mdc_tag, "%(mdc)s")
30         self.assertEqual(mdc_formatter._mdcFmt, "{reqeustID}")
31
32         mdc_formatter = MDCFormatter(mdcfmt="{test}")
33         self.assertEqual(mdc_formatter.style, "%")
34         self.assertEqual(mdc_formatter._mdc_tag, "%(mdc)s")
35         self.assertEqual(mdc_formatter._mdcFmt, "{test}")
36
37         if sys.version_info[0] >= 3:
38             mdc_formatter = MDCFormatter(style="{")
39             self.assertEqual(mdc_formatter.style, "{")
40             self.assertEqual(mdc_formatter._mdc_tag, "{mdc}")
41             self.assertEqual(mdc_formatter._mdcFmt, "{reqeustID}")
42
43             mdc_formatter = MDCFormatter(style="$")
44             self.assertEqual(mdc_formatter.style, "$")
45             self.assertEqual(mdc_formatter._mdc_tag, "${mdc}")
46             self.assertEqual(mdc_formatter._mdcFmt, "{reqeustID}")
47
48             with pytest.raises(ValueError):
49                 MDCFormatter(style="*")
50
51     def test_mdc_fmt_key(self):
52         mdc_formatter = MDCFormatter()
53         brace, not_brace = mdc_formatter._mdcfmtKey()
54         self.assertEqual(brace, ["{reqeustID}"])
55         self.assertEqual(list(not_brace), ["reqeustID"])
56
57         mdc_formatter = MDCFormatter(mdcfmt="{test} {value} {anything}")
58         brace, not_brace = mdc_formatter._mdcfmtKey()
59         self.assertEqual(brace, ["{test}", "{value}", "{anything}"])
60         self.assertEqual(list(not_brace), ["test", "value", "anything"])
61
62         mdc_formatter = MDCFormatter(mdcfmt="no_braces")
63         brace, not_brace = mdc_formatter._mdcfmtKey()
64         self.assertEqual(brace, [])
65         self.assertIsNone(not_brace)
66
67         mdc_formatter = MDCFormatter(mdcfmt="}what?{")
68         brace, not_brace = mdc_formatter._mdcfmtKey()
69         self.assertEqual(brace, [])
70         self.assertIsNone(not_brace)
71
72         mdc_formatter = MDCFormatter(mdcfmt="}{hello}{")
73         brace, not_brace = mdc_formatter._mdcfmtKey()
74         self.assertEqual(brace, ["{hello}"])
75         self.assertEqual(list(not_brace), ["hello"])
76
77         mdc_formatter = MDCFormatter(mdcfmt="}{}{hel{lo}{")
78         brace, not_brace = mdc_formatter._mdcfmtKey()
79         self.assertEqual(brace, [])
80         self.assertIsNone(not_brace)
81     
82     def test_format(self):
83         record = MagicMock()
84         with patch("onaplogging.mdcformatter.MarkerFormatter.format") as mock_marker_formatter_format:
85             mdc_formatter = MDCFormatter()
86             mdc_formatter.format(record)
87             mock_marker_formatter_format.assert_called_once_with(record)
88             self.assertEqual(mdc_formatter._fmt, "%(message)s")
89
90         if sys.version_info[0] >= 3:
91             with patch("onaplogging.mdcformatter.MarkerFormatter.format") as mock_marker_formatter_format:
92                 mdc_formatter = MDCFormatter(fmt="{mdc}", style="{", mdcfmt="{key}")
93                 mdc_formatter.format(record)
94                 mock_marker_formatter_format.assert_called_once_with(record)
95                 self.assertEqual(mdc_formatter._fmt, "key=")
96
97             record.mdc = {"key": 123}
98             with patch("onaplogging.mdcformatter.MarkerFormatter.format") as mock_marker_formatter_format:
99                 mdc_formatter = MDCFormatter(fmt="{mdc}", style="{", mdcfmt="no_braces")
100                 mdc_formatter.format(record)
101                 mock_marker_formatter_format.assert_called_once_with(record)
102                 self.assertEqual(mdc_formatter._fmt, "")
103
104             with patch("onaplogging.mdcformatter.MarkerFormatter.format") as mock_marker_formatter_format:
105                 mdc_formatter = MDCFormatter(fmt="{mdc}", style="{", mdcfmt="{key}")
106                 mdc_formatter.format(record)
107                 mock_marker_formatter_format.assert_called_once_with(record)
108                 self.assertEqual(mdc_formatter._fmt, "key=123")