xref: /aosp_15_r20/external/ublksrv/tests/debug/ublk_docker (revision 94c4a1e103eb1715230460aab379dff275992c20)
1*94c4a1e1SFrank Piva#!/bin/bash
2*94c4a1e1SFrank Piva
3*94c4a1e1SFrank Pivaget_user_id()
4*94c4a1e1SFrank Piva{
5*94c4a1e1SFrank Piva	local user=$1
6*94c4a1e1SFrank Piva	local my_uid
7*94c4a1e1SFrank Piva	local my_gid
8*94c4a1e1SFrank Piva
9*94c4a1e1SFrank Piva	if ! my_uid=`id -u $user`; then
10*94c4a1e1SFrank Piva		adduser --shell /bin/bash  $user
11*94c4a1e1SFrank Piva		passwd -d $user
12*94c4a1e1SFrank Piva	fi
13*94c4a1e1SFrank Piva
14*94c4a1e1SFrank Piva	my_gid=`id -g $user`
15*94c4a1e1SFrank Piva	echo "$my_uid:$my_gid"
16*94c4a1e1SFrank Piva}
17*94c4a1e1SFrank Piva
18*94c4a1e1SFrank Pivaremove_container()
19*94c4a1e1SFrank Piva{
20*94c4a1e1SFrank Piva	local container=$1
21*94c4a1e1SFrank Piva
22*94c4a1e1SFrank Piva	docker stop $container
23*94c4a1e1SFrank Piva	docker rm $container
24*94c4a1e1SFrank Piva}
25*94c4a1e1SFrank Piva
26*94c4a1e1SFrank Pivaadd_container()
27*94c4a1e1SFrank Piva{
28*94c4a1e1SFrank Piva	local container=$1
29*94c4a1e1SFrank Piva	docker run --name $container --hostname=server.example.com \
30*94c4a1e1SFrank Piva		--device=/dev/ublk-control \
31*94c4a1e1SFrank Piva		--device-cgroup-rule='a *:* rmw' \
32*94c4a1e1SFrank Piva		--tmpfs /tmp --tmpfs /run --volume /sys/fs/cgroup:/sys/fs/cgroup:ro \
33*94c4a1e1SFrank Piva		--detach -i fedora:38
34*94c4a1e1SFrank Piva	docker exec -i $container dnf install -y git libtool automake autoconf g++ liburing-devel
35*94c4a1e1SFrank Piva	docker exec -i $container git config --global http.version HTTP/1.1
36*94c4a1e1SFrank Piva}
37*94c4a1e1SFrank Piva
38*94c4a1e1SFrank Pivainstall_ublk()
39*94c4a1e1SFrank Piva{
40*94c4a1e1SFrank Piva	local container=$1
41*94c4a1e1SFrank Piva
42*94c4a1e1SFrank Piva	docker exec -i $container git clone -b next https://github.com/ming1/ubdsrv.git
43*94c4a1e1SFrank Piva	docker exec -i -w /ubdsrv $container autoreconf -i
44*94c4a1e1SFrank Piva	docker exec -i -w /ubdsrv $container ./configure
45*94c4a1e1SFrank Piva	docker exec -i -w /ubdsrv $container make -j4 install
46*94c4a1e1SFrank Piva}
47*94c4a1e1SFrank Piva
48*94c4a1e1SFrank Pivatest_ublk()
49*94c4a1e1SFrank Piva{
50*94c4a1e1SFrank Piva	local container=$1
51*94c4a1e1SFrank Piva	local ugid=$2
52*94c4a1e1SFrank Piva	local ublk_script=`mktemp`
53*94c4a1e1SFrank Piva
54*94c4a1e1SFrank Piva	echo "#!/bin/bash" >> $ublk_script
55*94c4a1e1SFrank Piva	echo "ublk add -t null -n 10 --unprivileged" >> $ublk_script
56*94c4a1e1SFrank Piva	echo "ublk list" >> $ublk_script
57*94c4a1e1SFrank Piva	echo "sleep 2" >> $ublk_script
58*94c4a1e1SFrank Piva	echo "ls -l /dev/ublk[bc]10" >> $ublk_script
59*94c4a1e1SFrank Piva	echo "dd if=/dev/zero of=/dev/ublkb10 bs=1M count=64" >> $ublk_script
60*94c4a1e1SFrank Piva	echo "ublk del -n 10" >> $ublk_script
61*94c4a1e1SFrank Piva	echo "sleep 2" >> $ublk_script
62*94c4a1e1SFrank Piva	echo "ls -l /dev/ublk[bc]10" >> $ublk_script
63*94c4a1e1SFrank Piva
64*94c4a1e1SFrank Piva	chmod +x $ublk_script
65*94c4a1e1SFrank Piva	chown $ugid $ublk_script
66*94c4a1e1SFrank Piva
67*94c4a1e1SFrank Piva	docker cp -a $ublk_script $container:/test.sh
68*94c4a1e1SFrank Piva	docker exec -u $ugid -i $container bash -c "cat /test.sh"
69*94c4a1e1SFrank Piva	docker exec -u $ugid -i $container bash -c ". /test.sh"
70*94c4a1e1SFrank Piva	rm -f $ublk_script
71*94c4a1e1SFrank Piva}
72*94c4a1e1SFrank Piva
73*94c4a1e1SFrank Pivaublk_clean()
74*94c4a1e1SFrank Piva{
75*94c4a1e1SFrank Piva	local container=$1
76*94c4a1e1SFrank Piva	local this_log=$2
77*94c4a1e1SFrank Piva
78*94c4a1e1SFrank Piva	cat $this_log
79*94c4a1e1SFrank Piva	remove_container $container > /dev/null 2>&1
80*94c4a1e1SFrank Piva	rm "$this_log"
81*94c4a1e1SFrank Piva	exit -1
82*94c4a1e1SFrank Piva}
83*94c4a1e1SFrank Piva
84*94c4a1e1SFrank PivaC="ublk_docker"
85*94c4a1e1SFrank PivaUG=""
86*94c4a1e1SFrank PivaULOG=`mktemp`
87*94c4a1e1SFrank Piva
88*94c4a1e1SFrank Pivaif ! UG=`get_user_id ublk_docker`; then
89*94c4a1e1SFrank Piva		echo "no ublk_docker user for running test"
90*94c4a1e1SFrank Piva		exit -1
91*94c4a1e1SFrank Pivafi
92*94c4a1e1SFrank Piva
93*94c4a1e1SFrank Pivaecho "setup container"
94*94c4a1e1SFrank Pivaif ! add_container $C >> "$ULOG"; then
95*94c4a1e1SFrank Piva		echo "add container failed"
96*94c4a1e1SFrank Piva		ublk_clean $C "$ULOG"
97*94c4a1e1SFrank Pivafi
98*94c4a1e1SFrank Piva
99*94c4a1e1SFrank Pivaecho "install ublk from github"
100*94c4a1e1SFrank Pivaif ! install_ublk $C >> "$ULOG" 2>&1; then
101*94c4a1e1SFrank Piva		echo "install ublk failed"
102*94c4a1e1SFrank Piva		ublk_clean $C "$ULOG"
103*94c4a1e1SFrank Pivafi
104*94c4a1e1SFrank Piva
105*94c4a1e1SFrank Pivaecho "add/del ublk inside container by user ublk_docker($UG)"
106*94c4a1e1SFrank Pivaif ! test_ublk $C $UG; then
107*94c4a1e1SFrank Piva		echo "test ublk in container failed"
108*94c4a1e1SFrank Piva		ublk_clean $C "$ULOG"
109*94c4a1e1SFrank Pivafi
110*94c4a1e1SFrank Piva
111*94c4a1e1SFrank Pivaecho "remove container"
112*94c4a1e1SFrank Pivaremove_container $C >> "$ULOG"
113*94c4a1e1SFrank Pivarm "$ULOG"
114