Skip to content

Commit

Permalink
Merge pull request #1583 from kravciak/btrfs
Browse files Browse the repository at this point in the history
Btrfs quota group improvements poo#11446
  • Loading branch information
sysrich committed Aug 3, 2016
2 parents d166f4c + 4664d05 commit 3abd250
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 16 deletions.
1 change: 1 addition & 0 deletions products/opensuse/main.pm
Original file line number Diff line number Diff line change
Expand Up @@ -478,6 +478,7 @@ sub load_extra_tests() {
if (get_var("FILESYSTEM", "btrfs") eq "btrfs") {
loadtest "console/btrfs_autocompletion.pm";
if (get_var("NUMDISKS", 0) > 1) {
loadtest "console/btrfs_qgroups.pm";
loadtest "console/btrfs_send_receive.pm";
}
}
Expand Down
1 change: 1 addition & 0 deletions products/sle/main.pm
Original file line number Diff line number Diff line change
Expand Up @@ -668,6 +668,7 @@ sub load_extra_test () {
if (get_var("FILESYSTEM", "btrfs") eq "btrfs") {
loadtest "console/btrfs_autocompletion.pm";
if (get_var("NUMDISKS", 0) > 1) {
loadtest "console/btrfs_qgroups.pm";
loadtest "console/btrfs_send_receive.pm";
}
}
Expand Down
76 changes: 76 additions & 0 deletions tests/console/btrfs_qgroups.pm
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# SUSE's openQA tests
#
# Copyright © 2016 SUSE LLC
#
# Copying and distribution of this file, with or without modification,
# are permitted in any medium without royalty provided the copyright
# notice and this notice are preserved. This file is offered as-is,
# without any warranty.

use base "consoletest";
use strict;
use testapi;

my $dest = "/mnt/qg";

# poo#11446
# Creating qgroups in a hierarchy for multiple subvolumes,
# putting data into them and then running btrfsck on the hard disk
sub run() {
select_console 'root-console';

# Set up
assert_script_run "mkdir $dest";
assert_script_run "mkfs.btrfs -f /dev/vdb && mount /dev/vdb $dest && cd $dest";
assert_script_run "btrfs quota enable .";

# Create subvolumes, qgroups, assigns and limits
# 2/1
# / \
# 1/1 1/2
# / \ / | \
# a b c d(k)
assert_script_run "for c in {a..d}; do btrfs subvolume create \$c; done";
assert_script_run "for c in 1/1 1/2 2/1; do btrfs qgroup create \$c .; done";

assert_script_run "for c in a b; do btrfs qgroup assign \$c 1/1 .; done";
assert_script_run "for c in b c d; do btrfs qgroup assign \$c 1/2 .; done";
assert_script_run "for c in 1/1 1/2; do btrfs qgroup assign \$c 2/1 .; done";

# Set limits
assert_script_run "btrfs qgroup limit 50m a .";
assert_script_run "btrfs qgroup limit 100m 1/1 .";
assert_script_run "btrfs qgroup limit 500m 2/1 .";

# Fill with data
assert_script_run "for c in {1..40}; do dd if=/dev/zero bs=1M count=1 of=a/file\$c; done";
assert_script_run "for c in {1..40}; do dd if=/dev/zero bs=1M count=1 of=b/file\$c; done";
assert_script_run "for c in {1..200}; do dd if=/dev/zero bs=1M count=1 of=c/file\$c; done";
assert_script_run "for c in {1..150}; do dd if=/dev/zero bs=1M count=1 of=d/file\$c; done";

assert_script_run "btrfs subvolume snapshot d k";
assert_script_run "btrfs quota rescan -w .";
assert_script_run "rm d/file\[1-75\]";
assert_script_run "for c in {51..100}; do dd if=/dev/zero bs=1M count=1 of=k/file\$c; done";

# Show structure
type_string "sync\n";
type_string "btrfs qgroup show --mbytes -pcre .\n";

# Check limits
assert_script_run "dd if=/dev/zero bs=10M count=3 of=nofile";
foreach my $c ('a' .. 'b') {
assert_script_run "! cp nofile $c/nofile";
assert_script_run "sync && rm $c/nofile";
}
assert_script_run "cp nofile c/nofile";

assert_script_run "cd; umount $dest";
assert_script_run "btrfsck /dev/vdb";
}

sub test_flags() {
return {important => 1};
}

1;
32 changes: 16 additions & 16 deletions tests/console/btrfs_send_receive.pm
Original file line number Diff line number Diff line change
Expand Up @@ -15,24 +15,24 @@ my $src = "/root/sr";
my $dest = "/mnt/sr";

sub generate_data {
script_run "cd $src/sv";
script_run "for i in {1..100}; do dd if=/dev/urandom bs=1M count=1 of=file\$i; done";
assert_script_run "cd $src/sv";
assert_script_run "for i in {1..100}; do dd if=/dev/urandom bs=1M count=1 of=file\$i; done";
}

sub shuffle_data {
script_run "cd $src/sv";
script_run "ls | shuf -n 5 | xargs rm -v";
script_run "ls | shuf -n 20 | xargs -I {} dd if=/dev/urandom of={} bs=2M count=1";
script_run "ls | shuf -n 20 | xargs chmod -v \$((\$RANDOM % 8))\$((\$RANDOM % 8))\$((\$RANDOM % 8))";
assert_script_run "cd $src/sv";
assert_script_run "ls | shuf -n 5 | xargs rm -v";
assert_script_run "ls | shuf -n 20 | xargs -I {} dd if=/dev/urandom of={} bs=2M count=1";
assert_script_run "ls | shuf -n 20 | xargs chmod -v \$((\$RANDOM % 8))\$((\$RANDOM % 8))\$((\$RANDOM % 8))";
}

sub compare_data {
my $num = shift;

script_run "cd $src/sv";
assert_script_run "cd $src/sv";
my $sum_orig = script_output "find | LC_ALL=C sort | pax -w -d | md5sum";

script_run "cd $dest/snap$num";
assert_script_run "cd $dest/snap$num";
my $sum_snap = script_output "find | LC_ALL=C sort | pax -w -d | md5sum";

die "Data differ" unless $sum_orig eq $sum_snap;
Expand All @@ -43,22 +43,22 @@ sub run() {
select_console 'root-console';

# Set up
script_run "mkdir $src";
script_run "btrfs subvolume create $src/sv";
script_run "mkdir $dest";
script_run "mkfs.btrfs /dev/vdb && mount /dev/vdb $dest";
assert_script_run "mkdir $src";
assert_script_run "btrfs subvolume create $src/sv";
assert_script_run "mkdir $dest";
assert_script_run "mkfs.btrfs -f /dev/vdb && mount /dev/vdb $dest";

# Create full snapshot
generate_data;
script_run "btrfs subvolume snapshot -r $src/sv $src/snap1";
script_run "btrfs send $src/snap1 | btrfs receive $dest";
assert_script_run "btrfs subvolume snapshot -r $src/sv $src/snap1";
assert_script_run "btrfs send $src/snap1 | btrfs receive $dest";
compare_data 1;

# Create few incremental snapshots
for my $i (2 .. 3) {
shuffle_data;
script_run "btrfs subvolume snapshot -r $src/sv $src/snap$i";
script_run "btrfs send -p $src/snap" . ($i - 1) . " $src/snap$i | btrfs receive $dest";
assert_script_run "btrfs subvolume snapshot -r $src/sv $src/snap$i";
assert_script_run "btrfs send -p $src/snap" . ($i - 1) . " $src/snap$i | btrfs receive $dest";
compare_data $i;
}
}
Expand Down

0 comments on commit 3abd250

Please sign in to comment.