aboutsummaryrefslogtreecommitdiffstats
path: root/t/20-mount-unmount.t
blob: 02ca336e5eab382b88bee129268dcc3f5ece3bc0 (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
use strict;
use lib 't';
use helper;
use Test::More;
plan skip_all => "You need to be root to run this test" if $> != 0;
plan skip_all => "The scsi_debug kernel module is needed to run this test" if !can_create_fake_media();

use_ok('Hal::Cdroms');

my $fake_device = create_fake_media();

my $cdroms = Hal::Cdroms->new;

my @udisks_paths = grep { $_ eq "/org/freedesktop/UDisks2/block_devices/$fake_device" } $cdroms->list;
ok(@udisks_paths == 1, 'device is listed');

# If a volume manager is running, the device may get auto-mounted.
# Wait to see if this happens, and if so, unmount it.
sleep(2);
my $mount_point = find_mount_point($fake_device);
if ($mount_point) {
    ok($cdroms->get_mount_point($udisks_paths[0]) eq $mount_point, 'get_mount_point returns correct path');
    ok($cdroms->unmount($udisks_paths[0]), 'unmount returns success');
    $mount_point = find_mount_point($fake_device);
    ok(!$mount_point, 'unmount works');
}
ok(!$cdroms->get_mount_point($udisks_paths[0]), 'get_mount_point returns no path');

# Now test we can mount it.
my $udisks_mount_point = $cdroms->mount($udisks_paths[0]);
$mount_point = find_mount_point($fake_device);
ok($mount_point, 'mount works');
ok($udisks_mount_point eq $mount_point, 'mount returns correct path');
ok($cdroms->get_mount_point($udisks_paths[0]) eq $mount_point, 'get_mount_point returns correct path');

ok(!$cdroms->mount($udisks_paths[0]), 'repeated mount fails');

# And that we can unmount it.
ok($cdroms->unmount($udisks_paths[0]), 'unmount returns success');
$mount_point = find_mount_point($fake_device);
ok(!$mount_point, 'unmount works');
ok(!$cdroms->get_mount_point($udisks_paths[0]), 'get_mount_point returns no path');

ok(!$cdroms->unmount($udisks_paths[0]), 'repeated unmount fails');

ok(-e "/dev/$fake_device", 'device has not been ejected');

done_testing();

END {
    remove_fake_media() if $> == 0;
}