diff --git a/Makefile.am b/Makefile.am
index d024e8a07a122294ecfc7076abf573f0821b882f..0b0bfe71534d9e7f1dd45f6ed381572f2c52167c 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -106,6 +106,7 @@ DIRS = \
 	test/data \
 	test/data/ovfdata \
 	test/data/ovfdata/other \
+	test/py \
 	tools
 
 ALL_APIDOC_HS_DIRS = \
@@ -814,9 +815,9 @@ EXTRA_DIST = \
 	doc/examples/gnt-debug/README \
 	doc/examples/gnt-debug/delay0.json \
 	doc/examples/gnt-debug/delay50.json \
-	test/lockperf.py \
-	test/testutils.py \
-	test/mocks.py \
+	test/py/lockperf.py \
+	test/py/testutils.py \
+	test/py/mocks.py \
 	$(dist_TESTS) \
 	$(TEST_FILES) \
 	man/footer.rst \
@@ -956,98 +957,98 @@ TEST_FILES = \
 	test/data/vgreduce-removemissing-2.02.66-ok.txt \
 	test/data/vgs-missing-pvs-2.02.02.txt \
 	test/data/vgs-missing-pvs-2.02.66.txt \
-	test/ganeti-cli.test \
-	test/gnt-cli.test \
-	test/import-export_unittest-helper
+	test/py/ganeti-cli.test \
+	test/py/gnt-cli.test \
+	test/py/import-export_unittest-helper
 
 python_tests = \
 	doc/examples/rapi_testutils.py \
-	test/cfgupgrade_unittest.py \
-	test/docs_unittest.py \
-	test/ganeti.asyncnotifier_unittest.py \
-	test/ganeti.backend_unittest-runasroot.py \
-	test/ganeti.backend_unittest.py \
-	test/ganeti.bdev_unittest.py \
-	test/ganeti.cli_unittest.py \
-	test/ganeti.client.gnt_cluster_unittest.py \
-	test/ganeti.client.gnt_instance_unittest.py \
-	test/ganeti.client.gnt_job_unittest.py \
-	test/ganeti.cmdlib_unittest.py \
-	test/ganeti.compat_unittest.py \
-	test/ganeti.confd.client_unittest.py \
-	test/ganeti.config_unittest.py \
-	test/ganeti.constants_unittest.py \
-	test/ganeti.daemon_unittest.py \
-	test/ganeti.errors_unittest.py \
-	test/ganeti.hooks_unittest.py \
-	test/ganeti.ht_unittest.py \
-	test/ganeti.http_unittest.py \
-	test/ganeti.hypervisor.hv_chroot_unittest.py \
-	test/ganeti.hypervisor.hv_fake_unittest.py \
-	test/ganeti.hypervisor.hv_kvm_unittest.py \
-	test/ganeti.hypervisor.hv_lxc_unittest.py \
-	test/ganeti.hypervisor.hv_xen_unittest.py \
-	test/ganeti.hypervisor_unittest.py \
-	test/ganeti.impexpd_unittest.py \
-	test/ganeti.jqueue_unittest.py \
-	test/ganeti.jstore_unittest.py \
-	test/ganeti.locking_unittest.py \
-	test/ganeti.luxi_unittest.py \
-	test/ganeti.masterd.iallocator_unittest.py \
-	test/ganeti.masterd.instance_unittest.py \
-	test/ganeti.mcpu_unittest.py \
-	test/ganeti.netutils_unittest.py \
-	test/ganeti.objects_unittest.py \
-	test/ganeti.objectutils_unittest.py \
-	test/ganeti.opcodes_unittest.py \
-	test/ganeti.ovf_unittest.py \
-	test/ganeti.qlang_unittest.py \
-	test/ganeti.query_unittest.py \
-	test/ganeti.rapi.baserlib_unittest.py \
-	test/ganeti.rapi.client_unittest.py \
-	test/ganeti.rapi.resources_unittest.py \
-	test/ganeti.rapi.rlib2_unittest.py \
-	test/ganeti.rapi.testutils_unittest.py \
-	test/ganeti.rpc_unittest.py \
-	test/ganeti.runtime_unittest.py \
-	test/ganeti.serializer_unittest.py \
-	test/ganeti.server.rapi_unittest.py \
-	test/ganeti.ssconf_unittest.py \
-	test/ganeti.ssh_unittest.py \
-	test/ganeti.storage_unittest.py \
-	test/ganeti.tools.ensure_dirs_unittest.py \
-	test/ganeti.tools.node_daemon_setup_unittest.py \
-	test/ganeti.tools.prepare_node_join_unittest.py \
-	test/ganeti.uidpool_unittest.py \
-	test/ganeti.utils.algo_unittest.py \
-	test/ganeti.utils.filelock_unittest.py \
-	test/ganeti.utils.hash_unittest.py \
-	test/ganeti.utils.io_unittest-runasroot.py \
-	test/ganeti.utils.io_unittest.py \
-	test/ganeti.utils.log_unittest.py \
-	test/ganeti.utils.mlock_unittest.py \
-	test/ganeti.utils.nodesetup_unittest.py \
-	test/ganeti.utils.process_unittest.py \
-	test/ganeti.utils.retry_unittest.py \
-	test/ganeti.utils.text_unittest.py \
-	test/ganeti.utils.wrapper_unittest.py \
-	test/ganeti.utils.x509_unittest.py \
-	test/ganeti.utils_unittest.py \
-	test/ganeti.vcluster_unittest.py \
-	test/ganeti.workerpool_unittest.py \
-	test/pycurl_reset_unittest.py \
-	test/qa.qa_config_unittest.py \
-	test/tempfile_fork_unittest.py
+	test/py/cfgupgrade_unittest.py \
+	test/py/docs_unittest.py \
+	test/py/ganeti.asyncnotifier_unittest.py \
+	test/py/ganeti.backend_unittest-runasroot.py \
+	test/py/ganeti.backend_unittest.py \
+	test/py/ganeti.bdev_unittest.py \
+	test/py/ganeti.cli_unittest.py \
+	test/py/ganeti.client.gnt_cluster_unittest.py \
+	test/py/ganeti.client.gnt_instance_unittest.py \
+	test/py/ganeti.client.gnt_job_unittest.py \
+	test/py/ganeti.cmdlib_unittest.py \
+	test/py/ganeti.compat_unittest.py \
+	test/py/ganeti.confd.client_unittest.py \
+	test/py/ganeti.config_unittest.py \
+	test/py/ganeti.constants_unittest.py \
+	test/py/ganeti.daemon_unittest.py \
+	test/py/ganeti.errors_unittest.py \
+	test/py/ganeti.hooks_unittest.py \
+	test/py/ganeti.ht_unittest.py \
+	test/py/ganeti.http_unittest.py \
+	test/py/ganeti.hypervisor.hv_chroot_unittest.py \
+	test/py/ganeti.hypervisor.hv_fake_unittest.py \
+	test/py/ganeti.hypervisor.hv_kvm_unittest.py \
+	test/py/ganeti.hypervisor.hv_lxc_unittest.py \
+	test/py/ganeti.hypervisor.hv_xen_unittest.py \
+	test/py/ganeti.hypervisor_unittest.py \
+	test/py/ganeti.impexpd_unittest.py \
+	test/py/ganeti.jqueue_unittest.py \
+	test/py/ganeti.jstore_unittest.py \
+	test/py/ganeti.locking_unittest.py \
+	test/py/ganeti.luxi_unittest.py \
+	test/py/ganeti.masterd.iallocator_unittest.py \
+	test/py/ganeti.masterd.instance_unittest.py \
+	test/py/ganeti.mcpu_unittest.py \
+	test/py/ganeti.netutils_unittest.py \
+	test/py/ganeti.objects_unittest.py \
+	test/py/ganeti.objectutils_unittest.py \
+	test/py/ganeti.opcodes_unittest.py \
+	test/py/ganeti.ovf_unittest.py \
+	test/py/ganeti.qlang_unittest.py \
+	test/py/ganeti.query_unittest.py \
+	test/py/ganeti.rapi.baserlib_unittest.py \
+	test/py/ganeti.rapi.client_unittest.py \
+	test/py/ganeti.rapi.resources_unittest.py \
+	test/py/ganeti.rapi.rlib2_unittest.py \
+	test/py/ganeti.rapi.testutils_unittest.py \
+	test/py/ganeti.rpc_unittest.py \
+	test/py/ganeti.runtime_unittest.py \
+	test/py/ganeti.serializer_unittest.py \
+	test/py/ganeti.server.rapi_unittest.py \
+	test/py/ganeti.ssconf_unittest.py \
+	test/py/ganeti.ssh_unittest.py \
+	test/py/ganeti.storage_unittest.py \
+	test/py/ganeti.tools.ensure_dirs_unittest.py \
+	test/py/ganeti.tools.node_daemon_setup_unittest.py \
+	test/py/ganeti.tools.prepare_node_join_unittest.py \
+	test/py/ganeti.uidpool_unittest.py \
+	test/py/ganeti.utils.algo_unittest.py \
+	test/py/ganeti.utils.filelock_unittest.py \
+	test/py/ganeti.utils.hash_unittest.py \
+	test/py/ganeti.utils.io_unittest-runasroot.py \
+	test/py/ganeti.utils.io_unittest.py \
+	test/py/ganeti.utils.log_unittest.py \
+	test/py/ganeti.utils.mlock_unittest.py \
+	test/py/ganeti.utils.nodesetup_unittest.py \
+	test/py/ganeti.utils.process_unittest.py \
+	test/py/ganeti.utils.retry_unittest.py \
+	test/py/ganeti.utils.text_unittest.py \
+	test/py/ganeti.utils.wrapper_unittest.py \
+	test/py/ganeti.utils.x509_unittest.py \
+	test/py/ganeti.utils_unittest.py \
+	test/py/ganeti.vcluster_unittest.py \
+	test/py/ganeti.workerpool_unittest.py \
+	test/py/pycurl_reset_unittest.py \
+	test/py/qa.qa_config_unittest.py \
+	test/py/tempfile_fork_unittest.py
 
 haskell_tests = htest/test
 
 dist_TESTS = \
-	test/check-cert-expired_unittest.bash \
-	test/daemon-util_unittest.bash \
-	test/ganeti-cleaner_unittest.bash \
-	test/import-export_unittest.bash \
-	test/cli-test.bash \
-	test/bash_completion.bash \
+	test/py/check-cert-expired_unittest.bash \
+	test/py/daemon-util_unittest.bash \
+	test/py/ganeti-cleaner_unittest.bash \
+	test/py/import-export_unittest.bash \
+	test/py/cli-test.bash \
+	test/py/bash_completion.bash \
 	$(python_tests)
 
 nodist_TESTS =
@@ -1099,12 +1100,12 @@ all_python_code = \
 
 srclink_files = \
 	man/footer.rst \
-	test/check-cert-expired_unittest.bash \
-	test/daemon-util_unittest.bash \
-	test/ganeti-cleaner_unittest.bash \
-	test/import-export_unittest.bash \
-	test/cli-test.bash \
-	test/bash_completion.bash \
+	test/py/check-cert-expired_unittest.bash \
+	test/py/daemon-util_unittest.bash \
+	test/py/ganeti-cleaner_unittest.bash \
+	test/py/import-export_unittest.bash \
+	test/py/cli-test.bash \
+	test/py/bash_completion.bash \
 	htest/offline-test.sh \
 	htest/cli-tests-defs.sh \
 	$(all_python_code) \
@@ -1145,11 +1146,11 @@ pep8_python_code = \
 	$(PYTHON_BOOTSTRAP) \
 	qa
 
-test/daemon-util_unittest.bash: daemons/daemon-util
+test/py/daemon-util_unittest.bash: daemons/daemon-util
 
-test/ganeti-cleaner_unittest.bash: daemons/ganeti-cleaner
+test/py/ganeti-cleaner_unittest.bash: daemons/ganeti-cleaner
 
-test/bash_completion.bash: doc/examples/bash_completion-debug
+test/py/bash_completion.bash: doc/examples/bash_completion-debug
 
 tools/kvm-ifup: tools/kvm-ifup.in $(REPLACE_VARS_SED)
 	sed -f $(REPLACE_VARS_SED) < $< > $@
diff --git a/autotools/gen-coverage b/autotools/gen-coverage
index 38bdd38b8d987d78f686bd749c4b8c03cc8923b6..d16e66bb9ff140bfc4206e5806161709e4439caf 100755
--- a/autotools/gen-coverage
+++ b/autotools/gen-coverage
@@ -1,7 +1,7 @@
 #!/bin/bash
 #
 
-# Copyright (C) 2010, 2011 Google Inc.
+# Copyright (C) 2010, 2011, 2012 Google Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -30,7 +30,7 @@ set -u
 
 reportargs=(
   '--include=*'
-  '--omit=test/*'
+  '--omit=test/py/*'
   )
 
 $COVERAGE erase
diff --git a/doc/devnotes.rst b/doc/devnotes.rst
index 674442580c4f323b6de19f3b73f5e2ae1e9e3da5..77112dd942d503d12e69aab6a2492d86778f5b8f 100644
--- a/doc/devnotes.rst
+++ b/doc/devnotes.rst
@@ -176,7 +176,7 @@ so for shell-tests (but these are faster, so it shouldn't be needed).
 For Python tests::
 
   $ export PYTHONPATH=$PWD
-  $ python ./test/ganeti.%mytest%
+  $ python ./test/py/ganeti.%mytest%
 
 For Haskell tests::
 
diff --git a/test/bash_completion.bash b/test/py/bash_completion.bash
similarity index 100%
rename from test/bash_completion.bash
rename to test/py/bash_completion.bash
diff --git a/test/cfgupgrade_unittest.py b/test/py/cfgupgrade_unittest.py
similarity index 100%
rename from test/cfgupgrade_unittest.py
rename to test/py/cfgupgrade_unittest.py
diff --git a/test/check-cert-expired_unittest.bash b/test/py/check-cert-expired_unittest.bash
similarity index 94%
rename from test/check-cert-expired_unittest.bash
rename to test/py/check-cert-expired_unittest.bash
index ab4f4536f1ce9af421cc160b2f462bd7a3696099..fbdba38c0344c2e039b91ae580675ce99d11ae4c 100755
--- a/test/check-cert-expired_unittest.bash
+++ b/test/py/check-cert-expired_unittest.bash
@@ -1,7 +1,7 @@
 #!/bin/bash
 #
 
-# Copyright (C) 2010 Google Inc.
+# Copyright (C) 2010, 2012 Google Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -32,7 +32,7 @@ err() {
 }
 
 impexpd_helper() {
-  $PYTHON "${TOP_SRCDIR:-.}/test/import-export_unittest-helper" "$@"
+  $PYTHON "${TOP_SRCDIR:-.}/test/py/import-export_unittest-helper" "$@"
 }
 
 $CCE 2>/dev/null && err 'Accepted empty argument list'
diff --git a/test/cli-test.bash b/test/py/cli-test.bash
similarity index 75%
rename from test/cli-test.bash
rename to test/py/cli-test.bash
index f768a5abda1f64cdf5b1055730c95f65f6668582..aea5eddbd7a09375443a1020cc7b529413fdf348 100755
--- a/test/cli-test.bash
+++ b/test/py/cli-test.bash
@@ -4,5 +4,5 @@ export SCRIPTS=${TOP_BUILDDIR:-.}/scripts
 export DAEMONS=${TOP_BUILDDIR:-.}/daemons
 
 shelltest $SHELLTESTARGS \
-  ${TOP_SRCDIR:-.}/test/{gnt,ganeti}-*.test \
+  ${TOP_SRCDIR:-.}/test/py/{gnt,ganeti}-*.test \
   -- --hide-successes
diff --git a/test/daemon-util_unittest.bash b/test/py/daemon-util_unittest.bash
similarity index 100%
rename from test/daemon-util_unittest.bash
rename to test/py/daemon-util_unittest.bash
diff --git a/test/docs_unittest.py b/test/py/docs_unittest.py
similarity index 100%
rename from test/docs_unittest.py
rename to test/py/docs_unittest.py
diff --git a/test/ganeti-cleaner_unittest.bash b/test/py/ganeti-cleaner_unittest.bash
similarity index 98%
rename from test/ganeti-cleaner_unittest.bash
rename to test/py/ganeti-cleaner_unittest.bash
index 74eb9965b30ebac567f378f275b110edb1d30a09..bf57b762c1a7a4e1e397ed8d0d550f0de73cbfc7 100755
--- a/test/ganeti-cleaner_unittest.bash
+++ b/test/py/ganeti-cleaner_unittest.bash
@@ -39,7 +39,7 @@ upto() {
 gencert() {
   local path=$1 validity=$2
   VALIDITY=$validity $PYTHON \
-    ${TOP_SRCDIR:-.}/test/import-export_unittest-helper \
+    ${TOP_SRCDIR:-.}/test/py/import-export_unittest-helper \
     $path gencert
 }
 
diff --git a/test/ganeti-cli.test b/test/py/ganeti-cli.test
similarity index 100%
rename from test/ganeti-cli.test
rename to test/py/ganeti-cli.test
diff --git a/test/ganeti.asyncnotifier_unittest.py b/test/py/ganeti.asyncnotifier_unittest.py
similarity index 100%
rename from test/ganeti.asyncnotifier_unittest.py
rename to test/py/ganeti.asyncnotifier_unittest.py
diff --git a/test/ganeti.backend_unittest-runasroot.py b/test/py/ganeti.backend_unittest-runasroot.py
similarity index 100%
rename from test/ganeti.backend_unittest-runasroot.py
rename to test/py/ganeti.backend_unittest-runasroot.py
diff --git a/test/ganeti.backend_unittest.py b/test/py/ganeti.backend_unittest.py
similarity index 100%
rename from test/ganeti.backend_unittest.py
rename to test/py/ganeti.backend_unittest.py
diff --git a/test/ganeti.bdev_unittest.py b/test/py/ganeti.bdev_unittest.py
similarity index 100%
rename from test/ganeti.bdev_unittest.py
rename to test/py/ganeti.bdev_unittest.py
diff --git a/test/ganeti.cli_unittest.py b/test/py/ganeti.cli_unittest.py
similarity index 100%
rename from test/ganeti.cli_unittest.py
rename to test/py/ganeti.cli_unittest.py
diff --git a/test/ganeti.client.gnt_cluster_unittest.py b/test/py/ganeti.client.gnt_cluster_unittest.py
similarity index 100%
rename from test/ganeti.client.gnt_cluster_unittest.py
rename to test/py/ganeti.client.gnt_cluster_unittest.py
diff --git a/test/ganeti.client.gnt_instance_unittest.py b/test/py/ganeti.client.gnt_instance_unittest.py
similarity index 100%
rename from test/ganeti.client.gnt_instance_unittest.py
rename to test/py/ganeti.client.gnt_instance_unittest.py
diff --git a/test/ganeti.client.gnt_job_unittest.py b/test/py/ganeti.client.gnt_job_unittest.py
similarity index 100%
rename from test/ganeti.client.gnt_job_unittest.py
rename to test/py/ganeti.client.gnt_job_unittest.py
diff --git a/test/ganeti.cmdlib_unittest.py b/test/py/ganeti.cmdlib_unittest.py
similarity index 100%
rename from test/ganeti.cmdlib_unittest.py
rename to test/py/ganeti.cmdlib_unittest.py
diff --git a/test/ganeti.compat_unittest.py b/test/py/ganeti.compat_unittest.py
similarity index 100%
rename from test/ganeti.compat_unittest.py
rename to test/py/ganeti.compat_unittest.py
diff --git a/test/ganeti.confd.client_unittest.py b/test/py/ganeti.confd.client_unittest.py
similarity index 100%
rename from test/ganeti.confd.client_unittest.py
rename to test/py/ganeti.confd.client_unittest.py
diff --git a/test/ganeti.config_unittest.py b/test/py/ganeti.config_unittest.py
similarity index 100%
rename from test/ganeti.config_unittest.py
rename to test/py/ganeti.config_unittest.py
diff --git a/test/ganeti.constants_unittest.py b/test/py/ganeti.constants_unittest.py
similarity index 100%
rename from test/ganeti.constants_unittest.py
rename to test/py/ganeti.constants_unittest.py
diff --git a/test/ganeti.daemon_unittest.py b/test/py/ganeti.daemon_unittest.py
similarity index 100%
rename from test/ganeti.daemon_unittest.py
rename to test/py/ganeti.daemon_unittest.py
diff --git a/test/ganeti.errors_unittest.py b/test/py/ganeti.errors_unittest.py
similarity index 100%
rename from test/ganeti.errors_unittest.py
rename to test/py/ganeti.errors_unittest.py
diff --git a/test/ganeti.hooks_unittest.py b/test/py/ganeti.hooks_unittest.py
similarity index 100%
rename from test/ganeti.hooks_unittest.py
rename to test/py/ganeti.hooks_unittest.py
diff --git a/test/ganeti.ht_unittest.py b/test/py/ganeti.ht_unittest.py
similarity index 100%
rename from test/ganeti.ht_unittest.py
rename to test/py/ganeti.ht_unittest.py
diff --git a/test/ganeti.http_unittest.py b/test/py/ganeti.http_unittest.py
similarity index 100%
rename from test/ganeti.http_unittest.py
rename to test/py/ganeti.http_unittest.py
diff --git a/test/ganeti.hypervisor.hv_chroot_unittest.py b/test/py/ganeti.hypervisor.hv_chroot_unittest.py
similarity index 100%
rename from test/ganeti.hypervisor.hv_chroot_unittest.py
rename to test/py/ganeti.hypervisor.hv_chroot_unittest.py
diff --git a/test/ganeti.hypervisor.hv_fake_unittest.py b/test/py/ganeti.hypervisor.hv_fake_unittest.py
similarity index 100%
rename from test/ganeti.hypervisor.hv_fake_unittest.py
rename to test/py/ganeti.hypervisor.hv_fake_unittest.py
diff --git a/test/ganeti.hypervisor.hv_kvm_unittest.py b/test/py/ganeti.hypervisor.hv_kvm_unittest.py
similarity index 100%
rename from test/ganeti.hypervisor.hv_kvm_unittest.py
rename to test/py/ganeti.hypervisor.hv_kvm_unittest.py
diff --git a/test/ganeti.hypervisor.hv_lxc_unittest.py b/test/py/ganeti.hypervisor.hv_lxc_unittest.py
similarity index 100%
rename from test/ganeti.hypervisor.hv_lxc_unittest.py
rename to test/py/ganeti.hypervisor.hv_lxc_unittest.py
diff --git a/test/ganeti.hypervisor.hv_xen_unittest.py b/test/py/ganeti.hypervisor.hv_xen_unittest.py
similarity index 100%
rename from test/ganeti.hypervisor.hv_xen_unittest.py
rename to test/py/ganeti.hypervisor.hv_xen_unittest.py
diff --git a/test/ganeti.hypervisor_unittest.py b/test/py/ganeti.hypervisor_unittest.py
similarity index 100%
rename from test/ganeti.hypervisor_unittest.py
rename to test/py/ganeti.hypervisor_unittest.py
diff --git a/test/ganeti.impexpd_unittest.py b/test/py/ganeti.impexpd_unittest.py
similarity index 100%
rename from test/ganeti.impexpd_unittest.py
rename to test/py/ganeti.impexpd_unittest.py
diff --git a/test/ganeti.jqueue_unittest.py b/test/py/ganeti.jqueue_unittest.py
similarity index 100%
rename from test/ganeti.jqueue_unittest.py
rename to test/py/ganeti.jqueue_unittest.py
diff --git a/test/ganeti.jstore_unittest.py b/test/py/ganeti.jstore_unittest.py
similarity index 100%
rename from test/ganeti.jstore_unittest.py
rename to test/py/ganeti.jstore_unittest.py
diff --git a/test/ganeti.locking_unittest.py b/test/py/ganeti.locking_unittest.py
similarity index 100%
rename from test/ganeti.locking_unittest.py
rename to test/py/ganeti.locking_unittest.py
diff --git a/test/ganeti.luxi_unittest.py b/test/py/ganeti.luxi_unittest.py
similarity index 100%
rename from test/ganeti.luxi_unittest.py
rename to test/py/ganeti.luxi_unittest.py
diff --git a/test/ganeti.masterd.iallocator_unittest.py b/test/py/ganeti.masterd.iallocator_unittest.py
similarity index 100%
rename from test/ganeti.masterd.iallocator_unittest.py
rename to test/py/ganeti.masterd.iallocator_unittest.py
diff --git a/test/ganeti.masterd.instance_unittest.py b/test/py/ganeti.masterd.instance_unittest.py
similarity index 100%
rename from test/ganeti.masterd.instance_unittest.py
rename to test/py/ganeti.masterd.instance_unittest.py
diff --git a/test/ganeti.mcpu_unittest.py b/test/py/ganeti.mcpu_unittest.py
similarity index 100%
rename from test/ganeti.mcpu_unittest.py
rename to test/py/ganeti.mcpu_unittest.py
diff --git a/test/ganeti.netutils_unittest.py b/test/py/ganeti.netutils_unittest.py
similarity index 100%
rename from test/ganeti.netutils_unittest.py
rename to test/py/ganeti.netutils_unittest.py
diff --git a/test/ganeti.objects_unittest.py b/test/py/ganeti.objects_unittest.py
similarity index 100%
rename from test/ganeti.objects_unittest.py
rename to test/py/ganeti.objects_unittest.py
diff --git a/test/ganeti.objectutils_unittest.py b/test/py/ganeti.objectutils_unittest.py
similarity index 100%
rename from test/ganeti.objectutils_unittest.py
rename to test/py/ganeti.objectutils_unittest.py
diff --git a/test/ganeti.opcodes_unittest.py b/test/py/ganeti.opcodes_unittest.py
similarity index 100%
rename from test/ganeti.opcodes_unittest.py
rename to test/py/ganeti.opcodes_unittest.py
diff --git a/test/ganeti.ovf_unittest.py b/test/py/ganeti.ovf_unittest.py
similarity index 100%
rename from test/ganeti.ovf_unittest.py
rename to test/py/ganeti.ovf_unittest.py
diff --git a/test/ganeti.qlang_unittest.py b/test/py/ganeti.qlang_unittest.py
similarity index 100%
rename from test/ganeti.qlang_unittest.py
rename to test/py/ganeti.qlang_unittest.py
diff --git a/test/ganeti.query_unittest.py b/test/py/ganeti.query_unittest.py
similarity index 100%
rename from test/ganeti.query_unittest.py
rename to test/py/ganeti.query_unittest.py
diff --git a/test/ganeti.rapi.baserlib_unittest.py b/test/py/ganeti.rapi.baserlib_unittest.py
similarity index 100%
rename from test/ganeti.rapi.baserlib_unittest.py
rename to test/py/ganeti.rapi.baserlib_unittest.py
diff --git a/test/ganeti.rapi.client_unittest.py b/test/py/ganeti.rapi.client_unittest.py
similarity index 100%
rename from test/ganeti.rapi.client_unittest.py
rename to test/py/ganeti.rapi.client_unittest.py
diff --git a/test/ganeti.rapi.resources_unittest.py b/test/py/ganeti.rapi.resources_unittest.py
similarity index 100%
rename from test/ganeti.rapi.resources_unittest.py
rename to test/py/ganeti.rapi.resources_unittest.py
diff --git a/test/ganeti.rapi.rlib2_unittest.py b/test/py/ganeti.rapi.rlib2_unittest.py
similarity index 100%
rename from test/ganeti.rapi.rlib2_unittest.py
rename to test/py/ganeti.rapi.rlib2_unittest.py
diff --git a/test/ganeti.rapi.testutils_unittest.py b/test/py/ganeti.rapi.testutils_unittest.py
similarity index 100%
rename from test/ganeti.rapi.testutils_unittest.py
rename to test/py/ganeti.rapi.testutils_unittest.py
diff --git a/test/ganeti.rpc_unittest.py b/test/py/ganeti.rpc_unittest.py
similarity index 100%
rename from test/ganeti.rpc_unittest.py
rename to test/py/ganeti.rpc_unittest.py
diff --git a/test/ganeti.runtime_unittest.py b/test/py/ganeti.runtime_unittest.py
similarity index 100%
rename from test/ganeti.runtime_unittest.py
rename to test/py/ganeti.runtime_unittest.py
diff --git a/test/ganeti.serializer_unittest.py b/test/py/ganeti.serializer_unittest.py
similarity index 100%
rename from test/ganeti.serializer_unittest.py
rename to test/py/ganeti.serializer_unittest.py
diff --git a/test/ganeti.server.rapi_unittest.py b/test/py/ganeti.server.rapi_unittest.py
similarity index 100%
rename from test/ganeti.server.rapi_unittest.py
rename to test/py/ganeti.server.rapi_unittest.py
diff --git a/test/ganeti.ssconf_unittest.py b/test/py/ganeti.ssconf_unittest.py
similarity index 100%
rename from test/ganeti.ssconf_unittest.py
rename to test/py/ganeti.ssconf_unittest.py
diff --git a/test/ganeti.ssh_unittest.py b/test/py/ganeti.ssh_unittest.py
similarity index 100%
rename from test/ganeti.ssh_unittest.py
rename to test/py/ganeti.ssh_unittest.py
diff --git a/test/ganeti.storage_unittest.py b/test/py/ganeti.storage_unittest.py
similarity index 100%
rename from test/ganeti.storage_unittest.py
rename to test/py/ganeti.storage_unittest.py
diff --git a/test/ganeti.tools.ensure_dirs_unittest.py b/test/py/ganeti.tools.ensure_dirs_unittest.py
similarity index 100%
rename from test/ganeti.tools.ensure_dirs_unittest.py
rename to test/py/ganeti.tools.ensure_dirs_unittest.py
diff --git a/test/ganeti.tools.node_daemon_setup_unittest.py b/test/py/ganeti.tools.node_daemon_setup_unittest.py
similarity index 100%
rename from test/ganeti.tools.node_daemon_setup_unittest.py
rename to test/py/ganeti.tools.node_daemon_setup_unittest.py
diff --git a/test/ganeti.tools.prepare_node_join_unittest.py b/test/py/ganeti.tools.prepare_node_join_unittest.py
similarity index 100%
rename from test/ganeti.tools.prepare_node_join_unittest.py
rename to test/py/ganeti.tools.prepare_node_join_unittest.py
diff --git a/test/ganeti.uidpool_unittest.py b/test/py/ganeti.uidpool_unittest.py
similarity index 100%
rename from test/ganeti.uidpool_unittest.py
rename to test/py/ganeti.uidpool_unittest.py
diff --git a/test/ganeti.utils.algo_unittest.py b/test/py/ganeti.utils.algo_unittest.py
similarity index 100%
rename from test/ganeti.utils.algo_unittest.py
rename to test/py/ganeti.utils.algo_unittest.py
diff --git a/test/ganeti.utils.filelock_unittest.py b/test/py/ganeti.utils.filelock_unittest.py
similarity index 100%
rename from test/ganeti.utils.filelock_unittest.py
rename to test/py/ganeti.utils.filelock_unittest.py
diff --git a/test/ganeti.utils.hash_unittest.py b/test/py/ganeti.utils.hash_unittest.py
similarity index 100%
rename from test/ganeti.utils.hash_unittest.py
rename to test/py/ganeti.utils.hash_unittest.py
diff --git a/test/ganeti.utils.io_unittest-runasroot.py b/test/py/ganeti.utils.io_unittest-runasroot.py
similarity index 100%
rename from test/ganeti.utils.io_unittest-runasroot.py
rename to test/py/ganeti.utils.io_unittest-runasroot.py
diff --git a/test/ganeti.utils.io_unittest.py b/test/py/ganeti.utils.io_unittest.py
similarity index 100%
rename from test/ganeti.utils.io_unittest.py
rename to test/py/ganeti.utils.io_unittest.py
diff --git a/test/ganeti.utils.log_unittest.py b/test/py/ganeti.utils.log_unittest.py
similarity index 100%
rename from test/ganeti.utils.log_unittest.py
rename to test/py/ganeti.utils.log_unittest.py
diff --git a/test/ganeti.utils.mlock_unittest.py b/test/py/ganeti.utils.mlock_unittest.py
similarity index 100%
rename from test/ganeti.utils.mlock_unittest.py
rename to test/py/ganeti.utils.mlock_unittest.py
diff --git a/test/ganeti.utils.nodesetup_unittest.py b/test/py/ganeti.utils.nodesetup_unittest.py
similarity index 100%
rename from test/ganeti.utils.nodesetup_unittest.py
rename to test/py/ganeti.utils.nodesetup_unittest.py
diff --git a/test/ganeti.utils.process_unittest.py b/test/py/ganeti.utils.process_unittest.py
similarity index 100%
rename from test/ganeti.utils.process_unittest.py
rename to test/py/ganeti.utils.process_unittest.py
diff --git a/test/ganeti.utils.retry_unittest.py b/test/py/ganeti.utils.retry_unittest.py
similarity index 100%
rename from test/ganeti.utils.retry_unittest.py
rename to test/py/ganeti.utils.retry_unittest.py
diff --git a/test/ganeti.utils.text_unittest.py b/test/py/ganeti.utils.text_unittest.py
similarity index 100%
rename from test/ganeti.utils.text_unittest.py
rename to test/py/ganeti.utils.text_unittest.py
diff --git a/test/ganeti.utils.wrapper_unittest.py b/test/py/ganeti.utils.wrapper_unittest.py
similarity index 100%
rename from test/ganeti.utils.wrapper_unittest.py
rename to test/py/ganeti.utils.wrapper_unittest.py
diff --git a/test/ganeti.utils.x509_unittest.py b/test/py/ganeti.utils.x509_unittest.py
similarity index 100%
rename from test/ganeti.utils.x509_unittest.py
rename to test/py/ganeti.utils.x509_unittest.py
diff --git a/test/ganeti.utils_unittest.py b/test/py/ganeti.utils_unittest.py
similarity index 100%
rename from test/ganeti.utils_unittest.py
rename to test/py/ganeti.utils_unittest.py
diff --git a/test/ganeti.vcluster_unittest.py b/test/py/ganeti.vcluster_unittest.py
similarity index 100%
rename from test/ganeti.vcluster_unittest.py
rename to test/py/ganeti.vcluster_unittest.py
diff --git a/test/ganeti.workerpool_unittest.py b/test/py/ganeti.workerpool_unittest.py
similarity index 100%
rename from test/ganeti.workerpool_unittest.py
rename to test/py/ganeti.workerpool_unittest.py
diff --git a/test/gnt-cli.test b/test/py/gnt-cli.test
similarity index 100%
rename from test/gnt-cli.test
rename to test/py/gnt-cli.test
diff --git a/test/import-export_unittest-helper b/test/py/import-export_unittest-helper
similarity index 100%
rename from test/import-export_unittest-helper
rename to test/py/import-export_unittest-helper
diff --git a/test/import-export_unittest.bash b/test/py/import-export_unittest.bash
similarity index 99%
rename from test/import-export_unittest.bash
rename to test/py/import-export_unittest.bash
index 318ce5c226390f14e584bed1340e13efaec82fab..b1672b4037d5e80fc975a6f432f69ff2b6856b12 100755
--- a/test/import-export_unittest.bash
+++ b/test/py/import-export_unittest.bash
@@ -1,7 +1,7 @@
 #!/bin/bash
 #
 
-# Copyright (C) 2010 Google Inc.
+# Copyright (C) 2010, 2012 Google Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -144,7 +144,7 @@ cat $(get_testfile proc_drbd8.txt) $(get_testfile cert1.pem) > $testdata
 } > $largetestdata
 
 impexpd_helper() {
-  $PYTHON $(get_testpath)/import-export_unittest-helper "$@"
+  $PYTHON $(get_testpath)/py/import-export_unittest-helper "$@"
 }
 
 start_test() {
diff --git a/test/lockperf.py b/test/py/lockperf.py
similarity index 100%
rename from test/lockperf.py
rename to test/py/lockperf.py
diff --git a/test/mocks.py b/test/py/mocks.py
similarity index 100%
rename from test/mocks.py
rename to test/py/mocks.py
diff --git a/test/pycurl_reset_unittest.py b/test/py/pycurl_reset_unittest.py
similarity index 100%
rename from test/pycurl_reset_unittest.py
rename to test/py/pycurl_reset_unittest.py
diff --git a/test/qa.qa_config_unittest.py b/test/py/qa.qa_config_unittest.py
similarity index 100%
rename from test/qa.qa_config_unittest.py
rename to test/py/qa.qa_config_unittest.py
diff --git a/test/tempfile_fork_unittest.py b/test/py/tempfile_fork_unittest.py
similarity index 100%
rename from test/tempfile_fork_unittest.py
rename to test/py/tempfile_fork_unittest.py
diff --git a/test/testutils.py b/test/py/testutils.py
similarity index 100%
rename from test/testutils.py
rename to test/py/testutils.py