1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
# Copyright 2010 Canonical Ltd. This software is licensed under the
# GNU Affero General Public License version 3 (see the file LICENSE).
"""Tests for webapp glue."""
__metaclass__ = type
from textwrap import dedent
from canonical.config import config
from canonical.launchpad.webapp.servers import LaunchpadTestRequest
from canonical.launchpad.webapp.errorlog import globalErrorUtility
from canonical.testing import layers
from lp.services.features import (
webapp,
getFeatureFlag,
)
from lp.services.features.testing import FeatureFixture
from lp.testing import (
CaptureOops,
login_as,
TestCase,
TestCaseWithFactory,
)
class TestScopesFromRequest(TestCase):
layer = layers.BaseLayer
def test_pageid_scope_normal(self):
request = LaunchpadTestRequest()
scopes = webapp.ScopesFromRequest(request)
request.setInWSGIEnvironment('launchpad.pageid', 'foo:bar')
self.assertTrue(scopes.lookup('pageid:'))
self.assertTrue(scopes.lookup('pageid:foo'))
self.assertTrue(scopes.lookup('pageid:foo:bar'))
self.assertFalse(scopes.lookup('pageid:foo:bar#quux'))
def test_pageid_scope_collection(self):
request = LaunchpadTestRequest()
scopes = webapp.ScopesFromRequest(request)
request.setInWSGIEnvironment('launchpad.pageid', 'scoped:thing:#type')
self.assertTrue(scopes.lookup('pageid:'))
self.assertTrue(scopes.lookup('pageid:scoped'))
self.assertTrue(scopes.lookup('pageid:scoped:thing'))
self.assertTrue(scopes.lookup('pageid:scoped:thing:#type'))
self.assertFalse(scopes.lookup('pageid:scoped:thing:#type:other'))
def test_pageid_scope_empty(self):
request = LaunchpadTestRequest()
scopes = webapp.ScopesFromRequest(request)
request.setInWSGIEnvironment('launchpad.pageid', '')
self.assertTrue(scopes.lookup('pageid:'))
self.assertFalse(scopes.lookup('pageid:foo'))
self.assertFalse(scopes.lookup('pageid:foo:bar'))
def test_default(self):
request = LaunchpadTestRequest()
scopes = webapp.ScopesFromRequest(request)
self.assertTrue(scopes.lookup('default'))
def test_server(self):
request = LaunchpadTestRequest()
scopes = webapp.ScopesFromRequest(request)
self.assertFalse(scopes.lookup('server.lpnet'))
config.push('ensure_lpnet', dedent("""\
[launchpad]
is_lpnet: True
"""))
try:
self.assertTrue(scopes.lookup('server.lpnet'))
finally:
config.pop('ensure_lpnet')
def test_server_missing_key(self):
request = LaunchpadTestRequest()
scopes = webapp.ScopesFromRequest(request)
# There is no such key in the config, so this returns False.
self.assertFalse(scopes.lookup('server.pink'))
def test_unknown_scope(self):
# Asking about an unknown scope is not an error.
request = LaunchpadTestRequest()
scopes = webapp.ScopesFromRequest(request)
scopes.lookup('not-a-real-scope')
class TestDBScopes(TestCaseWithFactory):
layer = layers.DatabaseFunctionalLayer
def test_team_scope_outside_team(self):
request = LaunchpadTestRequest()
scopes = webapp.ScopesFromRequest(request)
self.factory.loginAsAnyone(request)
self.assertFalse(scopes.lookup('team:nonexistent'))
def test_team_scope_in_team(self):
request = LaunchpadTestRequest()
scopes = webapp.ScopesFromRequest(request)
member = self.factory.makePerson()
team = self.factory.makeTeam(members=[member])
login_as(member, request)
self.assertTrue(scopes.lookup('team:%s' % team.name))
class TestFeaturesIntoOops(TestCaseWithFactory):
layer = layers.DatabaseFunctionalLayer
def test_get_features_into_oops(self):
with FeatureFixture({'feature_name': 'value'}):
with CaptureOops() as capture:
request = LaunchpadTestRequest()
self.assertEquals(getFeatureFlag('feature_name'), 'value')
# Simulate an oops here.
globalErrorUtility.raising(None, request=request)
oops = capture.oopses[0]
self.assertTrue('features.usedScopes' in oops)
self.assertTrue('features.usedFlags' in oops)
self.assertEquals(oops['features.usedFlags'],
u"{'feature_name': u'value'}")
|