AgeCommit message (Collapse)AuthorLines
Test the about path check for each kind of readmeBryce Kwon-32/+0
Three tests exercised the single path check in about_fn, each through one kind of readme, and none through a readme read from the head being browsed.
Share the robustness tests' repeated setupBryce Kwon-182/+88
The status check now also fails on a second status line, which a page that dies after its headers puts out, so every request is held to one answer rather than the few that counted.
Move the snapshot name tests to the snapshot testsBryce Kwon-23/+0
They take a plain tar, which needs no compressor on the machine.
Move the directory diff caps test to the limitsBryce Kwon-21/+0
Move the odd dates test to the dates testsBryce Kwon-41/+9
The notes test had borrowed its repository, so it now builds one.
Move the Conflicts test to the trailers testsBryce Kwon-25/+0
Its message came from a here-document with a dash, which stripped the tab git knows a Conflicts path by. git then found no trailer block at all, so the test passed with the guard it is about removed. The message is now written with printf.
Give each robustness test a fixture of its ownBryce Kwon-106/+143
repos/rob took commits, refs, tags, a repack and a moved HEAD from test after test, so what a test checked hung on the ones before it. A test that changes a repository, or needs one in a shape of its own, now builds it, and rob is only read. The tests that leaned on a config or a scanned repository an earlier test left build their own too.
Move the mimetype file tests to the plain testsBryce Kwon-22/+0
Each now writes a types file and config of its own rather than rewriting the one the test before it left.
Ask for gzip where the tag snapshot needs itBryce Kwon-5/+8
The test ran gzip without the GZIP prerequisite t0110 uses for the same need, and it took a file-1 anywhere in the listing rather than under the tag's own prefix.
Keep the robustness tests to portable shellBryce Kwon-3/+3
An unquoted $cgitbin breaks in a checkout whose path holds a space, and head -c and head -1 are not POSIX. The status of the disconnected request is still read right after its pipeline, which assumes the shell waits for the left side as dash, bash, ksh and busybox ash all do.
Hold hand-written refs to the files backendBryce Kwon-16/+20
A loose ref written by hand needs the files backend, so under GIT_TEST_DEFAULT_REF_FORMAT=reftable the broken tree test failed, and the die test after it with it, since it borrowed that clone. It now makes its own. Both index tests that stat a path through refs/heads also passed there with their checks gone, as reftable keeps refs/heads as a file. The commit is rewritten through files rather than a pipeline that hid cat-file failing.
Read the expected blob through its own tagBryce Kwon-5/+7
The expected content was "more" only because an earlier test had rewritten file-1, and the next test reused that file and the tag. The tag.gpgsign override did nothing, since test-lib already keeps the user's config out.
Give the symlink cycle a scan directory of its ownBryce Kwon-3/+11
The expected count of 2 held only because earlier tests had made a.git and b.git and one of them had dropped b.git's cgitrc.
Drop the loose directory chain boundBryce Kwon-13/+0
The count was bounded only from above, and loosely, so a page listing no directories passed, as would a limit of 16. t0104's long directory chain test already pins the bound exactly.
Check the row of a symlink to a large blobBryce Kwon-4/+6
The blob came out of a pipeline whose failure would have left it empty and the test passing, and nothing looked at the row itself. head -c is not POSIX either.
Restore HEAD however the fallback test endsBryce Kwon-10/+7
HEAD was put back inside the && chain after cgit ran, so a failure left repos/rob on a missing branch for every later test. The switcher check also read the page this test left, and now runs in the same test.
Count the answers to a corrupt blob in a diffBryce Kwon-3/+4
Unlike its siblings the test never counted status lines, so a second page after the first went unnoticed. The headers are out by the time the diff is collected, so the one answer stays a 200 holding the error.
Prove the cache keeps what the ttl test refusesBryce Kwon-11/+14
cache_process bypasses a ttl of 0 and fails quietly in many ways, so with a dead cache the test passed whatever ttl the page got. A second config that keeps the same page for ever now has to replay it, from a cache of its own, since slots are keyed on the request alone.
Pair each absence check with what has to be thereBryce Kwon-12/+17
Every page ends in </html>, the 404 for no repositories included, and an index, an error page or a page cut short lacks most things, so the path-less repository, the empty url, the page without an auth filter and the refused id each now show the page that was meant to render.
Expect working pages beside a notes ref at a blobBryce Kwon-10/+7
The loop asserted only absences, so a 404 or any error but the die text passed, and the final 404 is also what a name that resolves to nothing gets.
Follow the link from an outer tag to its inner oneBryce Kwon-4/+6
The test opened the inner tag by id and never looked at the outer tag's page or the link the title is about.
Name what a missing parent really does to the logBryce Kwon-8/+14
The log walks the history before it prints a row, so nothing ahead of the gap ever renders and the title promised more than the page shows. The test also took its gap from the shared repository, where HEAD~2 was a given commit only because of tests run before it.
Make the early-exit filter meet a closed pipeBryce Kwon-7/+10
The email filter was handed a few bytes, which usually sit in the pipe before the filter has even exited, so a cgit that died of SIGPIPE passed most runs. A source filter handed more than a pipe holds has to see the write fail.
Hold the mailmap to max-blob-sizeBryce Kwon-0/+31
git's read_mailmap_blob inflates the whole blob, so a pusher could make every page of a repository read as much as they liked. git reads a note and the .gitmodules file whole as well, and capping those would mean bounding the lookups where the log, commit and tree pages make them, so the manual names them instead. Nothing tested that mailmap.file and mailmap.blob are ignored either.
Test markup in a scanned repository's own wordsBryce Kwon-0/+26
A scanned repository sets its description, owner and section without trust, and no test gave them any markup.
Test blame on a binary fileBryce Kwon-0/+21
t0104's binary fixture never turns blame on, so neither the blame page's own refusal nor the missing link on the file's page had a test.
Test a HEAD aimed outside its repositoryBryce Kwon-0/+18
The defbranch check had a test while its twin for a crafted HEAD, which the index reads the same way to date a repository, had none.
Test the dumb transport allowlist in one tableBryce Kwon-17/+0
The allowlist was tested in two places, and the 404 alone did not show the transport was live behind the auth filter, since a page that does not exist answers the same. A loose object and HEAD now have to come through, and the planted alternates file is removed even when the test fails, where it used to leave rob borrowing foo's objects.
Test every scanned key that waits on trustBryce Kwon-23/+79
Only head-content and logo-link were tried, so logo, clone-url and both module-link forms could have been taken from a repository's own cgitrc unnoticed. A trusted control shows each value would reach the page, and the refused disk readmes are now checked against a file that would show if read.
Test the snapshot slash rule on a real refBryce Kwon-4/+20
Every candidate name meets check_refname_format first, which refuses the old payload, so the slash rule never answered it and could go unnoticed. A tag holding a slash reaches it, and a name in revision syntax without a slash now pins the ref name check of its own.
Catch an ignored SIGPIPE under any shellBryce Kwon-9/+15
dash reports a write to a closed pipe as an I/O error and never names a broken pipe, so where sh is dash the test passed with the reset removed. The writer now leaves a marker when it outlives the closed pipe, which it can only do with the signal ignored. That holds under dash, bash and ksh.
Check only what the racy filter tests can promiseBryce Kwon-3/+7
Both tests passed or failed with the order in which cgit and the exec filter happened to run, about one run in four under UBSan.
Move the later tests to the config writersBryce Kwon-129/+90
The one-line request wrappers go with them. Configs with several repositories, a key out of place on purpose, the cache on or no repository of their own stay written out.
Ask for each path below the about page in one testBryce Kwon-22/+12
All of them stop at the same early return in about_fn, so each now gets the status, the html error page and a clean log.
Write the test filter scripts with write_scriptBryce Kwon-6/+2
Drop test lines that add nothingBryce Kwon-2/+0
The trash directory starts empty and setup.sh already made the cache, the clamp check already fails on a short query, and the commit the setup named is still there to pin.
Leave two log checks to the log testsBryce Kwon-7/+0
t0103 already renders foo/log and finds commit 5, and its search for a bracket fails the same way this literal search did if --fixed-strings ever goes.
Require a whole page when a filter exits earlyBryce Kwon-2/+3
When a filter cannot run, cgit dies mid-page with its Status line already out, so the check passed with no filter at all. That is the case wherever true lives only in /bin, as on busybox. true now comes from the PATH, and the page has to reach its end.
Hold a scanned defbranch to a ref nameBryce Kwon-0/+11
The index stats the default branch below the repository to date it, and a scanned repository sets its own defbranch, which was not held to what a ref may hold, so one spelled as a path reached a file outside.
Pass over a notes ref that names no treeBryce Kwon-0/+20
A pusher can point refs/notes/commits or a signature notes ref at any object, and git dies loading one that is no tree, which ended every page of the repository, the dumb transport included.
Show an odd pushed date rather than die on itBryce Kwon-0/+39
A date past what the system holds, a zone that is no hhmm offset, or a date earlier than its own westward offset all made git die inside show_date, which took the summary, refs, log, commit and feed pages of the repository down. They are now clamped as git's own log clamps them.
Check the id before the page chrome resolves itBryce Kwon-0/+12
The chrome renders on an error page too, where the id had just been refused for using the wider revision syntax, and then looked it up anyway. A :/pattern id walks the whole history for a match.
Serve only the files a dumb clone asks forBryce Kwon-3/+7
The object path check let any run of safe characters through, so a spelling such as info//alternates or info/./alternates reached the alternates file the exact name was refused for.
Give a repository without a path no ageBryce Kwon-0/+10
The index built its paths from a NULL repo.path, which the C library prints as "(null)", so it looked for refs under that name in the working directory.
Say why an oversized readme leaves about emptyBryce Kwon-0/+15
A readme past max-blob-size is never read, which left the about page with an empty block and no word of why.
Date a reftable repository on the indexBryce Kwon-0/+5
The idle column falls back on the mtime of the branch's loose ref or of packed-refs, and a reftable repository has neither, so its cell stayed empty. Git rewrites reftable/tables.list on every ref update.
Answer dumb-clone HEAD from the ref storeBryce Kwon-0/+26
A reftable repository keeps only a placeholder in its HEAD file, so a dumb clone was told HEAD named refs/heads/.invalid and checked nothing out. HEAD is now answered the way git's http-backend answers it.
Peel an annotated tag before looking for a readmeBryce Kwon-0/+14
Tag links carry the tag name as the head, so on any page reached from an annotated tag the about tab vanished and the about page redirected to the summary.
Encode repository urls and the feed branchBryce Kwon-0/+6
Links built from the repository url, among them the description link on the index and the Atom and refs links, wrote it as configured, so a name holding a space, '#' or '?' broke them. The feed link in the page head did the same with the branch, which turned a '+' into a space.
Leave readme out of what scan-path fixesBryce Kwon-0/+10