summaryrefslogtreecommitdiff
path: root/test/cases/pkgbuild-check-nonfree.bats
blob: ffd8de8a91e26b2e34ba2a5c515a68eb059081c5 (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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
load ../lib/common

setup() {
	common_setup

	# Disable networking for blacklist.txt, and install a cached version instead
	cat >> "$XDG_CONFIG_HOME/libretools/libretools.conf" <<-eot
		BLACKLIST='phony://example.com'
		eot
	install -Dm644 /dev/stdin "$XDG_CACHE_HOME/libretools/blacklist.txt" <<-eot
		linux:linux-libre:nonfree blobs and firmwares
		rubygemsx:rubygemsx:repackaged
		skype
		eot
}

# Make sure these match pkgbuild-check-nonfree
declare -rig _E_OK=0
declare -rig _E_ERROR=1
declare -rig _E_LIC_UNKNOWN=2
declare -rig _E_LIC_NOGPL=4
declare -rig _E_LIC_NONFREE=8
declare -rig _E_DEP_NONFREE=16
declare -rig _E_PKG_NONFREE=32

# Make sure these match pkgbuild-summarize-nonfree (libremessages)
declare -rig EXIT_SUCCESS=0
declare -rig EXIT_FAILURE=1

# basic operation ##############################################################

@test "pkgbuild-check-nonfree displays usage text" {
	# This test seems silly, but it makes sure that it is executable,
	# syntactically correct, and loading libraries works.
	LC_ALL=C pkgbuild-check-nonfree -h >$tmpdir/stdout 2>$tmpdir/stderr || status=$?
	[[ "$(sed 1q $tmpdir/stdout)" =~ Usage:.* ]]
	empty $tmpdir/stderr
	[[ $status == $_E_OK ]]
}

@test "pkgbuild-check-nonfree errors on invalid flags" {
	pkgbuild-check-nonfree -x >$tmpdir/stdout 2>$tmpdir/stderr || status=$?
	empty $tmpdir/stdout
	not empty $tmpdir/stderr
	[[ $status == $_E_ERROR ]]
}

@test "pkgbuild-check-nonfree fails when there is no blacklist" {
	rm $XDG_CACHE_HOME/libretools/blacklist.txt

	pkgbuild-check-nonfree fixtures/pkgbuild-check-nonfree/PKGBUILD.free >$tmpdir/stdout 2>$tmpdir/stderr || status=$?
	empty $tmpdir/stdout
	not empty $tmpdir/stderr
	[[ $status == $_E_ERROR ]]
}

# PKGBUILD codes ###############################################################

# basic _E_OK
@test "pkgbuild-check-nonfree succeeds for free depends" {
	pkgbuild-check-nonfree fixtures/pkgbuild-check-nonfree/PKGBUILD.free >$tmpdir/stdout 2>$tmpdir/stderr || status=$?
	empty $tmpdir/stdout
	not empty $tmpdir/stderr
	[[ $status == $_E_OK ]]
}

# _E_DEP_LIC_UNKNOWN
@test "pkgbuild-check-nonfree warns about unknown licenses" {
	pkgbuild-check-nonfree fixtures/pkgbuild-check-nonfree/PKGBUILD.lic-unknown >$tmpdir/stdout 2>$tmpdir/stderr || status=$?
	empty $tmpdir/stdout
	not empty $tmpdir/stderr
	[[ $status == $_E_LIC_UNKNOWN ]]

	local pcn_stat=$status
	status=0

	pkgbuild-summarize-nonfree $pcn_stat >$tmpdir/stdout 2>$tmpdir/stderr || status=$?
	empty $tmpdir/stdout
	not empty $tmpdir/stderr
	[[ $status == $EXIT_SUCCESS ]]
}

# _E_DEP_LIC_NOGPL
@test "pkgbuild-check-nonfree warns about GPL-incompatible licenses" {
	pkgbuild-check-nonfree fixtures/pkgbuild-check-nonfree/PKGBUILD.lic-nogpl >$tmpdir/stdout 2>$tmpdir/stderr || status=$?
	empty $tmpdir/stdout
	not empty $tmpdir/stderr
	[[ $status == $_E_LIC_NOGPL ]]

	local pcn_stat=$status
	status=0

	pkgbuild-summarize-nonfree $pcn_stat >$tmpdir/stdout 2>$tmpdir/stderr || status=$?
	empty $tmpdir/stdout
	not empty $tmpdir/stderr
	[[ $status == $EXIT_SUCCESS ]]
}

# _E_DEP_LIC_NONFREE
@test "pkgbuild-check-nonfree fails on nonfree licenses" {
	pkgbuild-check-nonfree fixtures/pkgbuild-check-nonfree/PKGBUILD.lic-nonfree >$tmpdir/stdout 2>$tmpdir/stderr || status=$?
	empty $tmpdir/stdout
	not empty $tmpdir/stderr
	[[ $status == $_E_LIC_NONFREE ]]

	local pcn_stat=$status
	status=0

	pkgbuild-summarize-nonfree $pcn_stat >$tmpdir/stdout 2>$tmpdir/stderr || status=$?
	empty $tmpdir/stdout
	not empty $tmpdir/stderr
	[[ $status == $EXIT_FAILURE ]]
}

# _E_DEP_NONFREE
@test "pkgbuild-check-nonfree succeeds for repackaged depend" {
	pkgbuild-check-nonfree fixtures/pkgbuild-check-nonfree/PKGBUILD.dep-repackaged >$tmpdir/stdout 2>$tmpdir/stderr || status=$?
	empty $tmpdir/stdout
	not empty $tmpdir/stderr
	[[ $status == $_E_OK ]]
}
@test "pkgbuild-check-nonfree succeeds for nonfree depend with replacement" {
	pkgbuild-check-nonfree fixtures/pkgbuild-check-nonfree/PKGBUILD.dep-nonfree-replacement >$tmpdir/stdout 2>$tmpdir/stderr || status=$?
	empty $tmpdir/stdout
	not empty $tmpdir/stderr
	[[ $status == $_E_OK ]]
}
@test "pkgbuild-check-nonfree fails for nonfree depend" {
	pkgbuild-check-nonfree fixtures/pkgbuild-check-nonfree/PKGBUILD.dep-nonfree >$tmpdir/stdout 2>$tmpdir/stderr || status=$?
	empty $tmpdir/stdout
	not empty $tmpdir/stderr
	[[ $status == $_E_DEP_NONFREE ]]

	local pcn_stat=$status
	status=0

	pkgbuild-summarize-nonfree $pcn_stat >$tmpdir/stdout 2>$tmpdir/stderr || status=$?
	empty $tmpdir/stdout
	not empty $tmpdir/stderr
	[[ $status == $EXIT_FAILURE ]]
}

# _E_PKG_NONFREE
@test "pkgbuild-check-nonfree succeeds for repackaged package" {
	pkgbuild-check-nonfree fixtures/pkgbuild-check-nonfree/PKGBUILD.pkg-repackaged >$tmpdir/stdout 2>$tmpdir/stderr || status=$?
	empty $tmpdir/stdout
	not empty $tmpdir/stderr
	[[ $status == $_E_OK ]]
}
@test "pkgbuild-check-nonfree fails for package with replacement" {
	pkgbuild-check-nonfree fixtures/pkgbuild-check-nonfree/PKGBUILD.pkg-nonfree-replacement >$tmpdir/stdout 2>$tmpdir/stderr || status=$?
	empty $tmpdir/stdout
	not empty $tmpdir/stderr
	echo [[ $status == $_E_PKG_NONFREE ]]
	[[ $status == $_E_PKG_NONFREE ]]

	local pcn_stat=$status
	status=0

	pkgbuild-summarize-nonfree $pcn_stat >$tmpdir/stdout 2>$tmpdir/stderr || status=$?
	empty $tmpdir/stdout
	not empty $tmpdir/stderr
	[[ $status == $EXIT_FAILURE ]]
}
@test "pkgbuild-check-nonfree fails for nonfree package" {
	pkgbuild-check-nonfree fixtures/pkgbuild-check-nonfree/PKGBUILD.pkg-nonfree >$tmpdir/stdout 2>$tmpdir/stderr || status=$?
	empty $tmpdir/stdout
	not empty $tmpdir/stderr
	[[ $status == $_E_PKG_NONFREE ]]

	local pcn_stat=$status
	status=0

	pkgbuild-summarize-nonfree $pcn_stat >$tmpdir/stdout 2>$tmpdir/stderr || status=$?
	empty $tmpdir/stdout
	not empty $tmpdir/stderr
	[[ $status == $EXIT_FAILURE ]]
}