#!/bin/sh test_description='external credential helper tests This is a tool for authors of external helper tools to sanity-check their helpers. If you have written the "git-credential-foo" helper, you check it with: make GIT_TEST_CREDENTIAL_HELPER=foo t0303-credential-external.sh This assumes that your helper is capable of both storing and retrieving credentials (some helpers may be read-only, and they will fail these tests). Please note that the individual tests do not verify all of the preconditions themselves, but rather build on each other. A failing test means that tests later in the sequence can return false "OK" results. If your helper supports time-based expiration with a configurable timeout, you can test that feature with: make GIT_TEST_CREDENTIAL_HELPER=foo \ GIT_TEST_CREDENTIAL_HELPER_TIMEOUT="foo --timeout=1" \ t0303-credential-external.sh If your helper requires additional setup before the tests are started, you can set GIT_TEST_CREDENTIAL_HELPER_SETUP to a sequence of shell commands. ' . ./test-lib.sh . "$TEST_DIRECTORY"/lib-credential.sh # If we're not given a specific external helper to run against, # there isn't much to test. But we can still run through our # battery of tests with a fake helper and check that the # test themselves are self-consistent and clean up after # themselves. # # We'll use the "store" helper, since we can easily inspect # its state by looking at the on-disk file. But since it doesn't # implement any caching or expiry logic, we'll cheat and override # the "check" function to just report all results as OK. if test -z "$GIT_TEST_CREDENTIAL_HELPER"; then GIT_TEST_CREDENTIAL_HELPER=store GIT_TEST_CREDENTIAL_HELPER_TIMEOUT=store check () { test "$1" = "approve" || return 0 git -c credential.helper=store credential approve } check_cleanup=t fi test -z "$GIT_TEST_CREDENTIAL_HELPER_SETUP" || eval "$GIT_TEST_CREDENTIAL_HELPER_SETUP" # clean before the test in case there is cruft left # over from a previous run that would impact results helper_test_clean "$GIT_TEST_CREDENTIAL_HELPER" helper_test "$GIT_TEST_CREDENTIAL_HELPER" helper_test_password_expiry_utc "$GIT_TEST_CREDENTIAL_HELPER" helper_test_oauth_refresh_token "$GIT_TEST_CREDENTIAL_HELPER" if test -z "$GIT_TEST_CREDENTIAL_HELPER_TIMEOUT"; then say "# skipping timeout tests (GIT_TEST_CREDENTIAL_HELPER_TIMEOUT not set)" else helper_test_timeout "$GIT_TEST_CREDENTIAL_HELPER_TIMEOUT" fi # clean afterwards so that we are good citizens # and don't leave cruft in the helper's storage, which # might be long-term system storage helper_test_clean "$GIT_TEST_CREDENTIAL_HELPER" if test "$check_cleanup" = "t" then test_expect_success 'test cleanup removes everything' ' test_must_be_empty "$HOME/.git-credentials" ' fi test_done