Skip to content

Commit 7b1069a

Browse files
committed
add custom-persist unit tests
1 parent 3377fec commit 7b1069a

1 file changed

Lines changed: 115 additions & 0 deletions

File tree

qubes/tests/ext.py

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import unittest.mock
2323

2424
import qubes.ext.core_features
25+
import qubes.ext.custom_persist
2526
import qubes.ext.services
2627
import qubes.ext.windows
2728
import qubes.ext.supported_features
@@ -1045,3 +1046,117 @@ def test_022_supported_rpc_remove(self):
10451046
"supported-rpc.test2": True,
10461047
},
10471048
)
1049+
1050+
1051+
class TC_40_CustomPersist(qubes.tests.QubesTestCase):
1052+
def setUp(self):
1053+
super().setUp()
1054+
self.ext = qubes.ext.custom_persist.CustomPersist()
1055+
self.features = {}
1056+
specs = {
1057+
"features.get.side_effect": self.features.get,
1058+
"features.items.side_effect": self.features.items,
1059+
"features.__iter__.side_effect": self.features.__iter__,
1060+
"features.__contains__.side_effect": self.features.__contains__,
1061+
"features.__setitem__.side_effect": self.features.__setitem__,
1062+
"features.__delitem__.side_effect": self.features.__delitem__,
1063+
}
1064+
1065+
vmspecs = {
1066+
**specs,
1067+
**{
1068+
"template": None,
1069+
},
1070+
}
1071+
self.vm = mock.MagicMock()
1072+
self.vm.configure_mock(**vmspecs)
1073+
1074+
def test_000_write_to_qdb(self):
1075+
self.features["custom-persist.home"] = "/home"
1076+
self.features["custom-persist.usrlocal"] = "/usr/local"
1077+
self.features["custom-persist.var_test"] = "/var/test"
1078+
1079+
self.ext.on_domain_qdb_create(self.vm, "domain-qdb-create")
1080+
self.assertEqual(
1081+
sorted(self.vm.untrusted_qdb.mock_calls),
1082+
[
1083+
mock.call.write("/persist/home", "/home"),
1084+
mock.call.write("/persist/usrlocal", "/usr/local"),
1085+
mock.call.write("/persist/var_test", "/var/test"),
1086+
],
1087+
)
1088+
1089+
def test_001_feature_set(self):
1090+
self.ext.on_domain_feature_set(
1091+
self.vm,
1092+
"feature-set:custom-persist.test_no_oldvalue",
1093+
"custom-persist.test_no_oldvalue",
1094+
"/test_no_oldvalue",
1095+
)
1096+
self.ext.on_domain_feature_set(
1097+
self.vm,
1098+
"feature-set:custom-persist.test_oldvalue",
1099+
"custom-persist.test_oldvalue",
1100+
"/newvalue",
1101+
"",
1102+
)
1103+
self.assertEqual(
1104+
sorted(self.vm.untrusted_qdb.mock_calls),
1105+
[
1106+
mock.call.write(
1107+
"/persist/test_no_oldvalue", "/test_no_oldvalue"
1108+
),
1109+
mock.call.write("/persist/test_oldvalue", "/newvalue"),
1110+
],
1111+
)
1112+
1113+
def test_002_feature_delete(self):
1114+
self.ext.on_domain_feature_delete(
1115+
self.vm, "feature-delete:custom-persist.test", "custom-persist.test"
1116+
)
1117+
self.assertEqual(
1118+
self.vm.untrusted_qdb.mock_calls,
1119+
[mock.call.rm("/persist/test")],
1120+
)
1121+
1122+
def test_003_empty_key(self):
1123+
self.ext.on_domain_feature_set(
1124+
self.vm,
1125+
"feature-set:custom-persist.",
1126+
"custom-persist.",
1127+
"/test",
1128+
"",
1129+
)
1130+
self.vm.untrusted_qdb.assert_not_called()
1131+
self.vm.log.warning.assert_called_once_with(
1132+
"Got empty custom-persist key, ignoring"
1133+
)
1134+
1135+
def test_004_key_too_long(self):
1136+
self.ext.on_domain_feature_set(
1137+
self.vm,
1138+
"feature-set:custom-persist." + "X" * 55,
1139+
"custom-persist." + "X" * 55,
1140+
"/test",
1141+
"",
1142+
)
1143+
self.vm.untrusted_qdb.assert_not_called()
1144+
self.vm.log.warning.assert_called_once_with(
1145+
"custom-persist key is too long (max 54), ignoring: " + "X" * 55
1146+
)
1147+
1148+
def test_005_other_feature_deletion(self):
1149+
self.ext.on_domain_feature_delete(
1150+
self.vm, "feature-delete:otherfeature.test", "otherfeature.test"
1151+
)
1152+
self.vm.untrusted_qdb.assert_not_called()
1153+
1154+
def test_006_feature_set_while_vm_is_not_running(self):
1155+
self.vm.is_running.return_value = False
1156+
self.ext.on_domain_feature_set(
1157+
self.vm,
1158+
"feature-set:custom-persist.test",
1159+
"custom-persist.test",
1160+
"/test",
1161+
)
1162+
self.vm.untrusted_qdb.assert_not_called()

0 commit comments

Comments
 (0)