t / t0302-credential-store.shon commit fsck: avoid looking at NULL blob->object (47cc913)
   1#!/bin/sh
   2
   3test_description='credential-store tests'
   4. ./test-lib.sh
   5. "$TEST_DIRECTORY"/lib-credential.sh
   6
   7helper_test store
   8
   9test_expect_success 'when xdg file does not exist, xdg file not created' '
  10        test_path_is_missing "$HOME/.config/git/credentials" &&
  11        test -s "$HOME/.git-credentials"
  12'
  13
  14test_expect_success 'setup xdg file' '
  15        rm -f "$HOME/.git-credentials" &&
  16        mkdir -p "$HOME/.config/git" &&
  17        >"$HOME/.config/git/credentials"
  18'
  19
  20helper_test store
  21
  22test_expect_success 'when xdg file exists, home file not created' '
  23        test -s "$HOME/.config/git/credentials" &&
  24        test_path_is_missing "$HOME/.git-credentials"
  25'
  26
  27test_expect_success 'setup custom xdg file' '
  28        rm -f "$HOME/.git-credentials" &&
  29        rm -f "$HOME/.config/git/credentials" &&
  30        mkdir -p "$HOME/xdg/git" &&
  31        >"$HOME/xdg/git/credentials"
  32'
  33
  34XDG_CONFIG_HOME="$HOME/xdg"
  35export XDG_CONFIG_HOME
  36helper_test store
  37unset XDG_CONFIG_HOME
  38
  39test_expect_success 'if custom xdg file exists, home and xdg files not created' '
  40        test_when_finished "rm -f \"$HOME/xdg/git/credentials\"" &&
  41        test -s "$HOME/xdg/git/credentials" &&
  42        test_path_is_missing "$HOME/.git-credentials" &&
  43        test_path_is_missing "$HOME/.config/git/credentials"
  44'
  45
  46test_expect_success 'get: use home file if both home and xdg files have matches' '
  47        echo "https://home-user:home-pass@example.com" >"$HOME/.git-credentials" &&
  48        mkdir -p "$HOME/.config/git" &&
  49        echo "https://xdg-user:xdg-pass@example.com" >"$HOME/.config/git/credentials" &&
  50        check fill store <<-\EOF
  51        protocol=https
  52        host=example.com
  53        --
  54        protocol=https
  55        host=example.com
  56        username=home-user
  57        password=home-pass
  58        --
  59        EOF
  60'
  61
  62test_expect_success 'get: use xdg file if home file has no matches' '
  63        >"$HOME/.git-credentials" &&
  64        mkdir -p "$HOME/.config/git" &&
  65        echo "https://xdg-user:xdg-pass@example.com" >"$HOME/.config/git/credentials" &&
  66        check fill store <<-\EOF
  67        protocol=https
  68        host=example.com
  69        --
  70        protocol=https
  71        host=example.com
  72        username=xdg-user
  73        password=xdg-pass
  74        --
  75        EOF
  76'
  77
  78test_expect_success POSIXPERM,SANITY 'get: use xdg file if home file is unreadable' '
  79        echo "https://home-user:home-pass@example.com" >"$HOME/.git-credentials" &&
  80        chmod -r "$HOME/.git-credentials" &&
  81        mkdir -p "$HOME/.config/git" &&
  82        echo "https://xdg-user:xdg-pass@example.com" >"$HOME/.config/git/credentials" &&
  83        check fill store <<-\EOF
  84        protocol=https
  85        host=example.com
  86        --
  87        protocol=https
  88        host=example.com
  89        username=xdg-user
  90        password=xdg-pass
  91        --
  92        EOF
  93'
  94
  95test_expect_success 'store: if both xdg and home files exist, only store in home file' '
  96        >"$HOME/.git-credentials" &&
  97        mkdir -p "$HOME/.config/git" &&
  98        >"$HOME/.config/git/credentials" &&
  99        check approve store <<-\EOF &&
 100        protocol=https
 101        host=example.com
 102        username=store-user
 103        password=store-pass
 104        EOF
 105        echo "https://store-user:store-pass@example.com" >expected &&
 106        test_cmp expected "$HOME/.git-credentials" &&
 107        test_must_be_empty "$HOME/.config/git/credentials"
 108'
 109
 110
 111test_expect_success 'erase: erase matching credentials from both xdg and home files' '
 112        echo "https://home-user:home-pass@example.com" >"$HOME/.git-credentials" &&
 113        mkdir -p "$HOME/.config/git" &&
 114        echo "https://xdg-user:xdg-pass@example.com" >"$HOME/.config/git/credentials" &&
 115        check reject store <<-\EOF &&
 116        protocol=https
 117        host=example.com
 118        EOF
 119        test_must_be_empty "$HOME/.git-credentials" &&
 120        test_must_be_empty "$HOME/.config/git/credentials"
 121'
 122
 123test_done