summaryrefslogtreecommitdiff
path: root/test/libremakepkg-test.sh
blob: 811c8ed30814bd72ae2142d83bb92726328e92d5 (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
#!/usr/bin/env roundup

describe libremakepkg

. ./test-common.sh

_setup_chrootdir

before() {
	_before libremakepkg

	mkdir -p "$XDG_CONFIG_HOME"/libretools

	echo "BLACKLIST=https://repo.parabolagnulinux.org/docs/blacklist.txt" >"$XDG_CONFIG_HOME"/libretools/libretools.conf

	echo "CHROOTDIR='${chrootdir}'" > "$XDG_CONFIG_HOME"/libretools/chroot.conf
	echo "CHROOT='default'" >> "$XDG_CONFIG_HOME"/libretools/chroot.conf
	echo "CHROOTEXTRAPKG=()" >> "$XDG_CONFIG_HOME"/libretools/chroot.conf
}

after() {
	_after_sudo
}

it_builds_a_trivial_package() {
	require network sudo || return 0
	cp libremakepkg.d/PKGBUILD-hello "$tmpdir/PKGBUILD"
	cd "$tmpdir"

	libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty
	testsudo libremakepkg -l "$roundup_test_name"

	[[ -f $(echo libretools-hello-1.0-1-any.pkg.tar.?z) ]]
}


it_disables_networking_during_build() {
	require network sudo || return 0
	cp libremakepkg.d/PKGBUILD-netbuild "$tmpdir/PKGBUILD"
	cd "$tmpdir"

	libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty
	not testsudo libremakepkg -l "$roundup_test_name"
	not [[ -f $(echo libretools-netbuild-1.0-1-any.pkg.tar.?z) ]]
	testsudo libremakepkg -l "$roundup_test_name" -N
	[[ -f $(echo libretools-netbuild-1.0-1-any.pkg.tar.?z) ]]
}

it_disables_networking_during_package() {
	require network sudo || return 0
	cp libremakepkg.d/PKGBUILD-netpackage "$tmpdir/PKGBUILD"
	cd "$tmpdir"

	libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty
	not testsudo libremakepkg -l "$roundup_test_name"
	not [[ -f $(echo libretools-netpackage-1.0-1-any.pkg.tar.?z) ]]
	testsudo libremakepkg -l "$roundup_test_name" -N
	[[ -f $(echo libretools-netpackage-1.0-1-any.pkg.tar.?z) ]]
}

it_cleans_the_chroot_before_building() {
	require network sudo || return 0
	# 1. First, we build testpkg1
	# 2. Then, we build testpkg2, which depends on testpkg1
	#    Therefore, testpkg1 will be installed after testpkg2 is built, we
	#    check for that.
	# 3. Then, we build hello, which depends on neither, so testpkg1 should
	#    be removed.

	# Also, do funny things with the output of libremakepkg to get a helpful
	# fail case.

	mkdir -p "$tmpdir"/{1,2,3}
	cp libremakepkg.d/PKGBUILD-testpkg1 "$tmpdir/1/PKGBUILD"
	cp libremakepkg.d/PKGBUILD-testpkg2 "$tmpdir/2/PKGBUILD"
	cp libremakepkg.d/PKGBUILD-hello    "$tmpdir/3/PKGBUILD"

	libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty
	cd "$tmpdir/1"
	testsudo libremakepkg -l "$roundup_test_name" &> "$tmpdir/out" || { r=$?; tail "$tmpdir/out"|cat -v; return $r; }
	cd "$tmpdir/2"
	testsudo libremakepkg -l "$roundup_test_name" &> "$tmpdir/out" || { r=$?; tail "$tmpdir/out"|cat -v; return $r; }
	testsudo librechroot -l "$roundup_test_name" run libretools-testpkg1 'first time, pass'
	cd "$tmpdir/3"
	testsudo libremakepkg -l "$roundup_test_name" &> "$tmpdir/out" || { r=$?; tail "$tmpdir/out"|cat -v; return $r; }
	not testsudo librechroot -l "$roundup_test_name" run libretools-testpkg1 'second time, fail'
}

it_handles_PKGDEST_not_existing() {
	require network sudo || return 0
	cp libremakepkg.d/PKGBUILD-hello "$tmpdir/PKGBUILD"
	cd "$tmpdir"

	libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty
	testsudo env PKGDEST="$tmpdir/dest/pkgdest" libremakepkg -l "$roundup_test_name"

	[[ -f $(echo dest/pkgdest/libretools-hello-1.0-1-any.pkg.tar.?z) ]]
}

it_displays_help_as_normal_user() {
	rm -rf "$XDG_CONFIG_HOME"
	LC_ALL=C libremakepkg -h >$tmpdir/stdout 2>$tmpdir/stderr

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

it_otherwise_fails_as_normal_user() {
	# I do this to give it a chance of passing
	cp libremakepkg.d/PKGBUILD-hello "$tmpdir/PKGBUILD"
	cd "$tmpdir"

	libremakepkg >$tmpdir/stdout 2>$tmpdir/stderr || stat=$?

	[[ $stat != 0 ]]
	empty $tmpdir/stdout
	not empty $tmpdir/stderr
}