def test_validate_pdesc_failed(self): # test setting of parameter where the automatic conversion fails # set test_param = 'focus_distance_m' test_val = 'foo' expecting_type = float param = Parameter(test_param, test_val, expecting_type) # we know the parameter, this should not raise anything ParametersStore.get(test_param) # same as this one self.assertRaises(ValueError, ParametersStore.set, param.name, param.value) self.assertRaises(ValueError, ParametersStore.validate, param.name, param.value) self.assertRaises(ValueError, ParametersStore.validate_desc, param) # change value to correct one param.value = 10 try: ParametersStore.validate_desc(param) except Exception as err: self.fail("Exception raised")
def test_set_validate_failed(self): # test setting of parameter where the automatic conversion fails # set test_param = 'focus_distance_m' test_val = 'foo' expecting_type = float # this will raise ValueError obviously self.assertRaises(ValueError, expecting_type, test_val) focus_before = ParametersStore.get(test_param) # same as this one self.assertRaises(ValueError, ParametersStore.set, test_param, test_val) self.assertRaises(ValueError, ParametersStore.validate, test_param, test_val) self.assertRaises(KeyError, ParametersStore.validate, test_param + '=foo', test_val) self.assertRaises(KeyError, ParametersStore.set, test_param + '=foo', test_val) # try to fetch the parameter again to compare that its value # is unchaged focus_after = ParametersStore.get(test_param) self.assertIs(focus_before, focus_after)
def _set_servo_params_status(cls, pstatus): """Update status of parameters that are applied to servo""" for pname in SERVO_PARAMETERS: pdesc = ParametersStore.get(pname) pdesc_status = pdesc.status pdesc_status.set_status(pstatus) ParametersStore.set_status(pname, pdesc_status)
def test_apply(self): to_apply = [ Parameter('foo-writable', 'test', str), Parameter('foo-readonly', 'test2', str) ] applied = self.ctrl.apply_parameters(to_apply) # only one parameter was applied self.assertEqual(len(applied), 1) app_param = applied[0] self.assertEqual(app_param.name, 'foo-writable') self.assertEqual(app_param.value, 'test') # writable parameter was set self.assertEqual(ParametersStore.get('foo-writable').value, 'test') # readonly remains unchanged self.assertEqual(ParametersStore.get('foo-readonly').value, 'baz')
def test_set(self): # test that a parameter can be set test_param = 'focus_distance_m' test_val = 10.0 self.assertTrue(ParametersStore.set(test_param, test_val)) focus_set = ParametersStore.get(test_param) self.assertEqual(focus_set.value, test_val)
def test_get_value(self): for param_in in self.PARAMETERS: pdesc = ParametersStore.get(param_in.name) self.assertEqual(param_in.name, pdesc.name) self.assertEqual(param_in.value, pdesc.value) self.assertEqual(param_in.value_type, pdesc.value_type) pvalue = ParametersStore.get_value(param_in.name) self.assertEqual(pvalue, param_in.value) self.assertEqual(type(pvalue), param_in.value_type)
def test_set_convert(self): # test that parameter can be set, and the value is # automatically converted to proper type test_param = 'focus_distance_m' test_val = 10 expecting_type = float # test value is an int self.assertIsInstance(test_val, int) # first read it param = ParametersStore.get(test_param) self.assertEqual(param.value_type, expecting_type) self.assertIsInstance(param.value, expecting_type) # set ParametersStore.set(test_param, test_val) as_set = ParametersStore.get(test_param) # the type should have been converted according to parameter # description self.assertIsInstance(as_set.value, expecting_type) self.assertEqual(as_set.value, expecting_type(test_val))
def test_get_existing(self): from ros3ddevcontroller.param.sysparams import SYSTEM_PARAMETERS for param in SYSTEM_PARAMETERS: name = param.name value = param.value try: from_store = ParametersStore.get(param.name) except KeyError: self.fail('Expecting key in the set') self.assertEqual(name, from_store.name) self.assertEqual(value, from_store.value) self.assertEqual(param.value_type, from_store.value_type)
def test_set_value(self): self.assertNotEqual(ParametersStore.DEPENDENCIES, {}) pdesc_bar = ParametersStore.get('bar') ParametersStore.set('foo', 3) bar_val = ParametersStore.get_value('bar') # bar = foo + 1 self.assertEqual(bar_val, 4) baz_val = ParametersStore.get_value('baz') # baz = foo * bar + 1 self.assertEqual(baz_val, 13) # cafe = baz ** 2 + bar cafe_val = ParametersStore.get_value('cafe') self.assertEqual(cafe_val, 173)
def apply_parameters(self, params): """Apply a parameter set :param params list of ParamDesc: list of parameters to apply :rtype: list(Parameter) :return: list of parameters applied""" # record changed parameter descriptors changed_params = [] # apply parameters serially, note that if any parameter takes # longer to aplly this will contribute to wait time of the # whole request for param in params: applied = self.apply_single_parameter(param) # param validation was successful and was applied to servo if applied: par = ParametersStore.get(param.name) changed_params.append(par) return changed_params
def _set_camera_status(self, pstatus): for pname in CAMERA_PARAMETERS: pdesc = ParametersStore.get(pname) pdesc_status = pdesc.status pdesc_status.set_status(pstatus) ParametersStore.set_status(pname, pdesc_status)