Mercurial > p > roundup > code
annotate test/rest_common.py @ 7183:2de72f75f2f8
Production PBKDF rounds back to 2M, test 1k; fix empty_form (python2)
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Sun, 26 Feb 2023 15:38:49 -0500 |
| parents | 6f09103a6522 |
| children | 886a5c767d7e |
| rev | line source |
|---|---|
|
6090
e097ff5064b8
Allow transitive properties in @fields in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5993
diff
changeset
|
1 import pytest |
|
5586
8f2fbc88e155
Fixed code convention
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5585
diff
changeset
|
2 import unittest |
|
8f2fbc88e155
Fixed code convention
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5585
diff
changeset
|
3 import os |
|
8f2fbc88e155
Fixed code convention
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5585
diff
changeset
|
4 import shutil |
|
8f2fbc88e155
Fixed code convention
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5585
diff
changeset
|
5 import errno |
|
5801
ddb553d5618c
Add import of cgi since import cgi was removed from exceptions
John Rouillard <rouilj@ieee.org>
parents:
5747
diff
changeset
|
6 import cgi |
| 5583 | 7 |
|
5732
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
8 from time import sleep |
|
5878
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
9 from datetime import datetime, timedelta |
| 6361 | 10 from roundup.test.tx_Source_detector import init as tx_Source_init |
|
5878
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
11 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
12 try: |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
13 from datetime import timezone |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
14 myutc = timezone.utc |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
15 except ImportError: |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
16 # python 2 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
17 from datetime import tzinfo |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
18 ZERO = timedelta(0) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
19 class UTC(tzinfo): |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
20 """UTC""" |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
21 def utcoffset(self, dt): |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
22 return ZERO |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
23 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
24 def tzname(self, dt): |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
25 return "UTC" |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
26 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
27 def dst(self, dt): |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
28 return ZERO |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
29 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
30 myutc = UTC() |
|
5732
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
31 |
| 5583 | 32 from roundup.cgi.exceptions import * |
|
5706
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
33 from roundup.hyperdb import HyperdbValueError |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
34 from roundup.exceptions import * |
|
5586
8f2fbc88e155
Fixed code convention
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5585
diff
changeset
|
35 from roundup import password, hyperdb |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
36 from roundup.rest import RestfulInstance, calculate_etag |
| 5583 | 37 from roundup.backends import list_backends |
|
5586
8f2fbc88e155
Fixed code convention
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5585
diff
changeset
|
38 from roundup.cgi import client |
|
6185
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
39 from roundup.anypy.strings import b2s, s2b, us2u |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
40 import random |
| 5583 | 41 |
|
5733
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
42 from roundup.backends.sessions_dbm import OneTimeKeys |
|
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
43 from roundup.anypy.dbm_ import anydbm, whichdb |
|
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
44 |
| 5602 | 45 from .db_test_base import setupTracker |
| 5583 | 46 |
|
6366
f2c31f5ec50b
Move mocknull from test to roundup/test
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6361
diff
changeset
|
47 from roundup.test.mocknull import MockNull |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
48 |
|
5653
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
49 from io import BytesIO |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
50 import json |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
51 |
|
5878
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
52 from copy import copy |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
53 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
54 try: |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
55 import jwt |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
56 skip_jwt = lambda func, *args, **kwargs: func |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
57 except ImportError: |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
58 from .pytest_patcher import mark_class |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
59 jwt=None |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
60 skip_jwt = mark_class(pytest.mark.skip( |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
61 reason='Skipping JWT tests: jwt library not available')) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
62 |
| 5583 | 63 NEEDS_INSTANCE = 1 |
| 64 | |
|
5586
8f2fbc88e155
Fixed code convention
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5585
diff
changeset
|
65 |
|
5601
fcbeff272828
Integrate REST tests into db framework
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5600
diff
changeset
|
66 class TestCase(): |
| 5583 | 67 |
| 68 backend = None | |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
69 url_pfx = 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/' |
| 5583 | 70 |
| 71 def setUp(self): | |
|
6314
a2fbd3592322
pyjwt 2.00 changed return type of jwt.encode from byte to str
John Rouillard <rouilj@ieee.org>
parents:
6312
diff
changeset
|
72 from packaging import version |
|
a2fbd3592322
pyjwt 2.00 changed return type of jwt.encode from byte to str
John Rouillard <rouilj@ieee.org>
parents:
6312
diff
changeset
|
73 |
| 5583 | 74 self.dirname = '_test_rest' |
| 75 # set up and open a tracker | |
|
5878
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
76 # Set optimize=True as code under test (Client.main()::determine_user) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
77 # will close and re-open the database on user changes. This wipes |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
78 # out additions to the schema needed for testing. |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
79 self.instance = setupTracker(self.dirname, self.backend, optimize=True) |
| 5583 | 80 |
| 81 # open the database | |
| 82 self.db = self.instance.open('admin') | |
| 83 | |
|
5733
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
84 # Create the Otk db. |
|
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
85 # This allows a test later on to open the existing db and |
|
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
86 # set a class attribute to test the open retry loop |
|
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
87 # just as though this process was using a pre-existing db |
|
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
88 # rather then the new one we create. |
|
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
89 otk = OneTimeKeys(self.db) |
|
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
90 otk.set('key', key="value") |
|
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
91 |
| 5583 | 92 # Get user id (user4 maybe). Used later to get data from db. |
| 93 self.joeid = self.db.user.create( | |
| 94 username='joe', | |
| 95 password=password.Password('random'), | |
| 96 address='random@home.org', | |
| 97 realname='Joe Random', | |
| 98 roles='User' | |
| 99 ) | |
| 100 | |
|
5878
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
101 self.db.user.set('1', address="admin@admin.com") |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
102 self.db.user.set('2', address="anon@admin.com") |
| 5583 | 103 self.db.commit() |
| 104 self.db.close() | |
| 105 self.db = self.instance.open('joe') | |
| 5604 | 106 # Allow joe to retire |
| 107 p = self.db.security.addPermission(name='Retire', klass='issue') | |
| 108 self.db.security.addPermissionToRole('User', p) | |
| 5583 | 109 |
|
5878
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
110 # add set of roles for testing jwt's. |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
111 self.db.security.addRole(name="User:email", |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
112 description="allow email by jwt") |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
113 # allow the jwt to access everybody's email addresses. |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
114 # this makes it easier to differentiate between User and |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
115 # User:email roles by accessing the /rest/data/user |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
116 # endpoint |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
117 jwt_perms = self.db.security.addPermission(name='View', |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
118 klass='user', |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
119 properties=('id', 'realname', 'address', 'username'), |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
120 description="Allow jwt access to email", |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
121 props_only=False) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
122 self.db.security.addPermissionToRole("User:email", jwt_perms) |
|
5879
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
123 self.db.security.addPermissionToRole("User:email", "Rest Access") |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
124 |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
125 # add set of roles for testing jwt's. |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
126 # this is like the user:email role, but it missing access to the rest endpoint. |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
127 self.db.security.addRole(name="User:emailnorest", |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
128 description="allow email by jwt") |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
129 jwt_perms = self.db.security.addPermission(name='View', |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
130 klass='user', |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
131 properties=('id', 'realname', 'address', 'username'), |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
132 description="Allow jwt access to email but forget to allow rest", |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
133 props_only=False) |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
134 self.db.security.addPermissionToRole("User:emailnorest", jwt_perms) |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
135 |
|
5878
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
136 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
137 if jwt: |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
138 # must be 32 chars in length minimum (I think this is at least |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
139 # 256 bits of data) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
140 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
141 secret = "TestingTheJwtSecretTestingTheJwtSecret" |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
142 self.db.config['WEB_JWT_SECRET'] = secret |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
143 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
144 # generate all timestamps in UTC. |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
145 base_datetime = datetime(1970,1,1, tzinfo=myutc) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
146 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
147 # A UTC timestamp for now. |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
148 dt = datetime.now(myutc) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
149 now_ts = int((dt - base_datetime).total_seconds()) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
150 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
151 # one good for a minute |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
152 dt = dt + timedelta(seconds=60) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
153 plus1min_ts = int((dt - base_datetime).total_seconds()) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
154 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
155 # one that expired a minute ago |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
156 dt = dt - timedelta(seconds=120) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
157 expired_ts = int((dt - base_datetime).total_seconds()) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
158 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
159 # claims match what cgi/client.py::determine_user |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
160 # is looking for |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
161 claim= { 'sub': self.db.getuid(), |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
162 'iss': self.db.config.TRACKER_WEB, |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
163 'aud': self.db.config.TRACKER_WEB, |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
164 'roles': [ 'User' ], |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
165 'iat': now_ts, |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
166 'exp': plus1min_ts, |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
167 } |
|
6314
a2fbd3592322
pyjwt 2.00 changed return type of jwt.encode from byte to str
John Rouillard <rouilj@ieee.org>
parents:
6312
diff
changeset
|
168 |
|
a2fbd3592322
pyjwt 2.00 changed return type of jwt.encode from byte to str
John Rouillard <rouilj@ieee.org>
parents:
6312
diff
changeset
|
169 # in version 2.0.0 and newer jwt.encode returns string |
|
a2fbd3592322
pyjwt 2.00 changed return type of jwt.encode from byte to str
John Rouillard <rouilj@ieee.org>
parents:
6312
diff
changeset
|
170 # not bytestring. So we have to skip b2s conversion |
|
5878
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
171 |
|
6314
a2fbd3592322
pyjwt 2.00 changed return type of jwt.encode from byte to str
John Rouillard <rouilj@ieee.org>
parents:
6312
diff
changeset
|
172 if version.parse(jwt.__version__) >= version.parse('2.0.0'): |
|
a2fbd3592322
pyjwt 2.00 changed return type of jwt.encode from byte to str
John Rouillard <rouilj@ieee.org>
parents:
6312
diff
changeset
|
173 tostr = lambda x: x |
|
a2fbd3592322
pyjwt 2.00 changed return type of jwt.encode from byte to str
John Rouillard <rouilj@ieee.org>
parents:
6312
diff
changeset
|
174 else: |
|
a2fbd3592322
pyjwt 2.00 changed return type of jwt.encode from byte to str
John Rouillard <rouilj@ieee.org>
parents:
6312
diff
changeset
|
175 tostr = b2s |
|
a2fbd3592322
pyjwt 2.00 changed return type of jwt.encode from byte to str
John Rouillard <rouilj@ieee.org>
parents:
6312
diff
changeset
|
176 |
|
5878
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
177 self.jwt = {} |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
178 self.claim = {} |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
179 # generate invalid claim with expired timestamp |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
180 self.claim['expired'] = copy(claim) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
181 self.claim['expired']['exp'] = expired_ts |
|
6314
a2fbd3592322
pyjwt 2.00 changed return type of jwt.encode from byte to str
John Rouillard <rouilj@ieee.org>
parents:
6312
diff
changeset
|
182 self.jwt['expired'] = tostr(jwt.encode(self.claim['expired'], secret, |
|
5878
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
183 algorithm='HS256')) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
184 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
185 # generate valid claim with user role |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
186 self.claim['user'] = copy(claim) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
187 self.claim['user']['exp'] = plus1min_ts |
|
6314
a2fbd3592322
pyjwt 2.00 changed return type of jwt.encode from byte to str
John Rouillard <rouilj@ieee.org>
parents:
6312
diff
changeset
|
188 self.jwt['user'] = tostr(jwt.encode(self.claim['user'], secret, |
|
5878
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
189 algorithm='HS256')) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
190 # generate invalid claim bad issuer |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
191 self.claim['badiss'] = copy(claim) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
192 self.claim['badiss']['iss'] = "http://someissuer/bugs" |
|
6314
a2fbd3592322
pyjwt 2.00 changed return type of jwt.encode from byte to str
John Rouillard <rouilj@ieee.org>
parents:
6312
diff
changeset
|
193 self.jwt['badiss'] = tostr(jwt.encode(self.claim['badiss'], secret, |
|
5878
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
194 algorithm='HS256')) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
195 # generate invalid claim bad aud(ience) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
196 self.claim['badaud'] = copy(claim) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
197 self.claim['badaud']['aud'] = "http://someaudience/bugs" |
|
6314
a2fbd3592322
pyjwt 2.00 changed return type of jwt.encode from byte to str
John Rouillard <rouilj@ieee.org>
parents:
6312
diff
changeset
|
198 self.jwt['badaud'] = tostr(jwt.encode(self.claim['badaud'], secret, |
|
5878
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
199 algorithm='HS256')) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
200 # generate invalid claim bad sub(ject) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
201 self.claim['badsub'] = copy(claim) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
202 self.claim['badsub']['sub'] = str("99") |
|
6314
a2fbd3592322
pyjwt 2.00 changed return type of jwt.encode from byte to str
John Rouillard <rouilj@ieee.org>
parents:
6312
diff
changeset
|
203 self.jwt['badsub'] = tostr(jwt.encode(self.claim['badsub'], secret, |
|
5878
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
204 algorithm='HS256')) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
205 # generate invalid claim bad roles |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
206 self.claim['badroles'] = copy(claim) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
207 self.claim['badroles']['roles'] = [ "badrole1", "badrole2" ] |
|
6314
a2fbd3592322
pyjwt 2.00 changed return type of jwt.encode from byte to str
John Rouillard <rouilj@ieee.org>
parents:
6312
diff
changeset
|
208 self.jwt['badroles'] = tostr(jwt.encode(self.claim['badroles'], secret, |
|
5878
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
209 algorithm='HS256')) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
210 # generate valid claim with limited user:email role |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
211 self.claim['user:email'] = copy(claim) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
212 self.claim['user:email']['roles'] = [ "user:email" ] |
|
6314
a2fbd3592322
pyjwt 2.00 changed return type of jwt.encode from byte to str
John Rouillard <rouilj@ieee.org>
parents:
6312
diff
changeset
|
213 self.jwt['user:email'] = tostr(jwt.encode(self.claim['user:email'], secret, |
|
5878
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
214 algorithm='HS256')) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
215 |
|
5879
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
216 # generate valid claim with limited user:emailnorest role |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
217 self.claim['user:emailnorest'] = copy(claim) |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
218 self.claim['user:emailnorest']['roles'] = [ "user:emailnorest" ] |
|
6314
a2fbd3592322
pyjwt 2.00 changed return type of jwt.encode from byte to str
John Rouillard <rouilj@ieee.org>
parents:
6312
diff
changeset
|
219 self.jwt['user:emailnorest'] = tostr(jwt.encode(self.claim['user:emailnorest'], secret, |
|
5879
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
220 algorithm='HS256')) |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
221 |
| 5583 | 222 self.db.tx_Source = 'web' |
| 223 | |
| 224 self.db.issue.addprop(tx_Source=hyperdb.String()) | |
|
5690
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
225 self.db.issue.addprop(anint=hyperdb.Integer()) |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
226 self.db.issue.addprop(afloat=hyperdb.Number()) |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
227 self.db.issue.addprop(abool=hyperdb.Boolean()) |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
228 self.db.issue.addprop(requireme=hyperdb.String(required=True)) |
|
6256
29c6dc8ed004
Test handling of unset transitive link field.
John Rouillard <rouilj@ieee.org>
parents:
6185
diff
changeset
|
229 self.db.user.addprop(issue=hyperdb.Link('issue')) |
| 5583 | 230 self.db.msg.addprop(tx_Source=hyperdb.String()) |
| 231 | |
| 232 self.db.post_init() | |
| 233 | |
| 6361 | 234 tx_Source_init(self.db) |
| 5583 | 235 |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
236 self.client_env = { |
| 5583 | 237 'PATH_INFO': 'http://localhost/rounduptest/rest/', |
| 238 'HTTP_HOST': 'localhost', | |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
239 'TRACKER_NAME': 'rounduptest', |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
240 'HTTP_ORIGIN': 'http://tracker.example' |
| 5583 | 241 } |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
242 self.dummy_client = client.Client(self.instance, MockNull(), |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
243 self.client_env, [], None) |
|
5650
e8ca7072c629
Fix Python 3 issues in REST code.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5647
diff
changeset
|
244 self.dummy_client.request.headers.get = self.get_header |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
245 self.dummy_client.db = self.db |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
246 |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
247 self.empty_form = cgi.FieldStorage() |
|
7183
2de72f75f2f8
Production PBKDF rounds back to 2M, test 1k; fix empty_form (python2)
John Rouillard <rouilj@ieee.org>
parents:
7156
diff
changeset
|
248 # under python2 invoking: |
|
2de72f75f2f8
Production PBKDF rounds back to 2M, test 1k; fix empty_form (python2)
John Rouillard <rouilj@ieee.org>
parents:
7156
diff
changeset
|
249 # python2 -m pytest --durations=20 |
|
2de72f75f2f8
Production PBKDF rounds back to 2M, test 1k; fix empty_form (python2)
John Rouillard <rouilj@ieee.org>
parents:
7156
diff
changeset
|
250 # loads the form with: |
|
2de72f75f2f8
Production PBKDF rounds back to 2M, test 1k; fix empty_form (python2)
John Rouillard <rouilj@ieee.org>
parents:
7156
diff
changeset
|
251 # FieldStorage(None, None, [MiniFieldStorage('--durations', '2')]) |
|
2de72f75f2f8
Production PBKDF rounds back to 2M, test 1k; fix empty_form (python2)
John Rouillard <rouilj@ieee.org>
parents:
7156
diff
changeset
|
252 # Invoking it as: python2 -m pytest -v --durations=20 |
|
2de72f75f2f8
Production PBKDF rounds back to 2M, test 1k; fix empty_form (python2)
John Rouillard <rouilj@ieee.org>
parents:
7156
diff
changeset
|
253 # results in an empty list. In any case, force it to be empty. |
|
2de72f75f2f8
Production PBKDF rounds back to 2M, test 1k; fix empty_form (python2)
John Rouillard <rouilj@ieee.org>
parents:
7156
diff
changeset
|
254 self.empty_form.list = [] |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
255 self.terse_form = cgi.FieldStorage() |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
256 self.terse_form.list = [ |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
257 cgi.MiniFieldStorage('@verbose', '0'), |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
258 ] |
| 5583 | 259 |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
260 self.server = RestfulInstance(self.dummy_client, self.db) |
| 5583 | 261 |
|
5710
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
262 self.db.Otk = self.db.getOTKManager() |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
263 |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
264 self.db.config['WEB_SECRET_KEY'] = "XyzzykrnKm45Sd" |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
265 |
| 5583 | 266 def tearDown(self): |
| 267 self.db.close() | |
| 268 try: | |
| 269 shutil.rmtree(self.dirname) | |
| 5602 | 270 except OSError as error: |
| 5583 | 271 if error.errno not in (errno.ENOENT, errno.ESRCH): |
| 272 raise | |
| 273 | |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
274 def get_header (self, header, not_found=None): |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
275 try: |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
276 return self.headers[header.lower()] |
|
5655
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
277 except (AttributeError, KeyError, TypeError): |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
278 if header.upper() in self.client_env: |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
279 return self.client_env[header.upper()] |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
280 return not_found |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
281 |
|
5865
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
282 def create_stati(self): |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
283 try: |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
284 self.db.status.create(name='open', order='9') |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
285 except ValueError: |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
286 pass |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
287 try: |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
288 self.db.status.create(name='closed', order='91') |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
289 except ValueError: |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
290 pass |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
291 try: |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
292 self.db.priority.create(name='normal') |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
293 except ValueError: |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
294 pass |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
295 try: |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
296 self.db.priority.create(name='critical') |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
297 except ValueError: |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
298 pass |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
299 |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
300 def create_sampledata(self): |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
301 """ Create sample data common to some test cases |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
302 """ |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
303 self.create_stati() |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
304 self.db.issue.create( |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
305 title='foo1', |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
306 status=self.db.status.lookup('open'), |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
307 priority=self.db.priority.lookup('normal'), |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
308 nosy = [ "1", "2" ] |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
309 ) |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
310 issue_open_norm = self.db.issue.create( |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
311 title='foo2', |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
312 status=self.db.status.lookup('open'), |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
313 priority=self.db.priority.lookup('normal'), |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
314 assignedto = "3" |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
315 ) |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
316 issue_open_crit = self.db.issue.create( |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
317 title='foo5', |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
318 status=self.db.status.lookup('open'), |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
319 priority=self.db.priority.lookup('critical') |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
320 ) |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
321 |
| 5583 | 322 def testGet(self): |
| 323 """ | |
| 324 Retrieve all three users | |
| 325 obtain data for 'joe' | |
| 326 """ | |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
327 self.server.client.env.update({'REQUEST_METHOD': 'GET'}) |
| 5583 | 328 # Retrieve all three users. |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
329 results = self.server.get_collection('user', self.empty_form) |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
330 self.assertEqual(self.dummy_client.response_code, 200) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
331 self.assertEqual(len(results['data']['collection']), 3) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
332 self.assertEqual(results['data']['@total_size'], 3) |
|
5645
7f4d19867123
Make print into function call for python3 compatibility.
John Rouillard <rouilj@ieee.org>
parents:
5643
diff
changeset
|
333 print(self.dummy_client.additional_headers["X-Count-Total"]) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
334 self.assertEqual( |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
335 self.dummy_client.additional_headers["X-Count-Total"], |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
336 "3" |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
337 ) |
| 5583 | 338 |
| 339 # Obtain data for 'joe'. | |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
340 results = self.server.get_element('user', self.joeid, self.empty_form) |
|
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
341 results = results['data'] |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
342 self.assertEqual(self.dummy_client.response_code, 200) |
| 5583 | 343 self.assertEqual(results['attributes']['username'], 'joe') |
| 344 self.assertEqual(results['attributes']['realname'], 'Joe Random') | |
| 345 | |
| 5678 | 346 # Obtain data for 'joe' via username lookup. |
| 347 results = self.server.get_element('user', 'joe', self.empty_form) | |
| 348 results = results['data'] | |
| 349 self.assertEqual(self.dummy_client.response_code, 200) | |
| 350 self.assertEqual(results['attributes']['username'], 'joe') | |
| 351 self.assertEqual(results['attributes']['realname'], 'Joe Random') | |
| 352 | |
| 353 # Obtain data for 'joe' via username lookup (long form). | |
| 354 key = 'username=joe' | |
| 355 results = self.server.get_element('user', key, self.empty_form) | |
| 356 results = results['data'] | |
| 357 self.assertEqual(self.dummy_client.response_code, 200) | |
| 358 self.assertEqual(results['attributes']['username'], 'joe') | |
| 359 self.assertEqual(results['attributes']['realname'], 'Joe Random') | |
| 360 | |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
361 # Obtain data for 'joe'. |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
362 results = self.server.get_attribute( |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
363 'user', self.joeid, 'username', self.empty_form |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
364 ) |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
365 self.assertEqual(self.dummy_client.response_code, 200) |
|
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
366 self.assertEqual(results['data']['data'], 'joe') |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
367 |
|
5872
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
368 def testGetTransitive(self): |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
369 """ |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
370 Retrieve all issues with an 'o' in status |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
371 sort by status.name (not order) |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
372 """ |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
373 base_path = self.db.config['TRACKER_WEB'] + 'rest/data/' |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
374 #self.maxDiff=None |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
375 self.create_sampledata() |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
376 self.db.issue.set('2', status=self.db.status.lookup('closed')) |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
377 self.db.issue.set('3', status=self.db.status.lookup('chatting')) |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
378 expected={'data': |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
379 {'@total_size': 2, |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
380 'collection': [ |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
381 { 'id': '2', |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
382 'link': base_path + 'issue/2', |
|
6256
29c6dc8ed004
Test handling of unset transitive link field.
John Rouillard <rouilj@ieee.org>
parents:
6185
diff
changeset
|
383 'assignedto.issue': None, |
|
5872
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
384 'status': |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
385 { 'id': '10', |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
386 'link': base_path + 'status/10' |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
387 } |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
388 }, |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
389 { 'id': '1', |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
390 'link': base_path + 'issue/1', |
|
6256
29c6dc8ed004
Test handling of unset transitive link field.
John Rouillard <rouilj@ieee.org>
parents:
6185
diff
changeset
|
391 'assignedto.issue': None, |
|
5872
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
392 'status': |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
393 { 'id': '9', |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
394 'link': base_path + 'status/9' |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
395 } |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
396 }, |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
397 ]} |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
398 } |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
399 form = cgi.FieldStorage() |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
400 form.list = [ |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
401 cgi.MiniFieldStorage('status.name', 'o'), |
|
6256
29c6dc8ed004
Test handling of unset transitive link field.
John Rouillard <rouilj@ieee.org>
parents:
6185
diff
changeset
|
402 cgi.MiniFieldStorage('@fields', 'status,assignedto.issue'), |
|
5872
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
403 cgi.MiniFieldStorage('@sort', 'status.name'), |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
404 ] |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
405 results = self.server.get_collection('issue', form) |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
406 self.assertDictEqual(expected, results) |
|
1b91e3df3fd0
Implement transitive props for sort and filter
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5865
diff
changeset
|
407 |
|
6554
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
408 def testGetBadTransitive(self): |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
409 """ |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
410 Mess up the names of various properties and make sure we get a 400 |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
411 and a somewhat useful error message. |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
412 """ |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
413 base_path = self.db.config['TRACKER_WEB'] + 'rest/data/' |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
414 #self.maxDiff=None |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
415 self.create_sampledata() |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
416 self.db.issue.set('2', status=self.db.status.lookup('closed')) |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
417 self.db.issue.set('3', status=self.db.status.lookup('chatting')) |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
418 expected = [ |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
419 {'error': {'msg': KeyError('Unknown property: assignedto.isse',), |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
420 'status': 400}}, |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
421 {'error': {'msg': KeyError('Unknown property: stat',), |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
422 'status': 400}}, |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
423 {'error': {'msg': KeyError('Unknown property: status.nam',), |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
424 'status': 400}}, |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
425 ] |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
426 |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
427 ## test invalid transitive property in @fields |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
428 form = cgi.FieldStorage() |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
429 form.list = [ |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
430 cgi.MiniFieldStorage('status.name', 'o'), |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
431 cgi.MiniFieldStorage('@fields', 'status,assignedto.isse'), |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
432 cgi.MiniFieldStorage('@sort', 'status.name'), |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
433 ] |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
434 results = self.server.get_collection('issue', form) |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
435 self.assertEqual(self.dummy_client.response_code, 400) |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
436 self.assertEqual(repr(expected[0]['error']['msg']), |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
437 repr(results['error']['msg'])) |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
438 self.assertEqual(expected[0]['error']['status'], |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
439 results['error']['status']) |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
440 |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
441 ## test invalid property in @fields |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
442 form = cgi.FieldStorage() |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
443 form.list = [ |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
444 cgi.MiniFieldStorage('status.name', 'o'), |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
445 cgi.MiniFieldStorage('@fields', 'stat,assignedto.isuse'), |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
446 cgi.MiniFieldStorage('@sort', 'status.name'), |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
447 ] |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
448 results = self.server.get_collection('issue', form) |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
449 self.assertEqual(self.dummy_client.response_code, 400) |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
450 self.assertEqual(repr(expected[1]['error']['msg']), |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
451 repr(results['error']['msg'])) |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
452 self.assertEqual(expected[1]['error']['status'], |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
453 results['error']['status']) |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
454 |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
455 ## test invalid transitive property in filter TODO |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
456 form = cgi.FieldStorage() |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
457 form.list = [ |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
458 cgi.MiniFieldStorage('status.nam', 'o'), |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
459 cgi.MiniFieldStorage('@fields', 'status,assignedto.isuse'), |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
460 cgi.MiniFieldStorage('@sort', 'status.name'), |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
461 ] |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
462 results = self.server.get_collection('issue', form) |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
463 # is currently 403 not 400 |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
464 self.assertEqual(self.dummy_client.response_code, 400) |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
465 self.assertEqual(repr(expected[2]['error']['msg']), |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
466 repr(results['error']['msg'])) |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
467 self.assertEqual(expected[2]['error']['status'], |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
468 results['error']['status']) |
|
576d630fc908
Fix error status for invalid props
John Rouillard <rouilj@ieee.org>
parents:
6539
diff
changeset
|
469 |
|
5874
6630baff5f68
Implement exact string search in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5872
diff
changeset
|
470 def testGetExactMatch(self): |
|
6630baff5f68
Implement exact string search in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5872
diff
changeset
|
471 """ Retrieve all issues with an exact title |
|
6630baff5f68
Implement exact string search in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5872
diff
changeset
|
472 """ |
|
6630baff5f68
Implement exact string search in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5872
diff
changeset
|
473 base_path = self.db.config['TRACKER_WEB'] + 'rest/data/' |
|
6630baff5f68
Implement exact string search in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5872
diff
changeset
|
474 #self.maxDiff=None |
|
6630baff5f68
Implement exact string search in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5872
diff
changeset
|
475 self.create_sampledata() |
|
6630baff5f68
Implement exact string search in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5872
diff
changeset
|
476 self.db.issue.set('2', title='This is an exact match') |
|
6630baff5f68
Implement exact string search in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5872
diff
changeset
|
477 self.db.issue.set('3', title='This is an exact match') |
|
6630baff5f68
Implement exact string search in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5872
diff
changeset
|
478 self.db.issue.set('1', title='This is AN exact match') |
|
6630baff5f68
Implement exact string search in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5872
diff
changeset
|
479 expected={'data': |
|
6630baff5f68
Implement exact string search in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5872
diff
changeset
|
480 {'@total_size': 2, |
|
6630baff5f68
Implement exact string search in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5872
diff
changeset
|
481 'collection': [ |
|
6630baff5f68
Implement exact string search in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5872
diff
changeset
|
482 { 'id': '2', |
|
6630baff5f68
Implement exact string search in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5872
diff
changeset
|
483 'link': base_path + 'issue/2', |
|
6630baff5f68
Implement exact string search in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5872
diff
changeset
|
484 }, |
|
6630baff5f68
Implement exact string search in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5872
diff
changeset
|
485 { 'id': '3', |
|
6630baff5f68
Implement exact string search in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5872
diff
changeset
|
486 'link': base_path + 'issue/3', |
|
6630baff5f68
Implement exact string search in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5872
diff
changeset
|
487 }, |
|
6630baff5f68
Implement exact string search in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5872
diff
changeset
|
488 ]} |
|
6630baff5f68
Implement exact string search in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5872
diff
changeset
|
489 } |
|
6630baff5f68
Implement exact string search in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5872
diff
changeset
|
490 form = cgi.FieldStorage() |
|
6630baff5f68
Implement exact string search in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5872
diff
changeset
|
491 form.list = [ |
|
6630baff5f68
Implement exact string search in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5872
diff
changeset
|
492 cgi.MiniFieldStorage('title:', 'This is an exact match'), |
|
6630baff5f68
Implement exact string search in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5872
diff
changeset
|
493 cgi.MiniFieldStorage('@sort', 'status.name'), |
|
6630baff5f68
Implement exact string search in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5872
diff
changeset
|
494 ] |
|
6630baff5f68
Implement exact string search in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5872
diff
changeset
|
495 results = self.server.get_collection('issue', form) |
|
6630baff5f68
Implement exact string search in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5872
diff
changeset
|
496 self.assertDictEqual(expected, results) |
|
6630baff5f68
Implement exact string search in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5872
diff
changeset
|
497 |
|
5682
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
498 def testOutputFormat(self): |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
499 """ test of @fields and @verbose implementation """ |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
500 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
501 self.maxDiff = 4000 |
|
5865
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
502 self.create_sampledata() |
|
5682
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
503 base_path = self.db.config['TRACKER_WEB'] + 'rest/data/issue/' |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
504 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
505 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
506 # Check formating for issues status=open; @fields and verbose tests |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
507 form = cgi.FieldStorage() |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
508 form.list = [ |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
509 cgi.MiniFieldStorage('status', 'open'), |
|
5825
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
510 cgi.MiniFieldStorage('@fields', 'nosy,status,creator'), |
|
5682
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
511 cgi.MiniFieldStorage('@verbose', '2') |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
512 ] |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
513 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
514 expected={'data': |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
515 {'@total_size': 3, |
|
5825
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
516 'collection': [ { |
|
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
517 'creator': {'id': '3', |
|
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
518 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user/3', |
|
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
519 'username': 'joe'}, |
|
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
520 'status': {'id': '9', |
|
5682
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
521 'name': 'open', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
522 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/status/9'}, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
523 'id': '1', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
524 'nosy': [ |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
525 {'username': 'admin', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
526 'id': '1', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
527 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user/1'}, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
528 {'username': 'anonymous', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
529 'id': '2', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
530 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user/2'} |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
531 ], |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
532 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/1', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
533 'title': 'foo1' }, |
|
5825
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
534 { 'creator': {'id': '3', |
|
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
535 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user/3', |
|
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
536 'username': 'joe'}, |
|
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
537 'status': { |
|
5682
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
538 'id': '9', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
539 'name': 'open', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
540 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/status/9' }, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
541 'id': '2', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
542 'nosy': [ |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
543 {'username': 'joe', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
544 'id': '3', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
545 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user/3'} |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
546 ], |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
547 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/2', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
548 'title': 'foo2'}, |
|
5825
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
549 {'creator': {'id': '3', |
|
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
550 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user/3', |
|
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
551 'username': 'joe'}, |
|
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
552 'status': { |
|
5682
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
553 'id': '9', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
554 'name': 'open', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
555 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/status/9'}, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
556 'id': '3', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
557 'nosy': [], |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
558 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/3', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
559 'title': 'foo5'} |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
560 ]}} |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
561 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
562 results = self.server.get_collection('issue', form) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
563 self.assertDictEqual(expected, results) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
564 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
565 # Check formating for issues status=open; @fields and verbose tests |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
566 form = cgi.FieldStorage() |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
567 form.list = [ |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
568 cgi.MiniFieldStorage('status', 'open') |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
569 # default cgi.MiniFieldStorage('@verbose', '1') |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
570 ] |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
571 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
572 expected={'data': |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
573 {'@total_size': 3, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
574 'collection': [ |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
575 {'id': '1', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
576 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/1',}, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
577 { 'id': '2', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
578 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
579 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/2'}, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
580 {'id': '3', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
581 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/3'} ]}} |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
582 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
583 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
584 results = self.server.get_collection('issue', form) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
585 self.assertDictEqual(expected, results) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
586 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
587 # Generate failure case, unknown field. |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
588 form = cgi.FieldStorage() |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
589 form.list = [ |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
590 cgi.MiniFieldStorage('status', 'open'), |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
591 cgi.MiniFieldStorage('@fields', 'title,foo') |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
592 ] |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
593 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
594 expected={'error': { |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
595 'msg': UsageError("Failed to find property 'foo' " |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
596 "for class issue.",), |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
597 'status': 400}} |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
598 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
599 results = self.server.get_collection('issue', form) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
600 # I tried assertDictEqual but seems it can't handle |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
601 # the exception value of 'msg'. So I am using repr to check. |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
602 self.assertEqual(repr(sorted(expected['error'])), |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
603 repr(sorted(results['error'])) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
604 ) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
605 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
606 # Check formating for issues status=open; @fields and verbose tests |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
607 form = cgi.FieldStorage() |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
608 form.list = [ |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
609 cgi.MiniFieldStorage('status', 'open'), |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
610 cgi.MiniFieldStorage('@fields', 'nosy,status,assignedto'), |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
611 cgi.MiniFieldStorage('@verbose', '0') |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
612 ] |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
613 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
614 expected={'data': { |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
615 '@total_size': 3, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
616 'collection': [ |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
617 {'assignedto': None, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
618 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/1', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
619 'status': '9', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
620 'nosy': ['1', '2'], |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
621 'id': '1'}, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
622 {'assignedto': '3', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
623 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/2', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
624 'status': '9', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
625 'nosy': ['3'], |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
626 'id': '2'}, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
627 {'assignedto': None, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
628 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/3', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
629 'status': '9', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
630 'nosy': [], |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
631 'id': '3'}]}} |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
632 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
633 results = self.server.get_collection('issue', form) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
634 print(results) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
635 self.assertDictEqual(expected, results) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
636 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
637 # check users |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
638 form = cgi.FieldStorage() |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
639 form.list = [ |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
640 cgi.MiniFieldStorage('@fields', 'username,queries,password'), |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
641 cgi.MiniFieldStorage('@verbose', '0') |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
642 ] |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
643 # note this is done as user joe, so we only get queries |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
644 # and password for joe. |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
645 expected = {'data': {'collection': [ |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
646 {'id': '1', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
647 'username': 'admin', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
648 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user/1'}, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
649 {'id': '2', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
650 'username': 'anonymous', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
651 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user/2'}, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
652 {'password': '[password hidden scheme PBKDF2]', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
653 'id': '3', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
654 'queries': [], |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
655 'username': 'joe', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
656 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user/3'}], |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
657 '@total_size': 3}} |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
658 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
659 results = self.server.get_collection('user', form) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
660 self.assertDictEqual(expected, results) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
661 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
662 ## Start testing get_element |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
663 form = cgi.FieldStorage() |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
664 form.list = [ |
|
5825
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
665 cgi.MiniFieldStorage('@fields', 'queries,password,creator'), |
|
5682
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
666 cgi.MiniFieldStorage('@verbose', '2') |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
667 ] |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
668 expected = {'data': { |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
669 'id': '3', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
670 'type': 'user', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
671 '@etag': '', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
672 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user/3', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
673 'attributes': { |
|
5825
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
674 'creator': {'id': '1', |
|
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
675 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user/1', |
|
bcb894bc9740
Add test of protected values for collections and item.
John Rouillard <rouilj@ieee.org>
parents:
5801
diff
changeset
|
676 'username': 'admin'}, |
|
5682
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
677 'password': '[password hidden scheme PBKDF2]', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
678 'queries': [], |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
679 'username': 'joe' |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
680 } |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
681 }} |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
682 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
683 results = self.server.get_element('user', self.joeid, form) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
684 results['data']['@etag'] = '' # etag depends on date, set to empty |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
685 self.assertDictEqual(expected,results) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
686 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
687 form = cgi.FieldStorage() |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
688 form.list = [ |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
689 cgi.MiniFieldStorage('@fields', 'status:priority'), |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
690 cgi.MiniFieldStorage('@verbose', '1') |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
691 ] |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
692 expected = {'data': { |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
693 'type': 'issue', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
694 'id': '3', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
695 'attributes': { |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
696 'status': { |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
697 'id': '9', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
698 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/status/9'}, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
699 'priority': { |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
700 'id': '1', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
701 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/priority/1'}}, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
702 '@etag': '', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
703 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/3'}} |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
704 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
705 results = self.server.get_element('issue', "3", form) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
706 results['data']['@etag'] = '' # etag depends on date, set to empty |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
707 self.assertDictEqual(expected,results) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
708 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
709 form = cgi.FieldStorage() |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
710 form.list = [ |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
711 cgi.MiniFieldStorage('@fields', 'status,priority'), |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
712 cgi.MiniFieldStorage('@verbose', '0') |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
713 ] |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
714 expected = {'data': { |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
715 'type': 'issue', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
716 'id': '3', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
717 'attributes': { |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
718 'status': '9', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
719 'priority': '1'}, |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
720 '@etag': '', |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
721 'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/3'}} |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
722 |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
723 results = self.server.get_element('issue', "3", form) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
724 results['data']['@etag'] = '' # etag depends on date, set to empty |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
725 self.assertDictEqual(expected,results) |
|
e8ac82b8d074
Fix parse of @fields/@attrs with : as separator. Add tests @verbose and @fields.
John Rouillard <rouilj@ieee.org>
parents:
5678
diff
changeset
|
726 |
|
5865
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
727 def testSorting(self): |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
728 self.maxDiff = 4000 |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
729 self.create_sampledata() |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
730 self.db.issue.set('1', status='7') |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
731 self.db.issue.set('2', status='2') |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
732 self.db.issue.set('3', status='2') |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
733 self.db.commit() |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
734 base_path = self.db.config['TRACKER_WEB'] + 'rest/data/issue/' |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
735 # change some data for sorting on later |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
736 form = cgi.FieldStorage() |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
737 form.list = [ |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
738 cgi.MiniFieldStorage('@fields', 'status'), |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
739 cgi.MiniFieldStorage('@sort', 'status,-id'), |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
740 cgi.MiniFieldStorage('@verbose', '0') |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
741 ] |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
742 |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
743 # status is sorted by orderprop (property 'order') |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
744 # which provides the same ordering as the status ID |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
745 expected={'data': { |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
746 '@total_size': 3, |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
747 'collection': [ |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
748 {'link': base_path + '3', 'status': '2', 'id': '3'}, |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
749 {'link': base_path + '2', 'status': '2', 'id': '2'}, |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
750 {'link': base_path + '1', 'status': '7', 'id': '1'}]}} |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
751 |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
752 results = self.server.get_collection('issue', form) |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
753 self.assertDictEqual(expected, results) |
|
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
754 |
|
6090
e097ff5064b8
Allow transitive properties in @fields in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5993
diff
changeset
|
755 def testTransitiveField(self): |
|
e097ff5064b8
Allow transitive properties in @fields in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5993
diff
changeset
|
756 """ Test a transitive property in @fields """ |
|
e097ff5064b8
Allow transitive properties in @fields in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5993
diff
changeset
|
757 base_path = self.db.config['TRACKER_WEB'] + 'rest/data/' |
|
e097ff5064b8
Allow transitive properties in @fields in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5993
diff
changeset
|
758 # create sample data |
|
e097ff5064b8
Allow transitive properties in @fields in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5993
diff
changeset
|
759 self.create_stati() |
|
e097ff5064b8
Allow transitive properties in @fields in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5993
diff
changeset
|
760 self.db.issue.create( |
|
e097ff5064b8
Allow transitive properties in @fields in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5993
diff
changeset
|
761 title='foo4', |
|
e097ff5064b8
Allow transitive properties in @fields in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5993
diff
changeset
|
762 status=self.db.status.lookup('closed'), |
|
e097ff5064b8
Allow transitive properties in @fields in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5993
diff
changeset
|
763 priority=self.db.priority.lookup('critical') |
|
e097ff5064b8
Allow transitive properties in @fields in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5993
diff
changeset
|
764 ) |
|
e097ff5064b8
Allow transitive properties in @fields in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5993
diff
changeset
|
765 # Retrieve all issue @fields=status.name |
|
e097ff5064b8
Allow transitive properties in @fields in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5993
diff
changeset
|
766 form = cgi.FieldStorage() |
|
e097ff5064b8
Allow transitive properties in @fields in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5993
diff
changeset
|
767 form.list = [ |
|
e097ff5064b8
Allow transitive properties in @fields in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5993
diff
changeset
|
768 cgi.MiniFieldStorage('@fields', 'status.name') |
|
e097ff5064b8
Allow transitive properties in @fields in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5993
diff
changeset
|
769 ] |
|
e097ff5064b8
Allow transitive properties in @fields in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5993
diff
changeset
|
770 results = self.server.get_collection('issue', form) |
|
e097ff5064b8
Allow transitive properties in @fields in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5993
diff
changeset
|
771 self.assertEqual(self.dummy_client.response_code, 200) |
|
e097ff5064b8
Allow transitive properties in @fields in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5993
diff
changeset
|
772 |
|
e097ff5064b8
Allow transitive properties in @fields in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5993
diff
changeset
|
773 exp = [ |
|
e097ff5064b8
Allow transitive properties in @fields in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5993
diff
changeset
|
774 {'link': base_path + 'issue/1', 'id': '1', 'status.name': 'closed'}] |
|
e097ff5064b8
Allow transitive properties in @fields in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5993
diff
changeset
|
775 self.assertEqual(results['data']['collection'], exp) |
|
e097ff5064b8
Allow transitive properties in @fields in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5993
diff
changeset
|
776 |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
777 def testFilter(self): |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
778 """ |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
779 Retrieve all three users |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
780 obtain data for 'joe' |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
781 """ |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
782 # create sample data |
|
5865
04deafac71ab
Implement sorting of collections in REST API
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5842
diff
changeset
|
783 self.create_stati() |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
784 self.db.issue.create( |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
785 title='foo4', |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
786 status=self.db.status.lookup('closed'), |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
787 priority=self.db.priority.lookup('critical') |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
788 ) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
789 self.db.issue.create( |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
790 title='foo1', |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
791 status=self.db.status.lookup('open'), |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
792 priority=self.db.priority.lookup('normal') |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
793 ) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
794 issue_open_norm = self.db.issue.create( |
|
5842
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
795 title='foo2 normal', |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
796 status=self.db.status.lookup('open'), |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
797 priority=self.db.priority.lookup('normal') |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
798 ) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
799 issue_closed_norm = self.db.issue.create( |
|
5842
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
800 title='foo3 closed normal', |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
801 status=self.db.status.lookup('closed'), |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
802 priority=self.db.priority.lookup('normal') |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
803 ) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
804 issue_closed_crit = self.db.issue.create( |
|
5842
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
805 title='foo4 closed', |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
806 status=self.db.status.lookup('closed'), |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
807 priority=self.db.priority.lookup('critical') |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
808 ) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
809 issue_open_crit = self.db.issue.create( |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
810 title='foo5', |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
811 status=self.db.status.lookup('open'), |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
812 priority=self.db.priority.lookup('critical') |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
813 ) |
|
5623
1c4adab65faf
use config file setting for creating tracker uri
John Rouillard <rouilj@ieee.org>
parents:
5604
diff
changeset
|
814 base_path = self.db.config['TRACKER_WEB'] + 'rest/data/issue/' |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
815 |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
816 # Retrieve all issue status=open |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
817 form = cgi.FieldStorage() |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
818 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
819 cgi.MiniFieldStorage('status', 'open') |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
820 ] |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
821 results = self.server.get_collection('issue', form) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
822 self.assertEqual(self.dummy_client.response_code, 200) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
823 self.assertIn(get_obj(base_path, issue_open_norm), |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
824 results['data']['collection']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
825 self.assertIn(get_obj(base_path, issue_open_crit), |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
826 results['data']['collection']) |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
827 self.assertNotIn( |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
828 get_obj(base_path, issue_closed_norm), |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
829 results['data']['collection'] |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
830 ) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
831 |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
832 # Retrieve all issue status=closed and priority=critical |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
833 form = cgi.FieldStorage() |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
834 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
835 cgi.MiniFieldStorage('status', 'closed'), |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
836 cgi.MiniFieldStorage('priority', 'critical') |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
837 ] |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
838 results = self.server.get_collection('issue', form) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
839 self.assertEqual(self.dummy_client.response_code, 200) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
840 self.assertIn(get_obj(base_path, issue_closed_crit), |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
841 results['data']['collection']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
842 self.assertNotIn(get_obj(base_path, issue_open_crit), |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
843 results['data']['collection']) |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
844 self.assertNotIn( |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
845 get_obj(base_path, issue_closed_norm), |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
846 results['data']['collection'] |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
847 ) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
848 |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
849 # Retrieve all issue status=closed and priority=normal,critical |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
850 form = cgi.FieldStorage() |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
851 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
852 cgi.MiniFieldStorage('status', 'closed'), |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
853 cgi.MiniFieldStorage('priority', 'normal,critical') |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
854 ] |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
855 results = self.server.get_collection('issue', form) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
856 self.assertEqual(self.dummy_client.response_code, 200) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
857 self.assertIn(get_obj(base_path, issue_closed_crit), |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
858 results['data']['collection']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
859 self.assertIn(get_obj(base_path, issue_closed_norm), |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
860 results['data']['collection']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
861 self.assertNotIn(get_obj(base_path, issue_open_crit), |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
862 results['data']['collection']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
863 self.assertNotIn(get_obj(base_path, issue_open_norm), |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
864 results['data']['collection']) |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
865 |
|
5842
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
866 # Retrieve all issue status=closed and priority=normal,critical |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
867 # using duplicate priority key's. |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
868 form = cgi.FieldStorage() |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
869 form.list = [ |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
870 cgi.MiniFieldStorage('status', 'closed'), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
871 cgi.MiniFieldStorage('priority', 'normal'), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
872 cgi.MiniFieldStorage('priority', 'critical') |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
873 ] |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
874 results = self.server.get_collection('issue', form) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
875 self.assertEqual(self.dummy_client.response_code, 200) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
876 self.assertIn(get_obj(base_path, issue_closed_crit), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
877 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
878 self.assertIn(get_obj(base_path, issue_closed_norm), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
879 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
880 self.assertNotIn(get_obj(base_path, issue_open_crit), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
881 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
882 self.assertNotIn(get_obj(base_path, issue_open_norm), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
883 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
884 |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
885 # Retrieve all issues with title containing |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
886 # closed, normal and 3 using duplicate title filterkeys |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
887 form = cgi.FieldStorage() |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
888 form.list = [ |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
889 cgi.MiniFieldStorage('title', 'closed'), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
890 cgi.MiniFieldStorage('title', 'normal'), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
891 cgi.MiniFieldStorage('title', '3') |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
892 ] |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
893 results = self.server.get_collection('issue', form) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
894 self.assertEqual(self.dummy_client.response_code, 200) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
895 self.assertNotIn(get_obj(base_path, issue_closed_crit), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
896 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
897 self.assertIn(get_obj(base_path, issue_closed_norm), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
898 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
899 self.assertNotIn(get_obj(base_path, issue_open_crit), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
900 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
901 self.assertNotIn(get_obj(base_path, issue_open_norm), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
902 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
903 self.assertEqual(len(results['data']['collection']), 1) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
904 |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
905 # Retrieve all issues (no hits) with title containing |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
906 # closed, normal and foo3 in this order using title filter |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
907 form = cgi.FieldStorage() |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
908 form.list = [ |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
909 cgi.MiniFieldStorage('title', 'closed normal foo3') |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
910 ] |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
911 results = self.server.get_collection('issue', form) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
912 self.assertEqual(self.dummy_client.response_code, 200) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
913 self.assertNotIn(get_obj(base_path, issue_closed_crit), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
914 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
915 self.assertNotIn(get_obj(base_path, issue_closed_norm), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
916 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
917 self.assertNotIn(get_obj(base_path, issue_open_crit), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
918 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
919 self.assertNotIn(get_obj(base_path, issue_open_norm), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
920 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
921 self.assertEqual(len(results['data']['collection']), 0) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
922 |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
923 # Retrieve all issues with title containing |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
924 # foo3, closed and normal in this order using title filter |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
925 form = cgi.FieldStorage() |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
926 form.list = [ |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
927 cgi.MiniFieldStorage('title', 'foo3 closed normal') |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
928 ] |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
929 results = self.server.get_collection('issue', form) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
930 self.assertEqual(self.dummy_client.response_code, 200) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
931 self.assertNotIn(get_obj(base_path, issue_closed_crit), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
932 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
933 self.assertIn(get_obj(base_path, issue_closed_norm), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
934 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
935 self.assertNotIn(get_obj(base_path, issue_open_crit), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
936 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
937 self.assertNotIn(get_obj(base_path, issue_open_norm), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
938 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
939 self.assertEqual(len(results['data']['collection']), 1) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
940 |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
941 # Retrieve all issues with word closed in title |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
942 form = cgi.FieldStorage() |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
943 form.list = [ |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
944 cgi.MiniFieldStorage('title', 'closed'), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
945 ] |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
946 results = self.server.get_collection('issue', form) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
947 self.assertEqual(self.dummy_client.response_code, 200) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
948 self.assertIn(get_obj(base_path, issue_closed_crit), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
949 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
950 self.assertIn(get_obj(base_path, issue_closed_norm), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
951 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
952 self.assertNotIn(get_obj(base_path, issue_open_crit), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
953 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
954 self.assertNotIn(get_obj(base_path, issue_open_norm), |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
955 results['data']['collection']) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
956 self.assertEqual(len(results['data']['collection']), 2) |
|
9c6617857032
Support use of duplicate rest filters keys. So URL's like:
John Rouillard <rouilj@ieee.org>
parents:
5825
diff
changeset
|
957 |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
958 def testPagination(self): |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
959 """ |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
960 Test pagination. page_size is required and is an integer |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
961 starting at 1. page_index is optional and is an integer |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
962 starting at 1. Verify that pagination links are present |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
963 if paging, @total_size and X-Count-Total header match |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
964 number of items. |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
965 """ |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
966 # create sample data |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
967 for i in range(0, random.randint(8,15)): |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
968 self.db.issue.create(title='foo' + str(i)) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
969 |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
970 # Retrieving all the issues |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
971 results = self.server.get_collection('issue', self.empty_form) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
972 self.assertEqual(self.dummy_client.response_code, 200) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
973 total_length = len(results['data']['collection']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
974 # Verify no pagination links if paging not used |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
975 self.assertFalse('@links' in results['data']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
976 self.assertEqual(results['data']['@total_size'], total_length) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
977 self.assertEqual( |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
978 self.dummy_client.additional_headers["X-Count-Total"], |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
979 str(total_length) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
980 ) |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
981 |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
982 |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
983 # Pagination will be 45% of the total result |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
984 # So 2 full pages and 1 partial page. |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
985 page_size = total_length * 45 // 100 |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
986 page_one_expected = page_size |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
987 page_two_expected = page_size |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
988 page_three_expected = total_length - (2*page_one_expected) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
989 base_url="http://tracker.example/cgi-bin/roundup.cgi/" \ |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
990 "bugs/rest/data/issue" |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
991 |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
992 # Retrieve page 1 |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
993 form = cgi.FieldStorage() |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
994 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
995 cgi.MiniFieldStorage('@page_size', page_size), |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
996 cgi.MiniFieldStorage('@page_index', 1) |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
997 ] |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
998 results = self.server.get_collection('issue', form) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
999 self.assertEqual(self.dummy_client.response_code, 200) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1000 self.assertEqual(len(results['data']['collection']), |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1001 page_one_expected) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1002 self.assertTrue('@links' in results['data']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1003 self.assertTrue('self' in results['data']['@links']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1004 self.assertTrue('next' in results['data']['@links']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1005 self.assertFalse('prev' in results['data']['@links']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1006 self.assertEqual(results['data']['@links']['self'][0]['uri'], |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1007 "%s?@page_index=1&@page_size=%s"%(base_url,page_size)) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1008 self.assertEqual(results['data']['@links']['next'][0]['uri'], |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1009 "%s?@page_index=2&@page_size=%s"%(base_url,page_size)) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1010 |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1011 page_one_results = results # save this for later |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
1012 |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
1013 # Retrieve page 2 |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
1014 form = cgi.FieldStorage() |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
1015 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1016 cgi.MiniFieldStorage('@page_size', page_size), |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1017 cgi.MiniFieldStorage('@page_index', 2) |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
1018 ] |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
1019 results = self.server.get_collection('issue', form) |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
1020 self.assertEqual(self.dummy_client.response_code, 200) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1021 self.assertEqual(len(results['data']['collection']), page_two_expected) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1022 self.assertTrue('@links' in results['data']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1023 self.assertTrue('self' in results['data']['@links']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1024 self.assertTrue('next' in results['data']['@links']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1025 self.assertTrue('prev' in results['data']['@links']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1026 self.assertEqual(results['data']['@links']['self'][0]['uri'], |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1027 "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue?@page_index=2&@page_size=%s"%page_size) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1028 self.assertEqual(results['data']['@links']['next'][0]['uri'], |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1029 "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue?@page_index=3&@page_size=%s"%page_size) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1030 self.assertEqual(results['data']['@links']['prev'][0]['uri'], |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1031 "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue?@page_index=1&@page_size=%s"%page_size) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1032 self.assertEqual(results['data']['@links']['self'][0]['rel'], |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1033 'self') |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1034 self.assertEqual(results['data']['@links']['next'][0]['rel'], |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1035 'next') |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1036 self.assertEqual(results['data']['@links']['prev'][0]['rel'], |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1037 'prev') |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
1038 |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1039 # Retrieve page 3 |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1040 form = cgi.FieldStorage() |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1041 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1042 cgi.MiniFieldStorage('@page_size', page_size), |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1043 cgi.MiniFieldStorage('@page_index', 3) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1044 ] |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1045 results = self.server.get_collection('issue', form) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1046 self.assertEqual(self.dummy_client.response_code, 200) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1047 self.assertEqual(len(results['data']['collection']), page_three_expected) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1048 self.assertTrue('@links' in results['data']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1049 self.assertTrue('self' in results['data']['@links']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1050 self.assertFalse('next' in results['data']['@links']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1051 self.assertTrue('prev' in results['data']['@links']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1052 self.assertEqual(results['data']['@links']['self'][0]['uri'], |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1053 "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue?@page_index=3&@page_size=%s"%page_size) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1054 self.assertEqual(results['data']['@links']['prev'][0]['uri'], |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1055 "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue?@page_index=2&@page_size=%s"%page_size) |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1056 |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1057 # Verify that page_index is optional |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1058 # Should start at page 1 |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1059 form = cgi.FieldStorage() |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1060 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
1061 cgi.MiniFieldStorage('@page_size', page_size), |
|
5639
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1062 ] |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1063 results = self.server.get_collection('issue', form) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1064 self.assertEqual(self.dummy_client.response_code, 200) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1065 self.assertEqual(len(results['data']['collection']), page_size) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1066 self.assertTrue('@links' in results['data']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1067 self.assertTrue('self' in results['data']['@links']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1068 self.assertTrue('next' in results['data']['@links']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1069 self.assertFalse('prev' in results['data']['@links']) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1070 self.assertEqual(page_one_results, results) |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1071 |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1072 # FIXME add tests for out of range once we decide what response |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1073 # is needed to: |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1074 # page_size < 0 |
|
f576957cbb1f
Add support for prev/next/self links when returning paginated results.
John Rouillard <rouilj@ieee.org>
parents:
5630
diff
changeset
|
1075 # page_index < 0 |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1076 |
|
5732
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1077 def testRestRateLimit(self): |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1078 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1079 self.db.config['WEB_API_CALLS_PER_INTERVAL'] = 20 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1080 self.db.config['WEB_API_INTERVAL_IN_SEC'] = 60 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1081 |
|
5733
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
1082 # Otk code never passes through the |
|
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
1083 # retry loop. Not sure why but I can force it |
|
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
1084 # through the loop by setting the internal _db_type |
|
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
1085 # setting once the db is created by the previous command. |
|
5734
5cd9ac3daed7
Fixes for mysql and postgresql primary db.
John Rouillard <rouilj@ieee.org>
parents:
5733
diff
changeset
|
1086 try: |
|
5cd9ac3daed7
Fixes for mysql and postgresql primary db.
John Rouillard <rouilj@ieee.org>
parents:
5733
diff
changeset
|
1087 self.db.Otk._db_type = whichdb("%s/%s"%(self.db.Otk.dir, self.db.Otk.name)) |
|
5cd9ac3daed7
Fixes for mysql and postgresql primary db.
John Rouillard <rouilj@ieee.org>
parents:
5733
diff
changeset
|
1088 except AttributeError: |
|
5cd9ac3daed7
Fixes for mysql and postgresql primary db.
John Rouillard <rouilj@ieee.org>
parents:
5733
diff
changeset
|
1089 # if dir attribute doesn't exist the primary db is not |
|
5cd9ac3daed7
Fixes for mysql and postgresql primary db.
John Rouillard <rouilj@ieee.org>
parents:
5733
diff
changeset
|
1090 # sqlite or anydbm. So don't need to exercise code. |
|
5cd9ac3daed7
Fixes for mysql and postgresql primary db.
John Rouillard <rouilj@ieee.org>
parents:
5733
diff
changeset
|
1091 pass |
|
5733
62bdcb874433
Test code was not testing the loop that retries otk database updates
John Rouillard <rouilj@ieee.org>
parents:
5732
diff
changeset
|
1092 |
|
5732
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1093 print("Now realtime start:", datetime.utcnow()) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1094 # don't set an accept header; json should be the default |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1095 # use up all our allowed api calls |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1096 for i in range(20): |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1097 # i is 0 ... 19 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1098 self.client_error_message = [] |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
1099 self.server.client.env.update({'REQUEST_METHOD': 'GET'}) |
|
5732
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1100 results = self.server.dispatch('GET', |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1101 "/rest/data/user/%s/realname"%self.joeid, |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1102 self.empty_form) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1103 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1104 # is successful |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1105 self.assertEqual(self.server.client.response_code, 200) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1106 # does not have Retry-After header as we have |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1107 # suceeded with this query |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1108 self.assertFalse("Retry-After" in |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1109 self.server.client.additional_headers) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1110 # remaining count is correct |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1111 self.assertEqual( |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1112 self.server.client.additional_headers["X-RateLimit-Remaining"], |
|
5937
5d0873a4de4a
fix rate limit headers - were ints/floats need to be strings
John Rouillard <rouilj@ieee.org>
parents:
5879
diff
changeset
|
1113 str(self.db.config['WEB_API_CALLS_PER_INTERVAL'] -1 - i) |
|
5732
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1114 ) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1115 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1116 # trip limit |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1117 self.server.client.additional_headers.clear() |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1118 results = self.server.dispatch('GET', |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1119 "/rest/data/user/%s/realname"%self.joeid, |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1120 self.empty_form) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1121 print(results) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1122 self.assertEqual(self.server.client.response_code, 429) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1123 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1124 self.assertEqual( |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1125 self.server.client.additional_headers["X-RateLimit-Limit"], |
|
5937
5d0873a4de4a
fix rate limit headers - were ints/floats need to be strings
John Rouillard <rouilj@ieee.org>
parents:
5879
diff
changeset
|
1126 str(self.db.config['WEB_API_CALLS_PER_INTERVAL'])) |
|
5732
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1127 self.assertEqual( |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1128 self.server.client.additional_headers["X-RateLimit-Limit-Period"], |
|
5937
5d0873a4de4a
fix rate limit headers - were ints/floats need to be strings
John Rouillard <rouilj@ieee.org>
parents:
5879
diff
changeset
|
1129 str(self.db.config['WEB_API_INTERVAL_IN_SEC'])) |
|
5732
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1130 self.assertEqual( |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1131 self.server.client.additional_headers["X-RateLimit-Remaining"], |
|
5937
5d0873a4de4a
fix rate limit headers - were ints/floats need to be strings
John Rouillard <rouilj@ieee.org>
parents:
5879
diff
changeset
|
1132 '0') |
|
5732
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1133 # value will be almost 60. Allow 1-2 seconds for all 20 rounds. |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1134 self.assertAlmostEqual( |
|
5937
5d0873a4de4a
fix rate limit headers - were ints/floats need to be strings
John Rouillard <rouilj@ieee.org>
parents:
5879
diff
changeset
|
1135 float(self.server.client.additional_headers["X-RateLimit-Reset"]), |
|
6660
32c6e98e5a21
Larger delta for X-RateLimit-Reset tests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6554
diff
changeset
|
1136 59, delta=5) |
|
5732
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1137 self.assertEqual( |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1138 str(self.server.client.additional_headers["Retry-After"]), |
|
5937
5d0873a4de4a
fix rate limit headers - were ints/floats need to be strings
John Rouillard <rouilj@ieee.org>
parents:
5879
diff
changeset
|
1139 "3") # check as string |
|
5732
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1140 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1141 print("Reset:", self.server.client.additional_headers["X-RateLimit-Reset"]) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1142 print("Now realtime pre-sleep:", datetime.utcnow()) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1143 sleep(3.1) # sleep as requested so we can do another login |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1144 print("Now realtime post-sleep:", datetime.utcnow()) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1145 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1146 # this should succeed |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1147 self.server.client.additional_headers.clear() |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1148 results = self.server.dispatch('GET', |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1149 "/rest/data/user/%s/realname"%self.joeid, |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1150 self.empty_form) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1151 print(results) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1152 print("Reset:", self.server.client.additional_headers["X-RateLimit-Reset-date"]) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1153 print("Now realtime:", datetime.utcnow()) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1154 print("Now ts header:", self.server.client.additional_headers["Now"]) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1155 print("Now date header:", self.server.client.additional_headers["Now-date"]) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1156 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1157 self.assertEqual(self.server.client.response_code, 200) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1158 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1159 self.assertEqual( |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1160 self.server.client.additional_headers["X-RateLimit-Limit"], |
|
5937
5d0873a4de4a
fix rate limit headers - were ints/floats need to be strings
John Rouillard <rouilj@ieee.org>
parents:
5879
diff
changeset
|
1161 str(self.db.config['WEB_API_CALLS_PER_INTERVAL'])) |
|
5732
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1162 self.assertEqual( |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1163 self.server.client.additional_headers["X-RateLimit-Limit-Period"], |
|
5937
5d0873a4de4a
fix rate limit headers - were ints/floats need to be strings
John Rouillard <rouilj@ieee.org>
parents:
5879
diff
changeset
|
1164 str(self.db.config['WEB_API_INTERVAL_IN_SEC'])) |
|
5732
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1165 self.assertEqual( |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1166 self.server.client.additional_headers["X-RateLimit-Remaining"], |
|
5937
5d0873a4de4a
fix rate limit headers - were ints/floats need to be strings
John Rouillard <rouilj@ieee.org>
parents:
5879
diff
changeset
|
1167 '0') |
|
5732
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1168 self.assertFalse("Retry-After" in |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1169 self.server.client.additional_headers) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1170 # we still need to wait a minute for everything to clear |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1171 self.assertAlmostEqual( |
|
5937
5d0873a4de4a
fix rate limit headers - were ints/floats need to be strings
John Rouillard <rouilj@ieee.org>
parents:
5879
diff
changeset
|
1172 float(self.server.client.additional_headers["X-RateLimit-Reset"]), |
|
6660
32c6e98e5a21
Larger delta for X-RateLimit-Reset tests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6554
diff
changeset
|
1173 59, delta=5) |
|
5732
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1174 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1175 # and make sure we need to wait another three seconds |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1176 # as we consumed the last api call |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1177 results = self.server.dispatch('GET', |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1178 "/rest/data/user/%s/realname"%self.joeid, |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1179 self.empty_form) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1180 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1181 self.assertEqual(self.server.client.response_code, 429) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1182 self.assertEqual( |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1183 str(self.server.client.additional_headers["Retry-After"]), |
|
5937
5d0873a4de4a
fix rate limit headers - were ints/floats need to be strings
John Rouillard <rouilj@ieee.org>
parents:
5879
diff
changeset
|
1184 "3") # check as string |
|
5732
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1185 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1186 json_dict = json.loads(b2s(results)) |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1187 self.assertEqual(json_dict['error']['msg'], |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1188 "Api rate limits exceeded. Please wait: 3 seconds.") |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1189 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1190 # reset rest params |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1191 self.db.config['WEB_API_CALLS_PER_INTERVAL'] = 0 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1192 self.db.config['WEB_API_INTERVAL_IN_SEC'] = 3600 |
|
0e6ed3d72f92
Rest rate limiting code first commit. It is a bit rough and turned off
John Rouillard <rouilj@ieee.org>
parents:
5729
diff
changeset
|
1193 |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1194 def testEtagGeneration(self): |
|
5668
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
1195 ''' Make sure etag generation is stable |
|
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
1196 |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1197 This mocks date.Date() when creating the target to be |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1198 etagged. Differing dates make this test impossible. |
|
5668
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
1199 ''' |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1200 from roundup import date |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1201 |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1202 originalDate = date.Date |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1203 |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1204 dummy=date.Date('2000-06-26.00:34:02.0') |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1205 |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1206 # is a closure the best way to return a static Date object?? |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1207 def dummyDate(adate=None): |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1208 def dummyClosure(adate=None, translator=None): |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1209 return dummy |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1210 return dummyClosure |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1211 |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1212 date.Date = dummyDate() |
|
5728
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
1213 try: |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
1214 newuser = self.db.user.create( |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
1215 username='john', |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
1216 password=password.Password('random1', scheme='plaintext'), |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
1217 address='random1@home.org', |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
1218 realname='JohnRandom', |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
1219 roles='User,Admin' |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
1220 ) |
|
5668
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
1221 |
|
5728
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
1222 # verify etag matches what we calculated in the past |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
1223 node = self.db.user.getnode(newuser) |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
1224 etag = calculate_etag(node, self.db.config['WEB_SECRET_KEY']) |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
1225 items = node.items(protected=True) # include every item |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
1226 print(repr(sorted(items))) |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
1227 print(etag) |
|
6256
29c6dc8ed004
Test handling of unset transitive link field.
John Rouillard <rouilj@ieee.org>
parents:
6185
diff
changeset
|
1228 self.assertEqual(etag, '"07c3a7f214d394cf46220e294a5a53c8"') |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1229 |
|
5728
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
1230 # modify key and verify we have a different etag |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
1231 etag = calculate_etag(node, self.db.config['WEB_SECRET_KEY'] + "a") |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
1232 items = node.items(protected=True) # include every item |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
1233 print(repr(sorted(items))) |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
1234 print(etag) |
|
6256
29c6dc8ed004
Test handling of unset transitive link field.
John Rouillard <rouilj@ieee.org>
parents:
6185
diff
changeset
|
1235 self.assertNotEqual(etag, '"07c3a7f214d394cf46220e294a5a53c8"') |
|
5668
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
1236 |
|
5728
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
1237 # change data and verify we have a different etag |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
1238 node.username="Paul" |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
1239 etag = calculate_etag(node, self.db.config['WEB_SECRET_KEY']) |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
1240 items = node.items(protected=True) # include every item |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
1241 print(repr(sorted(items))) |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
1242 print(etag) |
|
6256
29c6dc8ed004
Test handling of unset transitive link field.
John Rouillard <rouilj@ieee.org>
parents:
6185
diff
changeset
|
1243 self.assertEqual(etag, '"d655801d3a6d51e32891531b06ccecfa"') |
|
5728
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
1244 finally: |
|
bfd28644fe43
In suggestion from Joseph Myers, put test code in a try: finally: block
John Rouillard <rouilj@ieee.org>
parents:
5727
diff
changeset
|
1245 date.Date = originalDate |
|
5668
a4bb88a1a643
A fix for https://issues.roundup-tracker.org/issue2551034
John Rouillard <rouilj@ieee.org>
parents:
5656
diff
changeset
|
1246 |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1247 def testEtagProcessing(self): |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1248 ''' |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1249 Etags can come from two places: |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
1250 If-Match http header |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1251 @etags value posted in the form |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1252 |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1253 Both will be checked if availble. If either one |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1254 fails, the etag check will fail. |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1255 |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1256 Run over header only, etag in form only, both, |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1257 each one broke and no etag. Use the put command |
|
5653
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
1258 to trigger the etag checking code. |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1259 ''' |
|
6539
f8df7fed18f6
issue2551175 - Make ETag content-encoding aware.
John Rouillard <rouilj@ieee.org>
parents:
6525
diff
changeset
|
1260 for mode in ('header', 'header-gzip', 'etag', 'etag-br', |
|
f8df7fed18f6
issue2551175 - Make ETag content-encoding aware.
John Rouillard <rouilj@ieee.org>
parents:
6525
diff
changeset
|
1261 'both', 'brokenheader', 'brokenetag', 'none'): |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1262 try: |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1263 # clean up any old header |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1264 del(self.headers) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1265 except AttributeError: |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1266 pass |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1267 |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1268 form = cgi.FieldStorage() |
|
5726
e199d0ae4a25
issue2551033: prevent reverse engineering hidden data by using etags
John Rouillard <rouilj@ieee.org>
parents:
5711
diff
changeset
|
1269 etag = calculate_etag(self.db.user.getnode(self.joeid), |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1270 self.db.config['WEB_SECRET_KEY']) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1271 form.list = [ |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1272 cgi.MiniFieldStorage('data', 'Joe Doe Doe'), |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1273 ] |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1274 |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1275 if mode == 'header': |
|
5645
7f4d19867123
Make print into function call for python3 compatibility.
John Rouillard <rouilj@ieee.org>
parents:
5643
diff
changeset
|
1276 print("Mode = %s"%mode) |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
1277 self.headers = {'if-match': etag} |
|
6539
f8df7fed18f6
issue2551175 - Make ETag content-encoding aware.
John Rouillard <rouilj@ieee.org>
parents:
6525
diff
changeset
|
1278 elif mode == 'header-gzip': |
|
f8df7fed18f6
issue2551175 - Make ETag content-encoding aware.
John Rouillard <rouilj@ieee.org>
parents:
6525
diff
changeset
|
1279 print("Mode = %s"%mode) |
|
f8df7fed18f6
issue2551175 - Make ETag content-encoding aware.
John Rouillard <rouilj@ieee.org>
parents:
6525
diff
changeset
|
1280 gzip_etag = etag[:-1] + "-gzip" + etag[-1:] |
|
f8df7fed18f6
issue2551175 - Make ETag content-encoding aware.
John Rouillard <rouilj@ieee.org>
parents:
6525
diff
changeset
|
1281 self.headers = {'if-match': gzip_etag} |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1282 elif mode == 'etag': |
|
5645
7f4d19867123
Make print into function call for python3 compatibility.
John Rouillard <rouilj@ieee.org>
parents:
5643
diff
changeset
|
1283 print("Mode = %s"%mode) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1284 form.list.append(cgi.MiniFieldStorage('@etag', etag)) |
|
6539
f8df7fed18f6
issue2551175 - Make ETag content-encoding aware.
John Rouillard <rouilj@ieee.org>
parents:
6525
diff
changeset
|
1285 elif mode == 'etag-br': |
|
f8df7fed18f6
issue2551175 - Make ETag content-encoding aware.
John Rouillard <rouilj@ieee.org>
parents:
6525
diff
changeset
|
1286 print("Mode = %s"%mode) |
|
f8df7fed18f6
issue2551175 - Make ETag content-encoding aware.
John Rouillard <rouilj@ieee.org>
parents:
6525
diff
changeset
|
1287 br_etag = etag[:-1] + "-br" + etag[-1:] |
|
f8df7fed18f6
issue2551175 - Make ETag content-encoding aware.
John Rouillard <rouilj@ieee.org>
parents:
6525
diff
changeset
|
1288 form.list.append(cgi.MiniFieldStorage('@etag', br_etag)) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1289 elif mode == 'both': |
|
5645
7f4d19867123
Make print into function call for python3 compatibility.
John Rouillard <rouilj@ieee.org>
parents:
5643
diff
changeset
|
1290 print("Mode = %s"%mode) |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1291 self.headers = {'etag': etag} |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1292 form.list.append(cgi.MiniFieldStorage('@etag', etag)) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1293 elif mode == 'brokenheader': |
|
5645
7f4d19867123
Make print into function call for python3 compatibility.
John Rouillard <rouilj@ieee.org>
parents:
5643
diff
changeset
|
1294 print("Mode = %s"%mode) |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
1295 self.headers = {'if-match': 'bad'} |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1296 form.list.append(cgi.MiniFieldStorage('@etag', etag)) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1297 elif mode == 'brokenetag': |
|
5645
7f4d19867123
Make print into function call for python3 compatibility.
John Rouillard <rouilj@ieee.org>
parents:
5643
diff
changeset
|
1298 print("Mode = %s"%mode) |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
1299 self.headers = {'if-match': etag} |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1300 form.list.append(cgi.MiniFieldStorage('@etag', 'bad')) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1301 elif mode == 'none': |
|
5645
7f4d19867123
Make print into function call for python3 compatibility.
John Rouillard <rouilj@ieee.org>
parents:
5643
diff
changeset
|
1302 print( "Mode = %s"%mode) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1303 else: |
|
6539
f8df7fed18f6
issue2551175 - Make ETag content-encoding aware.
John Rouillard <rouilj@ieee.org>
parents:
6525
diff
changeset
|
1304 self.fail("unknown mode '%s' found"%mode) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1305 |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1306 results = self.server.put_attribute( |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1307 'user', self.joeid, 'realname', form |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1308 ) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1309 if mode not in ('brokenheader', 'brokenetag', 'none'): |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1310 self.assertEqual(self.dummy_client.response_code, 200) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1311 else: |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1312 self.assertEqual(self.dummy_client.response_code, 412) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
1313 |
|
5993
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1314 def testBinaryFieldStorage(self): |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1315 ''' attempt to exercise all paths in the BinaryFieldStorage |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1316 class |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1317 ''' |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1318 |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1319 expected={ "data": { |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1320 "link": "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/1", |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1321 "id": "1" |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1322 } |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1323 } |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1324 |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1325 body=b'{ "title": "Joe Doe has problems", \ |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1326 "nosy": [ "1", "3" ], \ |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1327 "assignedto": "2", \ |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1328 "abool": true, \ |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1329 "afloat": 2.3, \ |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1330 "anint": 567890 \ |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1331 }' |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1332 env = { "CONTENT_TYPE": "application/json", |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1333 "CONTENT_LENGTH": len(body), |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1334 "REQUEST_METHOD": "POST" |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1335 } |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
1336 self.server.client.env.update(env) |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
1337 |
|
5993
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1338 headers={"accept": "application/json; version=1", |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1339 "content-type": env['CONTENT_TYPE'], |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1340 "content-length": env['CONTENT_LENGTH'], |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1341 } |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1342 self.headers=headers |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1343 # we need to generate a FieldStorage the looks like |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1344 # FieldStorage(None, None, 'string') rather than |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1345 # FieldStorage(None, None, []) |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1346 body_file=BytesIO(body) # FieldStorage needs a file |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1347 form = client.BinaryFieldStorage(body_file, |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1348 headers=headers, |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1349 environ=env) |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1350 self.server.client.request.headers.get=self.get_header |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1351 results = self.server.dispatch(env["REQUEST_METHOD"], |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1352 "/rest/data/issue", |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1353 form) |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1354 json_dict = json.loads(b2s(results)) |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1355 self.assertEqual(json_dict,expected) |
|
a0ab2c5d1c2a
Add test for BinaryFieldStorage.
John Rouillard <rouilj@ieee.org>
parents:
5987
diff
changeset
|
1356 |
|
5690
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1357 def testDispatchPost(self): |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1358 """ |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1359 run POST through rest dispatch(). This also tests |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1360 sending json payload through code as dispatch is the |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1361 code that changes json payload into something we can |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1362 process. |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1363 """ |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1364 |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1365 # TEST #0 |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1366 # POST: issue make joe assignee and admin and demo as |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1367 # nosy |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1368 # simulate: /rest/data/issue |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1369 body=b'{ "title": "Joe Doe has problems", \ |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1370 "nosy": [ "1", "3" ], \ |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1371 "assignedto": "2", \ |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1372 "abool": true, \ |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1373 "afloat": 2.3, \ |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1374 "anint": 567890 \ |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1375 }' |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1376 env = { "CONTENT_TYPE": "application/json", |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1377 "CONTENT_LENGTH": len(body), |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1378 "REQUEST_METHOD": "POST" |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1379 } |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
1380 self.server.client.env.update(env) |
|
5690
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1381 headers={"accept": "application/json; version=1", |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1382 "content-type": env['CONTENT_TYPE'], |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1383 "content-length": env['CONTENT_LENGTH'], |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1384 } |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1385 self.headers=headers |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1386 # we need to generate a FieldStorage the looks like |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1387 # FieldStorage(None, None, 'string') rather than |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1388 # FieldStorage(None, None, []) |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1389 body_file=BytesIO(body) # FieldStorage needs a file |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1390 form = client.BinaryFieldStorage(body_file, |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1391 headers=headers, |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1392 environ=env) |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1393 self.server.client.request.headers.get=self.get_header |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1394 results = self.server.dispatch(env["REQUEST_METHOD"], |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1395 "/rest/data/issue", |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1396 form) |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1397 |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1398 print(results) |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1399 self.assertEqual(self.server.client.response_code, 201) |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1400 json_dict = json.loads(b2s(results)) |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1401 self.assertEqual(json_dict['data']['link'], |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1402 "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/1") |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1403 self.assertEqual(json_dict['data']['id'], "1") |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
1404 self.server.client.env.update({'REQUEST_METHOD': 'GET'}) |
|
5690
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1405 results = self.server.dispatch('GET', |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1406 "/rest/data/issue/1", self.empty_form) |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1407 print(results) |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1408 json_dict = json.loads(b2s(results)) |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1409 self.assertEqual(json_dict['data']['link'], |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1410 "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue/1") |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1411 self.assertEqual(json_dict['data']['attributes']['abool'], True) |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1412 self.assertEqual(json_dict['data']['attributes']['afloat'], 2.3) |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1413 self.assertEqual(json_dict['data']['attributes']['anint'], 567890) |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1414 self.assertEqual(len(json_dict['data']['attributes']['nosy']), 3) |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1415 self.assertEqual(json_dict['data']['attributes']\ |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1416 ['assignedto']['link'], |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1417 "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user/2") |
|
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1418 |
|
6317
ea0becc9fdb9
Test delete of class and use of @protected.
John Rouillard <rouilj@ieee.org>
parents:
6316
diff
changeset
|
1419 |
|
ea0becc9fdb9
Test delete of class and use of @protected.
John Rouillard <rouilj@ieee.org>
parents:
6316
diff
changeset
|
1420 def testDispatchDelete(self): |
|
ea0becc9fdb9
Test delete of class and use of @protected.
John Rouillard <rouilj@ieee.org>
parents:
6316
diff
changeset
|
1421 """ |
|
ea0becc9fdb9
Test delete of class and use of @protected.
John Rouillard <rouilj@ieee.org>
parents:
6316
diff
changeset
|
1422 run Delete through rest dispatch(). |
|
ea0becc9fdb9
Test delete of class and use of @protected.
John Rouillard <rouilj@ieee.org>
parents:
6316
diff
changeset
|
1423 """ |
|
ea0becc9fdb9
Test delete of class and use of @protected.
John Rouillard <rouilj@ieee.org>
parents:
6316
diff
changeset
|
1424 |
|
ea0becc9fdb9
Test delete of class and use of @protected.
John Rouillard <rouilj@ieee.org>
parents:
6316
diff
changeset
|
1425 # TEST #0 |
|
ea0becc9fdb9
Test delete of class and use of @protected.
John Rouillard <rouilj@ieee.org>
parents:
6316
diff
changeset
|
1426 # Delete class raises unauthorized error |
|
ea0becc9fdb9
Test delete of class and use of @protected.
John Rouillard <rouilj@ieee.org>
parents:
6316
diff
changeset
|
1427 # simulate: /rest/data/issue |
|
ea0becc9fdb9
Test delete of class and use of @protected.
John Rouillard <rouilj@ieee.org>
parents:
6316
diff
changeset
|
1428 env = { "REQUEST_METHOD": "DELETE" |
|
ea0becc9fdb9
Test delete of class and use of @protected.
John Rouillard <rouilj@ieee.org>
parents:
6316
diff
changeset
|
1429 } |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
1430 self.server.client.env.update(env) |
|
6317
ea0becc9fdb9
Test delete of class and use of @protected.
John Rouillard <rouilj@ieee.org>
parents:
6316
diff
changeset
|
1431 headers={"accept": "application/json; version=1", |
|
ea0becc9fdb9
Test delete of class and use of @protected.
John Rouillard <rouilj@ieee.org>
parents:
6316
diff
changeset
|
1432 } |
|
ea0becc9fdb9
Test delete of class and use of @protected.
John Rouillard <rouilj@ieee.org>
parents:
6316
diff
changeset
|
1433 self.headers=headers |
|
ea0becc9fdb9
Test delete of class and use of @protected.
John Rouillard <rouilj@ieee.org>
parents:
6316
diff
changeset
|
1434 self.server.client.request.headers.get=self.get_header |
|
ea0becc9fdb9
Test delete of class and use of @protected.
John Rouillard <rouilj@ieee.org>
parents:
6316
diff
changeset
|
1435 results = self.server.dispatch(env["REQUEST_METHOD"], |
|
ea0becc9fdb9
Test delete of class and use of @protected.
John Rouillard <rouilj@ieee.org>
parents:
6316
diff
changeset
|
1436 "/rest/data/issue", |
|
ea0becc9fdb9
Test delete of class and use of @protected.
John Rouillard <rouilj@ieee.org>
parents:
6316
diff
changeset
|
1437 self.empty_form) |
|
ea0becc9fdb9
Test delete of class and use of @protected.
John Rouillard <rouilj@ieee.org>
parents:
6316
diff
changeset
|
1438 |
|
ea0becc9fdb9
Test delete of class and use of @protected.
John Rouillard <rouilj@ieee.org>
parents:
6316
diff
changeset
|
1439 print(results) |
|
ea0becc9fdb9
Test delete of class and use of @protected.
John Rouillard <rouilj@ieee.org>
parents:
6316
diff
changeset
|
1440 self.assertEqual(self.server.client.response_code, 403) |
|
ea0becc9fdb9
Test delete of class and use of @protected.
John Rouillard <rouilj@ieee.org>
parents:
6316
diff
changeset
|
1441 json_dict = json.loads(b2s(results)) |
|
ea0becc9fdb9
Test delete of class and use of @protected.
John Rouillard <rouilj@ieee.org>
parents:
6316
diff
changeset
|
1442 |
|
ea0becc9fdb9
Test delete of class and use of @protected.
John Rouillard <rouilj@ieee.org>
parents:
6316
diff
changeset
|
1443 self.assertEqual(json_dict['error']['msg'], |
|
ea0becc9fdb9
Test delete of class and use of @protected.
John Rouillard <rouilj@ieee.org>
parents:
6316
diff
changeset
|
1444 "Deletion of a whole class disabled") |
|
ea0becc9fdb9
Test delete of class and use of @protected.
John Rouillard <rouilj@ieee.org>
parents:
6316
diff
changeset
|
1445 |
|
ea0becc9fdb9
Test delete of class and use of @protected.
John Rouillard <rouilj@ieee.org>
parents:
6316
diff
changeset
|
1446 |
|
6311
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1447 def testDispatchBadContent(self): |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1448 """ |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1449 runthrough rest dispatch() with bad content_type patterns. |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1450 """ |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1451 |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1452 # simulate: /rest/data/issue |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1453 body=b'{ "title": "Joe Doe has problems", \ |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1454 "nosy": [ "1", "3" ], \ |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1455 "assignedto": "2", \ |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1456 "abool": true, \ |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1457 "afloat": 2.3, \ |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1458 "anint": 567890 \ |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1459 }' |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1460 env = { "CONTENT_TYPE": "application/jzot", |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1461 "CONTENT_LENGTH": len(body), |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1462 "REQUEST_METHOD": "POST" |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1463 } |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
1464 self.server.client.env.update(env) |
|
6311
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1465 |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1466 headers={"accept": "application/json; version=1", |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1467 "content-type": env['CONTENT_TYPE'], |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1468 "content-length": env['CONTENT_LENGTH'], |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1469 } |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1470 |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1471 self.headers=headers |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1472 # we need to generate a FieldStorage the looks like |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1473 # FieldStorage(None, None, 'string') rather than |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1474 # FieldStorage(None, None, []) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1475 body_file=BytesIO(body) # FieldStorage needs a file |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1476 form = client.BinaryFieldStorage(body_file, |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1477 headers=headers, |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1478 environ=env) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1479 self.server.client.request.headers.get=self.get_header |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1480 results = self.server.dispatch(env["REQUEST_METHOD"], |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1481 "/rest/data/issue", |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1482 form) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1483 |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1484 print(results) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1485 self.assertEqual(self.server.client.response_code, 415) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1486 json_dict = json.loads(b2s(results)) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1487 self.assertEqual(json_dict['error']['msg'], |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1488 "Unable to process input of type application/jzot") |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1489 |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1490 # Test GET as well. I am not sure if this should pass or not. |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1491 # Arguably GET doesn't use any form/json input but.... |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1492 results = self.server.dispatch('GET', |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1493 "/rest/data/issue", |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1494 form) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1495 print(results) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1496 self.assertEqual(self.server.client.response_code, 415) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1497 |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1498 |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1499 |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1500 def testDispatchBadAccept(self): |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1501 # simulate: /rest/data/issue expect failure unknown accept settings |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1502 body=b'{ "title": "Joe Doe has problems", \ |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1503 "nosy": [ "1", "3" ], \ |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1504 "assignedto": "2", \ |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1505 "abool": true, \ |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1506 "afloat": 2.3, \ |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1507 "anint": 567890 \ |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1508 }' |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1509 env = { "CONTENT_TYPE": "application/json", |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1510 "CONTENT_LENGTH": len(body), |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1511 "REQUEST_METHOD": "POST" |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1512 } |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
1513 self.server.client.env.update(env) |
|
6311
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1514 headers={"accept": "application/zot; version=1; q=0.5", |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1515 "content-type": env['CONTENT_TYPE'], |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1516 "content-length": env['CONTENT_LENGTH'], |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1517 } |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1518 |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1519 self.headers=headers |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1520 # we need to generate a FieldStorage the looks like |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1521 # FieldStorage(None, None, 'string') rather than |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1522 # FieldStorage(None, None, []) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1523 body_file=BytesIO(body) # FieldStorage needs a file |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1524 form = client.BinaryFieldStorage(body_file, |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1525 headers=headers, |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1526 environ=env) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1527 self.server.client.request.headers.get=self.get_header |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1528 results = self.server.dispatch(env["REQUEST_METHOD"], |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1529 "/rest/data/issue", |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1530 form) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1531 |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1532 print(results) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1533 self.assertEqual(self.server.client.response_code, 406) |
|
6312
6ef7b66774b4
Fix test. Env without xml fails due to added ,
John Rouillard <rouilj@ieee.org>
parents:
6311
diff
changeset
|
1534 self.assertIn(b"Requested content type 'application/zot; version=1; q=0.5' is not available.\nAcceptable types: */*, application/json", results) |
|
6311
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1535 |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1536 # simulate: /rest/data/issue works, multiple acceptable output, one |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1537 # is valid |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1538 env = { "CONTENT_TYPE": "application/json", |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1539 "CONTENT_LENGTH": len(body), |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1540 "REQUEST_METHOD": "POST" |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1541 } |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
1542 self.server.client.env.update(env) |
|
6311
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1543 headers={"accept": "application/zot; version=1; q=0.75, " |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1544 "application/json; version=1; q=0.5", |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1545 "content-type": env['CONTENT_TYPE'], |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1546 "content-length": env['CONTENT_LENGTH'], |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1547 } |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1548 |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1549 self.headers=headers |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1550 # we need to generate a FieldStorage the looks like |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1551 # FieldStorage(None, None, 'string') rather than |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1552 # FieldStorage(None, None, []) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1553 body_file=BytesIO(body) # FieldStorage needs a file |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1554 form = client.BinaryFieldStorage(body_file, |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1555 headers=headers, |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1556 environ=env) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1557 self.server.client.request.headers.get=self.get_header |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1558 results = self.server.dispatch(env["REQUEST_METHOD"], |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1559 "/rest/data/issue", |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1560 form) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1561 |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1562 print(results) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1563 self.assertEqual(self.server.client.response_code, 201) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1564 json_dict = json.loads(b2s(results)) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1565 # ERROR this should be 1. What's happening is that the code |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1566 # for handling 406 error code runs through everything and creates |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1567 # the item. Then it throws a 406 after the work is done when it |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1568 # realizes it can't respond as requested. So the 406 post above |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1569 # creates issue 1 and this one creates issue 2. |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1570 self.assertEqual(json_dict['data']['id'], "2") |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1571 |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1572 |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1573 # test 3 accept is empty. This triggers */* so passes |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1574 headers={"accept": "", |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1575 "content-type": env['CONTENT_TYPE'], |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1576 "content-length": env['CONTENT_LENGTH'], |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1577 } |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1578 |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1579 self.headers=headers |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1580 # we need to generate a FieldStorage the looks like |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1581 # FieldStorage(None, None, 'string') rather than |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1582 # FieldStorage(None, None, []) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1583 body_file=BytesIO(body) # FieldStorage needs a file |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1584 form = client.BinaryFieldStorage(body_file, |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1585 headers=headers, |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1586 environ=env) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1587 self.server.client.request.headers.get=self.get_header |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1588 results = self.server.dispatch(env["REQUEST_METHOD"], |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1589 "/rest/data/issue", |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1590 form) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1591 |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1592 print(results) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1593 self.assertEqual(self.server.client.response_code, 201) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1594 json_dict = json.loads(b2s(results)) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1595 # This is one more than above. Will need to be fixed |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1596 # When error above is fixed. |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1597 self.assertEqual(json_dict['data']['id'], "3") |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1598 |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1599 # test 4 accept is random junk. |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1600 headers={"accept": "Xyzzy I am not a mime, type;", |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1601 "content-type": env['CONTENT_TYPE'], |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1602 "content-length": env['CONTENT_LENGTH'], |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1603 } |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1604 |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1605 self.headers=headers |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1606 # we need to generate a FieldStorage the looks like |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1607 # FieldStorage(None, None, 'string') rather than |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1608 # FieldStorage(None, None, []) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1609 body_file=BytesIO(body) # FieldStorage needs a file |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1610 form = client.BinaryFieldStorage(body_file, |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1611 headers=headers, |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1612 environ=env) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1613 self.server.client.request.headers.get=self.get_header |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1614 results = self.server.dispatch(env["REQUEST_METHOD"], |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1615 "/rest/data/issue", |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1616 form) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1617 |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1618 print(results) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1619 self.assertEqual(self.server.client.response_code, 406) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1620 json_dict = json.loads(b2s(results)) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1621 self.assertIn('Unable to parse Accept Header. Invalid media type: Xyzzy I am not a mime. Acceptable types: */* application/json', json_dict['error']['msg']) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1622 |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1623 # test 5 accept mimetype is ok, param is not |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1624 headers={"accept": "*/*; foo", |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1625 "content-type": env['CONTENT_TYPE'], |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1626 "content-length": env['CONTENT_LENGTH'], |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1627 } |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1628 |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1629 self.headers=headers |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1630 # we need to generate a FieldStorage the looks like |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1631 # FieldStorage(None, None, 'string') rather than |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1632 # FieldStorage(None, None, []) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1633 body_file=BytesIO(body) # FieldStorage needs a file |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1634 form = client.BinaryFieldStorage(body_file, |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1635 headers=headers, |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1636 environ=env) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1637 self.server.client.request.headers.get=self.get_header |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1638 results = self.server.dispatch(env["REQUEST_METHOD"], |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1639 "/rest/data/issue", |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1640 form) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1641 |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1642 print(results) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1643 self.assertEqual(self.server.client.response_code, 406) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1644 json_dict = json.loads(b2s(results)) |
|
be8d5a8e090a
Fix uncaught error when parsing rest headers, document
John Rouillard <rouilj@ieee.org>
parents:
6256
diff
changeset
|
1645 self.assertIn('Unable to parse Accept Header. Invalid param: foo. Acceptable types: */* application/json', json_dict['error']['msg']) |
|
5690
4aae822e2cb4
Added a few comments and a test that fails with the pre-patched code
John Rouillard <rouilj@ieee.org>
parents:
5686
diff
changeset
|
1646 |
|
6185
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1647 def testStatsGen(self): |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1648 # check stats being returned by put and get ops |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1649 # using dispatch which parses the @stats query param |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1650 |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1651 # find correct py2/py3 list comparison ignoring order |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1652 try: |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1653 list_test = self.assertCountEqual # py3 |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1654 except AttributeError: |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1655 list_test = self.assertItemsEqual # py2.7+ |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1656 |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1657 # get stats |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1658 form = cgi.FieldStorage() |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1659 form.list = [ |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1660 cgi.MiniFieldStorage('@stats', 'True'), |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1661 ] |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1662 results = self.server.dispatch('GET', |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1663 "/rest/data/user/1/realname", |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1664 form) |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1665 self.assertEqual(self.dummy_client.response_code, 200) |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1666 json_dict = json.loads(b2s(results)) |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1667 |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1668 # check that @stats are defined |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1669 self.assertTrue( '@stats' in json_dict['data'] ) |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1670 # check that the keys are present |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1671 # not validating values as that changes |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1672 valid_fields= [ us2u('elapsed'), |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1673 us2u('cache_hits'), |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1674 us2u('cache_misses'), |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1675 us2u('get_items'), |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1676 us2u('filtering') ] |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1677 list_test(valid_fields,json_dict['data']['@stats'].keys()) |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1678 |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1679 # Make sure false value works to suppress @stats |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1680 form = cgi.FieldStorage() |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1681 form.list = [ |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1682 cgi.MiniFieldStorage('@stats', 'False'), |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1683 ] |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
1684 self.server.client.env.update({'REQUEST_METHOD': 'GET'}) |
|
6185
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1685 results = self.server.dispatch('GET', |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1686 "/rest/data/user/1/realname", |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1687 form) |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1688 self.assertEqual(self.dummy_client.response_code, 200) |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1689 json_dict = json.loads(b2s(results)) |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1690 print(results) |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1691 # check that @stats are not defined |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1692 self.assertTrue( '@stats' not in json_dict['data'] ) |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1693 |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1694 # Make sure non-true value works to suppress @stats |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1695 # false will always work |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1696 form = cgi.FieldStorage() |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1697 form.list = [ |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1698 cgi.MiniFieldStorage('@stats', 'random'), |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1699 ] |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1700 results = self.server.dispatch('GET', |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1701 "/rest/data/user/1/realname", |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1702 form) |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1703 self.assertEqual(self.dummy_client.response_code, 200) |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1704 json_dict = json.loads(b2s(results)) |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1705 print(results) |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1706 # check that @stats are not defined |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1707 self.assertTrue( '@stats' not in json_dict['data'] ) |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1708 |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1709 # if @stats is not defined there should be no stats |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1710 results = self.server.dispatch('GET', |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1711 "/rest/data/user/1/realname", |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1712 self.empty_form) |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1713 self.assertEqual(self.dummy_client.response_code, 200) |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1714 json_dict = json.loads(b2s(results)) |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1715 |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1716 # check that @stats are not defined |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1717 self.assertTrue( '@stats' not in json_dict['data'] ) |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1718 |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1719 |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1720 |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1721 # change admin's realname via a normal web form |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1722 # This generates a FieldStorage that looks like: |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1723 # FieldStorage(None, None, []) |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1724 # use etag from header |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1725 # |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1726 # Also use GET on the uri via the dispatch to retrieve |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1727 # the results from the db. |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1728 etag = calculate_etag(self.db.user.getnode('1'), |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1729 self.db.config['WEB_SECRET_KEY']) |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1730 headers={"if-match": etag, |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1731 "accept": "application/vnd.json.test-v1+json", |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1732 } |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1733 form = cgi.FieldStorage() |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1734 form.list = [ |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1735 cgi.MiniFieldStorage('data', 'Joe Doe'), |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1736 cgi.MiniFieldStorage('@apiver', '1'), |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1737 cgi.MiniFieldStorage('@stats', 'true'), |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1738 ] |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1739 self.headers = headers |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1740 self.server.client.request.headers.get = self.get_header |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1741 self.db.setCurrentUser('admin') # must be admin to change user |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
1742 self.server.client.env.update({'REQUEST_METHOD': 'PUT'}) |
|
6185
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1743 results = self.server.dispatch('PUT', |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1744 "/rest/data/user/1/realname", |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1745 form) |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1746 self.assertEqual(self.dummy_client.response_code, 200) |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1747 json_dict = json.loads(b2s(results)) |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1748 list_test(valid_fields,json_dict['data']['@stats'].keys()) |
|
1cb2375015f0
Enable timing stats reporting in REST interface.
John Rouillard <rouilj@ieee.org>
parents:
6090
diff
changeset
|
1749 |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1750 def testDispatch(self): |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1751 """ |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1752 run changes through rest dispatch(). This also tests |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1753 sending json payload through code as dispatch is the |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1754 code that changes json payload into something we can |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1755 process. |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1756 """ |
|
5653
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
1757 # TEST #1 |
|
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
1758 # PUT: joe's 'realname' using json data. |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1759 # simulate: /rest/data/user/<id>/realname |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1760 # use etag in header |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1761 etag = calculate_etag(self.db.user.getnode(self.joeid), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1762 self.db.config['WEB_SECRET_KEY']) |
|
5651
a02ef29b4242
Fix REST tests for Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5650
diff
changeset
|
1763 body=b'{ "data": "Joe Doe 1" }' |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1764 env = { "CONTENT_TYPE": "application/json", |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1765 "CONTENT_LENGTH": len(body), |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
1766 "REQUEST_METHOD": "PUT", |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
1767 "HTTP_ORIGIN": "https://invalid.origin" |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1768 } |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
1769 self.server.client.env.update(env) |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
1770 |
|
5686
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1771 headers={"accept": "application/json; version=1", |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1772 "content-type": env['CONTENT_TYPE'], |
|
5655
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
1773 "content-length": env['CONTENT_LENGTH'], |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
1774 "if-match": etag |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1775 } |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1776 self.headers=headers |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1777 # we need to generate a FieldStorage the looks like |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1778 # FieldStorage(None, None, 'string') rather than |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1779 # FieldStorage(None, None, []) |
|
5651
a02ef29b4242
Fix REST tests for Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5650
diff
changeset
|
1780 body_file=BytesIO(body) # FieldStorage needs a file |
|
5656
d26d2590cd8c
Implement different workaround for https://bugs.python.org/issue27777
John Rouillard <rouilj@ieee.org>
parents:
5655
diff
changeset
|
1781 form = client.BinaryFieldStorage(body_file, |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1782 headers=headers, |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1783 environ=env) |
|
5650
e8ca7072c629
Fix Python 3 issues in REST code.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5647
diff
changeset
|
1784 self.server.client.request.headers.get=self.get_header |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1785 results = self.server.dispatch('PUT', |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1786 "/rest/data/user/%s/realname"%self.joeid, |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1787 form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1788 |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
1789 # invalid origin, no credentials allowed. |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
1790 self.assertNotIn("Access-Control-Allow-Credentials", |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
1791 self.server.client.additional_headers) |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1792 self.assertEqual(self.server.client.response_code, 200) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1793 results = self.server.get_element('user', self.joeid, self.empty_form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1794 self.assertEqual(self.dummy_client.response_code, 200) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1795 self.assertEqual(results['data']['attributes']['realname'], |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1796 'Joe Doe 1') |
|
5686
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1797 |
|
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1798 |
|
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1799 # substitute the version with an unacceptable version |
|
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1800 # and verify it returns 400 code. |
|
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1801 self.headers["accept"] = "application/json; version=1.1" |
|
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1802 body_file=BytesIO(body) # FieldStorage needs a file |
|
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1803 form = client.BinaryFieldStorage(body_file, |
|
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1804 headers=headers, |
|
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1805 environ=env) |
|
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1806 self.server.client.request.headers.get=self.get_header |
|
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1807 results = self.server.dispatch('PUT', |
|
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1808 "/rest/data/user/%s/realname"%self.joeid, |
|
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1809 form) |
|
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1810 self.assertEqual(self.server.client.response_code, 400) |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1811 del(self.headers) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1812 |
|
5653
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
1813 # TEST #2 |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1814 # Set joe's 'realname' using json data. |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1815 # simulate: /rest/data/user/<id>/realname |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1816 # use etag in payload |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1817 etag = calculate_etag(self.db.user.getnode(self.joeid), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1818 self.db.config['WEB_SECRET_KEY']) |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
1819 etagb = etag.strip ('"') |
|
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
1820 body=s2b('{ "@etag": "\\"%s\\"", "data": "Joe Doe 2" }'%etagb) |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1821 env = { "CONTENT_TYPE": "application/json", |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1822 "CONTENT_LENGTH": len(body), |
|
5655
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
1823 "REQUEST_METHOD": "PUT", |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1824 } |
|
5655
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
1825 self.headers=None # have FieldStorage get len from env. |
|
5651
a02ef29b4242
Fix REST tests for Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5650
diff
changeset
|
1826 body_file=BytesIO(body) # FieldStorage needs a file |
|
5656
d26d2590cd8c
Implement different workaround for https://bugs.python.org/issue27777
John Rouillard <rouilj@ieee.org>
parents:
5655
diff
changeset
|
1827 form = client.BinaryFieldStorage(body_file, |
|
5655
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
1828 headers=None, |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1829 environ=env) |
|
5650
e8ca7072c629
Fix Python 3 issues in REST code.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5647
diff
changeset
|
1830 self.server.client.request.headers.get=self.get_header |
|
5655
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
1831 |
|
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
1832 headers={"accept": "application/json", |
|
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
1833 "content-type": env['CONTENT_TYPE'], |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
1834 "if-match": etag |
|
5655
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
1835 } |
|
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
1836 self.headers=headers # set for dispatch |
|
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
1837 |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1838 results = self.server.dispatch('PUT', |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1839 "/rest/data/user/%s/realname"%self.joeid, |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1840 form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1841 |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1842 self.assertEqual(self.server.client.response_code, 200) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1843 results = self.server.get_element('user', self.joeid, self.empty_form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1844 self.assertEqual(self.dummy_client.response_code, 200) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1845 self.assertEqual(results['data']['attributes']['realname'], |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1846 'Joe Doe 2') |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1847 del(self.headers) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1848 |
|
5653
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
1849 # TEST #3 |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1850 # change Joe's realname via a normal web form |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1851 # This generates a FieldStorage that looks like: |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1852 # FieldStorage(None, None, []) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1853 # use etag from header |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1854 # |
|
5655
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
1855 # Also use GET on the uri via the dispatch to retrieve |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1856 # the results from the db. |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1857 etag = calculate_etag(self.db.user.getnode(self.joeid), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1858 self.db.config['WEB_SECRET_KEY']) |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
1859 headers={"if-match": etag, |
|
5686
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1860 "accept": "application/vnd.json.test-v1+json", |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1861 } |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1862 form = cgi.FieldStorage() |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1863 form.list = [ |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1864 cgi.MiniFieldStorage('data', 'Joe Doe'), |
|
5686
eb51c0d9c9bf
Move @apiver version extraction code after the input is parsed for
John Rouillard <rouilj@ieee.org>
parents:
5682
diff
changeset
|
1865 cgi.MiniFieldStorage('@apiver', '1'), |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1866 ] |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1867 self.headers = headers |
|
5650
e8ca7072c629
Fix Python 3 issues in REST code.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5647
diff
changeset
|
1868 self.server.client.request.headers.get = self.get_header |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1869 results = self.server.dispatch('PUT', |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1870 "/rest/data/user/%s/realname"%self.joeid, |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1871 form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1872 self.assertEqual(self.dummy_client.response_code, 200) |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
1873 self.server.client.env.update({'REQUEST_METHOD': "GET"}) |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1874 results = self.server.dispatch('GET', |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1875 "/rest/data/user/%s/realname"%self.joeid, |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1876 self.empty_form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1877 self.assertEqual(self.dummy_client.response_code, 200) |
|
5651
a02ef29b4242
Fix REST tests for Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5650
diff
changeset
|
1878 json_dict = json.loads(b2s(results)) |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1879 |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1880 self.assertEqual(json_dict['data']['data'], 'Joe Doe') |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1881 self.assertEqual(json_dict['data']['link'], |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1882 "http://tracker.example/cgi-bin/" |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1883 "roundup.cgi/bugs/rest/data/user/3/realname") |
|
5653
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
1884 self.assertIn(json_dict['data']['type'], ("<class 'str'>", |
|
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
1885 "<type 'str'>")) |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1886 self.assertEqual(json_dict['data']["id"], "3") |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1887 del(self.headers) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1888 |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1889 |
|
5653
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
1890 # TEST #4 |
|
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
1891 # PATCH: joe's email address with json |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1892 # save address so we can use it later |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1893 stored_results = self.server.get_element('user', self.joeid, |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1894 self.empty_form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1895 self.assertEqual(self.dummy_client.response_code, 200) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1896 |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1897 etag = calculate_etag(self.db.user.getnode(self.joeid), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1898 self.db.config['WEB_SECRET_KEY']) |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
1899 etagb = etag.strip ('"') |
|
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
1900 body=s2b('{ "address": "demo2@example.com", "@etag": "\\"%s\\""}'%etagb) |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1901 env = { "CONTENT_TYPE": "application/json", |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1902 "CONTENT_LENGTH": len(body), |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1903 "REQUEST_METHOD": "PATCH" |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1904 } |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
1905 self.server.client.env.update(env) |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1906 headers={"accept": "application/json", |
|
5655
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
1907 "content-type": env['CONTENT_TYPE'], |
|
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
1908 "content-length": len(body) |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1909 } |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1910 self.headers=headers |
|
5651
a02ef29b4242
Fix REST tests for Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5650
diff
changeset
|
1911 body_file=BytesIO(body) # FieldStorage needs a file |
|
5656
d26d2590cd8c
Implement different workaround for https://bugs.python.org/issue27777
John Rouillard <rouilj@ieee.org>
parents:
5655
diff
changeset
|
1912 form = client.BinaryFieldStorage(body_file, |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1913 headers=headers, |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1914 environ=env) |
|
5650
e8ca7072c629
Fix Python 3 issues in REST code.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5647
diff
changeset
|
1915 self.server.client.request.headers.get=self.get_header |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1916 results = self.server.dispatch('PATCH', |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1917 "/rest/data/user/%s"%self.joeid, |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1918 form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1919 |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1920 self.assertEqual(self.server.client.response_code, 200) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1921 results = self.server.get_element('user', self.joeid, self.empty_form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1922 self.assertEqual(self.dummy_client.response_code, 200) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1923 self.assertEqual(results['data']['attributes']['address'], |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1924 'demo2@example.com') |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1925 |
|
5653
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
1926 # and set it back reusing env and headers from last test |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1927 etag = calculate_etag(self.db.user.getnode(self.joeid), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
1928 self.db.config['WEB_SECRET_KEY']) |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
1929 etagb = etag.strip ('"') |
|
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
1930 body=s2b('{ "address": "%s", "@etag": "\\"%s\\""}'%( |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1931 stored_results['data']['attributes']['address'], |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
1932 etagb)) |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1933 # reuse env and headers from prior test. |
|
5651
a02ef29b4242
Fix REST tests for Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5650
diff
changeset
|
1934 body_file=BytesIO(body) # FieldStorage needs a file |
|
5656
d26d2590cd8c
Implement different workaround for https://bugs.python.org/issue27777
John Rouillard <rouilj@ieee.org>
parents:
5655
diff
changeset
|
1935 form = client.BinaryFieldStorage(body_file, |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1936 headers=headers, |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1937 environ=env) |
|
5650
e8ca7072c629
Fix Python 3 issues in REST code.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5647
diff
changeset
|
1938 self.server.client.request.headers.get=self.get_header |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1939 results = self.server.dispatch('PATCH', |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1940 "/rest/data/user/%s"%self.joeid, |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1941 form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1942 |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1943 self.assertEqual(self.server.client.response_code, 200) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1944 results = self.server.get_element('user', self.joeid, self.empty_form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1945 self.assertEqual(self.dummy_client.response_code, 200) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1946 self.assertEqual(results['data']['attributes']['address'], |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1947 'random@home.org') |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1948 del(self.headers) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1949 |
|
5653
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
1950 # TEST #5 |
|
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
1951 # POST: create new issue |
|
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
1952 # no etag needed |
|
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
1953 etag = "not needed" |
|
5651
a02ef29b4242
Fix REST tests for Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5650
diff
changeset
|
1954 body=b'{ "title": "foo bar", "priority": "critical" }' |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1955 env = { "CONTENT_TYPE": "application/json", |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1956 "CONTENT_LENGTH": len(body), |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1957 "REQUEST_METHOD": "POST" |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1958 } |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
1959 self.server.client.env.update(env) |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1960 headers={"accept": "application/json", |
|
5655
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
1961 "content-type": env['CONTENT_TYPE'], |
|
207e0f5d551c
Merge in non-conflicting changes from ba67e397f063
John Rouillard <rouilj@ieee.org>
diff
changeset
|
1962 "content-length": len(body) |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1963 } |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1964 self.headers=headers |
|
5651
a02ef29b4242
Fix REST tests for Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5650
diff
changeset
|
1965 body_file=BytesIO(body) # FieldStorage needs a file |
|
5656
d26d2590cd8c
Implement different workaround for https://bugs.python.org/issue27777
John Rouillard <rouilj@ieee.org>
parents:
5655
diff
changeset
|
1966 form = client.BinaryFieldStorage(body_file, |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1967 headers=headers, |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1968 environ=env) |
|
5650
e8ca7072c629
Fix Python 3 issues in REST code.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5647
diff
changeset
|
1969 self.server.client.request.headers.get=self.get_header |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1970 results = self.server.dispatch('POST', |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1971 "/rest/data/issue", |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1972 form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1973 |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1974 self.assertEqual(self.server.client.response_code, 201) |
|
5653
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
1975 json_dict = json.loads(b2s(results)) |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1976 issue_id=json_dict['data']['id'] |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1977 results = self.server.get_element('issue', |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1978 str(issue_id), # must be a string not unicode |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1979 self.empty_form) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1980 self.assertEqual(self.dummy_client.response_code, 200) |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1981 self.assertEqual(results['data']['attributes']['title'], |
|
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
1982 'foo bar') |
|
5653
ba67e397f063
Fix string/bytes issues under python 3.
John Rouillard <rouilj@ieee.org>
parents:
5647
diff
changeset
|
1983 |
|
5711
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1984 # TEST #6 |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1985 # POST: an invalid class |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
1986 # no etag needed |
|
5710
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1987 etag = "not needed" |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1988 body=b'{ "title": "foo bar", "priority": "critical" }' |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1989 env = { "CONTENT_TYPE": "application/json", |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1990 "CONTENT_LENGTH": len(body), |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1991 "REQUEST_METHOD": "POST" |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1992 } |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
1993 self.server.client.env.update(env) |
|
5710
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1994 headers={"accept": "application/json", |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1995 "content-type": env['CONTENT_TYPE'], |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1996 "content-length": len(body) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1997 } |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1998 self.headers=headers |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
1999 body_file=BytesIO(body) # FieldStorage needs a file |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2000 form = client.BinaryFieldStorage(body_file, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2001 headers=headers, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2002 environ=env) |
|
5711
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2003 self.server.client.request.headers.get=self.get_header |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2004 results = self.server.dispatch('POST', |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2005 "/rest/data/nonissue", |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2006 form) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2007 |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2008 self.assertEqual(self.server.client.response_code, 404) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2009 json_dict = json.loads(b2s(results)) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2010 status=json_dict['error']['status'] |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2011 msg=json_dict['error']['msg'] |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2012 self.assertEqual(status, 404) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2013 self.assertEqual(msg, 'Class nonissue not found') |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2014 |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2015 # TEST #7 |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2016 # POST: status without key field of name |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2017 # also test that version spec in accept header is accepted |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2018 # no etag needed |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2019 etag = "not needed" |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2020 body=b'{ "order": 5 }' |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2021 env = { "CONTENT_TYPE": "application/json", |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2022 "CONTENT_LENGTH": len(body), |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2023 "REQUEST_METHOD": "POST" |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2024 } |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
2025 self.server.client.env.update(env) |
|
5711
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2026 headers={"accept": "application/json; version=1", |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2027 "content-type": env['CONTENT_TYPE'], |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2028 "content-length": len(body) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2029 } |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2030 self.headers=headers |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2031 body_file=BytesIO(body) # FieldStorage needs a file |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2032 form = client.BinaryFieldStorage(body_file, |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2033 headers=headers, |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2034 environ=env) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2035 self.server.client.request.headers.get=self.get_header |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2036 self.db.setCurrentUser('admin') # must be admin to create status |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2037 results = self.server.dispatch('POST', |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2038 "/rest/data/status", |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2039 form) |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
2040 self.server.client.env.update(env) |
|
5711
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2041 self.assertEqual(self.server.client.response_code, 400) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2042 json_dict = json.loads(b2s(results)) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2043 status=json_dict['error']['status'] |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2044 msg=json_dict['error']['msg'] |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2045 self.assertEqual(status, 400) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2046 self.assertEqual(msg, "Must provide the 'name' property.") |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2047 |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2048 |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2049 # TEST #8 |
|
5984
25a813415d59
issue2551069 - when unsupported type is found report type
John Rouillard <rouilj@ieee.org>
parents:
5937
diff
changeset
|
2050 # DELETE: delete issue 1 also test return type by extension |
|
25a813415d59
issue2551069 - when unsupported type is found report type
John Rouillard <rouilj@ieee.org>
parents:
5937
diff
changeset
|
2051 # test bogus extension as well. |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2052 etag = calculate_etag(self.db.issue.getnode("1"), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2053 self.db.config['WEB_SECRET_KEY']) |
|
5711
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2054 etagb = etag.strip ('"') |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2055 env = {"CONTENT_TYPE": "application/json", |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2056 "CONTENT_LEN": 0, |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2057 "REQUEST_METHOD": "DELETE" } |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
2058 self.server.client.env.update(env) |
|
5711
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2059 # use text/plain header and request json output by appending |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2060 # .json to the url. |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2061 headers={"accept": "text/plain", |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2062 "content-type": env['CONTENT_TYPE'], |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2063 "if-match": '"%s"'%etagb, |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2064 "content-length": 0, |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2065 } |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2066 self.headers=headers |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2067 body_file=BytesIO(b'') # FieldStorage needs a file |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2068 form = client.BinaryFieldStorage(body_file, |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2069 headers=headers, |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2070 environ=env) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2071 self.server.client.request.headers.get=self.get_header |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2072 self.db.setCurrentUser('admin') # must be admin to delete issue |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2073 results = self.server.dispatch('DELETE', |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2074 "/rest/data/issue/1.json", |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2075 form) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2076 self.assertEqual(self.server.client.response_code, 200) |
|
5984
25a813415d59
issue2551069 - when unsupported type is found report type
John Rouillard <rouilj@ieee.org>
parents:
5937
diff
changeset
|
2077 print(results) |
|
5711
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2078 json_dict = json.loads(b2s(results)) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2079 status=json_dict['data']['status'] |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2080 self.assertEqual(status, 'ok') |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2081 |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
2082 self.server.client.env.update({'REQUEST_METHOD': 'GET'}) |
|
5986
8b88fb789208
still trying to get testing to pass.
John Rouillard <rouilj@ieee.org>
parents:
5985
diff
changeset
|
2083 results = self.server.dispatch('GET', |
|
8b88fb789208
still trying to get testing to pass.
John Rouillard <rouilj@ieee.org>
parents:
5985
diff
changeset
|
2084 "/rest/data/issuetitle:=asdf.jon", |
|
5984
25a813415d59
issue2551069 - when unsupported type is found report type
John Rouillard <rouilj@ieee.org>
parents:
5937
diff
changeset
|
2085 form) |
|
25a813415d59
issue2551069 - when unsupported type is found report type
John Rouillard <rouilj@ieee.org>
parents:
5937
diff
changeset
|
2086 self.assertEqual(self.server.client.response_code, 406) |
|
25a813415d59
issue2551069 - when unsupported type is found report type
John Rouillard <rouilj@ieee.org>
parents:
5937
diff
changeset
|
2087 print(results) |
|
5985
f1191a470598
Fix test to account for mixxing dicttoxml.
John Rouillard <rouilj@ieee.org>
parents:
5984
diff
changeset
|
2088 try: # only verify local copy not system installed copy |
|
f1191a470598
Fix test to account for mixxing dicttoxml.
John Rouillard <rouilj@ieee.org>
parents:
5984
diff
changeset
|
2089 from roundup.dicttoxml import dicttoxml |
|
f1191a470598
Fix test to account for mixxing dicttoxml.
John Rouillard <rouilj@ieee.org>
parents:
5984
diff
changeset
|
2090 includexml = ', application/xml' |
|
f1191a470598
Fix test to account for mixxing dicttoxml.
John Rouillard <rouilj@ieee.org>
parents:
5984
diff
changeset
|
2091 except ImportError: |
|
f1191a470598
Fix test to account for mixxing dicttoxml.
John Rouillard <rouilj@ieee.org>
parents:
5984
diff
changeset
|
2092 includexml = '' |
|
f1191a470598
Fix test to account for mixxing dicttoxml.
John Rouillard <rouilj@ieee.org>
parents:
5984
diff
changeset
|
2093 |
|
5984
25a813415d59
issue2551069 - when unsupported type is found report type
John Rouillard <rouilj@ieee.org>
parents:
5937
diff
changeset
|
2094 response="Requested content type 'jon' is not available.\n" \ |
|
5985
f1191a470598
Fix test to account for mixxing dicttoxml.
John Rouillard <rouilj@ieee.org>
parents:
5984
diff
changeset
|
2095 "Acceptable types: */*, application/json%s\n"%includexml |
|
5987
ea3485c67f94
Sort accept keys to make p2 and p3 ordering the same
John Rouillard <rouilj@ieee.org>
parents:
5986
diff
changeset
|
2096 self.assertEqual(b2s(results), response) |
|
5984
25a813415d59
issue2551069 - when unsupported type is found report type
John Rouillard <rouilj@ieee.org>
parents:
5937
diff
changeset
|
2097 |
|
5741
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2098 # TEST #9 |
|
5742
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2099 # GET: test that version can be set with accept: |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2100 # ... ; version=z |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2101 # or |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2102 # application/vnd.x.y-vz+json |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2103 # or |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2104 # @apiver |
|
5741
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2105 # simulate: /rest/data/issue |
|
5742
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2106 form = cgi.FieldStorage() |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2107 form.list = [ |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2108 cgi.MiniFieldStorage('@apiver', 'L'), |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2109 ] |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
2110 |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
2111 self.server.client.env.update({'REQUEST_METHOD': 'GET'}) |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
2112 |
|
5742
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2113 headers={"accept": "application/json; notversion=z" } |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2114 self.headers=headers |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2115 self.server.client.request.headers.get=self.get_header |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2116 results = self.server.dispatch('GET', |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2117 "/rest/data/issue/1", form) |
|
5987
ea3485c67f94
Sort accept keys to make p2 and p3 ordering the same
John Rouillard <rouilj@ieee.org>
parents:
5986
diff
changeset
|
2118 print("9a: " + b2s(results)) |
|
5742
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2119 json_dict = json.loads(b2s(results)) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2120 self.assertEqual(json_dict['error']['status'], 400) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2121 self.assertEqual(json_dict['error']['msg'], |
| 6513 | 2122 "Unrecognized api version: L. See /rest without " |
| 2123 "specifying api version for supported versions.") | |
|
5742
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2124 |
|
5741
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2125 headers={"accept": "application/json; version=z" } |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2126 self.headers=headers |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2127 self.server.client.request.headers.get=self.get_header |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2128 results = self.server.dispatch('GET', |
|
5742
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2129 "/rest/data/issue/1", form) |
|
5987
ea3485c67f94
Sort accept keys to make p2 and p3 ordering the same
John Rouillard <rouilj@ieee.org>
parents:
5986
diff
changeset
|
2130 print("9b: " + b2s(results)) |
|
5741
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2131 json_dict = json.loads(b2s(results)) |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2132 self.assertEqual(json_dict['error']['status'], 400) |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2133 self.assertEqual(json_dict['error']['msg'], |
| 6513 | 2134 "Unrecognized api version: z. See /rest without " |
| 2135 "specifying api version for supported versions.") | |
|
5741
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2136 |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2137 headers={"accept": "application/vnd.roundup.test-vz+json" } |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2138 self.headers=headers |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2139 self.server.client.request.headers.get=self.get_header |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2140 results = self.server.dispatch('GET', |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2141 "/rest/data/issue/1", self.empty_form) |
|
5987
ea3485c67f94
Sort accept keys to make p2 and p3 ordering the same
John Rouillard <rouilj@ieee.org>
parents:
5986
diff
changeset
|
2142 print("9c:" + b2s(results)) |
|
5741
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2143 self.assertEqual(self.server.client.response_code, 400) |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2144 json_dict = json.loads(b2s(results)) |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2145 self.assertEqual(json_dict['error']['status'], 400) |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2146 self.assertEqual(json_dict['error']['msg'], |
| 6513 | 2147 "Unrecognized api version: z. See /rest without " |
| 2148 "specifying api version for supported versions.") | |
|
5741
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2149 |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2150 # verify that version priority is correct; should be version=... |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2151 headers={"accept": "application/vnd.roundup.test-vz+json; version=a" |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2152 } |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2153 self.headers=headers |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2154 self.server.client.request.headers.get=self.get_header |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2155 results = self.server.dispatch('GET', |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2156 "/rest/data/issue/1", self.empty_form) |
|
5987
ea3485c67f94
Sort accept keys to make p2 and p3 ordering the same
John Rouillard <rouilj@ieee.org>
parents:
5986
diff
changeset
|
2157 print("9d: " + b2s(results)) |
|
5741
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2158 self.assertEqual(self.server.client.response_code, 400) |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2159 json_dict = json.loads(b2s(results)) |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2160 self.assertEqual(json_dict['error']['status'], 400) |
|
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2161 self.assertEqual(json_dict['error']['msg'], |
| 6513 | 2162 "Unrecognized api version: a. See /rest without " |
| 2163 "specifying api version for supported versions.") | |
|
5741
9c2e51aae18a
Test to make sure version selection via accept header is parsed correctly.
John Rouillard <rouilj@ieee.org>
parents:
5734
diff
changeset
|
2164 |
|
5742
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2165 # TEST #10 |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2166 # check /rest and /rest/summary and /rest/notthere |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2167 expected_rest = { |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2168 "data": { |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2169 "supported_versions": [ |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2170 1 |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2171 ], |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2172 "default_version": 1, |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2173 "links": [ |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2174 { |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2175 "rel": "self", |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2176 "uri": "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest" |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2177 }, |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2178 { |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2179 "rel": "data", |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2180 "uri": "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data" |
|
6525
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6513
diff
changeset
|
2181 }, |
|
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6513
diff
changeset
|
2182 { |
|
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6513
diff
changeset
|
2183 "rel": "summary", |
|
c505c774a94d
Mutiple changes to REST code.
John Rouillard <rouilj@ieee.org>
parents:
6513
diff
changeset
|
2184 "uri": "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/summary" |
|
5742
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2185 } |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2186 ] |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2187 } |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2188 } |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2189 |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2190 self.headers={} |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2191 results = self.server.dispatch('GET', |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2192 "/rest", self.empty_form) |
|
5987
ea3485c67f94
Sort accept keys to make p2 and p3 ordering the same
John Rouillard <rouilj@ieee.org>
parents:
5986
diff
changeset
|
2193 print("10a: " + b2s(results)) |
|
5742
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2194 self.assertEqual(self.server.client.response_code, 200) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2195 results_dict = json.loads(b2s(results)) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2196 self.assertEqual(results_dict, expected_rest) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2197 |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2198 |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2199 results = self.server.dispatch('GET', |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2200 "/rest/", self.empty_form) |
|
5987
ea3485c67f94
Sort accept keys to make p2 and p3 ordering the same
John Rouillard <rouilj@ieee.org>
parents:
5986
diff
changeset
|
2201 print("10b: " + b2s(results)) |
|
5742
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2202 self.assertEqual(self.server.client.response_code, 200) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2203 results_dict = json.loads(b2s(results)) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2204 self.assertEqual(results_dict, expected_rest) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2205 |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2206 results = self.server.dispatch('GET', |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2207 "/rest/summary", self.empty_form) |
|
5987
ea3485c67f94
Sort accept keys to make p2 and p3 ordering the same
John Rouillard <rouilj@ieee.org>
parents:
5986
diff
changeset
|
2208 print("10c: " + b2s(results)) |
|
5742
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2209 self.assertEqual(self.server.client.response_code, 200) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2210 |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2211 results = self.server.dispatch('GET', |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2212 "/rest/summary/", self.empty_form) |
|
5987
ea3485c67f94
Sort accept keys to make p2 and p3 ordering the same
John Rouillard <rouilj@ieee.org>
parents:
5986
diff
changeset
|
2213 print("10d: " + b2s(results)) |
|
5742
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2214 self.assertEqual(self.server.client.response_code, 200) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2215 |
| 5746 | 2216 expected_data = { |
| 2217 "data": { | |
| 2218 "issue": { | |
| 2219 "link": "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/issue" | |
| 2220 }, | |
| 2221 "priority": { | |
| 2222 "link": "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/priority" | |
| 2223 }, | |
| 2224 "user": { | |
| 2225 "link": "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/user" | |
| 2226 }, | |
| 2227 "query": { | |
| 2228 "link": "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/query" | |
| 2229 }, | |
| 2230 "status": { | |
| 2231 "link": "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/status" | |
| 2232 }, | |
| 2233 "keyword": { | |
| 2234 "link": "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/keyword" | |
| 2235 }, | |
| 2236 "msg": { | |
| 2237 "link": "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/msg" | |
| 2238 }, | |
| 2239 "file": { | |
| 2240 "link": "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/file" | |
| 2241 } | |
| 2242 } | |
| 2243 } | |
| 2244 | |
| 2245 results = self.server.dispatch('GET', | |
| 2246 "/rest/data", self.empty_form) | |
|
5987
ea3485c67f94
Sort accept keys to make p2 and p3 ordering the same
John Rouillard <rouilj@ieee.org>
parents:
5986
diff
changeset
|
2247 print("10e: " + b2s(results)) |
| 5746 | 2248 self.assertEqual(self.server.client.response_code, 200) |
| 2249 results_dict = json.loads(b2s(results)) | |
| 2250 self.assertEqual(results_dict, expected_data) | |
| 2251 | |
| 2252 results = self.server.dispatch('GET', | |
| 2253 "/rest/data/", self.empty_form) | |
|
5987
ea3485c67f94
Sort accept keys to make p2 and p3 ordering the same
John Rouillard <rouilj@ieee.org>
parents:
5986
diff
changeset
|
2254 print("10f: " + b2s(results)) |
| 5746 | 2255 self.assertEqual(self.server.client.response_code, 200) |
| 2256 results_dict = json.loads(b2s(results)) | |
| 2257 self.assertEqual(results_dict, expected_data) | |
| 2258 | |
|
5742
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2259 results = self.server.dispatch('GET', |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2260 "/rest/notthere", self.empty_form) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2261 self.assertEqual(self.server.client.response_code, 404) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2262 |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2263 results = self.server.dispatch('GET', |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2264 "/rest/notthere/", self.empty_form) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2265 self.assertEqual(self.server.client.response_code, 404) |
|
97d7faebef0a
Test @apiver version parsing using bogus version. Test /rest, /rest/
John Rouillard <rouilj@ieee.org>
parents:
5741
diff
changeset
|
2266 |
|
5711
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2267 del(self.headers) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2268 |
|
5744
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2269 def testAcceptHeaderParsing(self): |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
2270 self.server.client.env['REQUEST_METHOD'] = 'GET' |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
2271 |
|
5744
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2272 # TEST #1 |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2273 # json highest priority |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2274 self.server.client.request.headers.get=self.get_header |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2275 headers={"accept": "application/json; version=1," |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2276 "application/xml; q=0.5; version=2," |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2277 "text/plain; q=0.75; version=2" |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2278 } |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2279 self.headers=headers |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2280 results = self.server.dispatch('GET', |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2281 "/rest/data/status/1", |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2282 self.empty_form) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2283 print(results) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2284 self.assertEqual(self.server.client.response_code, 200) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2285 self.assertEqual(self.server.client.additional_headers['Content-Type'], |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2286 "application/json") |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2287 |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2288 # TEST #2 |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2289 # text highest priority |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2290 headers={"accept": "application/json; q=0.5; version=1," |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2291 "application/xml; q=0.25; version=2," |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2292 "text/plain; q=1.0; version=3" |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2293 } |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2294 self.headers=headers |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2295 results = self.server.dispatch('GET', |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2296 "/rest/data/status/1", |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2297 self.empty_form) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2298 print(results) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2299 self.assertEqual(self.server.client.response_code, 200) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2300 self.assertEqual(self.server.client.additional_headers['Content-Type'], |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2301 "application/json") |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2302 |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2303 # TEST #3 |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2304 # no acceptable type |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2305 headers={"accept": "text/plain; q=1.0; version=2" |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2306 } |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2307 self.headers=headers |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2308 results = self.server.dispatch('GET', |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2309 "/rest/data/status/1", |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2310 self.empty_form) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2311 print(results) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2312 self.assertEqual(self.server.client.response_code, 406) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2313 self.assertEqual(self.server.client.additional_headers['Content-Type'], |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2314 "application/json") |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2315 |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2316 # TEST #4 |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2317 # no accept header, should use default json |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2318 headers={} |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2319 self.headers=headers |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2320 results = self.server.dispatch('GET', |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2321 "/rest/data/status/1", |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2322 self.empty_form) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2323 print(results) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2324 self.assertEqual(self.server.client.response_code, 200) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2325 self.assertEqual(self.server.client.additional_headers['Content-Type'], |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2326 "application/json") |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2327 |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2328 # TEST #5 |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2329 # wildcard accept header, should use default json |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2330 headers={ "accept": "*/*"} |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2331 self.headers=headers |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2332 results = self.server.dispatch('GET', |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2333 "/rest/data/status/1", |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2334 self.empty_form) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2335 print(results) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2336 self.assertEqual(self.server.client.response_code, 200) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2337 self.assertEqual(self.server.client.additional_headers['Content-Type'], |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2338 "application/json") |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2339 |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2340 # TEST #6 |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2341 # invalid q factor if not ignored/demoted |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2342 # application/json is selected with invalid version |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2343 # and errors. |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2344 # this ends up choosing */* which triggers json. |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2345 self.server.client.request.headers.get=self.get_header |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2346 headers={"accept": "application/json; q=1.5; version=99," |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2347 "*/*; q=0.9; version=1," |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2348 "text/plain; q=3.75; version=2" |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2349 } |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2350 self.headers=headers |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2351 results = self.server.dispatch('GET', |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2352 "/rest/data/status/1", |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2353 self.empty_form) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2354 print(results) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2355 self.assertEqual(self.server.client.response_code, 200) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2356 self.assertEqual(self.server.client.additional_headers['Content-Type'], |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2357 "application/json") |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2358 |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2359 |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2360 ''' |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2361 # only works if dicttoxml.py is installed. |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2362 # not installed for testing |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2363 # TEST #7 |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2364 # xml wins |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2365 headers={"accept": "application/json; q=0.5; version=2," |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2366 "application/xml; q=0.75; version=1," |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2367 "text/plain; q=1.0; version=2" |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2368 } |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2369 self.headers=headers |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2370 results = self.server.dispatch('GET', |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2371 "/rest/data/status/1", |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2372 self.empty_form) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2373 print(results) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2374 self.assertEqual(self.server.client.response_code, 200) |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2375 self.assertEqual(self.server.client.additional_headers['Content-Type'], |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2376 "application/xml") |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2377 ''' |
|
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2378 |
|
6316
323661f7c89c
Test handling of invalid API version using Accept header.
John Rouillard <rouilj@ieee.org>
parents:
6314
diff
changeset
|
2379 # TEST #8 |
|
323661f7c89c
Test handling of invalid API version using Accept header.
John Rouillard <rouilj@ieee.org>
parents:
6314
diff
changeset
|
2380 # invalid api version |
|
323661f7c89c
Test handling of invalid API version using Accept header.
John Rouillard <rouilj@ieee.org>
parents:
6314
diff
changeset
|
2381 # application/json is selected with invalid version |
|
323661f7c89c
Test handling of invalid API version using Accept header.
John Rouillard <rouilj@ieee.org>
parents:
6314
diff
changeset
|
2382 self.server.client.request.headers.get=self.get_header |
|
323661f7c89c
Test handling of invalid API version using Accept header.
John Rouillard <rouilj@ieee.org>
parents:
6314
diff
changeset
|
2383 headers={"accept": "application/json; version=99" |
|
323661f7c89c
Test handling of invalid API version using Accept header.
John Rouillard <rouilj@ieee.org>
parents:
6314
diff
changeset
|
2384 } |
|
323661f7c89c
Test handling of invalid API version using Accept header.
John Rouillard <rouilj@ieee.org>
parents:
6314
diff
changeset
|
2385 self.headers=headers |
|
6509
1fc765ef6379
Fix 204 responses, hangs and crashes with REST.
John Rouillard <rouilj@ieee.org>
parents:
6366
diff
changeset
|
2386 results = self.server.dispatch('GET', |
|
1fc765ef6379
Fix 204 responses, hangs and crashes with REST.
John Rouillard <rouilj@ieee.org>
parents:
6366
diff
changeset
|
2387 "/rest/data/status/1", |
|
1fc765ef6379
Fix 204 responses, hangs and crashes with REST.
John Rouillard <rouilj@ieee.org>
parents:
6366
diff
changeset
|
2388 self.empty_form) |
|
6316
323661f7c89c
Test handling of invalid API version using Accept header.
John Rouillard <rouilj@ieee.org>
parents:
6314
diff
changeset
|
2389 print(results) |
|
6509
1fc765ef6379
Fix 204 responses, hangs and crashes with REST.
John Rouillard <rouilj@ieee.org>
parents:
6366
diff
changeset
|
2390 json_dict = json.loads(b2s(results)) |
|
1fc765ef6379
Fix 204 responses, hangs and crashes with REST.
John Rouillard <rouilj@ieee.org>
parents:
6366
diff
changeset
|
2391 self.assertEqual(self.server.client.response_code, 400) |
|
1fc765ef6379
Fix 204 responses, hangs and crashes with REST.
John Rouillard <rouilj@ieee.org>
parents:
6366
diff
changeset
|
2392 self.assertEqual(self.server.client.additional_headers['Content-Type'], |
|
1fc765ef6379
Fix 204 responses, hangs and crashes with REST.
John Rouillard <rouilj@ieee.org>
parents:
6366
diff
changeset
|
2393 "application/json") |
|
1fc765ef6379
Fix 204 responses, hangs and crashes with REST.
John Rouillard <rouilj@ieee.org>
parents:
6366
diff
changeset
|
2394 self.assertEqual(json_dict['error']['msg'], |
| 6512 | 2395 "Unrecognized api version: 99. See /rest " |
| 2396 "without specifying api version for " | |
| 2397 "supported versions.") | |
|
6316
323661f7c89c
Test handling of invalid API version using Accept header.
John Rouillard <rouilj@ieee.org>
parents:
6314
diff
changeset
|
2398 |
|
5743
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2399 def testMethodOverride(self): |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2400 # TEST #1 |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2401 # Use GET, PUT, PATCH to tunnel DELETE expect error |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2402 |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2403 body=b'{ "order": 5 }' |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2404 env = { "CONTENT_TYPE": "application/json", |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2405 "CONTENT_LENGTH": len(body), |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2406 "REQUEST_METHOD": "POST" |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2407 } |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2408 body_file=BytesIO(body) # FieldStorage needs a file |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2409 self.server.client.request.headers.get=self.get_header |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2410 for method in ( "GET", "PUT", "PATCH" ): |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2411 headers={"accept": "application/json; version=1", |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2412 "content-type": env['CONTENT_TYPE'], |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2413 "content-length": len(body), |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2414 "x-http-method-override": "DElETE", |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2415 } |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2416 self.headers=headers |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2417 form = client.BinaryFieldStorage(body_file, |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2418 headers=headers, |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2419 environ=env) |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2420 self.db.setCurrentUser('admin') # must be admin to create status |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
2421 |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
2422 self.server.client.env.update({'REQUEST_METHOD': method}) |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
2423 |
|
5743
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2424 results = self.server.dispatch(method, |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2425 "/rest/data/status", |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2426 form) |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2427 |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2428 self.assertEqual(self.server.client.response_code, 400) |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2429 json_dict = json.loads(b2s(results)) |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2430 status=json_dict['error']['status'] |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2431 msg=json_dict['error']['msg'] |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2432 self.assertEqual(status, 400) |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2433 self.assertEqual(msg, "X-HTTP-Method-Override: DElETE must be " |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2434 "used with POST method not %s."%method) |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2435 |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2436 # TEST #2 |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2437 # DELETE: delete issue 1 via post tunnel |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2438 self.assertFalse(self.db.status.is_retired("1")) |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2439 etag = calculate_etag(self.db.status.getnode("1"), |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2440 self.db.config['WEB_SECRET_KEY']) |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2441 etagb = etag.strip ('"') |
|
5744
d4de45cde106
Accept header parsing fixes. Now return first acceptable match rather
John Rouillard <rouilj@ieee.org>
parents:
5743
diff
changeset
|
2442 headers={"accept": "application/json; q=1.0, application/xml; q=0.75", |
|
5743
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2443 "if-match": '"%s"'%etagb, |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2444 "content-length": 0, |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2445 "x-http-method-override": "DElETE" |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2446 } |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2447 self.headers=headers |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2448 body_file=BytesIO(b'') # FieldStorage needs a file |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2449 form = client.BinaryFieldStorage(body_file, |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2450 headers=headers, |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2451 environ=env) |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2452 self.server.client.request.headers.get=self.get_header |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2453 self.db.setCurrentUser('admin') # must be admin to delete issue |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
2454 self.server.client.env.update({'REQUEST_METHOD': 'POST'}) |
|
5743
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2455 results = self.server.dispatch('POST', |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2456 "/rest/data/status/1", |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2457 form) |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2458 print(results) |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2459 self.assertEqual(self.server.client.response_code, 200) |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2460 json_dict = json.loads(b2s(results)) |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2461 status=json_dict['data']['status'] |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2462 self.assertEqual(status, 'ok') |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2463 self.assertTrue(self.db.status.is_retired("1")) |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2464 |
|
60299cd36670
Basic tests for tunneling of methods via x-http-method-override.
John Rouillard <rouilj@ieee.org>
parents:
5742
diff
changeset
|
2465 |
|
5711
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2466 def testPostPOE(self): |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2467 ''' test post once exactly: get POE url, create issue |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2468 using POE url. Use dispatch entry point. |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2469 ''' |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2470 import time |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2471 # setup environment |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2472 etag = "not needed" |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2473 empty_body=b'' |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2474 env = { "CONTENT_TYPE": "application/json", |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2475 "CONTENT_LENGTH": len(empty_body), |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2476 "REQUEST_METHOD": "POST" |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2477 } |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
2478 self.server.client.env.update(env) |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
2479 |
|
5711
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2480 headers={"accept": "application/json", |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2481 "content-type": env['CONTENT_TYPE'], |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2482 "content-length": len(empty_body) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2483 } |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2484 self.headers=headers |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2485 # use empty_body to test code path for missing/empty json |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2486 body_file=BytesIO(empty_body) # FieldStorage needs a file |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2487 form = client.BinaryFieldStorage(body_file, |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2488 headers=headers, |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2489 environ=env) |
|
5710
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2490 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2491 ## Obtain the POE url. |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2492 self.server.client.request.headers.get=self.get_header |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2493 results = self.server.dispatch('POST', |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2494 "/rest/data/issue/@poe", |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2495 form) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2496 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2497 self.assertEqual(self.server.client.response_code, 200) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2498 json_dict = json.loads(b2s(results)) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2499 url=json_dict['data']['link'] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2500 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2501 # strip tracker web prefix leaving leading /. |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2502 url = url[len(self.db.config['TRACKER_WEB'])-1:] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2503 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2504 ## create an issue using poe url. |
|
5711
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2505 body=b'{ "title": "foo bar", "priority": "critical" }' |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2506 env = { "CONTENT_TYPE": "application/json", |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2507 "CONTENT_LENGTH": len(body), |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2508 "REQUEST_METHOD": "POST" |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2509 } |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
2510 self.server.client.env.update(env) |
|
5711
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2511 headers={"accept": "application/json", |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2512 "content-type": env['CONTENT_TYPE'], |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2513 "content-length": len(body) |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2514 } |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2515 self.headers=headers |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2516 body_file=BytesIO(body) # FieldStorage needs a file |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2517 form = client.BinaryFieldStorage(body_file, |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2518 headers=headers, |
|
aea2cc142c1b
Added some more rest testing and make sure api version is valid.
John Rouillard <rouilj@ieee.org>
parents:
5710
diff
changeset
|
2519 environ=env) |
|
5710
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2520 self.server.client.request.headers.get=self.get_header |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2521 results = self.server.dispatch('POST', |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2522 url, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2523 form) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2524 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2525 self.assertEqual(self.server.client.response_code, 201) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2526 json_dict = json.loads(b2s(results)) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2527 issue_id=json_dict['data']['id'] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2528 results = self.server.get_element('issue', |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2529 str(issue_id), # must be a string not unicode |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2530 self.empty_form) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2531 self.assertEqual(self.dummy_client.response_code, 200) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2532 self.assertEqual(results['data']['attributes']['title'], |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2533 'foo bar') |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2534 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2535 ## Reuse POE url. It will fail. |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2536 self.server.client.request.headers.get=self.get_header |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2537 results = self.server.dispatch('POST', |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2538 url, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2539 form) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2540 # get the last component stripping the trailing / |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2541 poe=url[url.rindex('/')+1:] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2542 self.assertEqual(self.server.client.response_code, 400) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2543 results = json.loads(b2s(results)) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2544 self.assertEqual(results['error']['status'], 400) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2545 self.assertEqual(results['error']['msg'], |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2546 "POE token \'%s\' not valid."%poe) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2547 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2548 ## Try using GET on POE url. Should fail with method not |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2549 ## allowed (405) |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
2550 self.server.client.env.update({'REQUEST_METHOD': 'GET'}) |
|
5710
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2551 self.server.client.request.headers.get=self.get_header |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2552 results = self.server.dispatch('GET', |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2553 "/rest/data/issue/@poe", |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2554 form) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2555 self.assertEqual(self.server.client.response_code, 405) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2556 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2557 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2558 ## Try creating generic POE url. |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2559 body_poe=b'{"generic": "null", "lifetime": "100" }' |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2560 body_file=BytesIO(body_poe) # FieldStorage needs a file |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2561 form = client.BinaryFieldStorage(body_file, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2562 headers=headers, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2563 environ=env) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2564 self.server.client.request.headers.get=self.get_header |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
2565 self.server.client.env.update({'REQUEST_METHOD': 'POST'}) |
|
5710
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2566 results = self.server.dispatch('POST', |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2567 "/rest/data/issue/@poe", |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2568 form) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2569 json_dict = json.loads(b2s(results)) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2570 url=json_dict['data']['link'] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2571 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2572 # strip tracker web prefix leaving leading /. |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2573 url = url[len(self.db.config['TRACKER_WEB'])-1:] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2574 url = url.replace('/issue/', '/keyword/') |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2575 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2576 body_keyword=b'{"name": "keyword"}' |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2577 body_file=BytesIO(body_keyword) # FieldStorage needs a file |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2578 form = client.BinaryFieldStorage(body_file, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2579 headers=headers, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2580 environ=env) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2581 results = self.server.dispatch('POST', |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2582 url, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2583 form) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2584 self.assertEqual(self.server.client.response_code, 201) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2585 json_dict = json.loads(b2s(results)) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2586 url=json_dict['data']['link'] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2587 id=json_dict['data']['id'] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2588 self.assertEqual(id, "1") |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2589 self.assertEqual(url, "http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/keyword/1") |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2590 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2591 ## Create issue POE url and try to use for keyword. |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2592 ## This should fail. |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2593 body_poe=b'{"lifetime": "100" }' |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2594 body_file=BytesIO(body_poe) # FieldStorage needs a file |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2595 form = client.BinaryFieldStorage(body_file, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2596 headers=headers, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2597 environ=env) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2598 self.server.client.request.headers.get=self.get_header |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2599 results = self.server.dispatch('POST', |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2600 "/rest/data/issue/@poe", |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2601 form) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2602 json_dict = json.loads(b2s(results)) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2603 url=json_dict['data']['link'] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2604 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2605 # strip tracker web prefix leaving leading /. |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2606 url = url[len(self.db.config['TRACKER_WEB'])-1:] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2607 url = url.replace('/issue/', '/keyword/') |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2608 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2609 body_keyword=b'{"name": "keyword"}' |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2610 body_file=BytesIO(body_keyword) # FieldStorage needs a file |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2611 form = client.BinaryFieldStorage(body_file, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2612 headers=headers, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2613 environ=env) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2614 results = self.server.dispatch('POST', |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2615 url, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2616 form) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2617 poe=url[url.rindex('/')+1:] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2618 self.assertEqual(self.server.client.response_code, 400) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2619 json_dict = json.loads(b2s(results)) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2620 stat=json_dict['error']['status'] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2621 msg=json_dict['error']['msg'] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2622 self.assertEqual(stat, 400) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2623 self.assertEqual(msg, "POE token '%s' not valid for keyword, was generated for class issue"%poe) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2624 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2625 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2626 ## Create POE with 10 minute lifetime and verify |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2627 ## expires is within 10 minutes. |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2628 body_poe=b'{"lifetime": "30" }' |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2629 body_file=BytesIO(body_poe) # FieldStorage needs a file |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2630 form = client.BinaryFieldStorage(body_file, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2631 headers=headers, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2632 environ=env) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2633 self.server.client.request.headers.get=self.get_header |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2634 results = self.server.dispatch('POST', |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2635 "/rest/data/issue/@poe", |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2636 form) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2637 json_dict = json.loads(b2s(results)) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2638 expires=int(json_dict['data']['expires']) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2639 # allow up to 3 seconds between time stamp creation |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2640 # done under dispatch and this point. |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2641 expected=int(time.time() + 30) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2642 print("expected=%d, expires=%d"%(expected,expires)) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2643 self.assertTrue((expected - expires) < 3 and (expected - expires) >= 0) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2644 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2645 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2646 ## Use a token created above as joe by a different user. |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2647 self.db.setCurrentUser('admin') |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2648 url=json_dict['data']['link'] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2649 # strip tracker web prefix leaving leading /. |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2650 url = url[len(self.db.config['TRACKER_WEB'])-1:] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2651 body_file=BytesIO(body_keyword) # FieldStorage needs a file |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2652 form = client.BinaryFieldStorage(body_file, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2653 headers=headers, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2654 environ=env) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2655 results = self.server.dispatch('POST', |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2656 url, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2657 form) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2658 print(results) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2659 self.assertEqual(self.server.client.response_code, 400) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2660 json_dict = json.loads(b2s(results)) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2661 # get the last component stripping the trailing / |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2662 poe=url[url.rindex('/')+1:] |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2663 self.assertEqual(json_dict['error']['msg'], |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2664 "POE token '%s' not valid."%poe) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2665 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2666 ## Create POE with bogus lifetime |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2667 body_poe=b'{"lifetime": "10.2" }' |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2668 body_file=BytesIO(body_poe) # FieldStorage needs a file |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2669 form = client.BinaryFieldStorage(body_file, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2670 headers=headers, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2671 environ=env) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2672 self.server.client.request.headers.get=self.get_header |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2673 results = self.server.dispatch('POST', |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2674 "/rest/data/issue/@poe", |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2675 form) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2676 self.assertEqual(self.server.client.response_code, 400) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2677 print(results) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2678 json_dict = json.loads(b2s(results)) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2679 self.assertEqual(json_dict['error']['msg'], |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2680 "Value \'lifetime\' must be an integer specify " |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2681 "lifetime in seconds. Got 10.2.") |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2682 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2683 ## Create POE with lifetime > 1 hour |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2684 body_poe=b'{"lifetime": "3700" }' |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2685 body_file=BytesIO(body_poe) # FieldStorage needs a file |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2686 form = client.BinaryFieldStorage(body_file, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2687 headers=headers, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2688 environ=env) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2689 self.server.client.request.headers.get=self.get_header |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2690 results = self.server.dispatch('POST', |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2691 "/rest/data/issue/@poe", |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2692 form) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2693 self.assertEqual(self.server.client.response_code, 400) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2694 print(results) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2695 json_dict = json.loads(b2s(results)) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2696 self.assertEqual(json_dict['error']['msg'], |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2697 "Value 'lifetime' must be between 1 second and 1 " |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2698 "hour (3600 seconds). Got 3700.") |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2699 |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2700 ## Create POE with lifetime < 1 second |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2701 body_poe=b'{"lifetime": "-1" }' |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2702 body_file=BytesIO(body_poe) # FieldStorage needs a file |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2703 form = client.BinaryFieldStorage(body_file, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2704 headers=headers, |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2705 environ=env) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2706 self.server.client.request.headers.get=self.get_header |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2707 results = self.server.dispatch('POST', |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2708 "/rest/data/issue/@poe", |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2709 form) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2710 self.assertEqual(self.server.client.response_code, 400) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2711 print(results) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2712 json_dict = json.loads(b2s(results)) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2713 self.assertEqual(json_dict['error']['msg'], |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2714 "Value 'lifetime' must be between 1 second and 1 " |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2715 "hour (3600 seconds). Got -1.") |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2716 del(self.headers) |
|
0b79bfcb3312
Add support for making an idempotent POST. This allows retrying a POST
John Rouillard <rouilj@ieee.org>
parents:
5708
diff
changeset
|
2717 |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2718 def testPutElement(self): |
| 5583 | 2719 """ |
| 2720 Change joe's 'realname' | |
| 2721 Check if we can't change admin's detail | |
| 2722 """ | |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2723 # fail to change Joe's realname via attribute uri |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2724 # no etag |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2725 form = cgi.FieldStorage() |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2726 form.list = [ |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2727 cgi.MiniFieldStorage('data', 'Joe Doe Doe') |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2728 ] |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2729 results = self.server.put_attribute( |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2730 'user', self.joeid, 'realname', form |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2731 ) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2732 self.assertEqual(self.dummy_client.response_code, 412) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2733 results = self.server.get_attribute( |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2734 'user', self.joeid, 'realname', self.empty_form |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2735 ) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2736 self.assertEqual(self.dummy_client.response_code, 200) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2737 self.assertEqual(results['data']['data'], 'Joe Random') |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2738 |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
2739 # change Joe's realname via attribute uri - etag in header |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2740 form = cgi.FieldStorage() |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2741 etag = calculate_etag(self.db.user.getnode(self.joeid), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2742 self.db.config['WEB_SECRET_KEY']) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2743 form.list = [ |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2744 cgi.MiniFieldStorage('data', 'Joe Doe Doe'), |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2745 ] |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2746 |
|
5674
6dc4dba1c225
REST: Use If-Match header for incoming requests
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5673
diff
changeset
|
2747 self.headers = {'if-match': etag } # use etag in header |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2748 results = self.server.put_attribute( |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2749 'user', self.joeid, 'realname', form |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2750 ) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2751 self.assertEqual(self.dummy_client.response_code, 200) |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2752 results = self.server.get_attribute( |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
2753 'user', self.joeid, 'realname', self.empty_form |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2754 ) |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2755 self.assertEqual(self.dummy_client.response_code, 200) |
|
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2756 self.assertEqual(results['data']['data'], 'Joe Doe Doe') |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
2757 del(self.headers) |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2758 |
|
5643
a60cbbcc9309
Added support for accepting application/json payload in addition to
John Rouillard <rouilj@ieee.org>
parents:
5639
diff
changeset
|
2759 # Reset joe's 'realname'. etag in body |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2760 # Also try to set protected items. The protected items should |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2761 # be ignored on put_element to make it easy to get the item |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2762 # with all fields, change one field and put the result without |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2763 # having to filter out protected items. |
| 5583 | 2764 form = cgi.FieldStorage() |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2765 etag = calculate_etag(self.db.user.getnode(self.joeid), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2766 self.db.config['WEB_SECRET_KEY']) |
| 5583 | 2767 form.list = [ |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2768 cgi.MiniFieldStorage('creator', '3'), |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2769 cgi.MiniFieldStorage('realname', 'Joe Doe'), |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2770 cgi.MiniFieldStorage('@etag', etag) |
| 5583 | 2771 ] |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2772 results = self.server.put_element('user', self.joeid, form) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2773 self.assertEqual(self.dummy_client.response_code, 200) |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
2774 results = self.server.get_element('user', self.joeid, self.empty_form) |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2775 self.assertEqual(self.dummy_client.response_code, 200) |
|
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2776 self.assertEqual(results['data']['attributes']['realname'], 'Joe Doe') |
| 5583 | 2777 |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2778 # We are joe, so check we can't change admin's details |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2779 results = self.server.put_element('user', '1', form) |
|
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2780 self.assertEqual(self.dummy_client.response_code, 403) |
|
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2781 self.assertEqual(results['error']['status'], 403) |
| 5583 | 2782 |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2783 # Try to reset joe's 'realname' and add a broken prop. |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2784 # This should result in no change to the name and |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2785 # a 400 UsageError stating prop does not exist. |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2786 form = cgi.FieldStorage() |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2787 etag = calculate_etag(self.db.user.getnode(self.joeid), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2788 self.db.config['WEB_SECRET_KEY']) |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2789 form.list = [ |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2790 cgi.MiniFieldStorage('JustKidding', '3'), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2791 cgi.MiniFieldStorage('realname', 'Joe Doe'), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2792 cgi.MiniFieldStorage('@etag', etag) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2793 ] |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2794 results = self.server.put_element('user', self.joeid, form) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2795 expected= {'error': {'status': 400, |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2796 'msg': UsageError('Property JustKidding not ' |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2797 'found in class user')}} |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2798 self.assertEqual(results['error']['status'], |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2799 expected['error']['status']) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2800 self.assertEqual(type(results['error']['msg']), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2801 type(expected['error']['msg'])) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2802 self.assertEqual(self.dummy_client.response_code, 400) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2803 results = self.server.get_element('user', self.joeid, self.empty_form) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2804 self.assertEqual(self.dummy_client.response_code, 200) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2805 self.assertEqual(results['data']['attributes']['realname'], 'Joe Doe') |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2806 |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2807 def testPutAttribute(self): |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2808 # put protected property |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2809 # make sure we don't have permission issues |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2810 self.db.setCurrentUser('admin') |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2811 form = cgi.FieldStorage() |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2812 etag = calculate_etag(self.db.user.getnode(self.joeid), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2813 self.db.config['WEB_SECRET_KEY']) |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2814 form.list = [ |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2815 cgi.MiniFieldStorage('data', '3'), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2816 cgi.MiniFieldStorage('@etag', etag) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2817 ] |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2818 results = self.server.put_attribute( |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2819 'user', self.joeid, 'creator', form |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2820 ) |
|
5707
f9a762678af6
Change some 400 errors to 405 (method not allowed) errors where user is
John Rouillard <rouilj@ieee.org>
parents:
5706
diff
changeset
|
2821 expected= {'error': {'status': 405, 'msg': |
|
f9a762678af6
Change some 400 errors to 405 (method not allowed) errors where user is
John Rouillard <rouilj@ieee.org>
parents:
5706
diff
changeset
|
2822 AttributeError('\'"creator", "actor", "creation" and ' |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2823 '"activity" are reserved\'')}} |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2824 print(results) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2825 self.assertEqual(results['error']['status'], |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2826 expected['error']['status']) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2827 self.assertEqual(type(results['error']['msg']), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2828 type(expected['error']['msg'])) |
|
5707
f9a762678af6
Change some 400 errors to 405 (method not allowed) errors where user is
John Rouillard <rouilj@ieee.org>
parents:
5706
diff
changeset
|
2829 self.assertEqual(self.dummy_client.response_code, 405) |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2830 |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2831 # put invalid property |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2832 # make sure we don't have permission issues |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2833 self.db.setCurrentUser('admin') |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2834 form = cgi.FieldStorage() |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2835 etag = calculate_etag(self.db.user.getnode(self.joeid), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2836 self.db.config['WEB_SECRET_KEY']) |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2837 form.list = [ |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2838 cgi.MiniFieldStorage('data', '3'), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2839 cgi.MiniFieldStorage('@etag', etag) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2840 ] |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2841 results = self.server.put_attribute( |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2842 'user', self.joeid, 'youMustBeKiddingMe', form |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2843 ) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2844 expected= {'error': {'status': 400, |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2845 'msg': UsageError("'youMustBeKiddingMe' " |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2846 "is not a property of user")}} |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2847 print(results) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2848 self.assertEqual(results['error']['status'], |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2849 expected['error']['status']) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2850 self.assertEqual(type(results['error']['msg']), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2851 type(expected['error']['msg'])) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2852 self.assertEqual(self.dummy_client.response_code, 400) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2853 |
| 5583 | 2854 def testPost(self): |
| 2855 """ | |
| 2856 Post a new issue with title: foo | |
| 2857 Verify the information of the created issue | |
| 2858 """ | |
| 2859 form = cgi.FieldStorage() | |
| 2860 form.list = [ | |
| 2861 cgi.MiniFieldStorage('title', 'foo') | |
| 2862 ] | |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2863 results = self.server.post_collection('issue', form) |
|
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2864 self.assertEqual(self.dummy_client.response_code, 201) |
|
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2865 issueid = results['data']['id'] |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
2866 results = self.server.get_element('issue', issueid, self.empty_form) |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2867 self.assertEqual(self.dummy_client.response_code, 200) |
|
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2868 self.assertEqual(results['data']['attributes']['title'], 'foo') |
| 5583 | 2869 self.assertEqual(self.db.issue.get(issueid, "tx_Source"), 'web') |
| 2870 | |
| 2871 def testPostFile(self): | |
| 2872 """ | |
| 2873 Post a new file with content: hello\r\nthere | |
| 2874 Verify the information of the created file | |
| 2875 """ | |
| 2876 form = cgi.FieldStorage() | |
| 2877 form.list = [ | |
| 2878 cgi.MiniFieldStorage('content', 'hello\r\nthere') | |
| 2879 ] | |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2880 results = self.server.post_collection('file', form) |
|
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2881 self.assertEqual(self.dummy_client.response_code, 201) |
|
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2882 fileid = results['data']['id'] |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
2883 results = self.server.get_element('file', fileid, self.empty_form) |
|
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
2884 results = results['data'] |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2885 self.assertEqual(self.dummy_client.response_code, 200) |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2886 self.assertEqual(results['attributes']['content'], |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2887 {'link': 'http://tracker.example/cgi-bin/roundup.cgi/bugs/file1/'}) |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2888 |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2889 # File content is only shown with verbose=3 |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2890 form = cgi.FieldStorage() |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2891 form.list = [ |
|
6317
ea0becc9fdb9
Test delete of class and use of @protected.
John Rouillard <rouilj@ieee.org>
parents:
6316
diff
changeset
|
2892 cgi.MiniFieldStorage('@verbose', '3'), |
|
ea0becc9fdb9
Test delete of class and use of @protected.
John Rouillard <rouilj@ieee.org>
parents:
6316
diff
changeset
|
2893 cgi.MiniFieldStorage('@protected', 'true') |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2894 ] |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2895 results = self.server.get_element('file', fileid, form) |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2896 results = results['data'] |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2897 self.assertEqual(self.dummy_client.response_code, 200) |
| 5583 | 2898 self.assertEqual(results['attributes']['content'], 'hello\r\nthere') |
|
6317
ea0becc9fdb9
Test delete of class and use of @protected.
John Rouillard <rouilj@ieee.org>
parents:
6316
diff
changeset
|
2899 self.assertIn('creator', results['attributes']) # added by @protected |
|
ea0becc9fdb9
Test delete of class and use of @protected.
John Rouillard <rouilj@ieee.org>
parents:
6316
diff
changeset
|
2900 self.assertEqual(results['attributes']['creator']['username'], "joe") |
| 5583 | 2901 |
| 2902 def testAuthDeniedPut(self): | |
| 2903 """ | |
| 2904 Test unauthorized PUT request | |
| 2905 """ | |
| 2906 # Wrong permissions (caught by roundup security module). | |
| 2907 form = cgi.FieldStorage() | |
| 2908 form.list = [ | |
| 2909 cgi.MiniFieldStorage('realname', 'someone') | |
| 2910 ] | |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2911 results = self.server.put_element('user', '1', form) |
|
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2912 self.assertEqual(self.dummy_client.response_code, 403) |
|
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2913 self.assertEqual(results['error']['status'], 403) |
| 5583 | 2914 |
| 2915 def testAuthDeniedPost(self): | |
| 2916 """ | |
| 2917 Test unauthorized POST request | |
| 2918 """ | |
| 2919 form = cgi.FieldStorage() | |
| 2920 form.list = [ | |
| 2921 cgi.MiniFieldStorage('username', 'blah') | |
| 2922 ] | |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2923 results = self.server.post_collection('user', form) |
|
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2924 self.assertEqual(self.dummy_client.response_code, 403) |
|
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2925 self.assertEqual(results['error']['status'], 403) |
| 5583 | 2926 |
| 2927 def testAuthAllowedPut(self): | |
| 2928 """ | |
| 2929 Test authorized PUT request | |
| 2930 """ | |
| 2931 self.db.setCurrentUser('admin') | |
| 2932 form = cgi.FieldStorage() | |
| 2933 form.list = [ | |
| 2934 cgi.MiniFieldStorage('realname', 'someone') | |
| 2935 ] | |
| 2936 try: | |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2937 self.server.put_element('user', '2', form) |
| 5602 | 2938 except Unauthorised as err: |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2939 self.fail('raised %s' % err) |
| 5583 | 2940 finally: |
| 2941 self.db.setCurrentUser('joe') | |
| 2942 | |
| 2943 def testAuthAllowedPost(self): | |
| 2944 """ | |
| 2945 Test authorized POST request | |
| 2946 """ | |
| 2947 self.db.setCurrentUser('admin') | |
| 2948 form = cgi.FieldStorage() | |
| 2949 form.list = [ | |
| 2950 cgi.MiniFieldStorage('username', 'blah') | |
| 2951 ] | |
| 2952 try: | |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2953 self.server.post_collection('user', form) |
| 5602 | 2954 except Unauthorised as err: |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2955 self.fail('raised %s' % err) |
| 5583 | 2956 finally: |
| 2957 self.db.setCurrentUser('joe') | |
| 2958 | |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2959 def testDeleteAttributeUri(self): |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2960 """ |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2961 Test Delete an attribute |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2962 """ |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
2963 self.maxDiff = 4000 |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2964 # create a new issue with userid 1 in the nosy list |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2965 issue_id = self.db.issue.create(title='foo', nosy=['1']) |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2966 |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2967 # No etag, so this should return 412 - Precondition Failed |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2968 # With no changes |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2969 results = self.server.delete_attribute( |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2970 'issue', issue_id, 'nosy', self.empty_form |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2971 ) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2972 self.assertEqual(self.dummy_client.response_code, 412) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2973 results = self.server.get_element('issue', issue_id, self.empty_form) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2974 results = results['data'] |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2975 self.assertEqual(self.dummy_client.response_code, 200) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2976 self.assertEqual(len(results['attributes']['nosy']), 1) |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2977 self.assertListEqual(results['attributes']['nosy'], |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
2978 [{'id': '1', 'link': self.url_pfx + 'user/1'}]) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2979 |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2980 form = cgi.FieldStorage() |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2981 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2982 self.db.config['WEB_SECRET_KEY']) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2983 form.list.append(cgi.MiniFieldStorage('@etag', etag)) |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2984 # remove the title and nosy |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2985 results = self.server.delete_attribute( |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2986 'issue', issue_id, 'title', form |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2987 ) |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2988 self.assertEqual(self.dummy_client.response_code, 200) |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2989 |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2990 del(form.list[-1]) |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2991 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
2992 self.db.config['WEB_SECRET_KEY']) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2993 form.list.append(cgi.MiniFieldStorage('@etag', etag)) |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2994 results = self.server.delete_attribute( |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
2995 'issue', issue_id, 'nosy', form |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2996 ) |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
2997 self.assertEqual(self.dummy_client.response_code, 200) |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2998 |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
2999 # verify the result |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
3000 results = self.server.get_element('issue', issue_id, self.terse_form) |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
3001 results = results['data'] |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
3002 self.assertEqual(self.dummy_client.response_code, 200) |
|
5585
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
3003 self.assertEqual(len(results['attributes']['nosy']), 0) |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
3004 self.assertListEqual(results['attributes']['nosy'], []) |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
3005 self.assertEqual(results['attributes']['title'], None) |
|
8725c09802b8
Added test cases for the element URI methods
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5583
diff
changeset
|
3006 |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3007 # delete protected property |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
3008 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
3009 self.db.config['WEB_SECRET_KEY']) |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3010 form.list.append(cgi.MiniFieldStorage('@etag', etag)) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3011 results = self.server.delete_attribute( |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3012 'issue', issue_id, 'creator', form |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3013 ) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3014 expected= {'error': { |
|
5707
f9a762678af6
Change some 400 errors to 405 (method not allowed) errors where user is
John Rouillard <rouilj@ieee.org>
parents:
5706
diff
changeset
|
3015 'status': 405, |
|
f9a762678af6
Change some 400 errors to 405 (method not allowed) errors where user is
John Rouillard <rouilj@ieee.org>
parents:
5706
diff
changeset
|
3016 'msg': AttributeError("Attribute 'creator' can not be updated for class issue.") |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3017 }} |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3018 |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3019 self.assertEqual(results['error']['status'], |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3020 expected['error']['status']) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3021 self.assertEqual(type(results['error']['msg']), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3022 type(expected['error']['msg'])) |
|
5707
f9a762678af6
Change some 400 errors to 405 (method not allowed) errors where user is
John Rouillard <rouilj@ieee.org>
parents:
5706
diff
changeset
|
3023 self.assertEqual(self.dummy_client.response_code, 405) |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3024 |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3025 # delete required property |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
3026 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
3027 self.db.config['WEB_SECRET_KEY']) |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3028 form.list.append(cgi.MiniFieldStorage('@etag', etag)) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3029 results = self.server.delete_attribute( |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3030 'issue', issue_id, 'requireme', form |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3031 ) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3032 expected= {'error': {'status': 400, |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3033 'msg': UsageError("Attribute 'requireme' is " |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3034 "required by class issue and can not be deleted.")}} |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3035 print(results) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3036 self.assertEqual(results['error']['status'], |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3037 expected['error']['status']) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3038 self.assertEqual(type(results['error']['msg']), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3039 type(expected['error']['msg'])) |
|
5706
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3040 self.assertEqual(str(results['error']['msg']), |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3041 str(expected['error']['msg'])) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3042 self.assertEqual(self.dummy_client.response_code, 400) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3043 |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3044 # delete bogus property |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
3045 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
3046 self.db.config['WEB_SECRET_KEY']) |
|
5706
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3047 form.list.append(cgi.MiniFieldStorage('@etag', etag)) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3048 results = self.server.delete_attribute( |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3049 'issue', issue_id, 'nosuchprop', form |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3050 ) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3051 expected= {'error': {'status': 400, |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3052 'msg': UsageError("Attribute 'nosuchprop' not valid " |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3053 "for class issue.")}} |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3054 print(results) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3055 self.assertEqual(results['error']['status'], |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3056 expected['error']['status']) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3057 self.assertEqual(type(results['error']['msg']), |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3058 type(expected['error']['msg'])) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3059 self.assertEqual(str(results['error']['msg']), |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3060 str(expected['error']['msg'])) |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3061 self.assertEqual(self.dummy_client.response_code, 400) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3062 |
| 5583 | 3063 def testPatchAdd(self): |
| 3064 """ | |
| 3065 Test Patch op 'Add' | |
| 3066 """ | |
| 3067 # create a new issue with userid 1 in the nosy list | |
| 3068 issue_id = self.db.issue.create(title='foo', nosy=['1']) | |
| 3069 | |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3070 # fail to add userid 2 to the nosy list |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3071 # no etag |
| 5583 | 3072 form = cgi.FieldStorage() |
| 3073 form.list = [ | |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
3074 cgi.MiniFieldStorage('@op', 'add'), |
| 5583 | 3075 cgi.MiniFieldStorage('nosy', '2') |
| 3076 ] | |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
3077 results = self.server.patch_element('issue', issue_id, form) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3078 self.assertEqual(self.dummy_client.response_code, 412) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3079 |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
3080 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
3081 self.db.config['WEB_SECRET_KEY']) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3082 form = cgi.FieldStorage() |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3083 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
3084 cgi.MiniFieldStorage('@op', 'add'), |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3085 cgi.MiniFieldStorage('nosy', '2'), |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3086 cgi.MiniFieldStorage('@etag', etag) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3087 ] |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3088 results = self.server.patch_element('issue', issue_id, form) |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
3089 self.assertEqual(self.dummy_client.response_code, 200) |
| 5583 | 3090 |
| 3091 # verify the result | |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
3092 results = self.server.get_element('issue', issue_id, self.terse_form) |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
3093 results = results['data'] |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
3094 self.assertEqual(self.dummy_client.response_code, 200) |
| 5583 | 3095 self.assertListEqual(results['attributes']['nosy'], ['1', '2']) |
| 3096 | |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
3097 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
3098 self.db.config['WEB_SECRET_KEY']) |
|
5706
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3099 form = cgi.FieldStorage() |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3100 form.list = [ |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3101 cgi.MiniFieldStorage('@op', 'add'), |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3102 cgi.MiniFieldStorage('data', '3'), |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3103 cgi.MiniFieldStorage('@etag', etag) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3104 ] |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3105 results = self.server.patch_attribute('issue', issue_id, 'nosy', form) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3106 self.assertEqual(self.dummy_client.response_code, 200) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3107 |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3108 # verify the result |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3109 results = self.server.get_element('issue', issue_id, self.terse_form) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3110 results = results['data'] |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3111 self.assertEqual(self.dummy_client.response_code, 200) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3112 self.assertListEqual(results['attributes']['nosy'], ['1', '2', '3']) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3113 |
|
6350
6a69584d117e
Remove length checks. We check list content explicitly.
John Rouillard <rouilj@ieee.org>
parents:
6318
diff
changeset
|
3114 |
|
5747
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3115 # patch with no new_val/data |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3116 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3117 self.db.config['WEB_SECRET_KEY']) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3118 form = cgi.FieldStorage() |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3119 form.list = [ |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3120 cgi.MiniFieldStorage('@op', 'add'), |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3121 cgi.MiniFieldStorage('data', ''), |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3122 cgi.MiniFieldStorage('@etag', etag) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3123 ] |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3124 results = self.server.patch_attribute('issue', issue_id, 'nosy', form) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3125 self.assertEqual(self.dummy_client.response_code, 200) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3126 |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3127 # verify the result |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3128 results = self.server.get_element('issue', issue_id, self.terse_form) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3129 results = results['data'] |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3130 self.assertEqual(self.dummy_client.response_code, 200) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3131 self.assertListEqual(results['attributes']['nosy'], ['1', '2', '3']) |
|
5706
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3132 |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3133 # patch invalid property |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
3134 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
3135 self.db.config['WEB_SECRET_KEY']) |
|
5706
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3136 form = cgi.FieldStorage() |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3137 form.list = [ |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3138 cgi.MiniFieldStorage('@op', 'add'), |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3139 cgi.MiniFieldStorage('data', '3'), |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3140 cgi.MiniFieldStorage('@etag', etag) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3141 ] |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3142 results = self.server.patch_attribute('issue', issue_id, 'notGoingToWork', form) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3143 self.assertEqual(self.dummy_client.response_code, 400) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3144 print(results) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3145 expected={'error': {'status': 400, |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3146 'msg': UsageError( |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3147 HyperdbValueError( |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3148 "'notGoingToWork' is not a property of issue",),)}} |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3149 self.assertEqual(results['error']['status'], |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3150 expected['error']['status']) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3151 self.assertEqual(type(results['error']['msg']), |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3152 type(expected['error']['msg'])) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3153 self.assertEqual(str(results['error']['msg']), |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3154 str(expected['error']['msg'])) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3155 |
| 5583 | 3156 def testPatchReplace(self): |
| 3157 """ | |
| 3158 Test Patch op 'Replace' | |
| 3159 """ | |
| 3160 # create a new issue with userid 1 in the nosy list and status = 1 | |
| 3161 issue_id = self.db.issue.create(title='foo', nosy=['1'], status='1') | |
| 3162 | |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3163 # fail to replace userid 2 to the nosy list and status = 3 |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3164 # no etag. |
| 5583 | 3165 form = cgi.FieldStorage() |
| 3166 form.list = [ | |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
3167 cgi.MiniFieldStorage('@op', 'replace'), |
| 5583 | 3168 cgi.MiniFieldStorage('nosy', '2'), |
| 3169 cgi.MiniFieldStorage('status', '3') | |
| 3170 ] | |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
3171 results = self.server.patch_element('issue', issue_id, form) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3172 self.assertEqual(self.dummy_client.response_code, 412) |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
3173 results = self.server.get_element('issue', issue_id, self.terse_form) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3174 results = results['data'] |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
3175 self.assertEqual(self.dummy_client.response_code, 200) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3176 self.assertEqual(results['attributes']['status'], '1') |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3177 self.assertListEqual(results['attributes']['nosy'], ['1']) |
| 5583 | 3178 |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3179 # replace userid 2 to the nosy list and status = 3 |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
3180 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
3181 self.db.config['WEB_SECRET_KEY']) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3182 form = cgi.FieldStorage() |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3183 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
3184 cgi.MiniFieldStorage('@op', 'replace'), |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3185 cgi.MiniFieldStorage('nosy', '2'), |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3186 cgi.MiniFieldStorage('status', '3'), |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3187 cgi.MiniFieldStorage('@etag', etag) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3188 ] |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3189 results = self.server.patch_element('issue', issue_id, form) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3190 self.assertEqual(self.dummy_client.response_code, 200) |
| 5583 | 3191 # verify the result |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
3192 results = self.server.get_element('issue', issue_id, self.terse_form) |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
3193 results = results['data'] |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
3194 self.assertEqual(self.dummy_client.response_code, 200) |
| 5583 | 3195 self.assertEqual(results['attributes']['status'], '3') |
| 3196 self.assertListEqual(results['attributes']['nosy'], ['2']) | |
| 3197 | |
|
5706
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3198 # replace status = 2 using status attribute |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
3199 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
3200 self.db.config['WEB_SECRET_KEY']) |
|
5706
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3201 form = cgi.FieldStorage() |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3202 form.list = [ |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3203 cgi.MiniFieldStorage('@op', 'replace'), |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3204 cgi.MiniFieldStorage('data', '2'), |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3205 cgi.MiniFieldStorage('@etag', etag) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3206 ] |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3207 results = self.server.patch_attribute('issue', issue_id, 'status', |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3208 form) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3209 self.assertEqual(self.dummy_client.response_code, 200) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3210 # verify the result |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3211 results = self.server.get_element('issue', issue_id, self.terse_form) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3212 results = results['data'] |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3213 self.assertEqual(self.dummy_client.response_code, 200) |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3214 self.assertEqual(results['attributes']['status'], '2') |
|
dfca6136dd7b
Add more tests including call to patch an attribute with add and
John Rouillard <rouilj@ieee.org>
parents:
5705
diff
changeset
|
3215 |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3216 # try to set a protected prop. It should fail. |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
3217 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
3218 self.db.config['WEB_SECRET_KEY']) |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3219 form = cgi.FieldStorage() |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3220 form.list = [ |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3221 cgi.MiniFieldStorage('@op', 'replace'), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3222 cgi.MiniFieldStorage('creator', '2'), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3223 cgi.MiniFieldStorage('@etag', etag) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3224 ] |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3225 results = self.server.patch_element('issue', issue_id, form) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3226 expected= {'error': {'status': 400, |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3227 'msg': KeyError('"creator", "actor", "creation" and "activity" are reserved',)}} |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3228 print(results) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3229 self.assertEqual(results['error']['status'], |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3230 expected['error']['status']) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3231 self.assertEqual(type(results['error']['msg']), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3232 type(expected['error']['msg'])) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3233 self.assertEqual(str(results['error']['msg']), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3234 str(expected['error']['msg'])) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3235 self.assertEqual(self.dummy_client.response_code, 400) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3236 |
|
5708
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
3237 # try to set a protected prop using patch_attribute. It should |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
3238 # fail with a 405 bad/unsupported method. |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
3239 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
3240 self.db.config['WEB_SECRET_KEY']) |
|
5708
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
3241 form = cgi.FieldStorage() |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
3242 form.list = [ |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
3243 cgi.MiniFieldStorage('@op', 'replace'), |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
3244 cgi.MiniFieldStorage('data', '2'), |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
3245 cgi.MiniFieldStorage('@etag', etag) |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
3246 ] |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
3247 results = self.server.patch_attribute('issue', issue_id, 'creator', |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
3248 form) |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
3249 expected= {'error': {'status': 405, |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
3250 'msg': AttributeError("Attribute 'creator' can not be updated for class issue.",)}} |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
3251 print(results) |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
3252 self.assertEqual(results['error']['status'], |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
3253 expected['error']['status']) |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
3254 self.assertEqual(type(results['error']['msg']), |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
3255 type(expected['error']['msg'])) |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
3256 self.assertEqual(str(results['error']['msg']), |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
3257 str(expected['error']['msg'])) |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
3258 self.assertEqual(self.dummy_client.response_code, 405) |
|
ad786c394788
Add another test case: change protected attribute using patch_attribute.
John Rouillard <rouilj@ieee.org>
parents:
5707
diff
changeset
|
3259 |
| 5583 | 3260 def testPatchRemoveAll(self): |
| 3261 """ | |
| 3262 Test Patch Action 'Remove' | |
| 3263 """ | |
|
5595
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
3264 # create a new issue with userid 1 and 2 in the nosy list |
| 5583 | 3265 issue_id = self.db.issue.create(title='foo', nosy=['1', '2']) |
| 3266 | |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3267 # fail to remove the nosy list and the title |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3268 # no etag |
| 5583 | 3269 form = cgi.FieldStorage() |
| 3270 form.list = [ | |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
3271 cgi.MiniFieldStorage('@op', 'remove'), |
| 5583 | 3272 cgi.MiniFieldStorage('nosy', ''), |
| 3273 cgi.MiniFieldStorage('title', '') | |
| 3274 ] | |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
3275 results = self.server.patch_element('issue', issue_id, form) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3276 self.assertEqual(self.dummy_client.response_code, 412) |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
3277 results = self.server.get_element('issue', issue_id, self.terse_form) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3278 results = results['data'] |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3279 self.assertEqual(self.dummy_client.response_code, 200) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3280 self.assertEqual(results['attributes']['title'], 'foo') |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3281 self.assertEqual(len(results['attributes']['nosy']), 2) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3282 self.assertEqual(results['attributes']['nosy'], ['1', '2']) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3283 |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3284 # remove the nosy list and the title |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3285 form = cgi.FieldStorage() |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
3286 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
3287 self.db.config['WEB_SECRET_KEY']) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3288 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
3289 cgi.MiniFieldStorage('@op', 'remove'), |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3290 cgi.MiniFieldStorage('nosy', ''), |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3291 cgi.MiniFieldStorage('title', ''), |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3292 cgi.MiniFieldStorage('@etag', etag) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3293 ] |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3294 results = self.server.patch_element('issue', issue_id, form) |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
3295 self.assertEqual(self.dummy_client.response_code, 200) |
| 5583 | 3296 |
| 3297 # verify the result | |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
3298 results = self.server.get_element('issue', issue_id, self.terse_form) |
|
5591
a25d79e874cb
Added filtering and pagination
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5588
diff
changeset
|
3299 results = results['data'] |
|
5588
6b3a9655a7d9
Move decorator to outside of the class
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5586
diff
changeset
|
3300 self.assertEqual(self.dummy_client.response_code, 200) |
| 5583 | 3301 self.assertEqual(results['attributes']['title'], None) |
| 3302 self.assertEqual(len(results['attributes']['nosy']), 0) | |
| 3303 self.assertEqual(results['attributes']['nosy'], []) | |
| 3304 | |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3305 # try to remove a protected prop. It should fail. |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
3306 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
3307 self.db.config['WEB_SECRET_KEY']) |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3308 form = cgi.FieldStorage() |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3309 form.list = [ |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3310 cgi.MiniFieldStorage('@op', 'remove'), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3311 cgi.MiniFieldStorage('creator', '2'), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3312 cgi.MiniFieldStorage('@etag', etag) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3313 ] |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3314 results = self.server.patch_element('issue', issue_id, form) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3315 expected= {'error': {'status': 400, |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3316 'msg': KeyError('"creator", "actor", "creation" and "activity" are reserved',)}} |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3317 print(results) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3318 self.assertEqual(results['error']['status'], |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3319 expected['error']['status']) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3320 self.assertEqual(type(results['error']['msg']), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3321 type(expected['error']['msg'])) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3322 self.assertEqual(str(results['error']['msg']), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3323 str(expected['error']['msg'])) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3324 self.assertEqual(self.dummy_client.response_code, 400) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3325 |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3326 # try to remove a required prop. it should fail |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
3327 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
3328 self.db.config['WEB_SECRET_KEY']) |
|
5705
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3329 form.list = [ |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3330 cgi.MiniFieldStorage('@op', 'remove'), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3331 cgi.MiniFieldStorage('requireme', ''), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3332 cgi.MiniFieldStorage('@etag', etag) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3333 ] |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3334 results = self.server.patch_element('issue', issue_id, form) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3335 expected= {'error': {'status': 400, |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3336 'msg': UsageError("Attribute 'requireme' is required by class issue and can not be removed.") |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3337 }} |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3338 print(results) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3339 self.assertEqual(results['error']['status'], |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3340 expected['error']['status']) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3341 self.assertEqual(type(results['error']['msg']), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3342 type(expected['error']['msg'])) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3343 self.assertEqual(str(results['error']['msg']), |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3344 str(expected['error']['msg'])) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3345 self.assertEqual(self.dummy_client.response_code, 400) |
|
457fc482e6b1
Method PUT: ignore specification of protected properties which can not
John Rouillard <rouilj@ieee.org>
parents:
5690
diff
changeset
|
3346 |
|
5599
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
3347 def testPatchAction(self): |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
3348 """ |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
3349 Test Patch Action 'Action' |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
3350 """ |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
3351 # create a new issue with userid 1 and 2 in the nosy list |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
3352 issue_id = self.db.issue.create(title='foo') |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
3353 |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3354 # fail to execute action retire |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3355 # no etag |
|
5599
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
3356 form = cgi.FieldStorage() |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
3357 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
3358 cgi.MiniFieldStorage('@op', 'action'), |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
3359 cgi.MiniFieldStorage('@action_name', 'retire') |
|
5599
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
3360 ] |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
3361 results = self.server.patch_element('issue', issue_id, form) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3362 self.assertEqual(self.dummy_client.response_code, 412) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3363 self.assertFalse(self.db.issue.is_retired(issue_id)) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3364 |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3365 # execute action retire |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3366 form = cgi.FieldStorage() |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
3367 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
3368 self.db.config['WEB_SECRET_KEY']) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3369 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
3370 cgi.MiniFieldStorage('@op', 'action'), |
|
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
3371 cgi.MiniFieldStorage('@action_name', 'retire'), |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3372 cgi.MiniFieldStorage('@etag', etag) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3373 ] |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3374 results = self.server.patch_element('issue', issue_id, form) |
|
5599
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
3375 self.assertEqual(self.dummy_client.response_code, 200) |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
3376 |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
3377 # verify the result |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
3378 self.assertTrue(self.db.issue.is_retired(issue_id)) |
|
a76d88673375
Added Patch operator 'action'
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5595
diff
changeset
|
3379 |
|
5747
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3380 # execute action restore |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3381 form = cgi.FieldStorage() |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3382 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3383 self.db.config['WEB_SECRET_KEY']) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3384 form.list = [ |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3385 cgi.MiniFieldStorage('@op', 'action'), |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3386 cgi.MiniFieldStorage('@action_name', 'restore'), |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3387 cgi.MiniFieldStorage('@etag', etag) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3388 ] |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3389 results = self.server.patch_element('issue', issue_id, form) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3390 self.assertEqual(self.dummy_client.response_code, 200) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3391 |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3392 # verify the result |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3393 self.assertTrue(not self.db.issue.is_retired(issue_id)) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3394 |
|
6318
ec853cef2f09
Add test for invaild action in rest.py patch_element.
John Rouillard <rouilj@ieee.org>
parents:
6317
diff
changeset
|
3395 def testPatchBadAction(self): |
|
ec853cef2f09
Add test for invaild action in rest.py patch_element.
John Rouillard <rouilj@ieee.org>
parents:
6317
diff
changeset
|
3396 """ |
|
ec853cef2f09
Add test for invaild action in rest.py patch_element.
John Rouillard <rouilj@ieee.org>
parents:
6317
diff
changeset
|
3397 Test Patch Action 'Unknown' |
|
ec853cef2f09
Add test for invaild action in rest.py patch_element.
John Rouillard <rouilj@ieee.org>
parents:
6317
diff
changeset
|
3398 """ |
|
ec853cef2f09
Add test for invaild action in rest.py patch_element.
John Rouillard <rouilj@ieee.org>
parents:
6317
diff
changeset
|
3399 # create a new issue with userid 1 and 2 in the nosy list |
|
ec853cef2f09
Add test for invaild action in rest.py patch_element.
John Rouillard <rouilj@ieee.org>
parents:
6317
diff
changeset
|
3400 issue_id = self.db.issue.create(title='foo') |
|
ec853cef2f09
Add test for invaild action in rest.py patch_element.
John Rouillard <rouilj@ieee.org>
parents:
6317
diff
changeset
|
3401 |
|
ec853cef2f09
Add test for invaild action in rest.py patch_element.
John Rouillard <rouilj@ieee.org>
parents:
6317
diff
changeset
|
3402 # execute action retire |
|
ec853cef2f09
Add test for invaild action in rest.py patch_element.
John Rouillard <rouilj@ieee.org>
parents:
6317
diff
changeset
|
3403 form = cgi.FieldStorage() |
|
ec853cef2f09
Add test for invaild action in rest.py patch_element.
John Rouillard <rouilj@ieee.org>
parents:
6317
diff
changeset
|
3404 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
ec853cef2f09
Add test for invaild action in rest.py patch_element.
John Rouillard <rouilj@ieee.org>
parents:
6317
diff
changeset
|
3405 self.db.config['WEB_SECRET_KEY']) |
|
ec853cef2f09
Add test for invaild action in rest.py patch_element.
John Rouillard <rouilj@ieee.org>
parents:
6317
diff
changeset
|
3406 form.list = [ |
|
ec853cef2f09
Add test for invaild action in rest.py patch_element.
John Rouillard <rouilj@ieee.org>
parents:
6317
diff
changeset
|
3407 cgi.MiniFieldStorage('@op', 'action'), |
|
ec853cef2f09
Add test for invaild action in rest.py patch_element.
John Rouillard <rouilj@ieee.org>
parents:
6317
diff
changeset
|
3408 cgi.MiniFieldStorage('@action_name', 'unknown'), |
|
ec853cef2f09
Add test for invaild action in rest.py patch_element.
John Rouillard <rouilj@ieee.org>
parents:
6317
diff
changeset
|
3409 cgi.MiniFieldStorage('@etag', etag) |
|
ec853cef2f09
Add test for invaild action in rest.py patch_element.
John Rouillard <rouilj@ieee.org>
parents:
6317
diff
changeset
|
3410 ] |
|
ec853cef2f09
Add test for invaild action in rest.py patch_element.
John Rouillard <rouilj@ieee.org>
parents:
6317
diff
changeset
|
3411 results = self.server.patch_element('issue', issue_id, form) |
|
ec853cef2f09
Add test for invaild action in rest.py patch_element.
John Rouillard <rouilj@ieee.org>
parents:
6317
diff
changeset
|
3412 self.assertEqual(self.dummy_client.response_code, 400) |
|
ec853cef2f09
Add test for invaild action in rest.py patch_element.
John Rouillard <rouilj@ieee.org>
parents:
6317
diff
changeset
|
3413 # verify the result, note order of allowed elements changes |
|
ec853cef2f09
Add test for invaild action in rest.py patch_element.
John Rouillard <rouilj@ieee.org>
parents:
6317
diff
changeset
|
3414 # for python2/3 so just check prefix. |
|
ec853cef2f09
Add test for invaild action in rest.py patch_element.
John Rouillard <rouilj@ieee.org>
parents:
6317
diff
changeset
|
3415 self.assertIn('action "unknown" is not supported, allowed: ', |
|
ec853cef2f09
Add test for invaild action in rest.py patch_element.
John Rouillard <rouilj@ieee.org>
parents:
6317
diff
changeset
|
3416 results['error']['msg'].args[0]) |
|
ec853cef2f09
Add test for invaild action in rest.py patch_element.
John Rouillard <rouilj@ieee.org>
parents:
6317
diff
changeset
|
3417 |
|
5595
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
3418 def testPatchRemove(self): |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
3419 """ |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
3420 Test Patch Action 'Remove' only some element from a list |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
3421 """ |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
3422 # create a new issue with userid 1, 2, 3 in the nosy list |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
3423 issue_id = self.db.issue.create(title='foo', nosy=['1', '2', '3']) |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
3424 |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3425 # fail to remove the nosy list and the title |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3426 # no etag |
|
5595
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
3427 form = cgi.FieldStorage() |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
3428 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
3429 cgi.MiniFieldStorage('@op', 'remove'), |
|
5595
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
3430 cgi.MiniFieldStorage('nosy', '1, 2'), |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
3431 ] |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
3432 results = self.server.patch_element('issue', issue_id, form) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3433 self.assertEqual(self.dummy_client.response_code, 412) |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
3434 results = self.server.get_element('issue', issue_id, self.terse_form) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3435 results = results['data'] |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3436 self.assertEqual(self.dummy_client.response_code, 200) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3437 self.assertEqual(len(results['attributes']['nosy']), 3) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3438 self.assertEqual(results['attributes']['nosy'], ['1', '2', '3']) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3439 |
|
5747
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3440 # remove 1 and 2 from the nosy list |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3441 form = cgi.FieldStorage() |
|
5727
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
3442 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
8b5171f353eb
issue2551033: actually use the key in hmac generation. Finally add
John Rouillard <rouilj@ieee.org>
parents:
5726
diff
changeset
|
3443 self.db.config['WEB_SECRET_KEY']) |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3444 form.list = [ |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
3445 cgi.MiniFieldStorage('@op', 'remove'), |
|
5630
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3446 cgi.MiniFieldStorage('nosy', '1, 2'), |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3447 cgi.MiniFieldStorage('@etag', etag) |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3448 ] |
|
07abc8d36940
Add etag support to rest interface to prevent multiple users from
John Rouillard <rouilj@ieee.org>
parents:
5623
diff
changeset
|
3449 results = self.server.patch_element('issue', issue_id, form) |
|
5595
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
3450 self.assertEqual(self.dummy_client.response_code, 200) |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
3451 |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
3452 # verify the result |
|
5672
a7211712b110
Fix tests for latest REST changes
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5656
diff
changeset
|
3453 results = self.server.get_element('issue', issue_id, self.terse_form) |
|
5595
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
3454 results = results['data'] |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
3455 self.assertEqual(self.dummy_client.response_code, 200) |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
3456 self.assertEqual(len(results['attributes']['nosy']), 1) |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
3457 self.assertEqual(results['attributes']['nosy'], ['3']) |
|
65caddd54da2
Handle operation for patch separately
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5592
diff
changeset
|
3458 |
|
5747
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3459 # delete last element: 3 |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3460 etag = calculate_etag(self.db.issue.getnode(issue_id), |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3461 self.db.config['WEB_SECRET_KEY']) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3462 form = cgi.FieldStorage() |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3463 form.list = [ |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3464 cgi.MiniFieldStorage('@op', 'remove'), |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3465 cgi.MiniFieldStorage('data', '3'), |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3466 cgi.MiniFieldStorage('@etag', etag) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3467 ] |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3468 results = self.server.patch_attribute('issue', issue_id, 'nosy', form) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3469 self.assertEqual(self.dummy_client.response_code, 200) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3470 |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3471 # verify the result |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3472 results = self.server.get_element('issue', issue_id, self.terse_form) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3473 results = results['data'] |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3474 self.assertEqual(self.dummy_client.response_code, 200) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3475 self.assertEqual(len(results['attributes']['nosy']), 0) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3476 self.assertListEqual(results['attributes']['nosy'], []) |
|
17b38e209307
Test patch op=action restore; test patch add for attribute with no value.
John Rouillard <rouilj@ieee.org>
parents:
5746
diff
changeset
|
3477 |
|
7156
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3478 def testRestExposeHeaders(self): |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3479 |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3480 local_client = self.server.client |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3481 body = b'{ "data": "Joe Doe 1" }' |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3482 env = { "CONTENT_TYPE": "application/json", |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3483 "CONTENT_LENGTH": len(body), |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3484 "REQUEST_METHOD": "PUT", |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3485 "HTTP_ORIGIN": "http://tracker.example" |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3486 } |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3487 local_client.env.update(env) |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3488 |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3489 local_client.db.config["WEB_ALLOWED_API_ORIGINS"] = " * " |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3490 |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3491 headers={"accept": "application/json; version=1", |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3492 "content-type": env['CONTENT_TYPE'], |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3493 "content-length": env['CONTENT_LENGTH'], |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3494 "origin": env['HTTP_ORIGIN'] |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3495 } |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3496 self.headers=headers |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3497 # we need to generate a FieldStorage the looks like |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3498 # FieldStorage(None, None, 'string') rather than |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3499 # FieldStorage(None, None, []) |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3500 body_file=BytesIO(body) # FieldStorage needs a file |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3501 form = client.BinaryFieldStorage(body_file, |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3502 headers=headers, |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3503 environ=env) |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3504 local_client.request.headers.get=self.get_header |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3505 results = self.server.dispatch('PUT', |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3506 "/rest/data/user/%s/realname"%self.joeid, |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3507 form) |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3508 |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3509 for header in [ "X-RateLimit-Limit", |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3510 "X-RateLimit-Remaining", |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3511 "X-RateLimit-Reset", |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3512 "X-RateLimit-Limit-Period", |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3513 "Retry-After", |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3514 "Sunset", |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3515 "Allow", |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3516 ]: |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3517 self.assertIn( |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3518 header, |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3519 self.server.client.additional_headers[ |
|
6f09103a6522
[issue2551263] expose headers to rest clients
John Rouillard <rouilj@ieee.org>
parents:
7155
diff
changeset
|
3520 "Access-Control-Expose-Headers"]) |
|
7155
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3521 |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3522 def testRestMatchWildcardOrigin(self): |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3523 # cribbed from testDispatch #1 |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3524 # PUT: joe's 'realname' using json data. |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3525 # simulate: /rest/data/user/<id>/realname |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3526 # use etag in header |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3527 |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3528 # verify that credential header is missing, valid allow origin |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3529 # header and vary includes origin. |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3530 |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3531 local_client = self.server.client |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3532 etag = calculate_etag(self.db.user.getnode(self.joeid), |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3533 self.db.config['WEB_SECRET_KEY']) |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3534 body = b'{ "data": "Joe Doe 1" }' |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3535 env = { "CONTENT_TYPE": "application/json", |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3536 "CONTENT_LENGTH": len(body), |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3537 "REQUEST_METHOD": "PUT", |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3538 "HTTP_ORIGIN": "https://bad.origin" |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3539 } |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3540 local_client.env.update(env) |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3541 |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3542 local_client.db.config["WEB_ALLOWED_API_ORIGINS"] = " * " |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3543 |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3544 headers={"accept": "application/json; version=1", |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3545 "content-type": env['CONTENT_TYPE'], |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3546 "content-length": env['CONTENT_LENGTH'], |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3547 "if-match": etag, |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3548 "origin": env['HTTP_ORIGIN'] |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3549 } |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3550 self.headers=headers |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3551 # we need to generate a FieldStorage the looks like |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3552 # FieldStorage(None, None, 'string') rather than |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3553 # FieldStorage(None, None, []) |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3554 body_file=BytesIO(body) # FieldStorage needs a file |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3555 form = client.BinaryFieldStorage(body_file, |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3556 headers=headers, |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3557 environ=env) |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3558 local_client.request.headers.get=self.get_header |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3559 results = self.server.dispatch('PUT', |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3560 "/rest/data/user/%s/realname"%self.joeid, |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3561 form) |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3562 |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3563 self.assertNotIn("Access-Control-Allow-Credentials", |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3564 local_client.additional_headers) |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3565 |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3566 self.assertIn("Access-Control-Allow-Origin", |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3567 local_client.additional_headers) |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3568 self.assertEqual( |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3569 headers['origin'], |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3570 local_client.additional_headers["Access-Control-Allow-Origin"]) |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3571 |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3572 |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3573 self.assertIn("Vary", local_client.additional_headers) |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3574 self.assertIn("Origin", |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3575 local_client.additional_headers['Vary']) |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3576 |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3577 self.assertEqual(local_client.response_code, 200) |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3578 results = self.server.get_element('user', self.joeid, self.empty_form) |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3579 self.assertEqual(self.dummy_client.response_code, 200) |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3580 self.assertEqual(results['data']['attributes']['realname'], |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3581 'Joe Doe 1') |
|
89a59e46b3af
improve REST interface security
John Rouillard <rouilj@ieee.org>
parents:
6660
diff
changeset
|
3582 |
|
5878
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3583 @skip_jwt |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3584 def test_expired_jwt(self): |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3585 # self.dummy_client.main() closes database, so |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3586 # we need a new test with setup called for each test |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3587 out = [] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3588 def wh(s): |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3589 out.append(s) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3590 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3591 secret = self.db.config.WEB_JWT_SECRET |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3592 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3593 # verify library and tokens are correct |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3594 self.assertRaises(jwt.exceptions.InvalidTokenError, |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3595 jwt.decode, self.jwt['expired'], |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3596 secret, algorithms=['HS256'], |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3597 audience=self.db.config.TRACKER_WEB, |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3598 issuer=self.db.config.TRACKER_WEB) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3599 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3600 result = jwt.decode(self.jwt['user'], |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3601 secret, algorithms=['HS256'], |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3602 audience=self.db.config.TRACKER_WEB, |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3603 issuer=self.db.config.TRACKER_WEB) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3604 self.assertEqual(self.claim['user'],result) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3605 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3606 result = jwt.decode(self.jwt['user:email'], |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3607 secret, algorithms=['HS256'], |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3608 audience=self.db.config.TRACKER_WEB, |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3609 issuer=self.db.config.TRACKER_WEB) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3610 self.assertEqual(self.claim['user:email'],result) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3611 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3612 # set environment for all jwt tests |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3613 env = { |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3614 'PATH_INFO': 'rest/data/user', |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3615 'HTTP_HOST': 'localhost', |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3616 'TRACKER_NAME': 'rounduptest', |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3617 "REQUEST_METHOD": "GET" |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3618 } |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3619 self.dummy_client = client.Client(self.instance, MockNull(), env, |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3620 [], None) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3621 self.dummy_client.db = self.db |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3622 self.dummy_client.request.headers.get = self.get_header |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3623 self.empty_form = cgi.FieldStorage() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3624 self.terse_form = cgi.FieldStorage() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3625 self.terse_form.list = [ |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3626 cgi.MiniFieldStorage('@verbose', '0'), |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3627 ] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3628 self.dummy_client.form = cgi.FieldStorage() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3629 self.dummy_client.form.list = [ |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3630 cgi.MiniFieldStorage('@fields', 'username,address'), |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3631 ] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3632 # accumulate json output for further analysis |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3633 self.dummy_client.write = wh |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3634 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3635 # set up for expired token first |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3636 env['HTTP_AUTHORIZATION'] = 'bearer %s'%self.jwt['expired'] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3637 self.dummy_client.main() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3638 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3639 # this will be the admin still as auth failed |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3640 self.assertEqual('1', self.db.getuid()) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3641 self.assertEqual(out[0], b'Invalid Login - Signature has expired') |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3642 del(out[0]) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3643 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3644 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3645 @skip_jwt |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3646 def test_user_jwt(self): |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3647 # self.dummy_client.main() closes database, so |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3648 # we need a new test with setup called for each test |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3649 out = [] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3650 def wh(s): |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3651 out.append(s) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3652 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3653 secret = self.db.config.WEB_JWT_SECRET |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3654 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3655 # verify library and tokens are correct |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3656 self.assertRaises(jwt.exceptions.InvalidTokenError, |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3657 jwt.decode, self.jwt['expired'], |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3658 secret, algorithms=['HS256'], |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3659 audience=self.db.config.TRACKER_WEB, |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3660 issuer=self.db.config.TRACKER_WEB) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3661 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3662 result = jwt.decode(self.jwt['user'], |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3663 secret, algorithms=['HS256'], |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3664 audience=self.db.config.TRACKER_WEB, |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3665 issuer=self.db.config.TRACKER_WEB) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3666 self.assertEqual(self.claim['user'],result) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3667 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3668 result = jwt.decode(self.jwt['user:email'], |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3669 secret, algorithms=['HS256'], |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3670 audience=self.db.config.TRACKER_WEB, |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3671 issuer=self.db.config.TRACKER_WEB) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3672 self.assertEqual(self.claim['user:email'],result) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3673 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3674 # set environment for all jwt tests |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3675 env = { |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3676 'PATH_INFO': 'rest/data/user', |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3677 'HTTP_HOST': 'localhost', |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3678 'TRACKER_NAME': 'rounduptest', |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3679 "REQUEST_METHOD": "GET" |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3680 } |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3681 self.dummy_client = client.Client(self.instance, MockNull(), env, |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3682 [], None) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3683 self.dummy_client.db = self.db |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3684 self.dummy_client.request.headers.get = self.get_header |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3685 self.empty_form = cgi.FieldStorage() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3686 self.terse_form = cgi.FieldStorage() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3687 self.terse_form.list = [ |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3688 cgi.MiniFieldStorage('@verbose', '0'), |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3689 ] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3690 self.dummy_client.form = cgi.FieldStorage() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3691 self.dummy_client.form.list = [ |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3692 cgi.MiniFieldStorage('@fields', 'username,address'), |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3693 ] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3694 # accumulate json output for further analysis |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3695 self.dummy_client.write = wh |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3696 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3697 # set up for standard user role token |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3698 env['HTTP_AUTHORIZATION'] = 'bearer %s'%self.jwt['user'] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3699 self.dummy_client.main() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3700 print(out[0]) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3701 json_dict = json.loads(b2s(out[0])) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3702 print(json_dict) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3703 # user will be joe id 3 as auth works |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3704 self.assertTrue('3', self.db.getuid()) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3705 # there should be three items in the collection admin, anon, and joe |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3706 self.assertEqual(3, len(json_dict['data']['collection'])) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3707 # since this token has no access to email addresses, only joe |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3708 # should have email addresses. Order is by id by default. |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3709 self.assertFalse('address' in json_dict['data']['collection'][0]) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3710 self.assertFalse('address' in json_dict['data']['collection'][1]) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3711 self.assertTrue('address' in json_dict['data']['collection'][2]) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3712 del(out[0]) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3713 self.db.setCurrentUser('admin') |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3714 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3715 @skip_jwt |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3716 def test_user_email_jwt(self): |
|
5879
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3717 '''tests "Rest Access" permission present case''' |
|
5878
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3718 # self.dummy_client.main() closes database, so |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3719 # we need a new test with setup called for each test |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3720 out = [] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3721 def wh(s): |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3722 out.append(s) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3723 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3724 secret = self.db.config.WEB_JWT_SECRET |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3725 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3726 # verify library and tokens are correct |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3727 self.assertRaises(jwt.exceptions.InvalidTokenError, |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3728 jwt.decode, self.jwt['expired'], |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3729 secret, algorithms=['HS256'], |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3730 audience=self.db.config.TRACKER_WEB, |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3731 issuer=self.db.config.TRACKER_WEB) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3732 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3733 result = jwt.decode(self.jwt['user'], |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3734 secret, algorithms=['HS256'], |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3735 audience=self.db.config.TRACKER_WEB, |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3736 issuer=self.db.config.TRACKER_WEB) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3737 self.assertEqual(self.claim['user'],result) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3738 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3739 result = jwt.decode(self.jwt['user:email'], |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3740 secret, algorithms=['HS256'], |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3741 audience=self.db.config.TRACKER_WEB, |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3742 issuer=self.db.config.TRACKER_WEB) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3743 self.assertEqual(self.claim['user:email'],result) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3744 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3745 # set environment for all jwt tests |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3746 env = { |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3747 'PATH_INFO': 'rest/data/user', |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3748 'HTTP_HOST': 'localhost', |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3749 'TRACKER_NAME': 'rounduptest', |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3750 "REQUEST_METHOD": "GET" |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3751 } |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3752 self.dummy_client = client.Client(self.instance, MockNull(), env, |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3753 [], None) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3754 self.dummy_client.db = self.db |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3755 self.dummy_client.request.headers.get = self.get_header |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3756 self.empty_form = cgi.FieldStorage() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3757 self.terse_form = cgi.FieldStorage() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3758 self.terse_form.list = [ |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3759 cgi.MiniFieldStorage('@verbose', '0'), |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3760 ] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3761 self.dummy_client.form = cgi.FieldStorage() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3762 self.dummy_client.form.list = [ |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3763 cgi.MiniFieldStorage('@fields', 'username,address'), |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3764 ] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3765 # accumulate json output for further analysis |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3766 self.dummy_client.write = wh |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3767 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3768 # set up for limited user:email role token |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3769 env['HTTP_AUTHORIZATION'] = 'bearer %s'%self.jwt['user:email'] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3770 self.dummy_client.main() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3771 json_dict = json.loads(b2s(out[0])) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3772 print(json_dict) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3773 # user will be joe id 3 as auth works |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3774 self.assertTrue('3', self.db.getuid()) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3775 # there should be three items in the collection admin, anon, and joe |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3776 self.assertEqual(3, len(json_dict['data']['collection'])) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3777 # However this token has access to email addresses, so all three |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3778 # should have email addresses. Order is by id by default. |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3779 self.assertTrue('address' in json_dict['data']['collection'][0]) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3780 self.assertTrue('address' in json_dict['data']['collection'][1]) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3781 self.assertTrue('address' in json_dict['data']['collection'][2]) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3782 |
|
5879
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3783 @skip_jwt |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3784 def test_user_emailnorest_jwt(self): |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3785 '''tests "Rest Access" permission missing case''' |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3786 # self.dummy_client.main() closes database, so |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3787 # we need a new test with setup called for each test |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3788 out = [] |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3789 def wh(s): |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3790 out.append(s) |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3791 |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3792 secret = self.db.config.WEB_JWT_SECRET |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3793 |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3794 # verify library and tokens are correct |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3795 self.assertRaises(jwt.exceptions.InvalidTokenError, |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3796 jwt.decode, self.jwt['expired'], |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3797 secret, algorithms=['HS256'], |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3798 audience=self.db.config.TRACKER_WEB, |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3799 issuer=self.db.config.TRACKER_WEB) |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3800 |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3801 result = jwt.decode(self.jwt['user'], |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3802 secret, algorithms=['HS256'], |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3803 audience=self.db.config.TRACKER_WEB, |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3804 issuer=self.db.config.TRACKER_WEB) |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3805 self.assertEqual(self.claim['user'],result) |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3806 |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3807 result = jwt.decode(self.jwt['user:email'], |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3808 secret, algorithms=['HS256'], |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3809 audience=self.db.config.TRACKER_WEB, |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3810 issuer=self.db.config.TRACKER_WEB) |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3811 self.assertEqual(self.claim['user:email'],result) |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3812 |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3813 # set environment for all jwt tests |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3814 env = { |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3815 'PATH_INFO': 'rest/data/user', |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3816 'HTTP_HOST': 'localhost', |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3817 'TRACKER_NAME': 'rounduptest', |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3818 "REQUEST_METHOD": "GET" |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3819 } |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3820 self.dummy_client = client.Client(self.instance, MockNull(), env, |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3821 [], None) |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3822 self.dummy_client.db = self.db |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3823 self.dummy_client.request.headers.get = self.get_header |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3824 self.empty_form = cgi.FieldStorage() |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3825 self.terse_form = cgi.FieldStorage() |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3826 self.terse_form.list = [ |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3827 cgi.MiniFieldStorage('@verbose', '0'), |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3828 ] |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3829 self.dummy_client.form = cgi.FieldStorage() |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3830 self.dummy_client.form.list = [ |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3831 cgi.MiniFieldStorage('@fields', 'username,address'), |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3832 ] |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3833 # accumulate json output for further analysis |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3834 self.dummy_client.write = wh |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3835 |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3836 # set up for limited user:email role token |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3837 env['HTTP_AUTHORIZATION'] = 'bearer %s'%self.jwt['user:emailnorest'] |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3838 self.dummy_client.main() |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3839 json_dict = json.loads(b2s(out[0])) |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3840 # user will be joe id 3 as auth works |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3841 self.assertTrue('1', self.db.getuid()) |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3842 { "error": { "status": 403, "msg": "Forbidden." } } |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3843 self.assertTrue('error' in json_dict) |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3844 self.assertTrue(json_dict['error']['status'], 403) |
|
94a7669677ae
add permissions to control user of rest and xmlrpc API interfaces.
John Rouillard <rouilj@ieee.org>
parents:
5878
diff
changeset
|
3845 self.assertTrue(json_dict['error']['msg'], "Forbidden.") |
|
5878
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3846 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3847 @skip_jwt |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3848 def test_disabled_jwt(self): |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3849 # self.dummy_client.main() closes database, so |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3850 # we need a new test with setup called for each test |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3851 out = [] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3852 def wh(s): |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3853 out.append(s) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3854 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3855 # set environment for all jwt tests |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3856 env = { |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3857 'PATH_INFO': 'rest/data/user', |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3858 'HTTP_HOST': 'localhost', |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3859 'TRACKER_NAME': 'rounduptest', |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3860 "REQUEST_METHOD": "GET" |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3861 } |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3862 self.dummy_client = client.Client(self.instance, MockNull(), env, |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3863 [], None) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3864 self.dummy_client.db = self.db |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3865 self.dummy_client.request.headers.get = self.get_header |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3866 self.empty_form = cgi.FieldStorage() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3867 self.terse_form = cgi.FieldStorage() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3868 self.terse_form.list = [ |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3869 cgi.MiniFieldStorage('@verbose', '0'), |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3870 ] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3871 self.dummy_client.form = cgi.FieldStorage() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3872 self.dummy_client.form.list = [ |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3873 cgi.MiniFieldStorage('@fields', 'username,address'), |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3874 ] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3875 # accumulate json output for further analysis |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3876 self.dummy_client.write = wh |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3877 # disable jwt validation by making secret too short |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3878 # use the default value for this in configure.py. |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3879 self.db.config['WEB_JWT_SECRET'] = "disabled" |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3880 env['HTTP_AUTHORIZATION'] = 'bearer %s'%self.jwt['user'] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3881 self.dummy_client.main() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3882 # user will be 1 as there is no auth |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3883 self.assertTrue('1', self.db.getuid()) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3884 self.assertEqual(out[0], b'Invalid Login - Support for jwt disabled by admin.') |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3885 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3886 @skip_jwt |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3887 def test_bad_issue_jwt(self): |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3888 # self.dummy_client.main() closes database, so |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3889 # we need a new test with setup called for each test |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3890 out = [] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3891 def wh(s): |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3892 out.append(s) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3893 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3894 # set environment for all jwt tests |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3895 env = { |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3896 'PATH_INFO': 'rest/data/user', |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3897 'HTTP_HOST': 'localhost', |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3898 'TRACKER_NAME': 'rounduptest', |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3899 "REQUEST_METHOD": "GET" |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3900 } |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3901 self.dummy_client = client.Client(self.instance, MockNull(), env, |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3902 [], None) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3903 self.dummy_client.db = self.db |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3904 self.dummy_client.request.headers.get = self.get_header |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3905 self.empty_form = cgi.FieldStorage() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3906 self.terse_form = cgi.FieldStorage() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3907 self.terse_form.list = [ |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3908 cgi.MiniFieldStorage('@verbose', '0'), |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3909 ] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3910 self.dummy_client.form = cgi.FieldStorage() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3911 self.dummy_client.form.list = [ |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3912 cgi.MiniFieldStorage('@fields', 'username,address'), |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3913 ] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3914 # accumulate json output for further analysis |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3915 self.dummy_client.write = wh |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3916 env['HTTP_AUTHORIZATION'] = 'bearer %s'%self.jwt['badiss'] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3917 self.dummy_client.main() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3918 # user will be 1 as there is no auth |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3919 self.assertTrue('1', self.db.getuid()) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3920 self.assertEqual(out[0], b'Invalid Login - Invalid issuer') |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3921 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3922 @skip_jwt |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3923 def test_bad_audience_jwt(self): |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3924 # self.dummy_client.main() closes database, so |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3925 # we need a new test with setup called for each test |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3926 out = [] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3927 def wh(s): |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3928 out.append(s) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3929 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3930 # set environment for all jwt tests |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3931 env = { |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3932 'PATH_INFO': 'rest/data/user', |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3933 'HTTP_HOST': 'localhost', |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3934 'TRACKER_NAME': 'rounduptest', |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3935 "REQUEST_METHOD": "GET" |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3936 } |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3937 self.dummy_client = client.Client(self.instance, MockNull(), env, |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3938 [], None) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3939 self.dummy_client.db = self.db |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3940 self.dummy_client.request.headers.get = self.get_header |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3941 self.empty_form = cgi.FieldStorage() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3942 self.terse_form = cgi.FieldStorage() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3943 self.terse_form.list = [ |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3944 cgi.MiniFieldStorage('@verbose', '0'), |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3945 ] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3946 self.dummy_client.form = cgi.FieldStorage() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3947 self.dummy_client.form.list = [ |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3948 cgi.MiniFieldStorage('@fields', 'username,address'), |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3949 ] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3950 # accumulate json output for further analysis |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3951 self.dummy_client.write = wh |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3952 env['HTTP_AUTHORIZATION'] = 'bearer %s'%self.jwt['badaud'] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3953 self.dummy_client.main() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3954 # user will be 1 as there is no auth |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3955 self.assertTrue('1', self.db.getuid()) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3956 self.assertEqual(out[0], b'Invalid Login - Invalid audience') |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3957 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3958 @skip_jwt |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3959 def test_bad_roles_jwt(self): |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3960 # self.dummy_client.main() closes database, so |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3961 # we need a new test with setup called for each test |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3962 out = [] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3963 def wh(s): |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3964 out.append(s) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3965 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3966 # set environment for all jwt tests |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3967 env = { |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3968 'PATH_INFO': 'rest/data/user', |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3969 'HTTP_HOST': 'localhost', |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3970 'TRACKER_NAME': 'rounduptest', |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3971 "REQUEST_METHOD": "GET" |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3972 } |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3973 self.dummy_client = client.Client(self.instance, MockNull(), env, |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3974 [], None) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3975 self.dummy_client.db = self.db |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3976 self.dummy_client.request.headers.get = self.get_header |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3977 self.empty_form = cgi.FieldStorage() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3978 self.terse_form = cgi.FieldStorage() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3979 self.terse_form.list = [ |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3980 cgi.MiniFieldStorage('@verbose', '0'), |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3981 ] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3982 self.dummy_client.form = cgi.FieldStorage() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3983 self.dummy_client.form.list = [ |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3984 cgi.MiniFieldStorage('@fields', 'username,address'), |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3985 ] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3986 # accumulate json output for further analysis |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3987 self.dummy_client.write = wh |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3988 env['HTTP_AUTHORIZATION'] = 'bearer %s'%self.jwt['badroles'] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3989 self.dummy_client.main() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3990 # user will be 1 as there is no auth |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3991 self.assertTrue('1', self.db.getuid()) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3992 self.assertEqual(out[0], b'Invalid Login - Token roles are invalid.') |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3993 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3994 @skip_jwt |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3995 def test_bad_subject_jwt(self): |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3996 # self.dummy_client.main() closes database, so |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3997 # we need a new test with setup called for each test |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3998 out = [] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
3999 def wh(s): |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
4000 out.append(s) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
4001 |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
4002 # set environment for all jwt tests |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
4003 env = { |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
4004 'PATH_INFO': 'rest/data/user', |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
4005 'HTTP_HOST': 'localhost', |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
4006 'TRACKER_NAME': 'rounduptest', |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
4007 "REQUEST_METHOD": "GET" |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
4008 } |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
4009 self.dummy_client = client.Client(self.instance, MockNull(), env, |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
4010 [], None) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
4011 self.dummy_client.db = self.db |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
4012 self.dummy_client.request.headers.get = self.get_header |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
4013 self.empty_form = cgi.FieldStorage() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
4014 self.terse_form = cgi.FieldStorage() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
4015 self.terse_form.list = [ |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
4016 cgi.MiniFieldStorage('@verbose', '0'), |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
4017 ] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
4018 self.dummy_client.form = cgi.FieldStorage() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
4019 self.dummy_client.form.list = [ |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
4020 cgi.MiniFieldStorage('@fields', 'username,address'), |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
4021 ] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
4022 # accumulate json output for further analysis |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
4023 self.dummy_client.write = wh |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
4024 env['HTTP_AUTHORIZATION'] = 'bearer %s'%self.jwt['badsub'] |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
4025 self.dummy_client.main() |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
4026 # user will be 1 as there is no auth |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
4027 self.assertTrue('1', self.db.getuid()) |
|
1b57d8f3eb97
Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents:
5874
diff
changeset
|
4028 self.assertEqual(out[0], b'Invalid Login - Token subject is invalid.') |
|
5586
8f2fbc88e155
Fixed code convention
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5585
diff
changeset
|
4029 |
|
5592
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
4030 def get_obj(path, id): |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
4031 return { |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
4032 'id': id, |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
4033 'link': path + id |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
4034 } |
|
adcb5cbe82bd
Add unittest for pagination and filtering
Chau Nguyen <dangchau1991@yahoo.com>
parents:
5591
diff
changeset
|
4035 |
| 5583 | 4036 if __name__ == '__main__': |
| 4037 runner = unittest.TextTestRunner() | |
| 4038 unittest.main(testRunner=runner) |
