@@ -2992,7 +2992,7 @@ def test_642_vm_create_disposable_not_allowed(self, storage_mock):
2992
2992
b'test-vm1' )
2993
2993
self .assertFalse (self .app .save .called )
2994
2994
2995
- def test_650_vm_device_set_required_true (self ):
2995
+ def test_650_vm_device_set_mode_required (self ):
2996
2996
assignment = DeviceAssignment (VirtualDevice (Port (
2997
2997
self .vm , '1234' , 'testclass' ), device_id = 'bee' ),
2998
2998
mode = 'auto-attach' , options = {'opt1' : 'value' })
@@ -3006,24 +3006,25 @@ def test_650_vm_device_set_required_true(self):
3006
3006
with unittest .mock .patch .object (qubes .vm .qubesvm .QubesVM ,
3007
3007
'is_halted' , lambda _ : False ):
3008
3008
value = self .call_mgmt_func (
3009
- b'admin.vm.device.testclass.Set.required ' ,
3010
- b'test-vm1' , b'test-vm1+1234:bee' , b'True ' )
3009
+ b'admin.vm.device.testclass.Set.assignment ' ,
3010
+ b'test-vm1' , b'test-vm1+1234:bee' , b'required ' )
3011
3011
3012
3012
self .assertIsNone (value )
3013
3013
dev = DeviceInfo (Port (
3014
3014
self .vm , '1234' , 'testclass' ), device_id = 'bee' )
3015
- required = self .vm .devices ['testclass' ].get_assigned_devices (
3016
- required_only = True )
3015
+ required = list ( self .vm .devices ['testclass' ].get_assigned_devices (
3016
+ required_only = True ))
3017
3017
self .assertIn (dev , required )
3018
+ self .assertEqual (required [0 ].mode .value , "required" )
3018
3019
self .assertEventFired (
3019
3020
self .emitter ,
3020
- 'admin-permission:admin.vm.device.testclass.Set.required ' )
3021
+ 'admin-permission:admin.vm.device.testclass.Set.assignment ' )
3021
3022
mock_action .assert_called_once_with (
3022
3023
self .vm , f'device-assignment-changed:testclass' ,
3023
3024
device = assignment .virtual_device )
3024
3025
self .app .save .assert_called_once_with ()
3025
3026
3026
- def test_651_vm_device_set_required_false (self ):
3027
+ def test_651_vm_device_set_mode_ask (self ):
3027
3028
assignment = DeviceAssignment (VirtualDevice (Port (
3028
3029
self .vm , '1234' , 'testclass' ), device_id = 'bee' ),
3029
3030
mode = 'required' , options = {'opt1' : 'value' })
@@ -3037,83 +3038,100 @@ def test_651_vm_device_set_required_false(self):
3037
3038
with unittest .mock .patch .object (qubes .vm .qubesvm .QubesVM ,
3038
3039
'is_halted' , lambda _ : False ):
3039
3040
value = self .call_mgmt_func (
3040
- b'admin.vm.device.testclass.Set.required ' ,
3041
- b'test-vm1' , b'test-vm1+1234:bee' , b'False ' )
3041
+ b'admin.vm.device.testclass.Set.assignment ' ,
3042
+ b'test-vm1' , b'test-vm1+1234:bee' , b'ask-to-attach ' )
3042
3043
3043
3044
self .assertIsNone (value )
3044
3045
dev = DeviceInfo (Port (self .vm , '1234' , 'testclass' ),
3045
3046
device_id = 'bee' )
3046
3047
required = self .vm .devices ['testclass' ].get_assigned_devices (
3047
3048
required_only = True )
3048
3049
self .assertNotIn (dev , required )
3050
+ assignments = list (self .vm .devices ['testclass' ].get_assigned_devices ())
3051
+ self .assertEqual (assignments [0 ].mode .value , "ask-to-attach" )
3049
3052
self .assertEventFired (
3050
3053
self .emitter ,
3051
- 'admin-permission:admin.vm.device.testclass.Set.required ' )
3054
+ 'admin-permission:admin.vm.device.testclass.Set.assignment ' )
3052
3055
mock_action .assert_called_once_with (
3053
3056
self .vm , f'device-assignment-changed:testclass' ,
3054
3057
device = assignment .virtual_device )
3055
3058
self .app .save .assert_called_once_with ()
3056
3059
3057
- def test_652_vm_device_set_required_true_unchanged (self ):
3060
+ def test_652_vm_device_set_mode_auto (self ):
3058
3061
assignment = DeviceAssignment (VirtualDevice (Port (
3059
3062
self .vm , '1234' , 'testclass' ), device_id = 'bee' ),
3060
3063
mode = 'required' , options = {'opt1' : 'value' })
3061
3064
self .loop .run_until_complete (
3062
3065
self .vm .devices ['testclass' ].assign (assignment ))
3066
+ mock_action = unittest .mock .Mock ()
3067
+ mock_action .return_value = None
3068
+ del mock_action ._is_coroutine
3069
+ self .vm .add_handler (f'device-assignment-changed:testclass' , mock_action )
3070
+
3063
3071
with unittest .mock .patch .object (qubes .vm .qubesvm .QubesVM ,
3064
3072
'is_halted' , lambda _ : False ):
3065
3073
value = self .call_mgmt_func (
3066
- b'admin.vm.device.testclass.Set.required' ,
3067
- b'test-vm1' , b'test-vm1+1234:bee' , b'True' )
3074
+ b'admin.vm.device.testclass.Set.assignment' ,
3075
+ b'test-vm1' , b'test-vm1+1234:bee' , b'auto-attach' )
3076
+
3068
3077
self .assertIsNone (value )
3069
3078
dev = DeviceInfo (Port (self .vm , '1234' , 'testclass' ),
3070
3079
device_id = 'bee' )
3071
3080
required = self .vm .devices ['testclass' ].get_assigned_devices (
3072
3081
required_only = True )
3073
- self .assertIn (dev , required )
3082
+ self .assertNotIn (dev , required )
3083
+ assignments = list (self .vm .devices ['testclass' ].get_assigned_devices ())
3084
+ self .assertEqual (assignments [0 ].mode .value , "auto-attach" )
3085
+ self .assertEventFired (
3086
+ self .emitter ,
3087
+ 'admin-permission:admin.vm.device.testclass.Set.assignment' )
3088
+ mock_action .assert_called_once_with (
3089
+ self .vm , f'device-assignment-changed:testclass' ,
3090
+ device = assignment .virtual_device )
3074
3091
self .app .save .assert_called_once_with ()
3075
3092
3076
- def test_653_vm_device_set_required_false_unchanged (self ):
3093
+ def test_653_vm_device_set_mode_unchanged (self ):
3077
3094
assignment = DeviceAssignment (VirtualDevice (Port (
3078
- self .vm , '1234' , 'testclass' )),
3079
- mode = 'auto-attach ' , options = {'opt1' : 'value' })
3095
+ self .vm , '1234' , 'testclass' ), device_id = 'bee' ),
3096
+ mode = 'required ' , options = {'opt1' : 'value' })
3080
3097
self .loop .run_until_complete (
3081
3098
self .vm .devices ['testclass' ].assign (assignment ))
3082
3099
with unittest .mock .patch .object (qubes .vm .qubesvm .QubesVM ,
3083
3100
'is_halted' , lambda _ : False ):
3084
3101
value = self .call_mgmt_func (
3085
- b'admin.vm.device.testclass.Set.required ' ,
3086
- b'test-vm1' , b'test-vm1+1234' , b'False ' )
3102
+ b'admin.vm.device.testclass.Set.assignment ' ,
3103
+ b'test-vm1' , b'test-vm1+1234:bee ' , b'required ' )
3087
3104
self .assertIsNone (value )
3088
- dev = qubes .device_protocol .DeviceInfo (Port (self .vm , '1234' , 'testclass' ))
3105
+ dev = DeviceInfo (Port (self .vm , '1234' , 'testclass' ),
3106
+ device_id = 'bee' )
3089
3107
required = self .vm .devices ['testclass' ].get_assigned_devices (
3090
3108
required_only = True )
3091
- self .assertNotIn (dev , required )
3109
+ self .assertIn (dev , required )
3092
3110
self .app .save .assert_called_once_with ()
3093
3111
3094
- def test_654_vm_device_set_persistent_not_assigned (self ):
3112
+ def test_654_vm_device_set_mode_not_assigned (self ):
3095
3113
self .vm .add_handler ('device-list:testclass' ,
3096
3114
self .device_list_testclass )
3097
3115
with unittest .mock .patch .object (qubes .vm .qubesvm .QubesVM ,
3098
3116
'is_halted' , lambda _ : False ):
3099
3117
with self .assertRaises (qubes .exc .QubesValueError ):
3100
3118
self .call_mgmt_func (
3101
- b'admin.vm.device.testclass.Set.required ' ,
3102
- b'test-vm1' , b'test-vm1+1234' , b'True ' )
3119
+ b'admin.vm.device.testclass.Set.assignment ' ,
3120
+ b'test-vm1' , b'test-vm1+1234' , b'required ' )
3103
3121
dev = qubes .device_protocol .DeviceInfo (Port (self .vm , '1234' , 'testclass' ))
3104
3122
self .assertNotIn (
3105
3123
dev , self .vm .devices ['testclass' ].get_assigned_devices ())
3106
3124
self .assertFalse (self .app .save .called )
3107
3125
3108
- def test_655_vm_device_set_persistent_invalid_value (self ):
3126
+ def test_655_vm_device_set_mode_invalid_value (self ):
3109
3127
self .vm .add_handler ('device-list:testclass' ,
3110
3128
self .device_list_testclass )
3111
3129
with unittest .mock .patch .object (qubes .vm .qubesvm .QubesVM ,
3112
3130
'is_halted' , lambda _ : False ):
3113
3131
with self .assertRaises (qubes .exc .PermissionDenied ):
3114
3132
self .call_mgmt_func (
3115
- b'admin.vm.device.testclass.Set.required ' ,
3116
- b'test-vm1' , b'test-vm1+1234' , b'maybe ' )
3133
+ b'admin.vm.device.testclass.Set.assignment ' ,
3134
+ b'test-vm1' , b'test-vm1+1234' , b'True ' )
3117
3135
dev = qubes .device_protocol .DeviceInfo (Port (self .vm , '1234' , 'testclass' ))
3118
3136
self .assertNotIn (dev , self .vm .devices ['testclass' ].get_assigned_devices ())
3119
3137
self .assertFalse (self .app .save .called )
0 commit comments