From: Paul Tan <pyokagan@gmail.com>
To: git@vger.kernel.org
Cc: Matthieu Moy <Matthieu.Moy@grenoble-inp.fr>,
Junio C Hamano <gitster@pobox.com>, Jeff King <peff@peff.net>,
Eric Sunshine <sunshine@sunshineco.com>,
Paul Tan <pyokagan@gmail.com>
Subject: [PATCH v4 4/4] t0302: test credential-store support for XDG_CONFIG_HOME
Date: Wed, 18 Mar 2015 15:04:36 +0800 [thread overview]
Message-ID: <1426662276-8728-4-git-send-email-pyokagan@gmail.com> (raw)
In-Reply-To: <1426662276-8728-1-git-send-email-pyokagan@gmail.com>
t0302 now tests git-credential-store's support for the XDG user-specific
configuration file $XDG_CONFIG_HOME/git/credentials. Specifically:
* Ensure that the XDG file is strictly opt-in. It should not be created
by git at all times if it does not exist.
* Conversely, if the XDG file exists, ~/.git-credentials should
not be created at all times.
* If both the XDG file and ~/.git-credentials exists, then both files
should be used for credential lookups. However, credentials should
only be written to ~/.git-credentials.
* Credentials must be erased from both files.
* $XDG_CONFIG_HOME can be a custom directory set by the user as per the
XDG base directory specification. Test that git-credential-store
respects that, but defaults to "~/.config/git/credentials" if it does
not exist or is empty.
Helped-by: Matthieu Moy <Matthieu.Moy@grenoble-inp.fr>
Helped-by: Junio C Hamano <gitster@pobox.com>
Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Paul Tan <pyokagan@gmail.com>
---
The previous version can be found at [1].
[1] http://thread.gmane.org/gmane.comp.version-control.git/265305/focus=265308
* Merge related, but previously separate, tests together in order to
make the test suite easier to understand.
* Instead of setting/unsetting XDG_CONFIG_HOME in separate tests, set
it, and unset it immediately before and after "helper_test store" is
called in order to make it localized to only the command that it
should affect.
* Add test, previously missing, to check that only the home credentials
file is written to if both the xdg and home files exist.
* Correct mislabelling of "home-user"/"home-pass" to the proper
"xdg-user"/"xdg-pass".
* Use "rm -f" instead of "test_might_fail rm".
Thanks Eric for the code review.
t/t0302-credential-store.sh | 111 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 111 insertions(+)
diff --git a/t/t0302-credential-store.sh b/t/t0302-credential-store.sh
index f61b40c..5b0a666 100755
--- a/t/t0302-credential-store.sh
+++ b/t/t0302-credential-store.sh
@@ -6,4 +6,115 @@ test_description='credential-store tests'
helper_test store
+test_expect_success 'when xdg credentials file does not exist, only write to ~/.git-credentials; do not create xdg file' '
+ test -s "$HOME/.git-credentials" &&
+ test_path_is_missing "$HOME/.config/git/credentials"
+'
+
+test_expect_success 'create $XDG_CONFIG_HOME/git/credentials file' '
+ rm -f "$HOME/.git-credentials" &&
+ mkdir -p "$HOME/.config/git" &&
+ >"$HOME/.config/git/credentials"
+'
+
+helper_test store
+
+test_expect_success 'when xdg credentials file exists, only write to xdg file; do not create ~/.git-credentials' '
+ test -s "$HOME/.config/git/credentials" &&
+ test_path_is_missing "$HOME/.git-credentials"
+'
+
+test_expect_success 'set up custom XDG_CONFIG_HOME credential file at ~/xdg/git/credentials' '
+ mkdir -p "$HOME/xdg/git" &&
+ rm -f "$HOME/.config/git/credentials" &&
+ >"$HOME/xdg/git/credentials"
+'
+
+XDG_CONFIG_HOME="$HOME/xdg" && export XDG_CONFIG_HOME && helper_test store
+unset XDG_CONFIG_HOME
+
+test_expect_success 'if custom XDG_CONFIG_HOME credentials file ~/xdg/git/credentials exists, it will only be written to; ~/.config/git/credentials and ~/.git-credentials will not be created' '
+ test_when_finished "rm -f $HOME/xdg/git/credentials" &&
+ test -s "$HOME/xdg/git/credentials" &&
+ test_path_is_missing "$HOME/.config/git/credentials"
+ test_path_is_missing "$HOME/.git-credentials"
+'
+
+test_expect_success 'get: return credentials from home file if matches are found in both home and xdg files' '
+ mkdir -p "$HOME/.config/git" &&
+ echo "https://xdg-user:xdg-pass@example.com" >"$HOME/.config/git/credentials" &&
+ echo "https://home-user:home-pass@example.com" >"$HOME/.git-credentials" &&
+ check fill store <<-\EOF
+ protocol=https
+ host=example.com
+ --
+ protocol=https
+ host=example.com
+ username=home-user
+ password=home-pass
+ --
+ EOF
+'
+
+test_expect_success 'get: return credentials from xdg file if the home files do not have them' '
+ mkdir -p "$HOME/.config/git" &&
+ >"$HOME/.git-credentials" &&
+ echo "https://xdg-user:xdg-pass@example.com" >"$HOME/.config/git/credentials" &&
+ check fill store <<-\EOF
+ protocol=https
+ host=example.com
+ --
+ protocol=https
+ host=example.com
+ username=xdg-user
+ password=xdg-pass
+ --
+ EOF
+'
+
+test_expect_success 'get: return credentials from home file if xdg files are unreadable' '
+ mkdir -p "$HOME/.config/git" &&
+ echo "https://xdg-user:xdg-pass@example.com" >"$HOME/.config/git/credentials" &&
+ echo "https://home-user:home-pass@example.com" >"$HOME/.git-credentials" &&
+ chmod -r "$HOME/.config/git/credentials" &&
+ check fill store <<-\EOF
+ protocol=https
+ host=example.com
+ --
+ protocol=https
+ host=example.com
+ username=home-user
+ password=home-pass
+ --
+ EOF
+'
+
+test_expect_success 'store: If both xdg and home files exist, only store in home file' '
+ mkdir -p "$HOME/.config/git" &&
+ >"$HOME/.config/git/credentials" &&
+ >"$HOME/.git-credentials" &&
+ check approve store <<-\EOF &&
+ protocol=https
+ host=example.com
+ username=store-user
+ password=store-pass
+ EOF
+ echo "https://store-user:store-pass@example.com" >expected &&
+ test_cmp expected "$HOME/.git-credentials" &&
+ test_must_be_empty "$HOME/.config/git/credentials"
+'
+
+
+test_expect_success 'erase: erase matching credentials from both xdg and home files' '
+ mkdir -p "$HOME/.config/git" &&
+ echo "https://xdg-user:xdg-pass@example.com" >"$HOME/.config/git/credentials" &&
+ echo "https://home-user:home-pass@example.com" >"$HOME/.git-credentials" &&
+ check reject store <<-\EOF &&
+ protocol=https
+ host=example.com
+ EOF
+ test_must_be_empty "$HOME/.config/git/credentials" &&
+ test_must_be_empty "$HOME/.git-credentials"
+'
+
test_done
--
2.1.4
next prev parent reply other threads:[~2015-03-18 7:05 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-18 7:04 [PATCH v4 1/4] git-credential-store: support multiple credential files Paul Tan
2015-03-18 7:04 ` [PATCH v4 2/4] git-credential-store: support XDG_CONFIG_HOME Paul Tan
2015-03-18 7:04 ` [PATCH v4 3/4] docs/git-credential-store: document XDG file and precedence Paul Tan
2015-03-18 16:23 ` Matthieu Moy
2015-03-21 5:59 ` Paul Tan
2015-03-18 7:04 ` Paul Tan [this message]
2015-03-18 16:41 ` [PATCH v4 4/4] t0302: test credential-store support for XDG_CONFIG_HOME Matthieu Moy
2015-03-18 21:15 ` Eric Sunshine
2015-03-19 13:35 ` Matthieu Moy
2015-03-21 10:01 ` Paul Tan
2015-03-18 19:26 ` Eric Sunshine
2015-03-19 21:53 ` Eric Sunshine
2015-03-21 5:46 ` Paul Tan
2015-03-23 1:56 ` Eric Sunshine
2015-03-18 16:17 ` [PATCH v4 1/4] git-credential-store: support multiple credential files Matthieu Moy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1426662276-8728-4-git-send-email-pyokagan@gmail.com \
--to=pyokagan@gmail.com \
--cc=Matthieu.Moy@grenoble-inp.fr \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=peff@peff.net \
--cc=sunshine@sunshineco.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.