aboutsummaryrefslogtreecommitdiffstats
path: root/t/t0301-credential-cache.sh
blob: c10e35905e0ea01b832ecd699b9079f683be674e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#!/bin/sh

test_description='credential-cache tests'
. ./test-lib.sh
. "$TEST_DIRECTORY"/lib-credential.sh

test -z "$NO_UNIX_SOCKETS" || {
	skip_all='skipping credential-cache tests, unix sockets not available'
	test_done
}
if test_have_prereq MINGW
then
	service_running=$(sc query afunix | grep "4  RUNNING")
	test -z "$service_running" || {
		skip_all='skipping credential-cache tests, unix sockets not available'
		test_done
	}
fi

uname_s=$(uname -s)
case $uname_s in
*MINGW*)
	test_path_is_socket () {
		# `test -S` cannot detect Win10's Unix sockets
		test_path_exists "$1"
	}
	;;
*)
	test_path_is_socket () {
		test -S "$1"
	}
	;;
esac

# don't leave a stale daemon running
test_atexit 'git credential-cache exit'

# test that the daemon works with no special setup
helper_test cache
helper_test_password_expiry_utc cache
helper_test_oauth_refresh_token cache
helper_test_authtype cache

test_expect_success 'socket defaults to ~/.cache/git/credential/socket' '
	test_when_finished "
		git credential-cache exit &&
		rmdir -p .cache/git/credential/
	" &&
	test_path_is_missing "$HOME/.git-credential-cache" &&
	test_path_is_socket "$HOME/.cache/git/credential/socket"
'

XDG_CACHE_HOME="$HOME/xdg"
export XDG_CACHE_HOME
# test behavior when XDG_CACHE_HOME is set
helper_test cache

test_expect_success "use custom XDG_CACHE_HOME if set and default sockets are not created" '
	test_when_finished "git credential-cache exit" &&
	test_path_is_socket "$XDG_CACHE_HOME/git/credential/socket" &&
	test_path_is_missing "$HOME/.git-credential-cache/socket" &&
	test_path_is_missing "$HOME/.cache/git/credential/socket"
'
unset XDG_CACHE_HOME

test_expect_success 'credential-cache --socket option overrides default location' '
	test_when_finished "
		git credential-cache exit --socket \"\$HOME/dir/socket\" &&
		rmdir \"\$HOME/dir\"
	" &&
	check approve "cache --socket \"\$HOME/dir/socket\"" <<-\EOF &&
	protocol=https
	host=example.com
	username=store-user
	password=store-pass
	EOF
	test_path_is_socket "$HOME/dir/socket"
'

test_expect_success "use custom XDG_CACHE_HOME even if xdg socket exists" '
	test_when_finished "
		git credential-cache exit &&
		sane_unset XDG_CACHE_HOME
	" &&
	check approve cache <<-\EOF &&
	protocol=https
	host=example.com
	username=store-user
	password=store-pass
	EOF
	test_path_is_socket "$HOME/.cache/git/credential/socket" &&
	XDG_CACHE_HOME="$HOME/xdg" &&
	export XDG_CACHE_HOME &&
	check approve cache <<-\EOF &&
	protocol=https
	host=example.com
	username=store-user
	password=store-pass
	EOF
	test_path_is_socket "$XDG_CACHE_HOME/git/credential/socket"
'

test_expect_success 'use user socket if user directory exists' '
	test_when_finished "
		git credential-cache exit &&
		rmdir \"\$HOME/.git-credential-cache/\"
	" &&
	mkdir -p "$HOME/.git-credential-cache/" &&
	chmod 700 "$HOME/.git-credential-cache/" &&
	check approve cache <<-\EOF &&
	protocol=https
	host=example.com
	username=store-user
	password=store-pass
	EOF
	test_path_is_socket "$HOME/.git-credential-cache/socket"
'

test_expect_success SYMLINKS 'use user socket if user directory is a symlink to a directory' '
	test_when_finished "
		git credential-cache exit &&
		rmdir \"\$HOME/dir/\" &&
		rm \"\$HOME/.git-credential-cache\"
	" &&
	mkdir -p -m 700 "$HOME/dir/" &&
	ln -s "$HOME/dir" "$HOME/.git-credential-cache" &&
	check approve cache <<-\EOF &&
	protocol=https
	host=example.com
	username=store-user
	password=store-pass
	EOF
	test_path_is_socket "$HOME/.git-credential-cache/socket"
'

helper_test_timeout cache --timeout=1

test_done