def test_remove_vm(admin): disk = admin.sa.add_disk("name", "v", "path", 0, "0" * 64, None, False, False) vm1 = admin.sa.add_vm("name1", [disk]) vm2 = admin.sa.add_vm("name2", [disk]) admin.sa.verify_database() with raises.sync_error(sync_db.error.VM_NOT_FOUND): admin.sa.remove_vm("unknown") admin.sa.remove_vm(vm1) with raises.sync_error(sync_db.error.VM_NOT_FOUND): admin.sa.remove_vm(vm1) device = admin.sa.add_device("name") vm_instance = admin.sa.add_vm_instance(device, vm2, "name") admin.sa.verify_database() with raises.sync_error(sync_db.error.VM_IN_USE): admin.sa.remove_vm(vm2) admin.sa.remove_vm_instance(vm_instance, True) admin.sa.verify_database() with raises.sync_error(sync_db.error.VM_IN_USE): admin.sa.remove_vm(vm2) admin.sa.purge_vm_instance(vm_instance) admin.sa.remove_vm(vm2) admin.sa.verify_database()
def test_remove_vm_instance(admin): vm1 = admin.sa.add_vm("name1", []) vm2 = admin.sa.add_vm("name2", []) device = admin.sa.add_device("name1") vm_instance1 = admin.sa.add_vm_instance(device, vm1, "name1") vm_instance2 = admin.sa.add_vm_instance(device, vm2, "name2") admin.sa.verify_database() admin.sa.remove_vm_instance(vm_instance1, True) admin.sa.verify_database() with raises.sync_error(sync_db.error.VM_INST_ALREADY_REMOVED): admin.sa.remove_vm_instance(vm_instance1, True) admin.sa.readd_vm_instance(vm_instance1) admin.sa.verify_database() with raises.sync_error(sync_db.error.VM_INST_NOT_REMOVED): admin.sa.readd_vm_instance(vm_instance1) admin.sa.purge_vm_instance(vm_instance1) admin.sa.verify_database() admin.sa.purge_vm_instance(vm_instance2) admin.sa.verify_database() with raises.sync_error(sync_db.error.VM_INST_NOT_FOUND): admin.sa.remove_vm_instance(vm_instance1, True) with raises.sync_error(sync_db.error.VM_INST_NOT_FOUND): admin.sa.readd_vm_instance(vm_instance1) with raises.sync_error(sync_db.error.VM_INST_NOT_FOUND): admin.sa.purge_vm_instance(vm_instance1)
def test_license_offline_enforcement(clean_db): admin = clean_db.get_admin_connection() license = clean_db.get_license_connection() license.sl.set_num_offline_licenses(5) devices = [admin.sa.add_device("name{0}".format(i)) for i in range(0, 5)] with raises.sync_error(sync_db.error.OUT_OF_LICENSES): admin.sa.add_device("name5") admin.sa.remove_device(devices.pop()) devices.append(admin.sa.add_device("name4")) with raises.sync_error(sync_db.error.OUT_OF_LICENSES): admin.sa.add_device("name5") license.sl.set_num_offline_licenses(10) devices.extend([admin.sa.add_device("name{0}".format(i)) for i in range(5, 10)]) with raises.sync_error(sync_db.error.OUT_OF_LICENSES): admin.sa.add_device("name10") license.sl.set_num_offline_licenses(5) license.sl.set_num_offline_licenses(None) devices.append(admin.sa.add_device("name10"))
def test_device_config_invalid(admin): device = admin.sa.add_device("name1") with raises.sync_error(sync_db.error.CONFIG_EMPTY): admin.sa.add_device("name2", config=[""]) with raises.sync_error(sync_db.error.CONFIG_EMPTY): admin.sa.modify_device_config(device, [""]) with raises.sync_error(sync_db.error.CONFIG_INVALID): admin.sa.add_device("name2", config=[":b:c"]) with raises.sync_error(sync_db.error.CONFIG_INVALID): admin.sa.modify_device_config(device, [":b:c"]) with raises.sync_error(sync_db.error.CONFIG_DAEMON_TOO_LONG): admin.sa.add_device("name2", config=["a" * 101 + ":b:c"]) with raises.sync_error(sync_db.error.CONFIG_DAEMON_TOO_LONG): admin.sa.modify_device_config(device, ["a" * 101 + ":b:c"]) with raises.sync_error(sync_db.error.CONFIG_KEY_TOO_LONG): admin.sa.add_device("name2", config=["a:" + "b" * 101 + ":c"]) with raises.sync_error(sync_db.error.CONFIG_KEY_TOO_LONG): admin.sa.modify_device_config(device, ["a:" + "b" * 101 + ":c"]) with raises.sync_error(sync_db.error.CONFIG_VALUE_TOO_LONG): admin.sa.add_device("name2", config=["a:b:" + "c" * 3501]) with raises.sync_error(sync_db.error.CONFIG_VALUE_TOO_LONG): admin.sa.modify_device_config(device, ["a:b:" + "c" * 3501])
def test_license_mode(clean_db): admin = clean_db.get_admin_connection() server = clean_db.get_server_connection() license = clean_db.get_license_connection() assert admin.sa.get_licensing() == ("online", None, 0) device = admin.sa.add_device("name") assert admin.sa.get_licensing() == ("online", None, 1) server.ss.get_device_state(device) assert license.sl.lock_next_requested_license(None) == device license.sl.deny_requested_license(device) license.sl.set_num_offline_licenses(1) assert admin.sa.get_licensing() == ("offline", 1, 1) license.sl.set_num_offline_licenses(None) assert admin.sa.get_licensing() == ("online", None, 1) assert license.sl.lock_next_requested_license(None) is None license.sl.set_num_offline_licenses(0) assert admin.sa.get_licensing() == ("offline", 0, 1) with raises.sync_error(sync_db.error.NUM_LICENSES_INVALID): license.sl.set_num_offline_licenses(-1) with raises.sync_error(sync_db.error.NUM_LICENSES_INVALID): license.sl.set_num_offline_licenses(1e10)
def test_get_device(admin): device1 = admin.sa.add_device("name1") device2 = admin.sa.add_device("name2") assert admin.sa.get_device(device1) == (device1, "name1", None) assert admin.sa.get_device(device2) == (device2, "name2", None) with raises.sync_error(sync_db.error.DEVICE_NOT_FOUND): admin.sa.get_device("unknown") with raises.sync_error(sync_db.error.DEVICE_NOT_FOUND): admin.sa.get_device_secret("unknown") secret1 = admin.sa.get_device_secret(device1) assert admin.sa.get_device_secret(device2) != secret1 admin.sa.reset_device_secret(device1) assert admin.sa.get_device_secret(device1) != secret1 admin.sa.remove_device(device1) with raises.sync_error(sync_db.error.DEVICE_NOT_FOUND): admin.sa.get_device(device1) with raises.sync_error(sync_db.error.DEVICE_NOT_FOUND): admin.sa.get_device_secret(device1)
def test_upgrade_unsupported(missing_db): db = missing_db db.run(["install"]) owner = db.get_owner_connection() admin = db.get_admin_connection() cursor = owner.connection.cursor() cursor.execute("update version " "set current_version = 'bad'") owner.connection.commit() with py.test.raises(subprocess.CalledProcessError): db.run(["upgrade", "--force"]) cursor = owner.connection.cursor() cursor.execute("update version " "set installing_version = 'dummy'") owner.connection.commit() with raises.sync_error(sync_db.error.UPGRADE_INCOMPLETE): admin.sa.add_vm("name", []) cursor = owner.connection.cursor() cursor.execute("update version " "set current_version = null") owner.connection.commit() with raises.sync_error(sync_db.error.INSTALLATION_INCOMPLETE): admin.sa.add_vm("name", [])
def test_get_disk(admin): disk1 = admin.sa.add_disk("name1", "v", "path1", 1, "1" * 64, None, False, False) disk2 = admin.sa.add_disk("name2", "v", "path2", 2, "2" * 64, "2" * 64, True, False) disk3 = admin.sa.add_disk("name3", "v", "path3", 3, "3" * 64, "3" * 128, True, False) assert admin.sa.get_disk(disk1) == (disk1, "name1", "v", "path1", 1, "1" * 64, "f", "f") assert admin.sa.get_disk(disk2) == (disk2, "name2", "v", "path2", 2, "2" * 64, "t", "f") assert admin.sa.get_disk(disk3) == (disk3, "name3", "v", "path3", 3, "3" * 64, "t", "f") with raises.sync_error(sync_db.error.DISK_NOT_FOUND): admin.sa.get_disk("unknown") assert admin.sa.get_disk_key(disk1) is None assert admin.sa.get_disk_key(disk2) == "2" * 64 assert admin.sa.get_disk_key(disk3) == "3" * 128 admin.sa.remove_disk(disk1) with raises.sync_error(sync_db.error.DISK_NOT_FOUND): admin.sa.get_disk(disk1) with raises.sync_error(sync_db.error.DISK_NOT_FOUND): admin.sa.get_disk_key(disk1)
def test_remove_device(admin): device1 = admin.sa.add_device("name1") device2 = admin.sa.add_device("name2") admin.sa.verify_database() with raises.sync_error(sync_db.error.DEVICE_NOT_FOUND): admin.sa.remove_device("unknown") admin.sa.remove_device(device1) admin.sa.verify_database() with raises.sync_error(sync_db.error.DEVICE_NOT_FOUND): admin.sa.remove_device(device1) vm = admin.sa.add_vm("name", []) vm_instance1 = admin.sa.add_vm_instance(device2, vm, "name1") with raises.sync_error(sync_db.error.DEVICE_HAS_VM_INST): admin.sa.remove_device(device2) admin.sa.remove_vm_instance(vm_instance1, True) admin.sa.remove_device(device2) admin.sa.verify_database() device3 = admin.sa.add_device("name3") vm_instance2 = admin.sa.add_vm_instance(device3, vm, "name2") admin.sa.remove_device(device3, cascade=True) admin.sa.verify_database()
def test_list_disks_by_vm(admin): disk1 = admin.sa.add_disk("name1", "v", "path1", 1, "1" * 64, None, False, False) disk2 = admin.sa.add_disk("name2", "v", "path2", 2, "2" * 64, "2" * 128, True, False) disk1_row = (disk1, "name1", "v", "path1") disk2_row = (disk2, "name2", "v", "path2") disks = list(reversed(sorted([disk1, disk2]))) disk_rows = [row + (i + 1,) for (i, row) in enumerate(reversed(sorted([disk1_row, disk2_row])))] vm1 = admin.sa.add_vm("name1", []) vm2 = admin.sa.add_vm("name2", [disks[0]]) vm3 = admin.sa.add_vm("name3", disks) assert admin.sa.list_disks(vm_uuid=vm1) == [] assert admin.sa.list_disks(vm_uuid=vm2) == disk_rows[:1] assert admin.sa.list_disks(vm_uuid=vm3) == disk_rows device = admin.sa.add_device("name") vm_instance = admin.sa.add_vm_instance(device, vm3, "name") assert admin.sa.list_disks(vm_instance_uuid=vm_instance) == disk_rows with raises.sync_error(sync_db.error.VM_NOT_FOUND): admin.sa.list_disks(vm_uuid="unknown") == [] with raises.sync_error(sync_db.error.VM_INST_NOT_FOUND): admin.sa.list_disks(vm_instance_uuid="unknown") assert admin.sa.list_disks(unused=True) == []
def test_license_offline_enforcement(clean_db): admin = clean_db.get_admin_connection() license = clean_db.get_license_connection() license.sl.set_num_offline_licenses(5) devices = [admin.sa.add_device("name{0}".format(i)) for i in range(0, 5)] with raises.sync_error(sync_db.error.OUT_OF_LICENSES): admin.sa.add_device("name5") admin.sa.remove_device(devices.pop()) devices.append(admin.sa.add_device("name4")) with raises.sync_error(sync_db.error.OUT_OF_LICENSES): admin.sa.add_device("name5") license.sl.set_num_offline_licenses(10) devices.extend( [admin.sa.add_device("name{0}".format(i)) for i in range(5, 10)]) with raises.sync_error(sync_db.error.OUT_OF_LICENSES): admin.sa.add_device("name10") license.sl.set_num_offline_licenses(5) license.sl.set_num_offline_licenses(None) devices.append(admin.sa.add_device("name10"))
def test_get_report_invalid(admin): device = admin.sa.add_device("name") with raises.sync_error(sync_db.error.DEVICE_REQUIRED): admin.sa.get_report(None) with raises.sync_error(sync_db.error.DEVICE_NOT_FOUND): admin.sa.get_report("unknown")
def test_remove_vm_instance_invalid(admin): with raises.sync_error(sync_db.error.VM_INST_NOT_FOUND): admin.sa.remove_vm_instance("unknown", True) with raises.sync_error(sync_db.error.VM_INST_NOT_FOUND): admin.sa.readd_vm_instance("unknown") with raises.sync_error(sync_db.error.VM_INST_NOT_FOUND): admin.sa.purge_vm_instance("unknown")
def test_add_repo_duplicate(admin): admin.sa.add_repo("release1", "build1", "path1", 1, "1" * 64) with raises.sync_error(sync_db.error.REPO_EXISTS): admin.sa.add_repo("release1", "build1", "path2", 2, "2" * 64) admin.sa.add_repo("release1", "build2", "path2", 2, "2" * 64) with raises.sync_error(sync_db.error.FILE_PATH_NOT_UNIQUE): admin.sa.add_repo("release1", "build3", "path1", 3, "3" * 64)
def test_get_vm(admin): vm1 = admin.sa.add_vm("name1", []) vm2 = admin.sa.add_vm("name2", []) assert admin.sa.get_vm(vm1) == (vm1, "name1") assert admin.sa.get_vm(vm2) == (vm2, "name2") with raises.sync_error(sync_db.error.VM_NOT_FOUND): admin.sa.get_vm("unknown") admin.sa.remove_vm(vm1) with raises.sync_error(sync_db.error.VM_NOT_FOUND): admin.sa.get_vm(vm1)
def test_server_get_device_secret(clean_db): admin = clean_db.get_admin_connection() server = clean_db.get_server_connection() device = admin.sa.add_device("name") secret = admin.sa.get_device_secret(device) assert server.ss.get_device_secret(device) == secret with raises.sync_error(sync_db.error.DEVICE_REQUIRED): server.ss.get_device_secret(None) with raises.sync_error(sync_db.error.DEVICE_NOT_FOUND): server.ss.get_device_secret("unknown")
def test_license_mode_check(license): license.sl.set_num_offline_licenses(1) with raises.sync_error(sync_db.error.OFFLINE_LICENSING): license.sl.deny_requested_license(None) with raises.sync_error(sync_db.error.OFFLINE_LICENSING): license.sl.expire_random_licenses() with raises.sync_error(sync_db.error.OFFLINE_LICENSING): license.sl.grant_requested_license(None, None, None) with raises.sync_error(sync_db.error.OFFLINE_LICENSING): license.sl.lock_next_expired_license(None) with raises.sync_error(sync_db.error.OFFLINE_LICENSING): license.sl.lock_next_requested_license(None) with raises.sync_error(sync_db.error.OFFLINE_LICENSING): license.sl.revoke_all_licenses() with raises.sync_error(sync_db.error.OFFLINE_LICENSING): license.sl.revoke_expired_license(None) with raises.sync_error(sync_db.error.OFFLINE_LICENSING): license.sl.skip_expired_license()
def test_list_vm_instances_by_device(admin): vm = admin.sa.add_vm("name", []) device1 = admin.sa.add_device("name1") device2 = admin.sa.add_device("name2") vm_instance1 = admin.sa.add_vm_instance(device1, vm, "name1") vm_instance2 = admin.sa.add_vm_instance(device2, vm, "name2") admin.sa.lock_vm_instance(vm_instance2) vm_instance1_row = (vm_instance1, device1, vm, "name1", "f") assert admin.sa.list_vm_instances(device_uuid=device1) == [ vm_instance1_row ] assert admin.sa.list_vm_instances(device_uuid=device1, removed=True) == [] admin.sa.remove_vm_instance(vm_instance1, True) assert admin.sa.list_vm_instances(device_uuid=device1) == [] assert admin.sa.list_vm_instances(device_uuid=device1, removed=True) == [vm_instance1_row] admin.sa.readd_vm_instance(vm_instance1) assert admin.sa.list_vm_instances(device_uuid=device1) == [ vm_instance1_row ] assert admin.sa.list_vm_instances(device_uuid=device1, removed=True) == [] admin.sa.purge_vm_instance(vm_instance1) assert admin.sa.list_vm_instances(device_uuid=device1) == [] assert admin.sa.list_vm_instances(device_uuid=device1, removed=True) == [] with raises.sync_error(sync_db.error.DEVICE_NOT_FOUND): assert admin.sa.list_vm_instances(device_uuid="unknown") == []
def test_modify_vm_instance_name(admin): vm = admin.sa.add_vm("name1", []) device = admin.sa.add_device("name1") vm_instance = admin.sa.add_vm_instance(device, vm, "name1") assert (admin.sa.get_vm_instance(vm_instance) == (vm_instance, device, vm, "name1", "f", "f", None)) admin.sa.modify_vm_instance_name(vm_instance, "name2") assert (admin.sa.get_vm_instance(vm_instance) == (vm_instance, device, vm, "name2", "f", "f", None)) with raises.sync_error(sync_db.error.VM_INST_NAME_REQUIRED): admin.sa.modify_vm_instance_name(vm_instance, None) with raises.sync_error(sync_db.error.VM_INST_NAME_TOO_LONG): admin.sa.modify_vm_instance_name(vm_instance, "x" * 201)
def test_list_devices_by_vm(admin): device1 = admin.sa.add_device("name1") device2 = admin.sa.add_device("name2") device1_row = (device1, "name1") vm = admin.sa.add_vm("name", []) vm_instance = admin.sa.add_vm_instance(device1, vm, "name") assert admin.sa.list_devices(vm_uuid=vm) == [device1_row] #assert admin.sa.list_devices(vm_uuid=vm, removed=True) == [] admin.sa.remove_vm_instance(vm_instance, True) assert admin.sa.list_devices(vm_uuid=vm) == [] #assert admin.sa.list_devices(vm_uuid=vm, removed=True) == [device1_row] admin.sa.readd_vm_instance(vm_instance) assert admin.sa.list_devices(vm_uuid=vm) == [device1_row] #assert admin.sa.list_devices(vm_uuid=vm, removed=True) == [] admin.sa.purge_vm_instance(vm_instance) assert admin.sa.list_devices(vm_uuid=vm) == [] #assert admin.sa.list_devices(vm_uuid=vm, removed=True) == [] vm_instance = admin.sa.add_vm_instance(device1, vm, "name") admin.sa.remove_device(device1, cascade=True) assert admin.sa.list_devices(vm_uuid=vm) == [] #assert admin.sa.list_devices(vm_uuid=vm, removed=True) == [] with raises.sync_error(sync_db.error.VM_NOT_FOUND): assert admin.sa.list_devices(vm_uuid="unknown") == []
def test_list_repos(admin): repo1 = admin.sa.add_repo("release1", "build1", "path1", 1, "1" * 64) repo2 = admin.sa.add_repo("release1", "build2", "path2", 2, "2" * 64) repo3 = admin.sa.add_repo("release2", "build2", "path3", 3, "3" * 64) repo1_row = (repo1, "release1", "build1", "path1") repo2_row = (repo2, "release1", "build2", "path2") repo3_row = (repo3, "release2", "build2", "path3") with raises.sync_error(sync_db.error.MULTIPLE_FILTERS): admin.sa.list_repos(release="release1", build="build1") assert admin.sa.list_repos() == sorted([repo1_row, repo2_row, repo3_row]) assert admin.sa.list_repos(release="unknown") == [] assert admin.sa.list_repos(build="unknown") == [] assert admin.sa.list_repos(file_path="unknown") == [] assert admin.sa.list_repos(file_hash="unknown") == [] assert admin.sa.list_repos(release="release1") == sorted([repo1_row, repo2_row]) assert admin.sa.list_repos(build="build2") == sorted([repo2_row, repo3_row]) assert admin.sa.list_repos(file_path="path1") == [repo1_row] assert admin.sa.list_repos(file_hash="1" * 64) == [repo1_row] admin.sa.add_device("device", repo_uuid=repo1) assert admin.sa.list_repos(unused=True) == sorted([repo2_row, repo3_row])
def test_list_disks(admin): disk1 = admin.sa.add_disk("name1", "i", "path1", 1, "1" * 64, None, False, True) disk2 = admin.sa.add_disk("name2", "v", "path2", 2, "2" * 64, "2" * 128, True, False) disk1_row = (disk1, "name1", "i", "path1") disk2_row = (disk2, "name2", "v", "path2") with raises.sync_error(sync_db.error.MULTIPLE_FILTERS): admin.sa.list_disks(disk_name="name1", file_path="path1") assert admin.sa.list_disks() == sorted([disk1_row, disk2_row]) assert admin.sa.list_disks(disk_type="i") == [disk1_row] assert admin.sa.list_disks(disk_type="v") == [disk2_row] assert admin.sa.list_disks(disk_name="unknown") == [] assert admin.sa.list_disks(file_path="unknown") == [] assert admin.sa.list_disks(file_hash="unknown") == [] assert admin.sa.list_disks(disk_name="name1") == [disk1_row] assert admin.sa.list_disks(file_path="path1") == [disk1_row] assert admin.sa.list_disks(file_hash="1" * 64) == [disk1_row] assert admin.sa.list_disks(unused=True) == sorted([disk1_row, disk2_row])
def test_get_repo(admin): repo1 = admin.sa.add_repo("release1", "build1", "path1", 1, "1" * 64) repo2 = admin.sa.add_repo("release2", "build2", "path2", 2, "2" * 64) assert admin.sa.get_repo(repo1) == (repo1, "release1", "build1", "path1", 1, "1" * 64) assert admin.sa.get_repo(repo2) == (repo2, "release2", "build2", "path2", 2, "2" * 64) with raises.sync_error(sync_db.error.REPO_NOT_FOUND): admin.sa.get_repo("unknown") admin.sa.remove_repo(repo1) with raises.sync_error(sync_db.error.REPO_NOT_FOUND): admin.sa.get_repo(repo1)
def test_list_vm_instances_by_disk(admin): disk = admin.sa.add_disk("name", "v", "path", 0, "0" * 64, None, False, False) vm1 = admin.sa.add_vm("name1", [disk]) vm2 = admin.sa.add_vm("name2", []) device = admin.sa.add_device("name") vm_instance1 = admin.sa.add_vm_instance(device, vm1, "name1") vm_instance2 = admin.sa.add_vm_instance(device, vm2, "name2") admin.sa.lock_vm_instance(vm_instance2) vm_instance1_row = (vm_instance1, device, vm1, "name1", "f") assert admin.sa.list_vm_instances(disk_uuid=disk) == [vm_instance1_row] assert admin.sa.list_vm_instances(disk_uuid=disk, removed=True) == [] admin.sa.remove_vm_instance(vm_instance1, True) assert admin.sa.list_vm_instances(disk_uuid=disk) == [] assert admin.sa.list_vm_instances(disk_uuid=disk, removed=True) == [vm_instance1_row] admin.sa.readd_vm_instance(vm_instance1) assert admin.sa.list_vm_instances(disk_uuid=disk) == [vm_instance1_row] assert admin.sa.list_vm_instances(disk_uuid=disk, removed=True) == [] admin.sa.purge_vm_instance(vm_instance1) assert admin.sa.list_vm_instances(disk_uuid=disk) == [] assert admin.sa.list_vm_instances(disk_uuid=disk, removed=True) == [] with raises.sync_error(sync_db.error.DISK_NOT_FOUND): assert admin.sa.list_vm_instances(disk_uuid="unknown") == []
def test_list_vms_by_device(admin): vm1 = admin.sa.add_vm("name1", []) vm2 = admin.sa.add_vm("name2", []) vm1_row = (vm1, "name1") device = admin.sa.add_device("name") vm_instance = admin.sa.add_vm_instance(device, vm1, "name") assert admin.sa.list_vms(device_uuid=device) == [vm1_row] #assert admin.sa.list_vms(device_uuid=device, removed=True) == [] admin.sa.remove_vm_instance(vm_instance, True) assert admin.sa.list_vms(device_uuid=device) == [] #assert admin.sa.list_vms(device_uuid=device, removed=True) == [vm1_row] admin.sa.readd_vm_instance(vm_instance) assert admin.sa.list_vms(device_uuid=device) == [vm1_row] #assert admin.sa.list_vms(device_uuid=device, removed=True) == [] admin.sa.purge_vm_instance(vm_instance) assert admin.sa.list_vms(device_uuid=device) == [] #assert admin.sa.list_vms(device_uuid=device, removed=True) == [] with raises.sync_error(sync_db.error.DEVICE_NOT_FOUND): assert admin.sa.list_vms(device_uuid="unknown") == []
def test_add_vm_instance_duplicate(admin): vm = admin.sa.add_vm("name", []) device = admin.sa.add_device("name") admin.sa.add_vm_instance(device, vm, "name") with raises.sync_error(sync_db.error.VM_INST_EXISTS): admin.sa.add_vm_instance(device, vm, "name")
def test_list_vm_instances_by_device(admin): vm = admin.sa.add_vm("name", []) device1 = admin.sa.add_device("name1") device2 = admin.sa.add_device("name2") vm_instance1 = admin.sa.add_vm_instance(device1, vm, "name1") vm_instance2 = admin.sa.add_vm_instance(device2, vm, "name2") admin.sa.lock_vm_instance(vm_instance2) vm_instance1_row = (vm_instance1, device1, vm, "name1", "f") assert admin.sa.list_vm_instances( device_uuid=device1) == [vm_instance1_row] assert admin.sa.list_vm_instances(device_uuid=device1, removed=True) == [] admin.sa.remove_vm_instance(vm_instance1, True) assert admin.sa.list_vm_instances(device_uuid=device1) == [] assert admin.sa.list_vm_instances(device_uuid=device1, removed=True) == [vm_instance1_row] admin.sa.readd_vm_instance(vm_instance1) assert admin.sa.list_vm_instances( device_uuid=device1) == [vm_instance1_row] assert admin.sa.list_vm_instances(device_uuid=device1, removed=True) == [] admin.sa.purge_vm_instance(vm_instance1) assert admin.sa.list_vm_instances(device_uuid=device1) == [] assert admin.sa.list_vm_instances(device_uuid=device1, removed=True) == [] with raises.sync_error(sync_db.error.DEVICE_NOT_FOUND): assert admin.sa.list_vm_instances(device_uuid="unknown") == []
def test_vm_config_invalid(admin): vm = admin.sa.add_vm("name1", []) with raises.sync_error(sync_db.error.CONFIG_EMPTY): admin.sa.add_vm("name2", [], [""]) with raises.sync_error(sync_db.error.CONFIG_INVALID): admin.sa.add_vm("name2", [], [":b:c"]) with raises.sync_error(sync_db.error.CONFIG_DAEMON_TOO_LONG): admin.sa.add_vm("name2", [], ["a" * 101 + ":b:c"]) with raises.sync_error(sync_db.error.CONFIG_KEY_TOO_LONG): admin.sa.add_vm("name2", [], ["a:" + "b" * 101 + ":c"]) with raises.sync_error(sync_db.error.CONFIG_VALUE_TOO_LONG): admin.sa.add_vm("name2", [], ["a:b:" + "c" * 3501])
def test_add_vm_invalid(admin): disk1 = admin.sa.add_disk("name1", "v", "path1", 0, "0" * 64, None, False, False) disk2 = admin.sa.add_disk("name2", "v", "path2", 0, "0" * 64, None, False, False) with raises.sync_error(sync_db.error.VM_NAME_REQUIRED): admin.sa.add_vm(None, []) with raises.sync_error(sync_db.error.VM_NAME_TOO_LONG): admin.sa.add_vm("x" * 201, []) with raises.sync_error(sync_db.error.DISK_REQUIRED): admin.sa.add_vm("name", [""]) with raises.sync_error(sync_db.error.DISK_NOT_FOUND): admin.sa.add_vm("name", ["unknown"]) with raises.sync_error(sync_db.error.DISK_NOT_FOUND): admin.sa.add_vm("name", ["x" * 37]) with raises.sync_error(sync_db.error.DISK_REPEATED): admin.sa.add_vm("name", [disk1, disk1]) with raises.sync_error(sync_db.error.DISK_REPEATED): admin.sa.add_vm("name", [disk1, disk2, disk1])
def test_lock_vm_instance(admin): vm = admin.sa.add_vm("name", []) device = admin.sa.add_device("name") vm_instance = admin.sa.add_vm_instance(device, vm, "name") with raises.sync_error(sync_db.error.VM_INST_ALREADY_UNLOCKED): admin.sa.unlock_vm_instance(vm_instance) admin.sa.lock_vm_instance(vm_instance) with raises.sync_error(sync_db.error.VM_INST_ALREADY_LOCKED): admin.sa.lock_vm_instance(vm_instance) admin.sa.unlock_vm_instance(vm_instance) assert (admin.sa.get_vm_instance(vm_instance) == (vm_instance, device, vm, "name", "f", "f", None))
def test_device_repo(admin): repo = admin.sa.add_repo("release", "build", "path", 1, "1" * 64) device = admin.sa.add_device("name", repo_uuid=repo) with raises.sync_error(sync_db.error.REPO_NOT_FOUND): admin.sa.add_device("name", repo_uuid="unknown") with raises.sync_error(sync_db.error.REPO_NOT_FOUND): admin.sa.add_device("name", repo_uuid="x" * 37) admin.sa.modify_device_repo(device, None) admin.sa.modify_device_repo(device, repo) with raises.sync_error(sync_db.error.REPO_NOT_FOUND): admin.sa.modify_device_repo(device, repo_uuid="unknown") with raises.sync_error(sync_db.error.REPO_NOT_FOUND): admin.sa.modify_device_repo(device, repo_uuid="x" * 37)
def test_remove_repo(admin): repo1 = admin.sa.add_repo("release1", "build1", "path1", 1, "1" * 64) repo2 = admin.sa.add_repo("release2", "build2", "path2", 2, "2" * 64) with raises.sync_error(sync_db.error.REPO_NOT_FOUND): admin.sa.remove_repo("unknown") device = admin.sa.add_device("device", repo_uuid=repo1) with raises.sync_error(sync_db.error.REPO_IN_USE): admin.sa.remove_repo(repo1) admin.sa.remove_repo(repo2) admin.sa.remove_device(device) admin.sa.remove_repo(repo1) with raises.sync_error(sync_db.error.REPO_NOT_FOUND): admin.sa.remove_repo(repo1)
def test_remove_device_with_vm_instance(admin): device = admin.sa.add_device("name") vm = admin.sa.add_vm("name", []) vm_instance = admin.sa.add_vm_instance(device, vm, "name") admin.sa.verify_database() with raises.sync_error(sync_db.error.DEVICE_HAS_VM_INST): admin.sa.remove_device(device) admin.sa.remove_device(device, cascade=True) admin.sa.verify_database()
def test_version(clean_db): admin = clean_db.get_admin_connection() target_version = clean_db.get_target_version() assert admin.sv.get_version() == target_version admin.sv.check_version(target_version) with raises.sync_error(sync_db.error.DB_VERSION_INCOMPATIBLE): admin.sv.check_version("1")
def test_server_report_device_state(clean_db): admin = clean_db.get_admin_connection() server = clean_db.get_server_connection() device = admin.sa.add_device("name") assert admin.sa.get_report(device) == (device, None, None, None) with raises.sync_error(sync_db.error.DEVICE_REQUIRED): server.ss.report_device_state(None, None, None) with raises.sync_error(sync_db.error.DEVICE_NOT_FOUND): server.ss.get_device_secret("unknown") with raises.sync_error(sync_db.error.RELEASE_TOO_LONG): server.ss.report_device_state(device, "x" * 101, None) with raises.sync_error(sync_db.error.BUILD_TOO_LONG): server.ss.report_device_state(device, None, "x" * 101) server.ss.report_device_state(device, None, None) result = admin.sa.get_report(device) assert result[0:1] + result [2:] == (device, None, None) assert result[1] is not None server.ss.report_device_state(device, "release", None) result = admin.sa.get_report(device) assert result[0:1] + result [2:] == (device, "release", None) assert result[1] is not None server.ss.report_device_state(device, None, "build") result = admin.sa.get_report(device) assert result[0:1] + result [2:] == (device, None, "build") assert result[1] is not None server.ss.report_device_state(device, "release", "build") result = admin.sa.get_report(device) assert result[0:1] + result [2:] == (device, "release", "build") assert result[1] is not None