AgeCommit message (Collapse)AuthorLines
Fail a unit check run that made no checkBryce Kwon-0/+5
Decide every unit check skip in the shellBryce Kwon-38/+64
Where a standalone Lua had no lpeg, the harness skipped the markdown and man checks itself, behind a note the test library hides, and the test passed on the six checks left. The real luaossl checks were left out the same way. Each now shows as a skip under a prerequisite named for the interpreter, and a misspelt mode fails rather than running the default.
Show unit checks as skipped when no Lua is foundBryce Kwon-38/+41
With no standalone interpreter on the path the unit checks were never registered, so they counted as neither run nor skipped, and a fault in the version probe dropped them all behind one line of output. The test bodies now expand their paths as they run, so a quote in a path no longer breaks them.
Run each standalone Lua version onceBryce Kwon-14/+36
A plain lua is usually one of the versioned names again, as lua and lua5.5 are here, so every 5.5 check ran twice, while names such as lua54 and lua-5.4 were never looked for. A test now names the version that ran, since "under lua" did not say which one it was.
Stop the run when the Lua probe failsBryce Kwon-2/+14
The probe piped cgit into grep, so a crash or a sanitizer abort while probing read as a missing module, and t0501, t0504 and t0505 then expected the fallback on a machine that has the module.
Check that link-trailers encodes a rule captureBryce Kwon-0/+7
As in link-commits, every capture was hex or digits. A string replacement there would also raise outside the pcall that guards the pattern and take the whole page down.
Check that link-commits encodes a rule captureBryce Kwon-0/+7
Every capture the checks used was hex or digits, which encoding leaves alone, so the filter passed with url_encode gone and a broader rule could then have broken out of the href.
Check that markup inside a token is escapedBryce Kwon-2/+6
Every escape the checks looked at sat between tokens or in the tail a lexer left untagged, so a filter that escaped only those would have passed with a string literal reaching the page raw.
Check the whole page in the extension testsBryce Kwon-36/+40
A page that died part way through, or logged an error, passed as long as the text grepped for came before the failure. Four tests also read the page an earlier test had fetched, so none of them could run alone.
Time each hostile readme at two lengthsBryce Kwon-17/+48
One ten second budget covered several inputs, so a failure did not say which had regressed, and it allowed ten times the second a readme is held to while leaving a slow host little room. A linear render costs four times as much at four times the length and a quadratic one sixteen, whatever the host. The cap on unclosed brackets had no check at all, and the line of \h' escapes timed nothing that is bounded.
Check that a link's fragment is escapedBryce Kwon-0/+3
Prove a control byte cannot hide a link's schemeBryce Kwon-2/+9
The old check split the scheme with a newline, which ends the line before a link can form, so it passed with the strip removed.
Check a warning raised inside an included fileBryce Kwon-0/+1
The include run checked only the line in the outer file, so a warning from the included one could have named the outer file and passed.
Match logged paths as fixed stringsBryce Kwon-12/+12
The messages hold the trash directory's path and were matched as patterns, so a checkout path holding a bracket or a star would break them.
Measure the clamped query without grep -oBryce Kwon-1/+7
grep -o is not in POSIX, while awk's match is.
Skip the perl helper tests where perl will not runBryce Kwon-3/+9
The PERL prerequisite comes from NO_PERL in the build options, not from an interpreter being there, so a host without perl and with the chain linter off failed these tests instead of skipping them.
Describe what the cache tests coverBryce Kwon-2/+5
Drop the locale the test library already setsBryce Kwon-2/+2
test-lib exports LC_ALL=C for every test, so the two sorted checks said it again for nothing.
Test DOS line endings and stray lines in cgitrcBryce Kwon-0/+15
Without the fold of a carriage return before a newline, repo.path keeps a trailing one and the repository cannot be opened, and no test had a file saved that way. Semicolon comments and a line with no equals sign were untested too.
Test the include nesting limitBryce Kwon-0/+28
Nothing reached the guard that stops a file including itself, so its loss would have gone unseen until a site's own cgitrc recursed until the stack gave out.
Check that a ref page lists from its offsetBryce Kwon-9/+18
Both paging tests would have passed with the listing ignoring ofs, since the prev link comes from ofs alone.
Test a content filter that exits non-zeroBryce Kwon-0/+12
cgit takes no notice of how an about, commit, source or email filter exits, and nothing showed that a failing one still leaves the page whole.
Test the robots tag on ordinary pagesBryce Kwon-0/+20
Only the login page's tag was checked, so printing noindex everywhere would have taken every site out of the search engines and passed.
Render the page each markup test readsBryce Kwon-0/+2
Two tests read the page an earlier test left in tmp, so a test put in between would have had them check some other page.
Make the stylesheet and script checks able to failBryce Kwon-4/+5
The negated greps passed on a missing or renamed file, and the old hooks were matched with an alternation POSIX leaves undefined in a basic expression, so a grep that read the bars literally never matched anything.
Test a repository url nested inside anotherBryce Kwon-0/+23
No test served two repositories where one url holds the other as a prefix, which is the case the longest match in cgit_parse_url is for.
Test the scan settings no test reachedBryce Kwon-0/+128
Nothing exercised noweb, scan-hidden-path, section-from-path, an ordinary project-list, the gitweb settings or the command-line modes, so a regression could list repositories meant to stay hidden, and the command line could drop what a repository set or lose its sort.
Test a scan whose list cannot be writtenBryce Kwon-0/+19
After the write fails the scan runs a second time, and that run adds nothing only because scan-tree.c never resets the directories it has visited. Nothing showed it, so a reset would have listed every repository twice and passed.
Test that the cache listing is off by defaultBryce Kwon-0/+20
The listing exposes the urls other visitors asked for, and every request for it used the shared config, which turns it on.
Test how an expired page slot is refreshedBryce Kwon-3/+39
No test showed a refresh serving and storing the page as it is now, and the too-large refill could not tell a fresh render from the expired copy, since nothing changed in between. A negative page ttl was proven never to expire only for the scan list.
Test a refresh that finds the slot lock heldBryce Kwon-6/+28
MANUAL says such a request serves the expired copy and logs nothing, and only the case where the lock file cannot be opened was tested.
Look for the placeholder in a list that existsBryce Kwon-6/+9
With no list the glob stayed unmatched, grep failed on it and the negated check passed. The meta check had no proof that the summary had rendered either.
Keep cgit's status where the cache tests pipe itBryce Kwon-10/+21
Piping cgit into cat threw away its exit status, so a crash or valgrind's 126 could not fail the no-key and negative ttl tests. Under ulimit -f 0 not even a status file can be written, so that status goes down the pipe with the page. The negative ttl test also leaned on the list an earlier test left, and its last check passed on a missing file.
Prove a failed final write abandoned the fillBryce Kwon-4/+11
Nothing showed that the limited write failed at all, so a limit that did not bite passed, as did a lock file left behind, a doubled prefix or a page resumed from the wrong offset. The pipe to cat also threw away cgit's exit status.
Check the slot holds the whole large pageBryce Kwon-14/+13
Two identical fresh renders passed the replay test, and the two tests after it read its output, so a slot cut short was caught only because tree pages happen to be cached.
Hold the first request until the second is doneBryce Kwon-26/+84
The lock tests leaned on a three second sleep in the filter and gave up the wait for its marker in silence, so on a slow run the requests need not overlap at all and every check held trivially. A bare wait also hid any crash of the first request, and the second request's page was never looked at. The filter now holds the first request until the test lets it go. The strace test gets the same hold, released once the trace shows the second request has opened the lock file. It checks that the delayed flock then succeeded, since a refusal would mean the inode check was never reached.
Show a blob at exactly max-blob-sizeBryce Kwon-0/+14
No fixture's size in whole kilobytes equalled the limit, so turning the comparison into greater or equal passed every test.
Test a followed single-file diff against the capBryce Kwon-5/+20
Follow empties the prefix, and the cap has to come from the path asked for, as the source warns. Only the line cap can show that. The pairs are filtered before they are counted, so a single-file page counts one file whatever the cap, and a followed check under max-diff-files could never fail.
Test every setting in the scan cache keyBryce Kwon-0/+94
Only strict-export and the global filters were ever varied against one cache-root, so dropping any of the other inputs passed. Leaving out trust-scan-config is the one that matters most. A list scanned under it carries the filters pushers set, the list is read back with no trust check, and a site that does not trust its scans would run them.
Read back the list a stale lock file could spoilBryce Kwon-9/+14
The scan half grepped the page of the request that rebuilt the list, and that page is drawn from the scan in memory, so the ghost could never show there. Had the truncate moved out of cache_lock_file, every later read of the list would have taken in the stale tail and the test would still have passed.
Test that only full ids take the static ttlBryce Kwon-0/+25
Nothing requested a page pinned to an id with the static ttl in force, so dropping the full id check would cache a page pinned to master or an abbreviation for ever and the suite would pass.
Prove one cache slot keeps its pages apartBryce Kwon-21/+38
The one-slot test threw every response away, so a slot that stopped comparing keys and served whatever page it held still left one file and passed. The collision MANUAL promises to log was never checked either. The size tests also rewrote the shared cgitrc in place, and the listing replay held only while the dynamic ttl did.
Name the build a test run is testingBryce Kwon-1/+7
After tools/build-development.sh or build-release.sh, a plain make test quietly rebuilt without the sanitizers or the hardening and tested that binary instead, with nothing in its output to say so.
Test the preview server's request handlingBryce Kwon-4/+227
Only split_cgi_output was ever run. The handler, which builds the CGI environment, guards the asset directory, caps the body, times cgit out, turns a failed run into a 500 and answers HEAD, ran in no test at all. The server listens on a port the system picks, so parallel runs cannot collide.
Report each preview server split case on its ownBryce Kwon-53/+77
The five cases ran as one test, and their names reached the log only with -v. python3 also ran under the trash directory's HOME, where a version manager's shim may find no interpreter, and without -I, so PYTHONPATH or the user's site packages could shadow a module.
Make the home access test see a rendered pageBryce Kwon-2/+18
Nothing checked that the traced request worked, and one that failed early opened fewer files and passed. cgit unsets HOME, so a read that fell back on the account's entry in the password database would name that home rather than the missing one the test set. Under Valgrind every test would have failed, as strace follows valgrind into the .valgrindrc it reads from the home directory.
Validate only pages that rendered in t0002Bryce Kwon-11/+26
test_url failed only on tidy's own errors, so a 404 or a 500 page in place of the stats or the blame page validated as well as the real one, and an empty body drew no more than warnings.
Show the Git version checks as skipped, not passedBryce Kwon-22/+20
CGIT_TEST_NO_GIT_VERSION ended t0001 before the test library started, so it wrote no counts and printed nothing. Without vendor/git/.git the submodule check passed with a note on stderr, which is the case for a tree from get-git or git archive, so the pin was checked nowhere.
Check the Lua-less build through the helpersBryce Kwon-15/+17
t0006 ran build/nolua/cgit by its path, so Valgrind never saw it, and its page checks passed a page that logged an error. The Makefile and README said the suite runs both binaries the same way, though only these four tests run the one without Lua.
Keep cgit under Valgrind whichever way it is askedBryce Kwon-11/+40
The library runs a script again for --tee, --verbose-log and --stress with the arguments setup.sh left it, and --valgrind was no longer among them, so -V --valgrind ran cgit bare. --valgrind=<tool> reached the library instead, which then wrapped every Git command and left cgit alone. --valgrind-only is refused, as it would need the library's own per-test switching.