]> git.proxmox.com Git - pve-container.git/commitdiff
Add snapshot tests
authorFabian Grünbichler <f.gruenbichler@proxmox.com>
Mon, 22 Feb 2016 12:31:29 +0000 (13:31 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Mon, 22 Feb 2016 14:59:10 +0000 (15:59 +0100)
tested so far:
-snapshot_prepare
-snapshot_commit
-snapshot_create
-snapshot_delete

50 files changed:
src/test/Makefile
src/test/run_setup_tests.pl [new file with mode: 0755]
src/test/run_snapshot_tests.pl [new file with mode: 0755]
src/test/run_tests.pl [deleted file]
src/test/snapshot-expected/commit/lxc/101.conf [new file with mode: 0644]
src/test/snapshot-expected/commit/lxc/102.conf [new file with mode: 0644]
src/test/snapshot-expected/commit/lxc/201.conf [new file with mode: 0644]
src/test/snapshot-expected/commit/lxc/202.conf [new file with mode: 0644]
src/test/snapshot-expected/commit/lxc/203.conf [new file with mode: 0644]
src/test/snapshot-expected/create/lxc/101.conf [new file with mode: 0644]
src/test/snapshot-expected/create/lxc/102.conf [new file with mode: 0644]
src/test/snapshot-expected/create/lxc/201.conf [new file with mode: 0644]
src/test/snapshot-expected/create/lxc/202.conf [new file with mode: 0644]
src/test/snapshot-expected/delete/lxc/101.conf [new file with mode: 0644]
src/test/snapshot-expected/delete/lxc/102.conf [new file with mode: 0644]
src/test/snapshot-expected/delete/lxc/103.conf [new file with mode: 0644]
src/test/snapshot-expected/delete/lxc/104.conf [new file with mode: 0644]
src/test/snapshot-expected/delete/lxc/105.conf [new file with mode: 0644]
src/test/snapshot-expected/delete/lxc/201.conf [new file with mode: 0644]
src/test/snapshot-expected/delete/lxc/202.conf [new file with mode: 0644]
src/test/snapshot-expected/prepare/lxc/101.conf [new file with mode: 0644]
src/test/snapshot-expected/prepare/lxc/102.conf [new file with mode: 0644]
src/test/snapshot-expected/prepare/lxc/200.conf [new file with mode: 0644]
src/test/snapshot-expected/prepare/lxc/201.conf [new file with mode: 0644]
src/test/snapshot-expected/prepare/lxc/202.conf [new file with mode: 0644]
src/test/snapshot-expected/prepare/lxc/300.conf [new file with mode: 0644]
src/test/snapshot-input/commit/lxc/101.conf [new file with mode: 0644]
src/test/snapshot-input/commit/lxc/102.conf [new file with mode: 0644]
src/test/snapshot-input/commit/lxc/201.conf [new file with mode: 0644]
src/test/snapshot-input/commit/lxc/202.conf [new file with mode: 0644]
src/test/snapshot-input/commit/lxc/203.conf [new file with mode: 0644]
src/test/snapshot-input/create/lxc/101.conf [new file with mode: 0644]
src/test/snapshot-input/create/lxc/102.conf [new file with mode: 0644]
src/test/snapshot-input/create/lxc/201.conf [new file with mode: 0644]
src/test/snapshot-input/create/lxc/202.conf [new file with mode: 0644]
src/test/snapshot-input/delete/lxc/101.conf [new file with mode: 0644]
src/test/snapshot-input/delete/lxc/102.conf [new file with mode: 0644]
src/test/snapshot-input/delete/lxc/103.conf [new file with mode: 0644]
src/test/snapshot-input/delete/lxc/104.conf [new file with mode: 0644]
src/test/snapshot-input/delete/lxc/105.conf [new file with mode: 0644]
src/test/snapshot-input/delete/lxc/201.conf [new file with mode: 0644]
src/test/snapshot-input/delete/lxc/202.conf [new file with mode: 0644]
src/test/snapshot-input/prepare/lxc/101.conf [new file with mode: 0644]
src/test/snapshot-input/prepare/lxc/102.conf [new file with mode: 0644]
src/test/snapshot-input/prepare/lxc/200.conf [new file with mode: 0644]
src/test/snapshot-input/prepare/lxc/201.conf [new file with mode: 0644]
src/test/snapshot-input/prepare/lxc/202.conf [new file with mode: 0644]
src/test/snapshot-input/prepare/lxc/300.conf [new file with mode: 0644]
src/test/snapshot-input/storage.cfg [new file with mode: 0644]
src/test/snapshot-test.pm [new file with mode: 0644]

index 8105b7d859a68e68bc5dbba4f3692ef408527004..f3e260defb8d33c02e58735d4b0f0c18b466950d 100644 (file)
@@ -1,11 +1,13 @@
-
-
 all:
 
 
-test:
-       ./run_tests.pl
+test: test_setup test_snapshot
+
+test_setup: run_setup_tests.pl
+       ./run_setup_tests.pl
 
+test_snapshot: run_snapshot_tests.pl
+       ./run_snapshot_tests.pl
 
 clean:
        rm -rf tmprootfs
diff --git a/src/test/run_setup_tests.pl b/src/test/run_setup_tests.pl
new file mode 100755 (executable)
index 0000000..3babf44
--- /dev/null
@@ -0,0 +1,98 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use PVE::Tools qw(run_command);
+
+use lib qw(..);
+
+use PVE::LXC;
+use PVE::LXC::Setup;
+
+sub test_file {
+    my ($exp_fn, $real_fn) = @_;
+
+    return if system("diff -u '$exp_fn' '$real_fn'") == 0;
+
+    die "files do not match\n";
+}
+
+sub run_test {
+    my ($testdir) = @_;
+
+    print "prepare $testdir\n";
+    
+    my $rootfs = "./tmprootfs";
+
+    run_command("rm -rf $rootfs");
+    run_command("cp -a $testdir $rootfs");
+    
+    my $config_fn = "$testdir/config";
+    
+    my $raw = PVE::Tools::file_get_contents($config_fn);
+
+    my $conf = PVE::LXC::parse_pct_config("/lxc/100.conf", $raw);
+
+    $conf->{'testmode'} = 1;
+    
+    my $lxc_setup = PVE::LXC::Setup->new($conf, $rootfs);
+
+    for (my $i = 0; $i < 2; $i++) {
+       # run tests twice, to make sure scripts are idempotent
+       
+       srand(0);
+       $lxc_setup->post_create_hook('$TEST$ABCDEF');
+
+       my @testfiles = qw(/etc/hostname
+                          /etc/hosts
+                          /etc/inittab
+                          /etc/network/interfaces
+                          /etc/resolv.conf
+                          /etc/passwd
+                          /etc/shadow
+                          /etc/sysconfig/network
+                          /etc/sysconfig/network-scripts/ifcfg-eth0
+                          /etc/sysconfig/network-scripts/route-eth0
+                          /etc/sysconfig/network-scripts/ifcfg-eth1
+                          /etc/sysconfig/network-scripts/route-eth1
+                          /etc/sysconfig/network-scripts/ifcfg-eth2
+                          /etc/sysconfig/network-scripts/route-eth2
+                          /etc/sysconfig/network-scripts/ifcfg-eth3
+                          /etc/sysconfig/network-scripts/route-eth3
+                          /etc/sysconfig/network/ifcfg-eth0
+                          /etc/sysconfig/network/ifroute-eth0
+                          /etc/sysconfig/network/ifcfg-eth1
+                          /etc/sysconfig/network/ifroute-eth1
+                          /etc/sysconfig/network/ifcfg-eth2
+                          /etc/sysconfig/network/ifroute-eth2
+                          /etc/sysconfig/network/ifcfg-eth3
+                          /etc/sysconfig/network/ifroute-eth3
+                          /etc/init/start-ttys.conf
+                          /etc/init/tty.conf
+                          /etc/init/power-status-changed.conf
+                          /etc/securetty
+                          /etc/crontab);
+       foreach my $fn (@testfiles) {
+           next if !-f "$testdir/$fn.exp";
+           test_file("$testdir/$fn.exp", "$rootfs/$fn");
+       }
+    }
+    
+    print "TEST $testdir => OK\n";
+}
+
+if (scalar(@ARGV)) {
+
+    foreach my $testdir (@ARGV) {
+       run_test($testdir);  
+    }
+
+} else {
+
+    foreach my $testdir (<test-*>) {#
+       next if ! -d $testdir; 
+       run_test($testdir);
+    }
+}
+
+exit(0);
diff --git a/src/test/run_snapshot_tests.pl b/src/test/run_snapshot_tests.pl
new file mode 100755 (executable)
index 0000000..6def87f
--- /dev/null
@@ -0,0 +1,10 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use TAP::Harness;
+
+my $harness = TAP::Harness->new( { "verbosity" => -2 });
+$harness->runtests( "snapshot-test.pm");
+system( "rm -rf snapshot-working/");
diff --git a/src/test/run_tests.pl b/src/test/run_tests.pl
deleted file mode 100755 (executable)
index 3babf44..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use warnings;
-use PVE::Tools qw(run_command);
-
-use lib qw(..);
-
-use PVE::LXC;
-use PVE::LXC::Setup;
-
-sub test_file {
-    my ($exp_fn, $real_fn) = @_;
-
-    return if system("diff -u '$exp_fn' '$real_fn'") == 0;
-
-    die "files do not match\n";
-}
-
-sub run_test {
-    my ($testdir) = @_;
-
-    print "prepare $testdir\n";
-    
-    my $rootfs = "./tmprootfs";
-
-    run_command("rm -rf $rootfs");
-    run_command("cp -a $testdir $rootfs");
-    
-    my $config_fn = "$testdir/config";
-    
-    my $raw = PVE::Tools::file_get_contents($config_fn);
-
-    my $conf = PVE::LXC::parse_pct_config("/lxc/100.conf", $raw);
-
-    $conf->{'testmode'} = 1;
-    
-    my $lxc_setup = PVE::LXC::Setup->new($conf, $rootfs);
-
-    for (my $i = 0; $i < 2; $i++) {
-       # run tests twice, to make sure scripts are idempotent
-       
-       srand(0);
-       $lxc_setup->post_create_hook('$TEST$ABCDEF');
-
-       my @testfiles = qw(/etc/hostname
-                          /etc/hosts
-                          /etc/inittab
-                          /etc/network/interfaces
-                          /etc/resolv.conf
-                          /etc/passwd
-                          /etc/shadow
-                          /etc/sysconfig/network
-                          /etc/sysconfig/network-scripts/ifcfg-eth0
-                          /etc/sysconfig/network-scripts/route-eth0
-                          /etc/sysconfig/network-scripts/ifcfg-eth1
-                          /etc/sysconfig/network-scripts/route-eth1
-                          /etc/sysconfig/network-scripts/ifcfg-eth2
-                          /etc/sysconfig/network-scripts/route-eth2
-                          /etc/sysconfig/network-scripts/ifcfg-eth3
-                          /etc/sysconfig/network-scripts/route-eth3
-                          /etc/sysconfig/network/ifcfg-eth0
-                          /etc/sysconfig/network/ifroute-eth0
-                          /etc/sysconfig/network/ifcfg-eth1
-                          /etc/sysconfig/network/ifroute-eth1
-                          /etc/sysconfig/network/ifcfg-eth2
-                          /etc/sysconfig/network/ifroute-eth2
-                          /etc/sysconfig/network/ifcfg-eth3
-                          /etc/sysconfig/network/ifroute-eth3
-                          /etc/init/start-ttys.conf
-                          /etc/init/tty.conf
-                          /etc/init/power-status-changed.conf
-                          /etc/securetty
-                          /etc/crontab);
-       foreach my $fn (@testfiles) {
-           next if !-f "$testdir/$fn.exp";
-           test_file("$testdir/$fn.exp", "$rootfs/$fn");
-       }
-    }
-    
-    print "TEST $testdir => OK\n";
-}
-
-if (scalar(@ARGV)) {
-
-    foreach my $testdir (@ARGV) {
-       run_test($testdir);  
-    }
-
-} else {
-
-    foreach my $testdir (<test-*>) {#
-       next if ! -d $testdir; 
-       run_test($testdir);
-    }
-}
-
-exit(0);
diff --git a/src/test/snapshot-expected/commit/lxc/101.conf b/src/test/snapshot-expected/commit/lxc/101.conf
new file mode 100644 (file)
index 0000000..ac8f306
--- /dev/null
@@ -0,0 +1,23 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+parent: test
+rootfs: somestore:somedisk
+swap: 512
+
+[test]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: somestore:somedisk
+snaptime: 1234567890
+swap: 512
diff --git a/src/test/snapshot-expected/commit/lxc/102.conf b/src/test/snapshot-expected/commit/lxc/102.conf
new file mode 100644 (file)
index 0000000..70b5bcf
--- /dev/null
@@ -0,0 +1,37 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+parent: test2
+rootfs: somestore:somedisk
+swap: 512
+
+[test]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: somestore:somedisk
+snaptime: 1234567890
+swap: 512
+
+[test2]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+parent: test
+rootfs: somestore:somedisk
+snaptime: 1234567890
+swap: 512
diff --git a/src/test/snapshot-expected/commit/lxc/201.conf b/src/test/snapshot-expected/commit/lxc/201.conf
new file mode 100644 (file)
index 0000000..f871426
--- /dev/null
@@ -0,0 +1,9 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: somestore:somedisk
+swap: 512
diff --git a/src/test/snapshot-expected/commit/lxc/202.conf b/src/test/snapshot-expected/commit/lxc/202.conf
new file mode 100644 (file)
index 0000000..e7a3843
--- /dev/null
@@ -0,0 +1,10 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+lock: snapshot
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: somestore:somedisk
+swap: 512
diff --git a/src/test/snapshot-expected/commit/lxc/203.conf b/src/test/snapshot-expected/commit/lxc/203.conf
new file mode 100644 (file)
index 0000000..96a775f
--- /dev/null
@@ -0,0 +1,23 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+lock: snapshot
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: somestore:somedisk
+swap: 512
+
+[test]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: somestore:somedisk
+snaptime: 1234567890
+swap: 512
diff --git a/src/test/snapshot-expected/create/lxc/101.conf b/src/test/snapshot-expected/create/lxc/101.conf
new file mode 100644 (file)
index 0000000..092c185
--- /dev/null
@@ -0,0 +1,23 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+parent: test
+rootfs: local:snapshotable-disk-1
+swap: 512
+
+[test]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: local:snapshotable-disk-1
+snaptime: 1234567890
+swap: 512
diff --git a/src/test/snapshot-expected/create/lxc/102.conf b/src/test/snapshot-expected/create/lxc/102.conf
new file mode 100644 (file)
index 0000000..d702822
--- /dev/null
@@ -0,0 +1,37 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+parent: test2
+rootfs: local:snapshotable-disk-1
+swap: 512
+
+[test]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: local:snapshotable-disk-1
+snaptime: 1234567890
+swap: 512
+
+[test2]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+parent: test
+rootfs: local:snapshotable-disk-1
+snaptime: 1234567890
+swap: 512
diff --git a/src/test/snapshot-expected/create/lxc/201.conf b/src/test/snapshot-expected/create/lxc/201.conf
new file mode 100644 (file)
index 0000000..da4d72c
--- /dev/null
@@ -0,0 +1,9 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: local:unsnapshotable-disk-1
+swap: 512
diff --git a/src/test/snapshot-expected/create/lxc/202.conf b/src/test/snapshot-expected/create/lxc/202.conf
new file mode 100644 (file)
index 0000000..c6d04c9
--- /dev/null
@@ -0,0 +1,9 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: local:snapshotable-disk-1
+swap: 512
diff --git a/src/test/snapshot-expected/delete/lxc/101.conf b/src/test/snapshot-expected/delete/lxc/101.conf
new file mode 100644 (file)
index 0000000..c6d04c9
--- /dev/null
@@ -0,0 +1,9 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: local:snapshotable-disk-1
+swap: 512
diff --git a/src/test/snapshot-expected/delete/lxc/102.conf b/src/test/snapshot-expected/delete/lxc/102.conf
new file mode 100644 (file)
index 0000000..092c185
--- /dev/null
@@ -0,0 +1,23 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+parent: test
+rootfs: local:snapshotable-disk-1
+swap: 512
+
+[test]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: local:snapshotable-disk-1
+snaptime: 1234567890
+swap: 512
diff --git a/src/test/snapshot-expected/delete/lxc/103.conf b/src/test/snapshot-expected/delete/lxc/103.conf
new file mode 100644 (file)
index 0000000..08bc80d
--- /dev/null
@@ -0,0 +1,23 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+parent: test2
+rootfs: local:snapshotable-disk-1
+swap: 512
+
+[test2]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: local:snapshotable-disk-1
+snaptime: 1234567890
+swap: 512
diff --git a/src/test/snapshot-expected/delete/lxc/104.conf b/src/test/snapshot-expected/delete/lxc/104.conf
new file mode 100644 (file)
index 0000000..ce35c79
--- /dev/null
@@ -0,0 +1,37 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+parent: test3
+rootfs: local:snapshotable-disk-1
+swap: 512
+
+[test]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: local:snapshotable-disk-1
+snaptime: 1234567890
+swap: 512
+
+[test3]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+parent: test
+rootfs: local:snapshotable-disk-1
+snaptime: 1234567890
+swap: 512
diff --git a/src/test/snapshot-expected/delete/lxc/105.conf b/src/test/snapshot-expected/delete/lxc/105.conf
new file mode 100644 (file)
index 0000000..c6d04c9
--- /dev/null
@@ -0,0 +1,9 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: local:snapshotable-disk-1
+swap: 512
diff --git a/src/test/snapshot-expected/delete/lxc/201.conf b/src/test/snapshot-expected/delete/lxc/201.conf
new file mode 100644 (file)
index 0000000..b010dfb
--- /dev/null
@@ -0,0 +1,24 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+parent: test
+rootfs: local:snapshotable-disk-1
+swap: 512
+
+[test]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: local:unsnapshotable-disk-1
+snapstate: delete
+snaptime: 1234567890
+swap: 512
diff --git a/src/test/snapshot-expected/delete/lxc/202.conf b/src/test/snapshot-expected/delete/lxc/202.conf
new file mode 100644 (file)
index 0000000..2b2c5e2
--- /dev/null
@@ -0,0 +1,24 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+lock: backup
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+parent: test
+rootfs: local:snapshotable-disk-1
+swap: 512
+
+[test]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: local:snapshotable-disk-1
+snaptime: 1234567890
+swap: 512
diff --git a/src/test/snapshot-expected/prepare/lxc/101.conf b/src/test/snapshot-expected/prepare/lxc/101.conf
new file mode 100644 (file)
index 0000000..08f6734
--- /dev/null
@@ -0,0 +1,24 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+lock: snapshot
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: somestore:somedisk
+swap: 512
+
+[test]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: somestore:somedisk
+snapstate: prepare
+snaptime: 1234567890
+swap: 512
diff --git a/src/test/snapshot-expected/prepare/lxc/102.conf b/src/test/snapshot-expected/prepare/lxc/102.conf
new file mode 100644 (file)
index 0000000..fa59022
--- /dev/null
@@ -0,0 +1,39 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+lock: snapshot
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+parent: test
+rootfs: somestore:somedisk
+swap: 512
+
+[test]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: somestore:somedisk
+snaptime: 1234567890
+swap: 512
+
+[test2]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+parent: test
+rootfs: somestore:somedisk
+snapstate: prepare
+snaptime: 1234567890
+swap: 512
diff --git a/src/test/snapshot-expected/prepare/lxc/200.conf b/src/test/snapshot-expected/prepare/lxc/200.conf
new file mode 100644 (file)
index 0000000..08f6734
--- /dev/null
@@ -0,0 +1,24 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+lock: snapshot
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: somestore:somedisk
+swap: 512
+
+[test]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: somestore:somedisk
+snapstate: prepare
+snaptime: 1234567890
+swap: 512
diff --git a/src/test/snapshot-expected/prepare/lxc/201.conf b/src/test/snapshot-expected/prepare/lxc/201.conf
new file mode 100644 (file)
index 0000000..ac8f306
--- /dev/null
@@ -0,0 +1,23 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+parent: test
+rootfs: somestore:somedisk
+swap: 512
+
+[test]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: somestore:somedisk
+snaptime: 1234567890
+swap: 512
diff --git a/src/test/snapshot-expected/prepare/lxc/202.conf b/src/test/snapshot-expected/prepare/lxc/202.conf
new file mode 100644 (file)
index 0000000..f871426
--- /dev/null
@@ -0,0 +1,9 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: somestore:somedisk
+swap: 512
diff --git a/src/test/snapshot-expected/prepare/lxc/300.conf b/src/test/snapshot-expected/prepare/lxc/300.conf
new file mode 100644 (file)
index 0000000..f871426
--- /dev/null
@@ -0,0 +1,9 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: somestore:somedisk
+swap: 512
diff --git a/src/test/snapshot-input/commit/lxc/101.conf b/src/test/snapshot-input/commit/lxc/101.conf
new file mode 100644 (file)
index 0000000..08f6734
--- /dev/null
@@ -0,0 +1,24 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+lock: snapshot
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: somestore:somedisk
+swap: 512
+
+[test]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: somestore:somedisk
+snapstate: prepare
+snaptime: 1234567890
+swap: 512
diff --git a/src/test/snapshot-input/commit/lxc/102.conf b/src/test/snapshot-input/commit/lxc/102.conf
new file mode 100644 (file)
index 0000000..fa59022
--- /dev/null
@@ -0,0 +1,39 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+lock: snapshot
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+parent: test
+rootfs: somestore:somedisk
+swap: 512
+
+[test]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: somestore:somedisk
+snaptime: 1234567890
+swap: 512
+
+[test2]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+parent: test
+rootfs: somestore:somedisk
+snapstate: prepare
+snaptime: 1234567890
+swap: 512
diff --git a/src/test/snapshot-input/commit/lxc/201.conf b/src/test/snapshot-input/commit/lxc/201.conf
new file mode 100644 (file)
index 0000000..f871426
--- /dev/null
@@ -0,0 +1,9 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: somestore:somedisk
+swap: 512
diff --git a/src/test/snapshot-input/commit/lxc/202.conf b/src/test/snapshot-input/commit/lxc/202.conf
new file mode 100644 (file)
index 0000000..e7a3843
--- /dev/null
@@ -0,0 +1,10 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+lock: snapshot
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: somestore:somedisk
+swap: 512
diff --git a/src/test/snapshot-input/commit/lxc/203.conf b/src/test/snapshot-input/commit/lxc/203.conf
new file mode 100644 (file)
index 0000000..96a775f
--- /dev/null
@@ -0,0 +1,23 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+lock: snapshot
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: somestore:somedisk
+swap: 512
+
+[test]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: somestore:somedisk
+snaptime: 1234567890
+swap: 512
diff --git a/src/test/snapshot-input/create/lxc/101.conf b/src/test/snapshot-input/create/lxc/101.conf
new file mode 100644 (file)
index 0000000..c6d04c9
--- /dev/null
@@ -0,0 +1,9 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: local:snapshotable-disk-1
+swap: 512
diff --git a/src/test/snapshot-input/create/lxc/102.conf b/src/test/snapshot-input/create/lxc/102.conf
new file mode 100644 (file)
index 0000000..092c185
--- /dev/null
@@ -0,0 +1,23 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+parent: test
+rootfs: local:snapshotable-disk-1
+swap: 512
+
+[test]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: local:snapshotable-disk-1
+snaptime: 1234567890
+swap: 512
diff --git a/src/test/snapshot-input/create/lxc/201.conf b/src/test/snapshot-input/create/lxc/201.conf
new file mode 100644 (file)
index 0000000..da4d72c
--- /dev/null
@@ -0,0 +1,9 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: local:unsnapshotable-disk-1
+swap: 512
diff --git a/src/test/snapshot-input/create/lxc/202.conf b/src/test/snapshot-input/create/lxc/202.conf
new file mode 100644 (file)
index 0000000..c6d04c9
--- /dev/null
@@ -0,0 +1,9 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: local:snapshotable-disk-1
+swap: 512
diff --git a/src/test/snapshot-input/delete/lxc/101.conf b/src/test/snapshot-input/delete/lxc/101.conf
new file mode 100644 (file)
index 0000000..092c185
--- /dev/null
@@ -0,0 +1,23 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+parent: test
+rootfs: local:snapshotable-disk-1
+swap: 512
+
+[test]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: local:snapshotable-disk-1
+snaptime: 1234567890
+swap: 512
diff --git a/src/test/snapshot-input/delete/lxc/102.conf b/src/test/snapshot-input/delete/lxc/102.conf
new file mode 100644 (file)
index 0000000..d702822
--- /dev/null
@@ -0,0 +1,37 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+parent: test2
+rootfs: local:snapshotable-disk-1
+swap: 512
+
+[test]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: local:snapshotable-disk-1
+snaptime: 1234567890
+swap: 512
+
+[test2]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+parent: test
+rootfs: local:snapshotable-disk-1
+snaptime: 1234567890
+swap: 512
diff --git a/src/test/snapshot-input/delete/lxc/103.conf b/src/test/snapshot-input/delete/lxc/103.conf
new file mode 100644 (file)
index 0000000..d702822
--- /dev/null
@@ -0,0 +1,37 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+parent: test2
+rootfs: local:snapshotable-disk-1
+swap: 512
+
+[test]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: local:snapshotable-disk-1
+snaptime: 1234567890
+swap: 512
+
+[test2]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+parent: test
+rootfs: local:snapshotable-disk-1
+snaptime: 1234567890
+swap: 512
diff --git a/src/test/snapshot-input/delete/lxc/104.conf b/src/test/snapshot-input/delete/lxc/104.conf
new file mode 100644 (file)
index 0000000..9b7fb78
--- /dev/null
@@ -0,0 +1,51 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+parent: test3
+rootfs: local:snapshotable-disk-1
+swap: 512
+
+[test]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: local:snapshotable-disk-1
+snaptime: 1234567890
+swap: 512
+
+[test2]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+parent: test
+rootfs: local:snapshotable-disk-1
+snaptime: 1234567890
+swap: 512
+
+[test3]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+parent: test2
+rootfs: local:snapshotable-disk-1
+snaptime: 1234567890
+swap: 512
diff --git a/src/test/snapshot-input/delete/lxc/105.conf b/src/test/snapshot-input/delete/lxc/105.conf
new file mode 100644 (file)
index 0000000..ad0bdf1
--- /dev/null
@@ -0,0 +1,23 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+parent: test
+rootfs: local:snapshotable-disk-1
+swap: 512
+
+[test]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: local:unsnapshotable-disk-1
+snaptime: 1234567890
+swap: 512
diff --git a/src/test/snapshot-input/delete/lxc/201.conf b/src/test/snapshot-input/delete/lxc/201.conf
new file mode 100644 (file)
index 0000000..ad0bdf1
--- /dev/null
@@ -0,0 +1,23 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+parent: test
+rootfs: local:snapshotable-disk-1
+swap: 512
+
+[test]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: local:unsnapshotable-disk-1
+snaptime: 1234567890
+swap: 512
diff --git a/src/test/snapshot-input/delete/lxc/202.conf b/src/test/snapshot-input/delete/lxc/202.conf
new file mode 100644 (file)
index 0000000..2b2c5e2
--- /dev/null
@@ -0,0 +1,24 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+lock: backup
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+parent: test
+rootfs: local:snapshotable-disk-1
+swap: 512
+
+[test]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: local:snapshotable-disk-1
+snaptime: 1234567890
+swap: 512
diff --git a/src/test/snapshot-input/prepare/lxc/101.conf b/src/test/snapshot-input/prepare/lxc/101.conf
new file mode 100644 (file)
index 0000000..f871426
--- /dev/null
@@ -0,0 +1,9 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: somestore:somedisk
+swap: 512
diff --git a/src/test/snapshot-input/prepare/lxc/102.conf b/src/test/snapshot-input/prepare/lxc/102.conf
new file mode 100644 (file)
index 0000000..ac8f306
--- /dev/null
@@ -0,0 +1,23 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+parent: test
+rootfs: somestore:somedisk
+swap: 512
+
+[test]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: somestore:somedisk
+snaptime: 1234567890
+swap: 512
diff --git a/src/test/snapshot-input/prepare/lxc/200.conf b/src/test/snapshot-input/prepare/lxc/200.conf
new file mode 100644 (file)
index 0000000..08f6734
--- /dev/null
@@ -0,0 +1,24 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+lock: snapshot
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: somestore:somedisk
+swap: 512
+
+[test]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: somestore:somedisk
+snapstate: prepare
+snaptime: 1234567890
+swap: 512
diff --git a/src/test/snapshot-input/prepare/lxc/201.conf b/src/test/snapshot-input/prepare/lxc/201.conf
new file mode 100644 (file)
index 0000000..ac8f306
--- /dev/null
@@ -0,0 +1,23 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+parent: test
+rootfs: somestore:somedisk
+swap: 512
+
+[test]
+#test comment
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: somestore:somedisk
+snaptime: 1234567890
+swap: 512
diff --git a/src/test/snapshot-input/prepare/lxc/202.conf b/src/test/snapshot-input/prepare/lxc/202.conf
new file mode 100644 (file)
index 0000000..f871426
--- /dev/null
@@ -0,0 +1,9 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: somestore:somedisk
+swap: 512
diff --git a/src/test/snapshot-input/prepare/lxc/300.conf b/src/test/snapshot-input/prepare/lxc/300.conf
new file mode 100644 (file)
index 0000000..f871426
--- /dev/null
@@ -0,0 +1,9 @@
+arch: amd64
+cpulimit: 1
+cpuunits: 1024
+hostname: test
+memory: 2048
+net0: bridge=vmbr0,hwaddr=12:34:56:78:90:12,ip=dhcp,ip6=dhcp,name=eth0,type=veth
+ostype: redhat
+rootfs: somestore:somedisk
+swap: 512
diff --git a/src/test/snapshot-input/storage.cfg b/src/test/snapshot-input/storage.cfg
new file mode 100644 (file)
index 0000000..e5b9703
--- /dev/null
@@ -0,0 +1,4 @@
+dir: local
+  path tmp/storage/
+  maxfiles 0
+  content vztmpl,rootdir,iso,images
diff --git a/src/test/snapshot-test.pm b/src/test/snapshot-test.pm
new file mode 100644 (file)
index 0000000..f0ce678
--- /dev/null
@@ -0,0 +1,332 @@
+package PVE::LXC;
+
+use strict;
+use warnings;
+
+use PVE::Storage;
+use PVE::Storage::Plugin;
+use PVE::LXC;
+use PVE::Tools;
+
+use Test::MockModule;
+use Test::More;
+
+my $nodename;
+my $snapshot_possible;
+my $vol_snapshot_possible = {};
+my $vol_snapshot_delete_possible = {};
+my $vol_snapshot = {};
+my $vol_snapshot_delete = {};
+my $running;
+my $freeze_possible;
+
+# Mocked methods
+
+sub mocked_volume_snapshot {
+    my ($storecfg, $volid, $snapname) = @_;
+    die "Storage config not mocked! aborting"
+       if defined($storecfg);
+    die "volid undefined"
+       if !defined($volid);
+    die "snapname undefined"
+       if !defined($snapname);
+    if ($vol_snapshot_possible->{$volid}) {
+       if (defined($vol_snapshot->{$volid})) {
+           $vol_snapshot->{$volid} .= ",$snapname";
+       } else {
+           $vol_snapshot->{$volid} = $snapname;
+       }
+       return 1;
+    } else {
+       die "volume snapshot disabled";
+    }
+}
+
+sub mocked_volume_snapshot_delete {
+    my ($storecfg, $volid, $snapname) = @_;
+    die "Storage config not mocked! aborting"
+       if defined($storecfg);
+    die "volid undefined"
+       if !defined($volid);
+    die "snapname undefined"
+       if !defined($snapname);
+    if ($vol_snapshot_delete_possible->{$volid}) {
+       if (defined($vol_snapshot_delete->{$volid})) {
+           $vol_snapshot_delete->{$volid} .= ",$snapname";
+       } else {
+           $vol_snapshot_delete->{$volid} = $snapname;
+       }
+       return 1;
+    } else {
+       die "volume snapshot delete disabled";
+    }
+}
+
+sub mocked_run_command {
+    my ($cmd, %param) = @_;
+    my $cmdstring;
+    if (my $ref = ref($cmd)) {
+       $cmdstring = PVE::Tools::cmd2string($cmd);
+       if ($cmdstring =~ m/.*\/lxc-(un)?freeze.*/) {
+           return 1 if $freeze_possible;
+           die "lxc-[un]freeze disabled";
+       }
+    }
+    die "unexpected run_command call, aborting";
+}
+
+# Testing methods
+
+sub test_file {
+    my ($exp_fn, $real_fn) = @_;
+    my $ret;
+    eval {
+       $ret = system("diff -u '$exp_fn' '$real_fn'");
+    };
+    die if $@;
+    return !$ret;
+}
+
+sub testcase_prepare {
+    my ($vmid, $snapname, $save_vmstate, $comment, $exp_err) = @_;
+    subtest "Preparing snapshot '$snapname' for vm '$vmid'" => sub {
+       plan tests => 2;
+       $@ = undef;
+       eval {
+           PVE::LXC::snapshot_prepare($vmid, $snapname, $save_vmstate, $comment);
+       };
+       is($@, $exp_err, "\$@ correct");
+       ok(test_file("snapshot-expected/prepare/lxc/$vmid.conf", "snapshot-working/prepare/lxc/$vmid.conf"), "config file correct");
+    };
+}
+
+sub testcase_commit {
+    my ($vmid, $snapname, $exp_err) = @_;
+    subtest "Committing snapshot '$snapname' for vm '$vmid'" => sub {
+       plan tests => 2;
+       $@ = undef;
+       eval {
+           PVE::LXC::snapshot_commit($vmid, $snapname);
+       };
+       is($@, $exp_err, "\$@ correct");
+       ok(test_file("snapshot-expected/commit/lxc/$vmid.conf", "snapshot-working/commit/lxc/$vmid.conf"), "config file correct");
+    }
+}
+
+sub testcase_create {
+    my ($vmid, $snapname, $save_vmstate, $comment, $exp_err, $exp_vol_snap, $exp_vol_snap_delete) = @_;
+    subtest "Creating snapshot '$snapname' for vm '$vmid'" => sub {
+       plan tests => 4;
+       $vol_snapshot = {};
+       $vol_snapshot_delete = {};
+       $exp_vol_snap = {} if !defined($exp_vol_snap);
+       $exp_vol_snap_delete = {} if !defined($exp_vol_snap_delete);
+       $@ = undef;
+       eval {
+           PVE::LXC::snapshot_create($vmid, $snapname, $save_vmstate, $comment);
+       };
+       is($@, $exp_err, "\$@ correct");
+       is_deeply($vol_snapshot, $exp_vol_snap, "created correct volume snapshots");
+       is_deeply($vol_snapshot_delete, $exp_vol_snap_delete, "deleted correct volume snapshots");
+       ok(test_file("snapshot-expected/create/lxc/$vmid.conf", "snapshot-working/create/lxc/$vmid.conf"), "config file correct");
+    };
+}
+
+sub testcase_delete {
+    my ($vmid, $snapname, $force, $exp_err, $exp_vol_snap_delete) = @_;
+    subtest "Deleting snapshot '$snapname' of vm '$vmid'" => sub {
+       plan tests => 3;
+       $vol_snapshot_delete = {};
+       $exp_vol_snap_delete = {} if !defined($exp_vol_snap_delete);
+       $@ = undef;
+       eval {
+           PVE::LXC::snapshot_delete($vmid, $snapname, $force);
+       };
+       is($@, $exp_err, "\$@ correct");
+       is_deeply($vol_snapshot_delete, $exp_vol_snap_delete, "deleted correct volume snapshots");
+       ok(test_file("snapshot-expected/delete/lxc/$vmid.conf", "snapshot-working/delete/lxc/$vmid.conf"), "config file correct");
+    };
+}
+
+# BEGIN redefine PVE::LXC methods 
+sub config_file_lock {
+    return "snapshot-working/pve-test.lock";
+}
+
+sub cfs_config_path {
+    my ($vmid, $node) = @_;
+
+    $node = $nodename if !$node;
+    return "snapshot-working/$node/lxc/$vmid.conf";
+}
+
+sub load_config {
+    my ($vmid, $node) = @_;
+
+    my $filename = cfs_config_path($vmid, $node);
+
+    my $raw = PVE::Tools::file_get_contents($filename);
+
+    my $conf = PVE::LXC::parse_pct_config($filename, $raw);
+    return $conf;
+}
+
+sub write_config {
+    my ($vmid, $conf) = @_;
+
+    my $filename = cfs_config_path($vmid);
+
+    if ($conf->{snapshots}) {
+       foreach my $snapname (keys %{$conf->{snapshots}}) {
+           $conf->{snapshots}->{$snapname}->{snaptime} = "1234567890"
+               if $conf->{snapshots}->{$snapname}->{snaptime};
+       }
+    }
+
+    my $raw = PVE::LXC::write_pct_config($filename, $conf);
+
+    PVE::Tools::file_set_contents($filename, $raw);
+}
+
+sub has_feature {
+    my ($feature, $conf, $storecfg, $snapname) = @_;
+    return $snapshot_possible;
+}
+
+sub check_running {
+    return $running;
+}
+
+sub sync_container_namespace {
+    return;
+}
+
+# END redefine PVE::LXC methods
+
+PVE::Tools::run_command("rm -rf snapshot-working");
+PVE::Tools::run_command("cp -a snapshot-input snapshot-working");
+
+$running = 1;
+$freeze_possible = 1;
+
+printf("");
+printf("Running prepare tests");
+printf("");
+$nodename = "prepare";
+
+printf("");
+printf("Setting has_feature to return true");
+printf("");
+$snapshot_possible = 1;
+
+printf("Successful snapshot_prepare with no existing snapshots");
+testcase_prepare("101", "test", 0, "test comment", '');
+
+printf("Successful snapshot_prepare with one existing snapshot");
+testcase_prepare("102", "test2", 0, "test comment", "");
+
+printf("Expected error for snapshot_prepare on locked container");
+testcase_prepare("200", "test", 0, "test comment", "VM is locked (snapshot)\n");
+
+printf("Expected error for snapshot_prepare with duplicate snapshot name");
+testcase_prepare("201", "test", 0, "test comment", "snapshot name 'test' already used\n");
+
+printf("Expected error for snapshot_prepare with save_vmstate");
+testcase_prepare("202", "test", 1, "test comment", "implement me - snapshot_save_vmstate\n");
+
+printf("");
+printf("Setting has_feature to return false");
+printf("");
+$snapshot_possible = 0;
+
+printf("Expected error for snapshot_prepare if snapshots not possible");
+testcase_prepare("300", "test", 0, "test comment", "snapshot feature is not available\n");
+
+printf("");
+printf("Running commit tests");
+printf("");
+$nodename = "commit";
+
+printf("");
+printf("Setting has_feature to return true");
+printf("");
+$snapshot_possible = 1;
+
+printf("Successful snapshot_commit with one prepared snapshot");
+testcase_commit("101", "test", "");
+
+printf("Successful snapshot_commit with one committed and one prepared snapshot");
+testcase_commit("102", "test2", "");
+
+printf("Expected error for snapshot_commit with no snapshot lock");
+testcase_commit("201", "test", "missing snapshot lock\n");
+
+printf("Expected error for snapshot_commit with invalid snapshot name");
+testcase_commit("202", "test", "snapshot 'test' does not exist\n");
+
+printf("Expected error for snapshot_commit with invalid snapshot state");
+testcase_commit("203", "test", "wrong snapshot state\n");
+
+$vol_snapshot_possible->{"local:snapshotable-disk-1"} = 1;
+$vol_snapshot_delete_possible->{"local:snapshotable-disk-1"} = 1;
+printf("");
+printf("Setting up Mocking for PVE::Storage");
+my $storage_module = new Test::MockModule('PVE::Storage');
+$storage_module->mock('config', sub { return undef; });
+$storage_module->mock('volume_snapshot', \&mocked_volume_snapshot);
+$storage_module->mock('volume_snapshot_delete', \&mocked_volume_snapshot_delete);
+printf("\tconfig(), volume_snapshot() and volume_snapshot_delete() mocked");
+
+printf("");
+printf("Setting up Mocking for PVE::Tools");
+my $tools_module = new Test::MockModule('PVE::Tools');
+$tools_module->mock('run_command' => \&mocked_run_command);
+printf("\trun_command() mocked");
+
+$nodename = "create";
+printf("");
+printf("Running create tests");
+printf("");
+
+printf("Successful snapshot_create with no existing snapshots");
+testcase_create("101", "test", 0, "test comment", "", { "local:snapshotable-disk-1" => "test" });
+
+printf("Successful snapshot_create with one existing snapshots");
+testcase_create("102", "test2", 0, "test comment", "", { "local:snapshotable-disk-1" => "test2" });
+
+printf("Expected error for snapshot_create when volume snapshot is not possible");
+testcase_create("201", "test", 0, "test comment", "volume snapshot disabled at snapshot-test.pm line 41.\n\n");
+
+printf("Expected error for snapshot_create with broken lxc-freeze");
+$freeze_possible = 0;
+testcase_create("202", "test", 0, "test comment", "lxc-[un]freeze disabled at snapshot-test.pm line 72.\n\n", undef, { "local:snapshotable-disk-1" => "test" });
+$freeze_possible = 1;
+
+$nodename = "delete";
+printf("");
+printf("Running delete tests");
+printf("");
+
+printf("Successful snapshot_delete of only existing snapshot");
+testcase_delete("101", "test", 0, "", { "local:snapshotable-disk-1" => "test" });
+
+printf("Successful snapshot_delete of leaf snapshot");
+testcase_delete("102", "test2", 0, "", { "local:snapshotable-disk-1" => "test2" });
+
+printf("Successful snapshot_delete of root snapshot");
+testcase_delete("103", "test", 0, "", { "local:snapshotable-disk-1" => "test" });
+
+printf("Successful snapshot_delete of intermediate snapshot");
+testcase_delete("104", "test2", 0, "", { "local:snapshotable-disk-1" => "test2" });
+
+printf("Successful snapshot_delete with broken volume_snapshot_delete and force=1");
+testcase_delete("105", "test", 1, "");
+
+printf("Expected error when snapshot_delete fails with broken volume_snapshot_delete and force=0");
+testcase_delete("201", "test", 0, "volume snapshot delete disabled at snapshot-test.pm line 61.\n");
+
+printf("Expected error for snapshot_delete with locked config");
+testcase_delete("202", "test", 0, "VM is locked (backup)\n");
+
+
+done_testing();