summaryrefslogtreecommitdiff
path: root/test/cases/librefetch.bats
blob: 21150bb095115d224f091fb8184e089b083085bb (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
154
155
156
157
158
159
load ../lib/common

setup() {
	common_setup

	cat >> "$XDG_CONFIG_HOME/pacman/makepkg.conf" <<-eot
		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=""
		source ${_librelib_conf_sh_sysconfdir@Q}/makepkg.d/librefetch.conf
		eot

	install -Dm644 /dev/stdin "$XDG_CONFIG_HOME/libretools/librefetch.conf" <<-eot
		MIRRORS=("phony://example.com/dir/")
		DOWNLOADER=/usr/bin/false
		eot
}

@test "librefetch displays help" {
	LC_ALL=C librefetch -h >$tmpdir/stdout 2>$tmpdir/stderr

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

@test "librefetch fails with bad flags" {
	local srcball=testpkg-1.0.tar.gz
	cp fixtures/librefetch/* "$tmpdir/"
	cd "$tmpdir"
	mv PKGBUILD{-mksource,}

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

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

# This test used to be called "librefetch cleans src-libre first", but let's
# be honest: it checks pretty much everything related to normal
# operation.
@test "librefetch runs with mksource" {
	local srcball=testpkg-1.0.tar.gz
	cp fixtures/librefetch/* "$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/workdir/srcdest/$srcball" > list-pkg.txt
	diff -u list.txt list-pkg.txt
	# Verify that the signature was created and matches
	gpg --quiet --verify "$tmpdir/workdir/srcdest/$srcball"{.sig,} 2>/dev/null
}

@test "librefetch runs with srcbuild" {
	local srcball=testpkg-1.0.tar.gz
	cp fixtures/librefetch/* "$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/workdir/srcdest/$srcball" > list-pkg.txt
	diff -u list.txt list-pkg.txt
	# Verify that the signature was created and matches
	gpg --quiet --verify "$tmpdir/workdir/srcdest/$srcball"{.sig,} 2>/dev/null
}

@test "librefetch recurses" {
	local srcball=testpkg-1.0.tar.gz
	cp fixtures/librefetch/* "$tmpdir/"
	cd "$tmpdir"
	mv PKGBUILD{-recurse,}

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

@test "librefetch doesnt recurse extra" {
	local srcball=testpkg-1.0.tar.gz
	cp fixtures/librefetch/* "$tmpdir/"
	cd "$tmpdir"
	mv PKGBUILD{-recurse,}

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

@test "librefetch handles split packages" {
	cp fixtures/librefetch/* "$tmpdir/"
	cd "$tmpdir"
	mv PKGBUILD{-split,}

	makepkg -g
}

@test "librefetch uses the specified compression" {
	cp fixtures/librefetch/* "$tmpdir/"
	cd "$tmpdir"
	local srcball

	# Both gzip and bzip2 are in 'base', so this choice of
	# compression methods doesn't add anything to our list of
	# dependencies.

	srcball=testpkg-1.0.tar.gz
	mv PKGBUILD{-mksource,}
	makepkg -g
	gzip -d <"$tmpdir/workdir/srcdest/$srcball" >/dev/null

	srcball=testpkg-bz2-1.0.tar.bz2
	mv PKGBUILD{-bz2,}
	makepkg -g
	bzip2 -d <"$tmpdir/workdir/srcdest/$srcball" >/dev/null
}