summaryrefslogtreecommitdiff
path: root/test/librefetch-test.sh
blob: f3864f1f601a3a62ae96b5f95d14a2a7f72d8633 (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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#!/usr/bin/env roundup

describe librefetch
. ./test-common.sh

KEYSERVER=hkp://pool.sks-keyservers.net
GPG="gpg --quiet --batch --no-tty --no-permission-warning --keyserver ${KEYSERVER}"

common_before() {
	mkdir -p "$XDG_CONFIG_HOME"/{pacman,libretools} "$tmpdir/srcdest"

	cat <<EOF > "$XDG_CONFIG_HOME/pacman/makepkg.conf"
DLAGENTS=('ftp::/usr/bin/curl -fC - --ftp-pasv --retry 3 --retry-delay 3 -o %o %u'
          'http::/usr/bin/curl -fLC - --retry 3 --retry-delay 3 -o %o %u'
          'https::/usr/bin/curl -fLC - --retry 3 --retry-delay 3 -o %o %u'
          'rsync::/usr/bin/rsync --no-motd -z %u %o'
          'scp::/usr/bin/scp -C %u %o')
BUILDDIR=""
SRCDEST=$tmpdir/srcdest
source ${_librelib_conf_sh_sysconfdir}/makepkg.d/librefetch.conf
EOF
	sed -i 's,/usr/bin/librefetch,$(which librefetch),' \
	    "${_librelib_conf_sh_sysconfdir}/makepkg.d/librefetch.conf"

	export MAKEPKG_CONF="$XDG_CONFIG_HOME/pacman/makepkg.conf"

	printf '%s\n' \
		'MIRRORS=("phony://example.com/dir/")' \
		'DOWNLOADER=/usr/bin/false' \
		> "$XDG_CONFIG_HOME/libretools/librefetch.conf"

	printf '%s\n' \
	       'Key-Type: RSA' \
	       'Key-Length: 1024' \
	       'Key-Usage: sign' \
	       'Name-Real: Temporary LibreTools testsuite key' \
	       'Name-Email: libretools-test@localhost' \
	       'Expire-Date: 0' \
	       '%no-protection' \
	       '%commit' \
	    | $GPG --gen-key 2>/dev/null
}

it_displays_help() {
	LC_ALL=C librefetch -h >$tmpdir/stdout 2>$tmpdir/stderr

	[[ "$(sed 1q $tmpdir/stdout)" =~ Usage:.* ]]
	empty $tmpdir/stderr
}

it_fails_with_bad_flags() {
	local srcball=testpkg-1.0.tar.gz
	cp librefetch.d/* "$tmpdir/"
	cd "$tmpdir"
	mv PKGBUILD{-mksource,}

	librefetch --bogus-flag libre://"$srcball" >$tmpdir/stdout 2>$tmpdir/stderr || stat=$?

	[[ $stat != 0 ]]
	empty $tmpdir/stdout
	not empty $tmpdir/stderr
	not test -e $tmpdir/srcdest/$srcball
}

# This test used to be called "it_cleans_src_libre_first", but let's
# be honest: it checks pretty much everything related to normal
# operation.
it_runs_with_mksource() {
	local srcball=testpkg-1.0.tar.gz
	cp librefetch.d/* "$tmpdir/"
	cd "$tmpdir"
	mv PKGBUILD{-mksource,}

	# Create garbage, to verifiy that it cleans src-libre first
	mkdir -p src-libre/foo
	touch src-libre/foo/file

	# Run librefetch
	makepkg -g >& log.txt

	# Verify that no temporary files were left around
	not test -e librefetch.*

	# Verify that there were no warnings about missing backup=()
	# files
	not grep -F etc/testpkg.conf log.txt

	# Verify:
	# - The srcball was created...
	# - ... and is in the correct directory
	# - The srcball does not contain the garbage created earlier
	# - The files in the srcball are in the correct order (if the
	#   order isn't ensured, then this would only sometimes fail,
	#   unfortunately).
	bsdtar tf "$tmpdir/srcdest/$srcball" > list-pkg.txt
	diff -u list.txt list-pkg.txt
	# Verify that the signature was created and matches
	gpg --quiet --verify "$tmpdir/srcdest/$srcball"{.sig,} 2>/dev/null
}

it_runs_with_srcbuild() {
	local srcball=testpkg-1.0.tar.gz
	cp librefetch.d/* "$tmpdir/"
	cd "$tmpdir"
	mv PKGBUILD{-srcbuild,}
	mv SRCBUILD{-srcbuild,}

	# Create garbage, to verifiy that it cleans src-libre first
	mkdir -p src-libre/foo
	touch src-libre/foo/file

	# Run librefetch
	makepkg -g

	# Verify that no temporary files were left around
	not test -e librefetch.*

	# Verify:
	# - The srcball was created...
	# - ... and is in the correct directory
	# - The srcball does not contain the garbage created earlier
	# - The files in the srcball are in the correct order (if the
	#   order isn't ensured, then this would only sometimes fail,
	#   unfortunately).
	bsdtar tf "$tmpdir/srcdest/$srcball" > list-pkg.txt
	diff -u list.txt list-pkg.txt
	# Verify that the signature was created and matches
	gpg --quiet --verify "$tmpdir/srcdest/$srcball"{.sig,} 2>/dev/null
}

it_recurses() {
	local srcball=testpkg-1.0.tar.gz
	cp librefetch.d/* "$tmpdir/"
	cd "$tmpdir"
	mv PKGBUILD{-recurse,}

	makepkg -g
	bsdtar tf "$tmpdir/srcdest/$srcball" > list-pkg.txt
	diff -u list.txt list-pkg.txt
	gpg --quiet --verify "$tmpdir/srcdest/$srcball"{.sig,} 2>/dev/null
}

it_doesnt_recurse_extra() {
	local srcball=testpkg-1.0.tar.gz
	cp librefetch.d/* "$tmpdir/"
	cd "$tmpdir"
	mv PKGBUILD{-recurse,}

	:> "$tmpdir/srcdest/$srcball"
	makepkg -g
	empty "$tmpdir/srcdest/$srcball"
	gpg --quiet --verify "$tmpdir/srcdest/$srcball"{.sig,} 2>/dev/null
}