Commit Graph

221 Commits

Author SHA1 Message Date
Tim Hockin 1894192b0f Run hooks at startup
This ensures we do not miss events.  E.g.

before:
    t0: hash changes to X
    t1: send webhook(X), waiting for response
    t2: hash changes to Y
    t3: queue next webhook(Y) but can't send because previous is not done
    t4: crash
    t5: restart
    t6: find repo at hash Y

    no webhook(Y) was sent.

after:
    t0: hash changes to X
    t1: send webhook(X), waiting for response
    t2: hash changes to Y
    t3: queue next webhook(Y) but can't send because previous is not done
    t4: crash
    t5: restart
    t6: find repo at hash Y
    t7: send webhook(Y), waiting for response
2023-05-29 14:50:24 -07:00
Tim Hockin c3a49e9d46 Get rid of "must not start with ." logic
It serves very little purpose and isn't even correct as-is.
2023-05-14 11:11:24 -07:00
Sacha Viscaino 622ced3864 Add --stale-worktree-timeout option 2023-05-14 00:28:29 +01:00
Tim Hockin 58cab771fc e2e: Fix weirdly quoted strings
I have been meaning to do this forever.
2023-05-11 09:42:05 -07:00
Tim Hockin 12c1ece35f Support in-place updates from v3
A few small accomodations and we can clean up properly.
2023-05-08 15:51:23 -07:00
Tim Hockin d197740d85 Exercise the git "dubious ownership" path
To do this, we run the e2e test as a different user.  To do that, we
need git-sync to make sure that everything is group accessible.  To
clean up after the test, we need everything to be group writable.  To do
that, we add a new flag: `--group-write`.
2023-05-07 10:29:39 -07:00
Tim Hockin f287d63171 Fetch just once per run and when hash changes 2023-05-07 10:29:31 -07:00
Tim Hockin 6cd8b5a1cf Add an absPath type and use it for git.root 2023-05-05 13:30:11 -07:00
Tim Hockin 7e6b429362 Make all env var names GITSYNC_FOO
Still support GIT_SYNC_FOO for compat.
2023-05-04 08:45:25 -07:00
Tim Hockin 5cc7160985 Clean up all old worktrees 2023-05-04 08:45:13 -07:00
Tim Hockin 10af97f51d Move worktrees to .worktrees/*
This will make it easier to enumerate old worktrees and do better
cleanup.
2023-04-29 10:51:13 -07:00
Tim Hockin 988bfb7a01 e2e: handle log capture automatically
Same as test_git.sh
2023-04-29 10:44:07 -07:00
Tim Hockin e84a4cb4fd Make --webhook-success-status=0 the same as -1 2023-04-29 10:40:53 -07:00
Tim Hockin cbedbc0ca5 Add test for repo size and change default GC
--git-gc=always seems to be the right tradeoff.
2023-04-28 14:07:54 -07:00
Tim Hockin dc56d5d6bf Tidy up log levels - logs read better now 2023-04-28 14:07:42 -07:00
Tim Hockin f6678b98e8 Change the default depth to 1
For most users this is functionally equivalent and more efficient.  For
users who really need the full history, set this to 0.
2023-04-28 14:07:35 -07:00
Tim Hockin ee6664748f Total overhaul of sync loop
The previous (v3) sync loop betrays my lack of understanding about git.
It tried to codify my archaic mental model (e.g. --branch and --rev
being disting things) and was ultimately a patchwork of corner-cases
evolved over a few years.

This commit is less of a "diff" and more of a "rewrite".

The new logic is simpler and more efficient.  It does not `git clone`
ever.  It does not differentiate the first sync from subsequent syncs.
It uses `git fetch` to get the exact SHA and then makes a worktree from
that.

The new `--ref` flag replaces both `--rev` and `--branch`, though it
will use those if specified.  In fact, almost all of the e2e tests
passed without change - using --ref and --branch!

I will follow this commit up with more cleanups and e2es.
2023-04-21 17:25:25 -07:00
Tim Hockin f95f3c24f7 e2e: print failing line 2023-04-06 17:45:36 -07:00
Tim Hockin f4d067c987 e2e: compare numbers numerically, not lexically
Thanks, bash, for supporting `<` and `>` and making them NOT mean the
obvious thing.

This shows up when you set RUNS=10:
`[[ 2 < 10 ]]` is false
`(( 2 < 10 ))` is true
2023-04-06 17:45:26 -07:00
Tim Hockin c1b8617385 e2e: s/REV/SHA 2023-04-06 17:45:16 -07:00
Kubernetes Prow Robot 1edf40bc2f
Merge pull request #682 from thockin/v4_e2e_init_test_cleanup
e2e: rename init tests, remove default-val args
2023-02-17 04:19:56 -08:00
Tim Hockin 75a256ee24
e2e: rename init tests, remove default-val args
Also don't pass --rev=HEAD when that's not part of the test.  It's the
default value.
2023-02-16 13:58:12 -08:00
Tim Hockin c5dcd87551
e2e: move helper scripts to _test_tools/ 2023-02-15 12:22:29 -08:00
Timothy Rule 2b3f1bcdd7
Add cli option sync-on-signal to trigger git-sync with a signal. (#664)
Operation:
git-sync --repo https://github.com/kubernetes/kubernetes --sync-on-signal SIGHUP
git-sync --repo https://github.com/kubernetes/kubernetes --sync-on-signal HUP
git-sync --repo https://github.com/kubernetes/kubernetes --sync-on-signal 1

Signals can be sent to docker containers with cmd:
docker kill -signal SIGHUP <Container ID>
2023-02-15 12:00:22 -08:00
Tim Hockin bbd0f56d11
e2e: assert metrics in tests 2023-02-10 21:12:56 -08:00
Tim Hockin 14422f8bac
e2e: set MAXWAIT to change wait times 2023-02-10 16:05:52 -08:00
Tim Hockin 759b8ebdfe
e2e: print path to logs on failure 2023-02-10 15:45:55 -08:00
Tim Hockin 950e391018
e2e: set RUNS to repeat tests 2023-02-10 15:45:54 -08:00
Tim Hockin b3ee55446e
e2e: allow file:// repos (missing piece) 2023-02-06 17:51:04 -08:00
Tim Hockin 75ba836f80
e2e: fix test-tool image names 2023-02-06 17:51:03 -08:00
yoyehan 2f7335868e
Fix cases of syncing different SHAs back to back
Prior to this, it would fail if the 2nd SHA wasn't in the local repo.
Now it doesn't care what the local SHA for rev is, it only cares what is
checked out at HEAD.
2022-12-25 14:02:12 -08:00
Kubernetes Prow Robot a761413d81
Merge pull request #649 from thockin/e2e_fix_broken
e2e: fix 2 broken tests
2022-11-30 03:28:54 -08:00
Tim Hockin 59e2d9e97c
e2e: fix exechook_fail_retry
Previous e2e perf changes caused this to fail.
2022-11-24 17:50:03 -08:00
Tim Hockin a492289ebf
e2e: fix git submodules for file://
I guess upstream git intentionally broke this because of a CVE.

Also fix wait_for_sync to actually exit early when possible.
2022-11-23 23:43:27 -08:00
Tim Hockin bda1f84614
Add --touch-file flag and use it in tests
This is mostly designed to make testing easier instead of sleep.
2022-10-30 17:01:55 -07:00
Kubernetes Prow Robot 2edd4e5d9e
Merge pull request #632 from thockin/error-file-abs-path
Make --error-file allow abs paths
2022-09-11 08:47:23 -07:00
Kubernetes Prow Robot d0b7661c58
Merge pull request #630 from thockin/e2e_bad_branch
e2e: move err tests and add bad-branch
2022-09-11 07:45:23 -07:00
Tim Hockin c32a042213
Make --error-file allow abs paths
This also enforces th previously unenforced "must not start with a
period" rule.
2022-09-05 14:54:10 -07:00
Kubernetes Prow Robot cbf034f87b
Merge pull request #629 from thockin/silence_e2e_noise
e2e: Silence noise from git init
2022-09-03 03:16:27 -07:00
Tim Hockin fcb577b9fb
e2e: move err tests and add bad-branch 2022-09-02 13:45:43 -07:00
Tim Hockin 8e28337f3c
e2e: Silence noise from git init 2022-09-02 13:45:29 -07:00
Tim Hockin bcd4629159
Disable local git configs 2022-09-02 13:45:19 -07:00
Tim Hockin d4c60936ed
e2e: Allow N tests to fail and catch errexit
Prior to this, `errexit` was not active inside test functions (see
comments in this commit).

Now, multiple tests can fail - it does not abort on the first one.
2022-08-30 14:50:37 -07:00
Kubernetes Prow Robot 6e03c52fc3
Merge pull request #615 from thockin/fetch_if_depth_and_rev_not_found
Support shallow sync when the rev is not in-range
2022-08-30 02:51:01 -07:00
Tim Hockin eb33e7cfcb --max-sync-failures -> --max-failures
Deprecate but retain the old flag and env.
2022-08-21 10:48:20 -07:00
Tim Hockin ff0a73f5ad Support shallow sync when the rev is not in-range
If I ask for `--depth 1` and a branch, it's fine.

If I ask for `--depth 1` and a tag, and that tag is not within 1 commit
of the branch that was cloned, it will give an error.  Oddly, if the
initial `clone` was OK, and subsequent syncs drift, it is OK, because of
how we `fetch`.  But if it is too far away at the beginning, kaboom.

This betrays that the current model of `--branch` and `--rev` is really
broken, and should be revamped.  For now, I did something simple - if
the rev can't be found, try a fetch.  A "real" fix is more involved.

Also add tests.
2022-08-20 15:41:33 -07:00
Tim Hockin 35f0720083 e2e: basename the link when comparing 2022-08-14 15:51:09 -07:00
Tim Hockin 48b006568d e2e: also trap ERR 2022-07-26 11:27:56 -07:00
Kubernetes Prow Robot e7d6471ddd
Merge pull request #576 from thockin/v4_e2e_password_not_one_time
v4: e2e: Make password test not use --one-time
2022-07-07 23:33:49 -07:00
Kubernetes Prow Robot 9e1fc987cf
Merge pull request #574 from thockin/v4_no_XDG_CONFIG_HOME
v4: e2e: don't set XDG_CONFIG_HOME
2022-07-07 05:19:34 -07:00
Kubernetes Prow Robot 344f3ecd09
Merge pull request #570 from thockin/v4_e2e_CLEANUP_docker_rm
v4: e2e: $CLEANUP decides whether to rm containers
2022-07-07 04:43:34 -07:00
Kubernetes Prow Robot 37eba714c5
Merge pull request #568 from thockin/v4_ncsvr_http_bug
v4: e2e: Fix ncsvr to wait for input on HTTP
2022-07-07 04:27:34 -07:00
Tim Hockin 56918b0055 e2e: don't set XDG_CONFIG_HOME 2022-07-03 16:53:09 -07:00
Kubernetes Prow Robot 6898074c8a
Merge pull request #564 from thockin/v4_e2e_rebuild_less
v4: e2e: rebuild the container less often
2022-07-03 14:31:22 -07:00
Tim Hockin 20f0ab8a9b e2e: Make password test not use --one-time 2022-07-03 11:38:23 -07:00
Tim Hockin e579cf18b2 e2e: $CLEANUP decides whether to rm containers 2022-07-03 11:36:48 -07:00
Tim Hockin ec25d1a3f5 e2e: Fix ncsvr to wait for input on HTTP
This caused occasional e2e flakes when the server responded before the
client request had been sent.
2022-07-03 11:36:05 -07:00
Tim Hockin 4b9431f9bc Don't run apt-get in e2e build if we can avoid 2022-07-03 11:35:09 -07:00
Tim Hockin 10abfd561b e2e: rebuild container less often 2022-07-03 11:35:09 -07:00
Tim Hockin 27ac1642c9 Rename tests for better filtering 2022-07-03 11:14:46 -07:00
Tim Hockin 23540b9d94 Beef up askpass_url support
* Don't need to get the password at startup (it happens in the sync loop
  anyway)
* Add tests for bad password and flaky URL
2022-07-02 15:43:27 -07:00
Kubernetes Prow Robot d8da63cf48
Merge pull request #557 from thockin/v4_e2e_v6
v4: e2e with -v=6
2022-07-02 13:11:24 -07:00
Kubernetes Prow Robot 58bb41e82f
Merge pull request #538 from thockin/v4-dont-docker-kill
v4: e2e: Don't manually "docker kill"
2022-07-02 12:59:24 -07:00
Tim Hockin 2a4ca7794c e2e with -v=6 2022-07-02 10:59:47 -07:00
Kubernetes Prow Robot 52d2e075c6
Merge pull request #542 from thockin/v4-passwd_e2e_split
v4: Split password test to 2 - right and wrong passwd
2022-07-02 03:53:24 -07:00
Tim Hockin 00d81fd3f9 Split password test to 2 - right and wrong passwd 2022-06-24 08:46:43 -07:00
Tim Hockin 5b7df08826 e2e: Reformat ncsvr scripts for readability 2022-06-24 08:45:17 -07:00
Tim Hockin 9af6b7cfe2 e2e: Don't manually "docker kill"
It happens automatically on test cleanup
2022-06-24 08:45:05 -07:00
Tim Hockin a341fb62f9 Make ssh e2e test not use --one-time
There is functionality that needs to be tested beyond that.
2022-06-11 10:56:20 -07:00
Tim Hockin 2c6356cbcb Pass CLEANUP=0 to test_e2e to leave logs 2022-06-11 19:49:11 +02:00
Tim Hockin f8a532d9df Pass the whole environment to exechooks 2022-05-16 18:14:09 -07:00
Tim Hockin 535735607f Adapt testcases for v4 2022-03-11 08:41:57 -08:00
sed-i ff3d11c925 Add repo-sync test 2022-03-11 08:34:16 -08:00
Tim Hockin 8c5f33d5dd Make e2e treat args as tests-name regexes 2022-02-24 09:00:57 -08:00
Tim Hockin f4d124bded Add --git-gc flag to control GC on each sync
Values:
* "auto" - run `git gc --auto` (default, respects git gc.* configs)
* "always" - run `git gc`
* "aggressive" - run `git gc --aggressive` (may require a longer timeout)
* "off" - do not run `git gc` on each sync (good for --one-time use)
2022-02-24 08:00:10 -08:00
Tim Hockin 2538d293ba Set repoReady even when there wasn't a 1st clone
E.g. if the repo is already present (after a restart).
2022-02-12 17:38:36 -08:00
Kubernetes Prow Robot d3324e0b90
Merge pull request #478 from thockin/v4-link-abspath
Allow --dest to be an absolute path (v4)
2022-01-23 02:41:56 -08:00
Kubernetes Prow Robot 6dc0e44697
Merge pull request #472 from thockin/master
Don't try to remove the root if it appears corrupt (v4)
2022-01-23 01:15:56 -08:00
Tim Hockin 4fc67f5f5f Allow --dest to be an absolute path
This means it might live outside of --root.
2022-01-22 23:39:56 -08:00
Tim Hockin 248a53461d Don't try to remove the root if it appears corrupt
The `--root` is often a volume and can't be removed.  Instead, remove
the contents of it.  Adjust tests to hit this.
2022-01-22 14:28:09 -08:00
Tim Hockin 9eed6946b7 e2e cleanup
Fix some whitespace and names.
Make command-line and flag handling a bit cleaner.
2022-01-19 11:38:23 -08:00
ChrisERo 5490b721d8 fix: made tests more efficient by waiting less 2022-01-14 13:53:09 -05:00
ChrisERo 043c356c03 fix: fixed e2e tests
Resolved a few issues with e2e tests discovered after running
test_e2d.sh. Just finished setting up Linux (Fedora) environment in
which this script can be run.
2022-01-14 03:23:20 -05:00
ChrisERo 0246fb509f feat: added e2e --one-time tests for webhook 2022-01-10 20:06:25 -05:00
ChrisERo 8e098f8c2a fix: made exechook_once tests more efficient
* Removed multiple iterations of tests
* Reduced sleep time after GIT_SYNC command execution
2022-01-10 20:06:24 -05:00
ChrisERo a362b4a5f4 feat: added tests for this PR that test exechook paired with --one-time flag 2022-01-10 20:06:21 -05:00
Tim Hockin 7b32caee77 v4: use repo default branch instead of master 2021-11-01 23:05:48 -07:00
Tim Hockin 2b471ba2d7 E2E: build IFF running tests 2021-10-18 09:36:52 -07:00
Tim Hockin 6e52fb0d22 E2E: Add whitespace for reading 2021-10-18 09:36:52 -07:00
Tim Hockin 320a4a7e93 E2E: Move code
Reduce the diff between v3 and v4
2021-10-18 09:36:52 -07:00
Tim Hockin 27f2c905fc E2E: Rename test funcs 2021-10-18 09:36:52 -07:00
Tim Hockin dfcafc9ca0 E2E: Fix endless loop on error 2021-10-18 09:36:52 -07:00
Tim Hockin e2ed136aad E2E: make all test cases be funcs
Make all test cases functions so they can be called individually on the
CLI.  Call test_e2e.sh with `-?` to list tests.   Fix related crashes
(uses of $TESTCASE and so on).
2021-10-18 09:36:52 -07:00
Tim Hockin e06f9c6acb E2E: Make SIGINT handling more complete 2021-10-18 09:36:52 -07:00
Tim Hockin 7b3454e51b E2E: Use vars for branch names 2021-10-18 09:36:52 -07:00
Tim Hockin 286175cb94 E2E: always use '[[ ]]' 2021-10-18 09:36:52 -07:00
Tim Hockin a91777288a use branch revision during worktree add (v4)
This is a port of the v3 commit 2c3bb035f6
2021-10-18 09:32:57 -07:00
Tim Hockin 4d286fc44f Fix e2e cases to not destroy logs 2021-10-18 09:32:57 -07:00
Tim Hockin 0075df238c Make exechooks work like webhooks.
This deprecates the `--sync-hook-command` flag in favor of
`--exechook-command`, `--exechook-timeout`, and `--exechook-backoff`.
2021-08-16 23:21:20 -07:00
Tim Hockin d1afc12e67 Handle a race between ls-remote and fetch
This is a port of PR #413.
2021-06-23 12:51:15 -07:00