1
# Copyright (c) 2012, Canonical Ltd
3
# This program is free software: you can redistribute it and/or modify
4
# it under the terms of the GNU Lesser General Public License as published by
5
# the Free Software Foundation, version 3 only.
7
# This program is distributed in the hope that it will be useful,
8
# but WITHOUT ANY WARRANTY; without even the implied warranty of
9
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10
# GNU Lesser General Public License for more details.
12
# You should have received a copy of the GNU Lesser General Public License
13
# along with this program. If not, see <http://www.gnu.org/licenses/>.
14
# GNU Lesser General Public License version 3 (see the file LICENSE).
18
from testtools import TestCase
21
from .. import filters
24
class FilterSessionInfoTests(TestCase):
26
def test_leaves_most_queries_be(self):
28
result = filters.filter_session_info(query)
29
self.assertEqual(query, result)
31
def test_redacts_django_session(self):
32
query = 'select * from django_session'
33
result = filters.filter_session_info(query)
34
self.assertEqual('select <session query redacted>', result)
37
class FilterUserInfoTests(TestCase):
39
def test_leaves_most_queries_be(self):
41
result = filters.filter_user_info(query)
42
self.assertEqual(query, result)
44
def test_redacts_django_session(self):
45
query = 'select * from auth_user'
46
result = filters.filter_user_info(query)
47
self.assertEqual('select <user query redacted>', result)
50
class FilterSessionQueryTests(TestCase):
52
def test_does_nothing_no_timeline(self):
55
filters.filter_session_query(report, context)
56
self.assertEqual({}, report)
57
self.assertEqual({}, context)
59
def test_filter_session_query(self):
60
query = 'select * from django_session'
61
test_timeline = [(0, 0, 'some-category', query, 'other')]
62
report = dict(timeline=test_timeline)
63
filters.filter_session_query(report, {})
64
new_timeline = report['timeline']
66
[(0, 0, 'some-category', filters.filter_session_info(query),
71
class FilterUserQueryTests(TestCase):
73
def test_does_nothing_no_timeline(self):
76
filters.filter_user_query(report, context)
77
self.assertEqual({}, report)
78
self.assertEqual({}, context)
80
def test_filter_user_query(self):
81
query = 'select * from auth_user'
82
test_timeline = [(0, 0, 'some-category', query, 'other')]
83
report = dict(timeline=test_timeline)
84
filters.filter_user_query(report, {})
85
new_timeline = report['timeline']
87
[(0, 0, 'some-category', filters.filter_user_info(query),
92
class FakeConfig(object):
98
class InstallHooksTests(TestCase):
100
def test_installs_filter_session_query(self):
101
config = FakeConfig()
102
filters.install_hooks(config)
103
self.assertIn(filters.filter_session_query, config.on_create)
105
def test_installs_filter_user_query(self):
106
config = FakeConfig()
107
filters.install_hooks(config)
108
self.assertIn(filters.filter_user_query, config.on_create)
111
class IntegrationTests(TestCase):
113
def test_publishing_oops_redacts_timeline(self):
114
config = oops.Config()
115
oops_timeline.install_hooks(config)
116
filters.install_hooks(config)
117
user_query = 'select * from auth_user'
118
session_query = 'select * from django_session'
119
test_timeline = timeline.Timeline()
120
test_timeline.start('some-category', user_query).finish()
121
test_timeline.start('some-other-category', session_query).finish()
122
test_context = dict(timeline=test_timeline)
123
test_oops = config.create(test_context)
125
[filters.filter_user_info(user_query),
126
filters.filter_session_info(session_query),
128
[action[3] for action in test_oops['timeline']])