def test_validate_flavor(self): track = {'device': 'videotest'} error, valid_track = validator.validate_track(track) self.assertEqual(error, None) # Valid track['flavor'] = 'presentation' error, valid_track = validator.validate_track(track) self.assertEqual(error, None) self.assertEqual(valid_track['flavor'], 'presentation') # Invalid track['flavor'] = 'noflavor' error, valid_track = validator.validate_track(track) self.assertNotEqual(error, None) self.assertEqual(valid_track['flavor'], 'presenter') # Valid (Test custom flavors) from galicaster.core import context as gc_context gc_conf = gc_context.get_conf() gc_conf.set('basic', 'custom_flavors', 'myflavor') # Add myflavor to list of valid flavors track['flavor'] = 'myflavor' error, valid_track = validator.validate_track(track) self.assertEqual(error, None) self.assertEqual(valid_track['flavor'], 'myflavor')
def __init__(self, options): self.logger = logger # Init gc_parameters add Base and Object class self.gc_parameters = self.get_gc_parameters() current_profile_path = context.get_conf().get_current_profile().path # Check the profile parameters (*.ini) # for k in options: # if k not in self.gc_parameters and k not in ['device', 'active', 'path']: # logger.warning('Does not exit the parameter "{0}". Please check the file {1}'.format( # k, current_profile_path)) # Init options with default gc_parameters values and options self.options = dict([(k,v['default']) for k,v in self.gc_parameters.iteritems()]) # TODO parsear self.options.update(options) # Validate option values try: validator.validate_track(self.options) except Exception as exc: error_msg = 'Profile error in {0}, track {1}. {2}'.format( current_profile_path, self.options['name'], exc) logger.error(error_msg) raise SystemError(error_msg) # Sanitaze values self.options["name"] = re.sub(r'\W+', '', self.options["name"])
def test_validate_with_params(self): track = {'pattern': '10'} gc_params = { "pattern": { "type": "integer", "default": 0, "range": (0,20), "description": "Background pattern"} } error, valid_track = validator.validate_track(track, gc_params) self.assertEqual(error, None) # Invalid track['pattern'] = 'nonumber' error, valid_track = validator.validate_track(track, gc_params) self.assertNotEqual(error, None) self.assertEqual(valid_track['pattern'], 0)
def test_validate_boolean(self): track = {'device': 'audiotest'} error, valid_track = validator.validate_track(track) self.assertEqual(error, None) # Valid track['player'] = 'True' error, valid_track = validator.validate_track(track) self.assertEqual(error, None) self.assertEqual(valid_track['player'], True) # Invalid track['player'] = 'noboolean' error, valid_track = validator.validate_track(track) self.assertNotEqual(error, None) self.assertEqual(valid_track['player'], 'True')
def test_validate_caps(self): track = { 'device': 'videotest', 'caps': 'video/x-raw,framerate=20/1,width=640,height=480' } error, valid_track = validator.validate_track(track) self.assertEqual(error, None)
def __init__(self, options): self.logger = logger # Init gc_parameters add Base and Object class self.gc_parameters = self.get_gc_parameters() path = 'Unknown' current_profile = context.get_conf().get_current_profile() if current_profile: path = current_profile.path # Check the profile parameters (*.ini) # for k in options: # if k not in self.gc_parameters and k not in ['device', 'active', 'path']: # logger.warning('Does not exit the parameter "{0}". Please check the file {1}'.format( # k, current_profile_path)) # Init options with default gc_parameters values and options self.options = dict([(k, v['default']) for k, v in self.gc_parameters.iteritems()]) # TODO parsear for k, v in options.iteritems(): if v: self.options[k] = validator.parse_automatic(v) # Validate option values try: global_error, self.options = validator.validate_track(self.options) except Exception as exc: error_msg = 'Profile error in {0}, track {1}. {2}'.format( path, self.options['name'], exc) logger.error(error_msg) raise SystemError(error_msg) # Sanitaze values self.options["name"] = re.sub(r'\W+', '', self.options["name"])
def test_validate_select(self): track = {'device': 'videotest'} error, valid_track = validator.validate_track(track) self.assertEqual(error, None) # Valid track['videosink'] = 'fakesink' error, valid_track = validator.validate_track(track) self.assertEqual(error, None) self.assertEqual(valid_track['videosink'], 'fakesink') # Invalid track['videosink'] = 'novideosink' error, valid_track = validator.validate_track(track) self.assertNotEqual(error, None) self.assertEqual(valid_track['videosink'], 'xvimagesink')
def test_validate_list(self): track = {'listparam': '[1,2,3,4]'} gc_params = {"listparam": {"type": "list", "default": []}} error, valid_track = validator.validate_track(track, gc_params) self.assertEqual(error, None) # Valid track['listparam'] = [1, 2, 3, 4, 5, 6] error, valid_track = validator.validate_track(track, gc_params) self.assertEqual(error, None) # Invalid track['listparam'] = 'nolist' error, valid_track = validator.validate_track(track, gc_params) self.assertNotEqual(error, None) self.assertEqual(valid_track['listparam'], [])
def test_validate_dict(self): track = {'dictparam': '{"1":"2","3":"4"}'} gc_params = {"dictparam": {"type": "dict", "default": {}}} error, valid_track = validator.validate_track(track, gc_params) self.assertEqual(error, None) self.assertEqual(valid_track['dictparam'], {'1': '2', '3': '4'}) # Valid track['dictparam'] = {1: 2, 3: 4, 5: 6} error, valid_track = validator.validate_track(track, gc_params) self.assertEqual(error, None) self.assertEqual(valid_track['dictparam'], {1: 2, 3: 4, 5: 6}) # Invalid track['dictparam'] = 'nodict' error, valid_track = validator.validate_track(track, gc_params) self.assertNotEqual(error, None) self.assertEqual(valid_track['dictparam'], {})
def test_validate_list(self): track = {'listparam': '[1,2,3,4]'} gc_params = { "listparam": { "type": "list", "default": []} } error, valid_track = validator.validate_track(track, gc_params) self.assertEqual(error, None) # Valid track['listparam'] = [1,2,3,4,5,6] error, valid_track = validator.validate_track(track, gc_params) self.assertEqual(error, None) # Invalid track['listparam'] = 'nolist' error, valid_track = validator.validate_track(track, gc_params) self.assertNotEqual(error, None) self.assertEqual(valid_track['listparam'], [])
def test_validate_unknown_type(self): track = {'pattern': None} gc_params = { "pattern": { "type": "unknown", "default": 0, "range": (0,20), "description": "Background pattern"} } error, valid_track = validator.validate_track(track, gc_params) self.assertEqual(error, None) self.assertEqual(valid_track['pattern'], 0)
def __check_tracks(self, profile): """Checks if the tracks of a profile are not repeated or if the profile is invalid. Arranges the profile too. Args: profile (Profile): the profile whose tracks are going to be checked. Returns: Str: an error message if the tracks of the profile were repeated or if the profile was invalid. Profile: the checked profile and repaired profile. """ profile.original_tracks = list(profile.tracks) error_msg = None # 1. Check repeated values tracks = list(profile.tracks) count = 0 for ind,track in enumerate(tracks): tracks.pop(count) for k,v in track.iteritems(): if k in ['name', 'file', 'location']: for aux in tracks: if k in aux.keys() and v == aux[k]: # Compose error message if error_msg: error_msg = '{}. Repeated value "{}" for tracks "{}" and "{}", forced to BIS{}'.format( error_msg, v, track.name, aux.name, v) else: error_msg = 'Profile error in {}, profile name: {}. Repeated value "{}={}" for tracks "{}" and "{}", forced to BIS{}'.format( profile.path, profile.name, k, v, track.name, aux.name, v) profile.tracks[ind][k] = "BIS{}".format(v) count +=1 # 2. Validate profile for ind, track in enumerate(profile.tracks): track_clean = track try: error, track_clean = validator.validate_track(track) track_clean = Track(track_clean) if error: error_msg = 'Profile error in {0}, profile name: {1}. {2}'.format( profile.path, profile.name, error) except Exception as exc: error_msg = 'Profile exception in {0}, profile name: {1}. {2}'.format( profile.path, profile.name, exc) profile.tracks[ind] = track_clean profile.original_tracks[ind] = track return error_msg, profile
def __check_tracks(self, profile): """Checks if the tracks of a profile are not repeated or if the profile is invalid. Arranges the profile too. Args: profile (Profile): the profile whose tracks are going to be checked. Returns: Str: an error message if the tracks of the profile were repeated or if the profile was invalid. Profile: the checked profile and repaired profile. """ profile.original_tracks = list(profile.tracks) error_msg = None # 1. Check repeated values tracks = list(profile.tracks) count = 0 for ind,track in enumerate(tracks): tracks.pop(count) for k,v in list(track.items()): if k in ['name', 'file']: for aux in tracks: if k in list(aux.keys()) and v == aux[k]: # Compose error message if error_msg: error_msg = '{}. Repeated value "{}" for tracks "{}" and "{}", forced to BIS{}'.format( error_msg, v, track.name, aux.name, v) else: error_msg = 'Profile error in {}, profile name: {}. Repeated value "{}={}" for tracks "{}" and "{}", forced to BIS{}'.format( profile.path, profile.name, k, v, track.name, aux.name, v) profile.tracks[ind][k] = "BIS{}".format(v) count +=1 # 2. Validate profile for ind, track in enumerate(profile.tracks): track_clean = track try: error, track_clean = validator.validate_track(track) track_clean = Track(track_clean) if error: error_msg = 'Profile error in {0}, profile name: {1}. {2}'.format( profile.path, profile.name, error) except Exception as exc: error_msg = 'Profile exception in {0}, profile name: {1}. {2}'.format( profile.path, profile.name, exc) profile.tracks[ind] = track_clean profile.original_tracks[ind] = track return error_msg, profile
def test_validate_dict(self): track = {'dictparam': '{"1":"2","3":"4"}'} gc_params = { "dictparam": { "type": "dict", "default": {}} } error, valid_track = validator.validate_track(track, gc_params) self.assertEqual(error, None) self.assertEqual(valid_track['dictparam'], {'1':'2','3':'4'}) # Valid track['dictparam'] = {1:2,3:4,5:6} error, valid_track = validator.validate_track(track, gc_params) self.assertEqual(error, None) self.assertEqual(valid_track['dictparam'], {1:2,3:4,5:6}) # Invalid track['dictparam'] = 'nodict' error, valid_track = validator.validate_track(track, gc_params) self.assertNotEqual(error, None) self.assertEqual(valid_track['dictparam'], {})
def test_validate_hexadecimal(self): track = {'device': 'screen'} error, valid_track = validator.validate_track(track) self.assertEqual(error, None) # Valid track['xid'] = '0x65CB00' error, valid_track = validator.validate_track(track) self.assertEqual(error, None) self.assertEqual(valid_track['xid'], 0x65CB00) # Out of range track['xid'] = '0xFFFFFG' error, valid_track = validator.validate_track(track) self.assertNotEqual(error, None) self.assertEqual(valid_track['xid'], 0) # Invalid track['xid'] = 'nonumber' error, valid_track = validator.validate_track(track) self.assertNotEqual(error, None) self.assertEqual(valid_track['xid'], 0)
def test_validate_integer(self): track = {'device': 'videotest'} error, valid_track = validator.validate_track(track) self.assertEqual(error, None) # Valid track['pattern'] = '10' error, valid_track = validator.validate_track(track) self.assertEqual(error, None) self.assertEqual(valid_track['pattern'], 10) # Out of range track['pattern'] = '-10' error, valid_track = validator.validate_track(track) self.assertNotEqual(error, None) self.assertEqual(valid_track['pattern'], 0) # Invalid track['pattern'] = 'nonumber' error, valid_track = validator.validate_track(track) self.assertNotEqual(error, None) self.assertEqual(valid_track['pattern'], 0)
def test_validate_float(self): track = {'device': 'audiotest'} error, valid_track = validator.validate_track(track) self.assertEqual(error, None) # Valid track['amplification'] = '2.0' error, valid_track = validator.validate_track(track) self.assertEqual(error, None) self.assertEqual(valid_track['amplification'], 2.0) # Out of range track['amplification'] = '-1.0' error, valid_track = validator.validate_track(track) self.assertNotEqual(error, None) self.assertEqual(valid_track['amplification'], 1.0) # Invalid track['amplification'] = 'nonumber' error, valid_track = validator.validate_track(track) self.assertNotEqual(error, None) self.assertEqual(valid_track['amplification'], 1.0)
def test_fill_track(self): track = {'device': 'videotest'} error, valid_track = validator.validate_track(track) self.assertEqual(error, None) self.assertTrue(valid_track.has_key('name')) self.assertTrue(valid_track.has_key('flavor')) self.assertTrue(valid_track.has_key('location')) self.assertTrue(valid_track.has_key('file')) self.assertTrue(valid_track.has_key('caps')) self.assertTrue(valid_track.has_key('pattern')) self.assertTrue(valid_track.has_key('color1')) self.assertTrue(valid_track.has_key('color2')) self.assertTrue(valid_track.has_key('videoencoder')) self.assertTrue(valid_track.has_key('muxer')) self.assertTrue(valid_track.has_key('videosink'))
def test_validate_caps(self): track = {'device': 'videotest', 'caps': 'video/x-raw,framerate=20/1,width=640,height=480'} error, valid_track = validator.validate_track(track) self.assertEqual(error, None)