Mercurial > p > roundup > code
annotate test/README.txt @ 7853:03c1b7ae3a68
issue2551328/issue2551264 unneeded next link and total_count incorrect
Fix: issue2551328 - REST results show next link if number of
results is a multiple of page size. (Found by members of
team 3 in the UMass-Boston CS682 Spring 2024 class.)
issue2551264 - REST X-Total-Count header and @total_size
count incorrect when paginated
These issues arose because we retrieved the exact number of rows
from the database as requested by the user using the @page_size
parameter. With this changeset, we retrieve up to 10 million + 1
rows from the database. If the total number of rows exceeds 10
million, we set the total_count indicators to -1 as an invalid
size. (The max number of requested rows (default 10 million +1)
can be modified by the admin through interfaces.py.)
By retrieving more data than necessary, we can calculate the
total count by adding @page_index*@page_size to the number of
rows returned by the query.
Furthermore, since we return more than @page_size rows, we can
determine the existence of a row at @page_size+1 and use that
information to determine if a next link should be
provided. Previously, a next link was returned if @page_size rows
were retrieved.
This change does not guarantee that the user will get @page_size
rows returned. Access policy filtering occurs after the rows are
returned, and discards rows inaccessible by the user.
Using the current @page_index/@page_size it would be difficult to
have the roundup code refetch data and make sure that a full
@page_size set of rows is returned. E.G. @page_size=100 and 5 of
them are dropped due to access restrictions. We then fetch 10
items and add items 1-4 and 6 (5 is inaccessible). There is no
way to calculate the new database offset at:
@page_index*@page_size + 6 from the URL. We would need to add an
@page_offset=6 or something.
This could work since the client isn't adding 1 to @page_index to
get the next page. Thanks to HATEOAS, the client just uses the
'next' url. But I am not going to cross that bridge without a
concrete use case.
This can also be handled client side by merging a short response
with the next response and re-paginating client side.
Also added extra index markers to the docs to highlight use of
interfaces.py.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Mon, 01 Apr 2024 09:57:16 -0400 |
| parents | a86b0c02940d |
| children | 132d450bdc00 |
| rev | line source |
|---|---|
|
4964
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
4570
diff
changeset
|
1 A number of tests uses the infrastructure of |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
4570
diff
changeset
|
2 db_test_base.py |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
4570
diff
changeset
|
3 |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
4570
diff
changeset
|
4 grep "from db_test_base" -l *.py |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
4570
diff
changeset
|
5 benchmark.py |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
4570
diff
changeset
|
6 session_common.py |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
4570
diff
changeset
|
7 test_anydbm.py |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
4570
diff
changeset
|
8 test_indexer.py |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
4570
diff
changeset
|
9 test_memorydb.py |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
4570
diff
changeset
|
10 test_mysql.py |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
4570
diff
changeset
|
11 test_postgresql.py |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
4570
diff
changeset
|
12 test_security.py |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
4570
diff
changeset
|
13 test_sqlite.py |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
4570
diff
changeset
|
14 test_userauditor.py |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
4570
diff
changeset
|
15 |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
4570
diff
changeset
|
16 grep "import db_test_base" -l *.py |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
4570
diff
changeset
|
17 test_cgi.py |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
4570
diff
changeset
|
18 test_jinja2.py |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
4570
diff
changeset
|
19 test_mailgw.py |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
4570
diff
changeset
|
20 test_xmlrpc.py |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
4570
diff
changeset
|
21 |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
4570
diff
changeset
|
22 grep "import memory\|from memory" -l *.py |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
4570
diff
changeset
|
23 test_mailgw.py |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
4570
diff
changeset
|
24 test_memorydb.py |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
4570
diff
changeset
|
25 |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
4570
diff
changeset
|
26 |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
4570
diff
changeset
|
27 The remaining lines are an 2001 description from Richard, |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
4570
diff
changeset
|
28 which probably is outdated: |
|
2c3cc4ccd024
Automatic tests: added some notes to the readme and a test_jinja2 stub.
Bernhard Reiter <bernhard@intevation.de>
parents:
4570
diff
changeset
|
29 |
|
127
0791d13baea7
Added vim command to all source so that we don't get no steenkin' tabs :)
Richard Jones <richard@users.sourceforge.net>
parents:
95
diff
changeset
|
30 Structure of the tests: |
|
95
cd4f0415d0dc
rename for consistency
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
31 |
|
cd4f0415d0dc
rename for consistency
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
32 1 Test date classes |
|
cd4f0415d0dc
rename for consistency
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
33 1.1 Date |
|
cd4f0415d0dc
rename for consistency
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
34 1.2 Interval |
|
cd4f0415d0dc
rename for consistency
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
35 2 Set up schema |
|
cd4f0415d0dc
rename for consistency
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
36 3 Open with specific backend |
|
cd4f0415d0dc
rename for consistency
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
37 3.1 anydbm |
|
cd4f0415d0dc
rename for consistency
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
38 4 Create database base set (stati, priority, etc) |
|
cd4f0415d0dc
rename for consistency
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
39 5 Perform some actions |
|
cd4f0415d0dc
rename for consistency
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
40 6 Perform mail import |
|
cd4f0415d0dc
rename for consistency
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
41 6.1 text/plain |
|
cd4f0415d0dc
rename for consistency
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
42 6.2 multipart/mixed (with one text/plain) |
|
cd4f0415d0dc
rename for consistency
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
43 6.3 text/html |
|
cd4f0415d0dc
rename for consistency
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
44 6.4 multipart/alternative (with one text/plain) |
|
cd4f0415d0dc
rename for consistency
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
45 6.5 multipart/alternative (with no text/plain) |
