github.com/stffabi/git-lfs@v2.3.5-0.20180214015214-8eeaa8d88902+incompatible/test/test-credentials.sh (about) 1 #!/usr/bin/env bash 2 3 . "test/testlib.sh" 4 5 ensure_git_version_isnt $VERSION_LOWER "2.3.0" 6 7 begin_test "credentails with url-specific helper skips askpass" 8 ( 9 set -e 10 11 reponame="url-specific-helper" 12 setup_remote_repo "$reponame" 13 14 clone_repo "$reponame" "$reponame" 15 git config credential.useHttpPath false 16 git config credential.helper "" 17 git config credential.$GITSERVER.helper "lfstest" 18 19 git lfs track "*.dat" 20 echo "hello" > a.dat 21 22 git add .gitattributes a.dat 23 git commit -m "initial commit" 24 25 # askpass is skipped 26 GIT_ASKPASS="lfs-bad-cmd" GIT_TRACE=1 git push origin master 2>&1 | tee push.log 27 28 [ "0" -eq "$(grep "filling with GIT_ASKPASS" push.log | wc -l)" ] 29 ) 30 end_test 31 32 begin_test "credentials without useHttpPath, with bad path password" 33 ( 34 set -e 35 36 reponame="no-httppath-bad-password" 37 setup_remote_repo "$reponame" 38 39 printf "path:wrong" > "$CREDSDIR/127.0.0.1--$reponame" 40 41 clone_repo "$reponame" without-path 42 git config credential.useHttpPath false 43 git checkout -b without-path 44 45 git lfs track "*.dat" 2>&1 | tee track.log 46 grep "Tracking \"\*.dat\"" track.log 47 48 printf "a" > a.dat 49 git add a.dat 50 git add .gitattributes 51 git commit -m "add a.dat" 52 53 GIT_TRACE=1 git push origin without-path 2>&1 | tee push.log 54 grep "Uploading LFS objects: 100% (1/1), 1 B" push.log 55 56 echo "approvals:" 57 [ "1" -eq "$(cat push.log | grep "creds: git credential approve" | wc -l)" ] 58 echo "fills:" 59 [ "1" -eq "$(cat push.log | grep "creds: git credential fill" | wc -l)" ] 60 61 echo "credential calls have no path:" 62 credcalls="$(grep "creds: git credential" push.log)" 63 [ "0" -eq "$(echo "$credcalls" | grep "no-httppath-bad-password" | wc -l)" ] 64 expected="$(echo "$credcalls" | wc -l)" 65 [ "$expected" -eq "$(printf "$credcalls" | grep '", "")' | wc -l)" ] 66 ) 67 end_test 68 69 begin_test "credentials with url-specific useHttpPath, with bad path password" 70 ( 71 set -e 72 73 reponame="url-specific-httppath-bad-password" 74 setup_remote_repo "$reponame" 75 76 printf "path:wrong" > "$CREDSDIR/127.0.0.1--$reponame" 77 78 clone_repo "$reponame" with-url-specific-path 79 git config credential.$GITSERVER.useHttpPath false 80 git checkout -b without-path 81 82 git lfs track "*.dat" 2>&1 | tee track.log 83 grep "Tracking \"\*.dat\"" track.log 84 85 printf "a" > a.dat 86 git add a.dat 87 git add .gitattributes 88 git commit -m "add a.dat" 89 90 GIT_TRACE=1 git push origin without-path 2>&1 | tee push.log 91 grep "Uploading LFS objects: 100% (1/1), 1 B" push.log 92 93 echo "approvals:" 94 [ "1" -eq "$(cat push.log | grep "creds: git credential approve" | wc -l)" ] 95 echo "fills:" 96 [ "1" -eq "$(cat push.log | grep "creds: git credential fill" | wc -l)" ] 97 ) 98 end_test 99 100 begin_test "credentials with useHttpPath, with wrong password" 101 ( 102 set -e 103 104 reponame="httppath-bad-password" 105 setup_remote_repo "$reponame" 106 107 printf "path:wrong" > "$CREDSDIR/127.0.0.1--$reponame" 108 109 clone_repo "$reponame" with-path-wrong-pass 110 git checkout -b with-path-wrong-pass 111 112 git lfs track "*.dat" 2>&1 | tee track.log 113 grep "Tracking \"\*.dat\"" track.log 114 115 contents="a" 116 contents_oid=$(calc_oid "$contents") 117 118 printf "$contents" > a.dat 119 git add a.dat 120 git add .gitattributes 121 git commit -m "add a.dat" 122 123 GIT_TRACE=1 git push origin with-path-wrong-pass 2>&1 | tee push.log 124 [ "0" = "$(grep -c "Uploading LFS objects: 100% (1/1), 0 B" push.log)" ] 125 echo "approvals:" 126 [ "0" -eq "$(cat push.log | grep "creds: git credential approve" | wc -l)" ] 127 echo "fills:" 128 [ "2" -eq "$(cat push.log | grep "creds: git credential fill" | wc -l)" ] 129 ) 130 end_test 131 132 begin_test "credentials with useHttpPath, with correct password" 133 ( 134 set -e 135 136 reponame="$(basename "$0" ".sh")" 137 setup_remote_repo "$reponame" 138 139 printf "path:$reponame" > "$CREDSDIR/127.0.0.1--$reponame" 140 141 clone_repo "$reponame" with-path-correct-pass 142 git checkout -b with-path-correct-pass 143 144 git lfs track "*.dat" 2>&1 | tee track.log 145 grep "Tracking \"\*.dat\"" track.log 146 147 # creating new branch does not re-send any objects existing on other 148 # remote branches anymore, generate new object, different from prev tests 149 contents="b" 150 contents_oid=$(calc_oid "$contents") 151 152 printf "$contents" > b.dat 153 git add b.dat 154 git add .gitattributes 155 git commit -m "add b.dat" 156 157 GIT_TRACE=1 git push origin with-path-correct-pass 2>&1 | tee push.log 158 grep "Uploading LFS objects: 100% (1/1), 1 B" push.log 159 echo "approvals:" 160 [ "1" -eq "$(cat push.log | grep "creds: git credential approve" | wc -l)" ] 161 echo "fills:" 162 [ "1" -eq "$(cat push.log | grep "creds: git credential fill" | wc -l)" ] 163 echo "credential calls have path:" 164 credcalls="$(grep "creds: git credential" push.log)" 165 [ "0" -eq "$(echo "$credcalls" | grep '", "")' | wc -l)" ] 166 expected="$(echo "$credcalls" | wc -l)" 167 [ "$expected" -eq "$(printf "$credcalls" | grep "test-credentials" | wc -l)" ] 168 ) 169 end_test 170 171 begin_test "git credential" 172 ( 173 set -e 174 175 printf "git:server" > "$CREDSDIR/credential-test.com" 176 printf "git:path" > "$CREDSDIR/credential-test.com--some-path" 177 178 mkdir empty 179 cd empty 180 git init 181 182 echo "protocol=http 183 host=credential-test.com 184 path=some/path" | GIT_TERMINAL_PROMPT=0 git credential fill > cred.log 185 cat cred.log 186 187 expected="protocol=http 188 host=credential-test.com 189 path=some/path 190 username=git 191 password=path" 192 193 [ "$expected" = "$(cat cred.log)" ] 194 195 git config credential.useHttpPath false 196 197 echo "protocol=http 198 host=credential-test.com" | GIT_TERMINAL_PROMPT=0 git credential fill > cred.log 199 cat cred.log 200 201 expected="protocol=http 202 host=credential-test.com 203 username=git 204 password=server" 205 [ "$expected" = "$(cat cred.log)" ] 206 207 echo "protocol=http 208 host=credential-test.com 209 path=some/path" | GIT_TERMINAL_PROMPT=0 git credential fill > cred.log 210 cat cred.log 211 212 expected="protocol=http 213 host=credential-test.com 214 username=git 215 password=server" 216 217 [ "$expected" = "$(cat cred.log)" ] 218 ) 219 end_test 220 221 222 if [[ $(uname) == *"MINGW"* ]]; then 223 NETRCFILE="$HOME/_netrc" 224 else 225 NETRCFILE="$HOME/.netrc" 226 fi 227 228 229 begin_test "credentials from netrc" 230 ( 231 set -e 232 233 printf "machine localhost\nlogin netrcuser\npassword netrcpass\n" >> "$NETRCFILE" 234 echo $HOME 235 echo "GITSERVER $GITSERVER" 236 cat $NETRCFILE 237 238 # prevent prompts on Windows particularly 239 export SSH_ASKPASS= 240 241 reponame="netrctest" 242 setup_remote_repo "$reponame" 243 244 clone_repo "$reponame" repo 245 246 # Need a remote named "localhost" or 127.0.0.1 in netrc will interfere with the other auth 247 git remote add "netrc" "$(echo $GITSERVER | sed s/127.0.0.1/localhost/)/netrctest" 248 git lfs env 249 250 git lfs track "*.dat" 251 echo "push a" > a.dat 252 git add .gitattributes a.dat 253 git commit -m "add a.dat" 254 255 GIT_TRACE=1 git lfs push netrc master 2>&1 | tee push.log 256 grep "Uploading LFS objects: 100% (1/1), 7 B" push.log 257 echo "any git credential calls:" 258 [ "0" -eq "$(cat push.log | grep "git credential" | wc -l)" ] 259 ) 260 end_test 261 262 begin_test "credentials from netrc with bad password" 263 ( 264 set -e 265 266 printf "machine localhost\nlogin netrcuser\npassword badpass\n" >> "$NETRCFILE" 267 echo $HOME 268 echo "GITSERVER $GITSERVER" 269 cat $NETRCFILE 270 271 # prevent prompts on Windows particularly 272 export SSH_ASKPASS= 273 274 reponame="netrctest" 275 setup_remote_repo "$reponame" 276 277 clone_repo "$reponame" repo2 278 279 # Need a remote named "localhost" or 127.0.0.1 in netrc will interfere with the other auth 280 git remote add "netrc" "$(echo $GITSERVER | sed s/127.0.0.1/localhost/)/netrctest" 281 git lfs env 282 283 git lfs track "*.dat" 284 echo "push a" > a.dat 285 git add .gitattributes a.dat 286 git commit -m "add a.dat" 287 288 git push netrc master 2>&1 | tee push.log 289 [ "0" = "$(grep -c "Uploading LFS objects: 100% (1/1), 7 B" push.log)" ] 290 ) 291 end_test 292 293 begin_test "credentials from lfs.url" 294 ( 295 set -e 296 297 reponame="requirecreds" 298 setup_remote_repo "$reponame" 299 clone_repo "$reponame" requirecreds-lfsurl 300 301 git lfs track "*.dat" 302 echo "push a" > a.dat 303 git add .gitattributes a.dat 304 git commit -m "add a.dat" 305 306 echo "bad push" 307 git lfs env 308 git lfs push origin master 2>&1 | tee push.log 309 grep "Uploading LFS objects: 0% (0/1), 0 B" push.log 310 311 echo "good push" 312 gitserverhost=$(echo "$GITSERVER" | cut -d'/' -f3) 313 git config lfs.url http://requirecreds:pass@$gitserverhost/$reponame.git/info/lfs 314 git lfs env 315 git lfs push origin master 2>&1 | tee push.log 316 grep "Uploading LFS objects: 0% (0/1), 0 B" push.log 317 318 echo "bad fetch" 319 rm -rf .git/lfs/objects 320 git config lfs.url http://$gitserverhost/$reponame.git/info/lfs 321 git lfs env 322 git lfs fetch --all 2>&1 | tee fetch.log 323 grep "Downloading LFS objects: 0% (0/1), 0 B" fetch.log 324 325 echo "good fetch" 326 rm -rf .git/lfs/objects 327 git config lfs.url http://requirecreds:pass@$gitserverhost/$reponame.git/info/lfs 328 git lfs env 329 git lfs fetch --all 2>&1 | tee fetch.log 330 grep "Downloading LFS objects: 100% (1/1), 7 B" fetch.log 331 ) 332 end_test 333 334 begin_test "credentials from remote.origin.url" 335 ( 336 set -e 337 338 reponame="requirecreds" 339 setup_remote_repo "$reponame" 340 clone_repo "$reponame" requirecreds-remoteurl 341 342 git lfs track "*.dat" 343 echo "push b" > b.dat 344 git add .gitattributes b.dat 345 git commit -m "add b.dat" 346 347 echo "bad push" 348 git lfs env 349 git lfs push origin master 2>&1 | tee push.log 350 grep "Uploading LFS objects: 0% (0/1), 0 B" push.log 351 352 echo "good push" 353 gitserverhost=$(echo "$GITSERVER" | cut -d'/' -f3) 354 git config remote.origin.url http://requirecreds:pass@$gitserverhost/$reponame.git 355 git lfs env 356 git lfs push origin master 2>&1 | tee push.log 357 grep "Uploading LFS objects: 100% (1/1), 7 B" push.log 358 359 echo "bad fetch" 360 rm -rf .git/lfs/objects 361 git config remote.origin.url http://$gitserverhost/$reponame.git 362 git lfs env 363 git lfs fetch --all 2>&1 | tee fetch.log 364 # Missing authentication causes `git lfs fetch` to fail before the progress 365 # meter is printed to the TTY. 366 367 echo "good fetch" 368 rm -rf .git/lfs/objects 369 git config remote.origin.url http://requirecreds:pass@$gitserverhost/$reponame.git 370 git lfs env 371 git lfs fetch --all 2>&1 | tee fetch.log 372 grep "Downloading LFS objects: 100% (1/1), 7 B" fetch.log 373 ) 374 end_test