xref: /aosp_15_r20/external/toybox/tests/losetup.test (revision cf5a6c84e2b8763fc1a7db14496fd4742913b199)
1*cf5a6c84SAndroid Build Coastguard Worker#!/bin/bash
2*cf5a6c84SAndroid Build Coastguard Worker
3*cf5a6c84SAndroid Build Coastguard Worker[ -f testing.sh ] && . testing.sh
4*cf5a6c84SAndroid Build Coastguard Worker
5*cf5a6c84SAndroid Build Coastguard Workerif [ "$(id -u)" -ne 0 ]; then
6*cf5a6c84SAndroid Build Coastguard Worker  echo "$SHOWSKIP: losetup (not root)"
7*cf5a6c84SAndroid Build Coastguard Worker  return 2>/dev/null
8*cf5a6c84SAndroid Build Coastguard Worker  exit
9*cf5a6c84SAndroid Build Coastguard Workerfi
10*cf5a6c84SAndroid Build Coastguard Worker
11*cf5a6c84SAndroid Build Coastguard Workerif [ "$(losetup -a | wc -l)" -ne 0 ]; then
12*cf5a6c84SAndroid Build Coastguard Worker  echo "$SHOWSKIP: losetup (devices already in use)"
13*cf5a6c84SAndroid Build Coastguard Worker  return 2>/dev/null
14*cf5a6c84SAndroid Build Coastguard Worker  exit
15*cf5a6c84SAndroid Build Coastguard Workerfi
16*cf5a6c84SAndroid Build Coastguard Worker
17*cf5a6c84SAndroid Build Coastguard Worker# Android's loopback devices are only in /dev/block/loop*.
18*cf5a6c84SAndroid Build Coastguard Worker# Debian has symlinks like /dev/block/7:0 back to ../loop*.
19*cf5a6c84SAndroid Build Coastguard Workerif [ -b /dev/block/sda ]; then
20*cf5a6c84SAndroid Build Coastguard Worker  DIR="/dev/block" # Presumably Android.
21*cf5a6c84SAndroid Build Coastguard Workerelse
22*cf5a6c84SAndroid Build Coastguard Worker  DIR="/dev"
23*cf5a6c84SAndroid Build Coastguard Workerfi
24*cf5a6c84SAndroid Build Coastguard Worker
25*cf5a6c84SAndroid Build Coastguard Worker#testing "name" "command" "result" "infile" "stdin"
26*cf5a6c84SAndroid Build Coastguard Worker
27*cf5a6c84SAndroid Build Coastguard Workertruncate -s 1M blah.img &&
28*cf5a6c84SAndroid Build Coastguard WorkerFILE="$(readlink -f blah.img)"
29*cf5a6c84SAndroid Build Coastguard WorkerDEV="$(stat --format %d blah.img)"
30*cf5a6c84SAndroid Build Coastguard WorkerNODE="$(stat --format %i blah.img)"
31*cf5a6c84SAndroid Build Coastguard Worker
32*cf5a6c84SAndroid Build Coastguard Worker# TODO: assumes there are no loopback devices!
33*cf5a6c84SAndroid Build Coastguard Workertestcmd "-f" "-f" "$DIR/loop0\n" "" ""
34*cf5a6c84SAndroid Build Coastguard Workertestcmd "-f blah.img" "-f blah.img" "" "" ""
35*cf5a6c84SAndroid Build Coastguard Workertestcmd "-f --show" "-f --show blah.img" "$DIR/loop1\n" "" ""
36*cf5a6c84SAndroid Build Coastguard Workertestcmd "-a" "-a | sort" \
37*cf5a6c84SAndroid Build Coastguard Worker  "$DIR/loop0: [$DEV]:$NODE ($FILE)\n$DIR/loop1: [$DEV]:$NODE ($FILE)\n" "" ""
38*cf5a6c84SAndroid Build Coastguard Workertestcmd "-d $DIR/loop0" "-d $DIR/loop0 && losetup -a" \
39*cf5a6c84SAndroid Build Coastguard Worker  "$DIR/loop1: [$DEV]:$NODE ($FILE)\n" "" ""
40*cf5a6c84SAndroid Build Coastguard Workertestcmd "-D" "-D && losetup -a" "" "" ""
41*cf5a6c84SAndroid Build Coastguard Worker
42*cf5a6c84SAndroid Build Coastguard Workerrm blah.img
43