|
21 | 21 | # |
22 | 22 |
|
23 | 23 | import os |
| 24 | +import unittest |
24 | 25 | import unittest.mock as mock |
25 | 26 |
|
26 | 27 | import lxml.etree |
|
35 | 36 | import logging |
36 | 37 | import time |
37 | 38 |
|
| 39 | +from qubes.tests.vm.qubesvm import TestQubesDB |
| 40 | + |
38 | 41 |
|
39 | 42 | class TestApp(qubes.tests.TestEmitter): |
40 | 43 | pass |
@@ -915,6 +918,87 @@ class MyTestHolder(qubes.tests.TestEmitter, qubes.PropertyHolder): |
915 | 918 | self.assertNotIn("audiovm-sys-audio", appvm.tags) |
916 | 919 | self.assertNotIn("audiovm-", appvm.tags) |
917 | 920 |
|
| 921 | + def test_116_remotevm_add_and_remove(self): |
| 922 | + remotevm1 = self.app.add_new_vm( |
| 923 | + "RemoteVM", name="remote-vm1", label="blue" |
| 924 | + ) |
| 925 | + self.app.add_new_vm("RemoteVM", name="remote-vm2", label="gray") |
| 926 | + self.app.add_new_vm( |
| 927 | + "AppVM", |
| 928 | + name="test-vm", |
| 929 | + template=self.template, |
| 930 | + label="red", |
| 931 | + ) |
| 932 | + |
| 933 | + assert remotevm1 in self.app.domains |
| 934 | + del self.app.domains["remote-vm1"] |
| 935 | + |
| 936 | + self.assertCountEqual( |
| 937 | + {d.name for d in self.app.domains}, |
| 938 | + {"dom0", "test-template", "test-vm", "remote-vm2"}, |
| 939 | + ) |
| 940 | + |
| 941 | + def test_117_remotevm_status(self): |
| 942 | + remotevm1 = self.app.add_new_vm( |
| 943 | + "RemoteVM", name="remote-vm1", label="blue" |
| 944 | + ) |
| 945 | + assert [ |
| 946 | + remotevm1.get_power_state(), |
| 947 | + remotevm1.get_cputime(), |
| 948 | + remotevm1.get_mem(), |
| 949 | + ] == ["Running", 0, 0] |
| 950 | + |
| 951 | + @unittest.mock.patch("qubes.vm.qubesvm.QubesVM.untrusted_qdb") |
| 952 | + def test_118_remotevm_set_relayvm(self, mock_qubesdb): |
| 953 | + class MyTestHolder(qubes.tests.TestEmitter, qubes.PropertyHolder): |
| 954 | + relayvm = qubes.property("relayvm") |
| 955 | + transport_rpc = qubes.property("transport_rpc") |
| 956 | + |
| 957 | + localrelay = self.app.add_new_vm( |
| 958 | + "AppVM", |
| 959 | + name="local-relay", |
| 960 | + template=self.template, |
| 961 | + label="red", |
| 962 | + ) |
| 963 | + # add QDB to localrelay |
| 964 | + test_qubesdb = TestQubesDB() |
| 965 | + mock_qubesdb.write.side_effect = test_qubesdb.write |
| 966 | + mock_qubesdb.rm.side_effect = test_qubesdb.rm |
| 967 | + localrelay.untrusted_qdb = test_qubesdb |
| 968 | + |
| 969 | + remotevm = self.app.add_new_vm( |
| 970 | + "RemoteVM", name="remote-vm", label="blue" |
| 971 | + ) |
| 972 | + remotevm.remote_name = "myawesomevm" |
| 973 | + |
| 974 | + holder = MyTestHolder(None) |
| 975 | + holder.relayvm = "local-relay" |
| 976 | + holder.transport_rpc = "qubesair.SSHProxy" |
| 977 | + self.assertEqual(holder.relayvm, "local-relay") |
| 978 | + self.assertEqual(holder.transport_rpc, "qubesair.SSHProxy") |
| 979 | + |
| 980 | + self.assertEventFired( |
| 981 | + holder, |
| 982 | + "property-set:relayvm", |
| 983 | + kwargs={"name": "relayvm", "newvalue": "local-relay"}, |
| 984 | + ) |
| 985 | + |
| 986 | + self.assertEventFired( |
| 987 | + holder, |
| 988 | + "property-set:transport_rpc", |
| 989 | + kwargs={"name": "transport_rpc", "newvalue": "qubesair.SSHProxy"}, |
| 990 | + ) |
| 991 | + |
| 992 | + # Set RelayVM |
| 993 | + remotevm.relayvm = localrelay |
| 994 | + self.assertIn("relayvm-local-relay", remotevm.tags) |
| 995 | + |
| 996 | + # Read QDB path |
| 997 | + self.assertEqual( |
| 998 | + localrelay.untrusted_qdb.read("/remote/remote-vm"), |
| 999 | + remotevm.remote_name, |
| 1000 | + ) |
| 1001 | + |
918 | 1002 | def test_200_remove_template(self): |
919 | 1003 | appvm = self.app.add_new_vm( |
920 | 1004 | "AppVM", name="test-vm", template=self.template, label="red" |
|
0 commit comments