diff --git a/tests/integration.rc b/tests/integration.rc index 5a4e38d..a40d0ce 100755 --- a/tests/integration.rc +++ b/tests/integration.rc @@ -123,6 +123,16 @@ fn assert_event_schema { ' $file || fail event schema validation failed for $file } +fn queue_event { + repo=$1 + name=$2 + old=$3 + new=$4 + ref=$5 + kind=$6 + printf '1\t%s\t%s\t%s\tactor\t1\t%s\n' $old $new $ref $kind >$repo^/sip/queue/$name^.event +} + fn setup_pair { tmp=`{mktemp -d /tmp/sip-it.XXXXXX} mkdir -p $tmp^/src @@ -435,34 +445,24 @@ fn test_stale_events_do_not_overwrite_status { fn test_malformed_event_is_failed { tmp=`{setup_pair} remote=$tmp^/remote.git + zero=0000000000000000000000000000000000000000 + new=1111111111111111111111111111111111111111 mkdir -p $remote^/sip/queue printf '1\tbad\tbad\trefs/heads/main\tactor\t0\tcreate\n' >$remote^/sip/queue/bad.event - printf '2\t0000000000000000000000000000000000000000\t1111111111111111111111111111111111111111\trefs/heads/main\tactor\t1\tcreate\n' >$remote^/sip/queue/bad-version.event - printf '1\t0000000000000000000000000000000000000000\t1111111111111111111111111111111111111111\trefs/notes/main\tactor\t1\tcreate\n' >$remote^/sip/queue/bad-ref.event - printf '1\t0000000000000000000000000000000000000000\t1111111111111111111111111111111111111111\trefs/heads/../ci/pwn\tactor\t1\tcreate\n' >$remote^/sip/queue/bad-ref-traversal.event - printf '1\t0000000000000000000000000000000000000000\t1111111111111111111111111111111111111111\trefs/heads//x\tactor\t1\tcreate\n' >$remote^/sip/queue/bad-ref-slash.event - printf '1\t0000000000000000000000000000000000000000\t1111111111111111111111111111111111111111\trefs/heads/topic.lock\tactor\t1\tcreate\n' >$remote^/sip/queue/bad-ref-lock.event - printf '1\t0000000000000000000000000000000000000000\t1111111111111111111111111111111111111111\trefs/heads/bad..name\tactor\t1\tcreate\n' >$remote^/sip/queue/bad-ref-dotdot.event - printf '1\t0000000000000000000000000000000000000000\t1111111111111111111111111111111111111111\trefs/heads/main\tactor\t1\tupdate\n' >$remote^/sip/queue/bad-kind.event + printf '2\t%s\t%s\trefs/heads/main\tactor\t1\tcreate\n' $zero $new >$remote^/sip/queue/bad-version.event + queue_event $remote bad-ref $zero $new refs/notes/main create + queue_event $remote bad-ref-traversal $zero $new refs/heads/../ci/pwn create + queue_event $remote bad-ref-slash $zero $new refs/heads//x create + queue_event $remote bad-ref-lock $zero $new refs/heads/topic.lock create + queue_event $remote bad-ref-dotdot $zero $new refs/heads/bad..name create + queue_event $remote bad-kind $zero $new refs/heads/main update $root^/bin/sip-worker.rc $remote >/dev/null >[2]/dev/null - if(! test -f $remote^/sip/failed/bad.event) - fail malformed event should move to failed queue - if(! test -f $remote^/sip/failed/bad-version.event) - fail unsupported event version should move to failed queue - if(! test -f $remote^/sip/failed/bad-ref.event) - fail unknown event ref namespace should move to failed queue - if(! test -f $remote^/sip/failed/bad-ref-traversal.event) - fail traversal-like event ref should move to failed queue - if(! test -f $remote^/sip/failed/bad-ref-slash.event) - fail event ref with double slash should move to failed queue - if(! test -f $remote^/sip/failed/bad-ref-lock.event) - fail event ref with lock suffix should move to failed queue - if(! test -f $remote^/sip/failed/bad-ref-dotdot.event) - fail event ref with dotdot should move to failed queue - if(! test -f $remote^/sip/failed/bad-kind.event) - fail inconsistent event kind should move to failed queue + for(event in bad bad-version bad-ref bad-ref-traversal bad-ref-slash bad-ref-lock bad-ref-dotdot bad-kind) { + if(! test -f $remote^/sip/failed/$event^.event) + fail $event should move to failed queue + } } fn test_non_delete_events_require_commit_checkout {