def test_profile_with_no_profiles_in_files(self): conf_file = get_resource('conf/conf.ini') conf_dist_file = get_resource('conf/conf_dist.ini') profiles_dir = get_resource('conf/profiles') conf = Conf(conf_file, conf_dist_file, profiles_dir) conf.reload() self.assertEqual(len(conf.get_profiles()), 1)
def test_profile_with_no_profiles_in_files(self): conf_file = get_resource('conf/conf.ini') conf_dist_file = get_resource('conf/conf_dist.ini') profiles_dir = get_resource('conf/profiles') conf = Conf(conf_file, conf_dist_file, profiles_dir) self.assertEqual(len(conf.get_profiles()), 1)
def setUp(self): self.conf_file = get_resource('conf/conf.ini') self.backup_conf_file =get_resource('conf/conf.backup.ini') dist_file = get_resource('conf/conf-dist.ini') shutil.copyfile(self.conf_file,self.backup_conf_file) self.conf = Conf(self.conf_file,dist_file) self.conf.reload()
def setUp(self): self.conf_file = get_resource('conf/conf.ini') self.backup_conf_file = get_resource('conf/conf.backup.ini') dist_file = get_resource('conf/conf-dist.ini') shutil.copyfile(self.conf_file, self.backup_conf_file) self.conf = Conf(self.conf_file, dist_file) self.conf.reload()
def test_active_tag_default_profile(self): conf_file = get_resource('conf/conf_active.ini') dist_file = get_resource('conf/conf-dist.ini') conf = Conf(conf_file, dist_file) profile = conf.get_current_profile() self.assertEqual(1, len(profile.tracks))
def test_element_set_uri(self): self.assertEqual( self.track1.uri, path.join(get_resource('mediapackage'), 'SCREEN.mpeg')) self.track1.setURI(self.path_track2) self.assertEqual( self.track1.uri, path.join(get_resource('mediapackage'), 'CAMERA.mpeg'))
def setUp(self): self.conf_file = get_resource('profile/conf_good.ini') self.backup_conf_file = get_resource('profile/conf_good_backup.ini') conf_dist_file = get_resource('profile/conf-dist.ini') folder_path = get_resource('profile/folder') shutil.copyfile(self.conf_file,self.backup_conf_file) self.conf = Conf(self.conf_file,conf_dist_file, folder_path) self.conf.reload()
def test_active_tag_default_profile(self): conf_file = get_resource('conf/conf_active.ini') backup_conf_active = get_resource('conf/conf_active.backup.ini') dist_file = get_resource('conf/conf-dist.ini') shutil.copyfile(conf_file, backup_conf_active) conf = Conf(conf_file, dist_file) conf.reload() profile = conf.get_current_profile() self.assertEqual(1, len(profile.tracks)) shutil.copyfile(backup_conf_active, conf_file) os.remove(backup_conf_active)
def test_recover_recording(self): repo_folder = get_resource('repository') rectemp_aux = get_resource('utils/temporary_recording') rectemp = get_resource('repository/rectemp') # Read info.json info = {} info_filename = os.path.join(rectemp_aux, 'info.json') with open(info_filename, 'r') as handle: info = json.load(handle) # Modify path of tracks for indx, track in enumerate(info['tracks']): info['tracks'][indx]['path'] = rectemp # Copy temporary files for temp_file in os.listdir(rectemp_aux): full_path = os.path.join(rectemp_aux, temp_file) copy(full_path, os.path.join(rectemp, temp_file)) # Overwrite info.json with new paths f = open(os.path.join(rectemp, 'info.json'), 'w') f.write(json.dumps(info, indent=4, sort_keys=True)) f.close() # Get old length old_length = len(self.get_folders_in_repository(repo_folder)) # Create the repository from galicaster.core import context logger = context.get_logger() repo = repository.Repository( repo_folder, '', 'gc_{hostname}_{year}-{month}-{day}T{hour}h{minute}m{second}', logger) # Check 1 self.assertEqual(old_length + 1, len(self.get_folders_in_repository(repo_folder))) # Check 2 mp = repo.get('4ea1049f-c946-4d36-95d4-b8d01223bd73') self.assertNotEqual(mp, None) mp_info = mp.getAsDict() self.assertEqual(mp_info['status'], 4) self.assertTrue('Recovered' in mp_info['title']) self.assertEqual(len(mp_info['tracks']), 2) # Clean for temp_file in os.listdir(rectemp): os.remove(os.path.join(rectemp, temp_file)) repo.delete(mp)
def test_invalid_ini(self): conf_file = get_resource('conf/conf.ini') conf_dist_file = get_resource('conf/conf_dist.ini') profiles_dir = get_resource('conf/profiles') conf = Conf(conf_file, conf_dist_file, profiles_dir) conf.reload() old_conf = self.conf.get_all() content = '' with open(get_resource('conf/conf.ini'), 'r') as content_file: content = content_file.read() # Override conf file f = open(get_resource('conf/conf.ini'),'w') f.write('testing wrong config file') f.close() conf_dist_file = get_resource('conf/conf_dist.ini') profiles_dir = get_resource('conf/profiles') conf = Conf(conf_file, conf_dist_file, profiles_dir) conf.reload() new_conf = self.conf.get_all() self.assertEqual(old_conf, new_conf) # Override conf file f = open(get_resource('conf/conf.ini'),'w') f.write(content) f.close()
def setUp(self): for service_name in ['conf', 'dispatcher', 'mainwindow', 'heartbeat', 'repository', 'occlient', 'scheduler']: if context.has(service_name): context.delete(service_name) self.conf_file = get_resource('conf/conf.ini') self.backup_conf_file =get_resource('conf/conf.backup.ini') dist_file = get_resource('conf/conf-dist.ini') shutil.copyfile(self.conf_file,self.backup_conf_file) self.conf = Conf(self.conf_file,dist_file) context.set('conf',self.conf) self.conf.reload()
def test_invalid_ini(self): conf_file = get_resource('conf/conf.ini') conf_dist_file = get_resource('conf/conf_dist.ini') profiles_dir = get_resource('conf/profiles') conf = Conf(conf_file, conf_dist_file, profiles_dir) conf.reload() old_conf = self.conf.get_all() content = '' with open(get_resource('conf/conf.ini'), 'r') as content_file: content = content_file.read() # Override conf file f = open(get_resource('conf/conf.ini'), 'w') f.write('testing wrong config file') f.close() conf_dist_file = get_resource('conf/conf_dist.ini') profiles_dir = get_resource('conf/profiles') conf = Conf(conf_file, conf_dist_file, profiles_dir) conf.reload() new_conf = self.conf.get_all() self.assertEqual(old_conf, new_conf) # Override conf file f = open(get_resource('conf/conf.ini'), 'w') f.write(content) f.close()
def test_recover_recording(self): repo_folder = get_resource('repository') rectemp_aux = get_resource('utils/temporary_recording') rectemp = get_resource('repository/rectemp') # Read info.json info = {} info_filename = os.path.join(rectemp_aux, 'info.json') with open(info_filename, 'r') as handle: info = json.load(handle) # Modify path of tracks for indx, track in enumerate(info['tracks']): info['tracks'][indx]['path'] = rectemp # Copy temporary files for temp_file in os.listdir(rectemp_aux): full_path = os.path.join(rectemp_aux, temp_file) copy(full_path, os.path.join(rectemp, temp_file)) # Overwrite info.json with new paths f = open(os.path.join(rectemp, 'info.json'), 'w') f.write(json.dumps(info, indent=4, sort_keys=True)) f.close() # Get old length old_length = len(self.get_folders_in_repository(repo_folder)) # Create the repository from galicaster.core import context logger = context.get_logger() repo = repository.Repository(repo_folder, '', 'gc_{hostname}_{year}-{month}-{day}T{hour}h{minute}m{second}', logger) # Check 1 self.assertEqual(old_length +1 , len(self.get_folders_in_repository(repo_folder))) # Check 2 mp = repo.get('4ea1049f-c946-4d36-95d4-b8d01223bd73') self.assertNotEqual(mp, None) mp_info = mp.getAsDict() self.assertEqual(mp_info['status'], 4) self.assertTrue('Recovered' in mp_info['title']) self.assertEqual(len(mp_info['tracks']), 2) # Clean for temp_file in os.listdir(rectemp): os.remove(os.path.join(rectemp, temp_file)) repo.delete(mp)
def setUp(self): self.tmppath = mkdtemp() repo = repository.Repository(self.tmppath) context.set('repository', repo) # conf = Conf() # context.set('conf', conf) self.conf_file = get_resource('conf/conf.ini') self.backup_conf_file = get_resource('conf/conf.backup.ini') dist_file = get_resource('conf/conf-dist.ini') shutil.copyfile(self.conf_file, self.backup_conf_file) self.conf = Conf(self.conf_file, dist_file) self.conf.reload()
def test_side_by_side(self): w = worker.Worker(self.dispatcher, self.repo1, self.logger, self.client) baseDir = get_resource('sbs') path_track1 = path.join(baseDir, 'SCREEN.mp4') path_track2 = path.join(baseDir, 'CAMERA.mp4') path_catalog = path.join(baseDir, 'episode.xml') path_attach = path.join(baseDir, 'attachment.txt') path_capture_agent_properties = path.join(baseDir, 'org.opencastproject.capture.agent.properties') path_other = path.join(baseDir, 'manifest.xml') track1 = mediapackage.Track(uri = path_track1, duration = 532, flavor = "presentation/source") track2 = mediapackage.Track(uri = path_track2, duration = 532, flavor = "presenter/source") catalog = mediapackage.Catalog(uri = path_catalog, flavor = "catalog/source") attach = mediapackage.Attachment(uri = path_attach, flavor = "attachment/source") other = mediapackage.Other(uri = path_other, flavor = "other/source") self.mp.add(path_track1, mediapackage.TYPE_TRACK, "presentation/source", "video/mpeg", 532) self.mp.add(path_track2, mediapackage.TYPE_TRACK, "presenter/source", "video/mpeg", 532) self.mp.add(path_catalog, mediapackage.TYPE_CATALOG, "catalog/source", "text/xml") self.mp.add(path_attach, mediapackage.TYPE_ATTACHMENT, "attachment/source", "text/xml") self.mp.add(path_other, mediapackage.TYPE_OTHER, "other/source", "text/xml") filename = '/tmp/sidebyside.mpeg' w.enqueue_job_by_name('sidebyside', self.mp, {'location': filename}) time.sleep(2) self.assertTrue(os.path.exists(filename))
def test_round_trip(tmp_py, tmp_yaml, pipeline_yaml): if isinstance(pipeline_yaml, str): pipeline_yaml = get_resource("testflight-fixtures/" + pipeline_yaml) # YAML -> PY cli.import_yaml(pipeline_yaml, tmp_py) # PY -> YAML cli.synth(tmp_py, tmp_yaml) # load expected, remove anchors, write back and read as str with pipeline_yaml.open() as f: raw = yaml.safe_load(f) base_obj = Pipeline() for key in list(raw.keys()): if not hasattr(base_obj, key): del raw[key] cli._write_yaml_file(raw, pipeline_yaml) expected = pipeline_yaml.read_text() # get actual and compare actual = tmp_yaml.read_text() print("Len of expected", len(expected)) assert actual == expected, "\n".join( difflib.unified_diff(expected.splitlines(), actual.splitlines()) )
def setUp(self): for service_name in [ 'conf', 'dispatcher', 'mainwindow', 'heartbeat', 'repository', 'occlient', 'scheduler' ]: if context.has(service_name): context.delete(service_name) self.conf_file = get_resource('conf/conf.ini') self.backup_conf_file = get_resource('conf/conf.backup.ini') dist_file = get_resource('conf/conf-dist.ini') shutil.copyfile(self.conf_file, self.backup_conf_file) self.conf = Conf(self.conf_file, dist_file) context.set('conf', self.conf) self.conf.reload()
def setUp(self): self.tmppath = mkdtemp() repo = repository.Repository(self.tmppath) context.set('repository', repo) # conf = Conf() # context.set('conf', conf) self.conf_file = get_resource('conf/conf.ini') self.backup_conf_file =get_resource('conf/conf.backup.ini') dist_file = get_resource('conf/conf-dist.ini') shutil.copyfile(self.conf_file,self.backup_conf_file) self.conf = Conf(self.conf_file,dist_file) self.conf.reload()
def test_entry_proj_slug(): """Ensure that the slug-replacement logic takes effect.""" if not is_windows(): assert ( mk_main([PKG_NAME, "-C", get_resource("test-scenario"), "test"]) == 0 )
def test_init_no_dist_file(self): conf_file = get_resource('conf/conf.ini') primary_dist = path.join('/usr/share/galicaster/', 'conf-dist.ini') secondary_dist = path.abspath(path.join(path.dirname(__file__), '..', '..', 'conf-dist.ini')) #conf load custom conf and default dist conf = Conf(conf_file) self.assertEqual(conf_file, conf.conf_file) self.assertEqual( primary_dist if path.isfile(primary_dist) else secondary_dist, conf.conf_dist_file)
def test_interrupt(): """Test interrupting the process.""" with get_args() as base_args: good_base_args = base_args + ["-f", get_resource("Makefile"), "sleep"] proc = Process(target=mk_main, args=[good_base_args]) proc.start() time.sleep(0.5) os.kill(proc.pid, signal.SIGINT) proc.join()
class TestFunctions(TestCase): base_dir = get_resource('ical') def setUp(self): self.tmppath = mkdtemp() def tearDown(self): rmtree(self.tmppath) def test_ical_create_mp(self): repo = repository.Repository(self.tmppath) events = ical.get_events_from_file_ical(path.join(self.base_dir, 'test.ical')) for event in events: ical.create_mp(repo, event) next = repo.get_next_mediapackage() self.assertEqual(next.getDate(), datetime.strptime('2019-04-05 11:00:00', '%Y-%m-%d %H:%M:%S')) self.assertEqual(len(next.getElements()), 2) self.assertEqual(len(next.getAttachments()), 1) self.assertTrue(next.getAttachment('org.opencastproject.capture.agent.properties')) self.assertEqual(len(next.getCatalogs()), 1) nexts = repo.get_next_mediapackages() self.assertEqual(nexts[0].getDate(), datetime.strptime('2019-04-05 11:00:00', '%Y-%m-%d %H:%M:%S')) def test_ical_get_deleted_events(self): old_events = ical.get_events_from_file_ical(path.join(self.base_dir, 'test.ical')) new_events = ical.get_events_from_file_ical(path.join(self.base_dir, 'none.ical')) delete_events = ical.get_deleted_events(old_events, new_events) self.assertEqual(len(delete_events), 1) def test_ical_get_updated_events(self): old_events = ical.get_events_from_file_ical(path.join(self.base_dir, 'test.ical')) new_events = ical.get_events_from_file_ical(path.join(self.base_dir, 'test_update.ical')) update_events = ical.get_updated_events(old_events, new_events) self.assertEqual(len(update_events), 0) def test_ical_get_updated_events_updates(self): old_events = ical.get_events_from_file_ical(path.join(self.base_dir, 'testv2.ical')) new_events = ical.get_events_from_file_ical(path.join(self.base_dir, 'testv2_update.ical')) update_events = ical.get_updated_events(old_events, new_events) self.assertEqual(len(update_events), 6)
class TestFunctions(TestCase): base_dir = get_resource('sbs') def test_get_duration(self): screen = path.join(self.base_dir, 'SCREEN.mp4') camera = path.join(self.base_dir, 'CAMERA.mp4') audio = path.join(self.base_dir, 'AUDIO.mp3') self.assertEqual(mediainfo.get_duration(screen), 1) self.assertEqual(mediainfo.get_duration(camera), 1) self.assertEqual(mediainfo.get_duration(audio), 1)
class TestFunctions(TestCase): base_dir = get_resource('sbs') def test_play_with_audio(self): screen = path.join(self.base_dir, 'SCREEN.mp4') files = {"SCREEN": screen} players = {} player = Player(files, players) player.play() player.stop() def test_play_without_audio(self): screen = path.join(self.base_dir, 'SCREEN_NO_AUDIO.mp4') files = {"SCREEN": screen} players = {} player = Player(files, players) player.play() player.stop() def test_play_two_videos_without_audio(self): screen = path.join(self.base_dir, 'SCREEN_NO_AUDIO.mp4') camera = path.join(self.base_dir, 'CAMERA_NO_AUDIO.mp4') files = {"SCREEN": screen, "CAMERA": camera} players = {} player = Player(files, players) player.play() player.stop() def test_play_two_videos_and_audio(self): screen = path.join(self.base_dir, 'SCREEN_NO_AUDIO.mp4') camera = path.join(self.base_dir, 'CAMERA_NO_AUDIO.mp4') audio = path.join(self.base_dir, 'AUDIO.mp3') files = {"SCREEN": screen, "CAMERA": camera, "AUDIO": audio} players = {} player = Player(files, players) player.play() player.stop() def test_play_two_videos_audio_embedded(self): screen = path.join(self.base_dir, 'SCREEN.mp4') camera = path.join(self.base_dir, 'CAMERA.mp4') files = {"SCREEN": screen, "CAMERA": camera} players = {} player = Player(files, players) player.play() player.stop()
def test_entry(): """Test some basic command-line argument scenarios.""" if not is_windows(): with get_args() as base_args: good_base_args = base_args + ["-f", get_resource("Makefile")] assert mk_main(good_base_args + ["test"]) == 0 assert mk_main(good_base_args + ["--proj", "test", "test"]) == 0 assert mk_main(good_base_args + ["-p", "prefix", "test"]) == 0 assert mk_main(good_base_args + ["test_bad"]) != 0 assert mk_main(good_base_args + ["--weird-option", "yo"]) != 0 assert mk_main(base_args + ["-f", "nah"]) != 0 assert mk_main(base_args) == 0
class TestFunctions(TestCase): base_dir = get_resource('sbs') def test_sbs_with_embeded_audio(self): out = tempfile.NamedTemporaryFile() screen = path.join(self.base_dir, 'SCREEN_NO_AUDIO.mp4') camera = path.join(self.base_dir, 'CAMERA.mp4') out = sidebyside.create_sbs(out.name, camera, screen) self.assertTrue(out) def test_sbs_with_audio(self): out = tempfile.NamedTemporaryFile() screen = path.join(self.base_dir, 'SCREEN.mp4') camera = path.join(self.base_dir, 'CAMERA.mp4') audio = path.join(self.base_dir, 'AUDIO.mp3') out = sidebyside.create_sbs(out.name, camera, screen, audio) self.assertTrue(out) def test_sbs_with_two_embeded_audio(self): out = tempfile.NamedTemporaryFile() screen = path.join(self.base_dir, 'SCREEN.mp4') camera = path.join(self.base_dir, 'CAMERA.mp4') out = sidebyside.create_sbs(out.name, camera, screen) self.assertTrue(out) def test_sbs_without_audio(self): out = tempfile.NamedTemporaryFile() screen = path.join(self.base_dir, 'SCREEN_NO_AUDIO.mp4') camera = path.join(self.base_dir, 'CAMERA_NO_AUDIO.mp4') out = sidebyside.create_sbs(out.name, camera, screen) self.assertTrue(out) def test_sbs_no_input_file(self): out = tempfile.NamedTemporaryFile() screen = path.join(self.base_dir, 'NO_SCREEN.mp4') camera = path.join(self.base_dir, 'CAMERA.mp4') self.assertRaises(IOError, sidebyside.create_sbs, out.name, camera, screen) def test_sbs_less_than_two_files(self): out = tempfile.NamedTemporaryFile() screen = path.join(self.base_dir, 'SCREEN.mp4') camera = path.join(self.base_dir, 'CAMERA.mp4') self.assertRaises(IOError, sidebyside.create_sbs, out.name, None, camera)
def test_side_by_side(self): w = worker.Worker(self.dispatcher, self.repo1, self.logger, self.client) baseDir = get_resource('sbs') path_track1 = path.join(baseDir, 'SCREEN.mp4') path_track2 = path.join(baseDir, 'CAMERA.mp4') path_catalog = path.join(baseDir, 'episode.xml') path_attach = path.join(baseDir, 'attachment.txt') path_capture_agent_properties = path.join( baseDir, 'org.opencastproject.capture.agent.properties') path_other = path.join(baseDir, 'manifest.xml') track1 = mediapackage.Track(uri=path_track1, duration=532, flavor="presentation/source") track2 = mediapackage.Track(uri=path_track2, duration=532, flavor="presenter/source") catalog = mediapackage.Catalog(uri=path_catalog, flavor="catalog/source") attach = mediapackage.Attachment(uri=path_attach, flavor="attachment/source") other = mediapackage.Other(uri=path_other, flavor="other/source") self.mp.add(path_track1, mediapackage.TYPE_TRACK, "presentation/source", "video/mpeg", 532) self.mp.add(path_track2, mediapackage.TYPE_TRACK, "presenter/source", "video/mpeg", 532) self.mp.add(path_catalog, mediapackage.TYPE_CATALOG, "catalog/source", "text/xml") self.mp.add(path_attach, mediapackage.TYPE_ATTACHMENT, "attachment/source", "text/xml") self.mp.add(path_other, mediapackage.TYPE_OTHER, "other/source", "text/xml") filename = '/tmp/sidebyside.mpeg' w.enqueue_job_by_name('sidebyside', self.mp, {'location': filename}) time.sleep(2) self.assertTrue(os.path.exists(filename))
def setUp(self): """ Set up clear conf with a custom logger and repository folder. """ self.conf_path = '/etc/galicaster/conf.ini' identifier = self.id().split('.') identifier.reverse() test_number = re.sub('\D','',identifier[0]) self.test_path = '/tmp/test{}'.format(test_number) if os.path.exists(self.conf_path) and not os.path.exists('{}.old'.format(self.conf_path)): os.rename(self.conf_path,'{}.old'.format(self.conf_path)) shutil.copyfile(get_resource('conf/functional_test.ini'),'/etc/galicaster/conf.ini') if not os.path.exists(self.test_path): os.makedirs('{}/logs/'.format(self.test_path)) self.conf = Conf() self.conf.set('basic','repository','{}/Repository'.format(self.test_path)) self.conf.set('logger','path','{}/logs/galicaster.log'.format(self.test_path)) self.conf.update() config.load({'logDir':'{}/logs/'.format(self.test_path)}) from . import recording
def stop(self, force=False): self.time = datetime.now() if not force and os.path.isdir(self.bins[0]['path']): for bin in self.bins: filename = os.path.join(bin['path'], bin['file']) os.symlink(get_resource('sbs/CAMERA.mp4'), filename)
class TestFunctions(TestCase): baseDir = get_resource('mediapackage') path_track1 = path.join(baseDir, 'SCREEN.mpeg') path_track2 = path.join(baseDir, 'CAMERA.mpeg') path_catalog = path.join(baseDir, 'episode.xml') path_attach = path.join(baseDir, 'attachment.txt') path_other = path.join(baseDir, 'manifest.xml') path_gc = path.join(baseDir, 'galicaster.xml') def setUp(self): self.track1 = mediapackage.Track(uri=self.path_track1, duration=532, flavor="presentation/source", mimetype="video/mpeg") self.track2 = mediapackage.Track(uri=self.path_track2, duration=532, flavor="presenter/source", mimetype="video/mpeg") self.catalog = mediapackage.Catalog(uri=self.path_catalog, flavor="dublincore/episode", mimetype="text/xml") self.gc_catalog = mediapackage.Catalog(uri=self.path_gc, flavor="galicaster", mimetype="text/xml") def tearDown(self): del self.track1 del self.track2 del self.catalog def test_serializer(self): mp = mediapackage.Mediapackage() mp.add(self.track1) mp.add(self.track2) mp.add(self.catalog) mp.status = mediapackage.SCHEDULED mp.notes = u"Nota de Prueba <?php Caracteres ñ I'm raros >" try: parseString(serializer.set_manifest(mp)) except ExpatError: raise AssertionError("Error in serializer.set_manifest") try: parseString(serializer.set_episode(mp)) except ExpatError: raise AssertionError("Error in serializer.set_episode") try: json.loads(serializer.set_properties(mp)) except ExpatError: raise AssertionError("Error in serializer.set_properties") def test_save_in_zip(self): mp = mediapackage.Mediapackage() mp.add(self.track1) mp.add(self.track2) mp.add(self.catalog) mp.marshalDublincore() da = minidom.parseString(serializer.set_episode(mp)) db = minidom.parse(self.path_catalog) for name in ["dcterms:title", "dcterms:identifier", "dcterms:created"]: try: self.assertEqual( da.getElementsByTagName( name)[0].firstChild.wholeText.strip().strip("\n"), db.getElementsByTagName(name) [0].firstChild.wholeText.strip().strip("\n")) except IndexError: continue def test_save_system_zip(self): mp = mediapackage.Mediapackage() mp.add(self.track1, mediapackage.TYPE_TRACK, "presentation/source", "video/mpeg", 532) mp.add(self.track2, mediapackage.TYPE_TRACK, "presenter/source", "video/mpeg", 532) mp.add(self.catalog, mediapackage.TYPE_CATALOG, "catalog/source", "xml") tmppath = mkdtemp() repo = repository.Repository(tmppath) repo.add(mp) path_zip = "system.zip" serializer.save_system_zip(mp, path_zip) zfile = zipfile.ZipFile(path_zip, 'r') files = zfile.namelist() for element in mp.getElements(): self.assertTrue(path.split(element.getURI())[1] in files) rmtree(tmppath) remove(path_zip) @skip("skip") def test_operation_status(self): mp = mediapackage.Mediapackage() mp.add(self.track1) mp.operations["ingest"] = 4 mp.marshalDublincore() da = minidom.parseString(serializer.set_properties(mp)) name = "key:ingest" try: self.assertEqual( da.getElementsByTagName( name)[0].firstChild.wholeText.strip().strip("\n"), da.getElementsByTagName(name) [0].firstChild.wholeText.strip().strip("\n")) except IndexError: pass
class TestFunctions(TestCase): baseDir = get_resource('mediapackage') path_track1 = path.join(baseDir, 'SCREEN.mpeg') path_track2 = path.join(baseDir, 'CAMERA.mpeg') path_catalog = path.join(baseDir, 'episode.xml') path_attach = path.join(baseDir, 'attachment.txt') path_capture_agent_properties = path.join( baseDir, 'org.opencastproject.capture.agent.properties') path_other = path.join(baseDir, 'manifest.xml') def setUp(self): self.track1 = mediapackage.Track(uri=self.path_track1, duration=532, flavor="presentation/source") self.track2 = mediapackage.Track(uri=self.path_track2, duration=532, flavor="presenter/source") self.catalog = mediapackage.Catalog(uri=self.path_catalog, flavor="catalog/source") self.attach = mediapackage.Attachment(uri=self.path_attach, flavor="attachment/source") self.other = mediapackage.Other(uri=self.path_other, flavor="other/source") def tearDown(self): del self.track1 del self.track2 del self.catalog del self.attach del self.other def test_element_instantiation(self): # Check Element can't be instantiated self.assertRaises(RuntimeError, mediapackage.Element, self.path_track1) # Check Track self.assertEqual(self.track1.getElementType(), mediapackage.TYPE_TRACK) # Check Catalog self.assertEqual(self.catalog.getElementType(), mediapackage.TYPE_CATALOG) # Check Attachment self.assertEqual(self.attach.getElementType(), mediapackage.TYPE_ATTACHMENT) # Check Other self.assertEqual(self.other.getElementType(), mediapackage.TYPE_OTHER) def test_element_equality(self): track = mediapackage.Track(self.path_track1, 532, "presentation/source") attach = mediapackage.Attachment(self.path_attach, "attachment/source") catalog = mediapackage.Catalog(self.path_catalog, "catalog/source") other = mediapackage.Other(self.path_other, "other/source") self.assertFalse(track == self.track2) self.assertFalse(track == attach) self.assertFalse(attach == catalog) self.assertFalse(catalog == other) self.assertFalse(other == track) self.assertTrue(track == self.track1) self.assertTrue(attach == self.attach) self.assertTrue(catalog == self.catalog) self.assertTrue(other == self.other) def test_no_elements(self): mp = mediapackage.Mediapackage() self.assertEqual(len(mp.getElements()), 0) def test_add_uris(self): mp = mediapackage.Mediapackage() mp.add(self.path_track1, mediapackage.TYPE_TRACK, "presentation/source", None, 532) self.assertTrue(mp.contains(self.track1)) mp.add(self.path_track2, mediapackage.TYPE_TRACK, "presenter/source", None, 532) self.assertTrue(mp.contains(self.track2)) mp.add(self.path_catalog, mediapackage.TYPE_CATALOG, "catalog/source") self.assertTrue(mp.contains(self.catalog)) mp.add(self.path_attach, mediapackage.TYPE_ATTACHMENT, "attachment/source") self.assertTrue(mp.contains(self.attach)) mp.add(self.path_other, mediapackage.TYPE_OTHER, "other/source") self.assertTrue(mp.contains(self.other)) self.assertEqual(len(mp.getElements()), 5) self.assertEqual(len(mp.getTracks()), 2) self.assertEqual(len(mp.getAttachments()), 1) self.assertEqual(len(mp.getCatalogs()), 1) self.assertEqual(len(mp.getUnclassifiedElements()), 1) def test_duration_add_track(self): mp = mediapackage.Mediapackage() mp.add(self.path_track1, mediapackage.TYPE_TRACK, "presentation/source", None, 532) mp.add(self.path_track2, mediapackage.TYPE_TRACK, "presenter/source", None, 1532) self.assertEqual(mp.getDuration(), 1532) def test_add_elements(self): mp = mediapackage.Mediapackage() mp.add(self.track1) self.assertTrue(mp.contains(self.track1)) self.assertEqual(self.track1.getMediapackage(), mp) mp.add(self.track2) self.assertTrue(mp.contains(self.track2)) self.assertEqual(self.track2.getMediapackage(), mp) mp.add(self.catalog) self.assertTrue(mp.contains(self.catalog)) self.assertEqual(self.catalog.getMediapackage(), mp) mp.add(self.attach) self.assertTrue(mp.contains(self.attach)) self.assertEqual(self.attach.getMediapackage(), mp) mp.add(self.other) self.assertTrue(mp.contains(self.other)) self.assertEqual(self.other.getMediapackage(), mp) self.assertEqual(len(mp.getElements()), 5) self.assertEqual(len(mp.getTracks()), 2) self.assertEqual(len(mp.getAttachments()), 1) self.assertEqual(len(mp.getCatalogs()), 1) self.assertEqual(len(mp.getUnclassifiedElements()), 1) def test_tracks(self): mp = mediapackage.Mediapackage() file_path = path.join(self.baseDir, 'SCREEN.mpeg') mp.add(file_path, mediapackage.TYPE_TRACK, 'presenter/source') self.assertEqual(len(mp.getTracks()), 1) def test_no_tracks_by_flavour(self): mp = mediapackage.Mediapackage() file_path = path.join(self.baseDir, 'SCREEN.mpeg') mp.add(file_path, mediapackage.TYPE_TRACK, 'presenter/source') self.assertEqual(len(mp.getTracks('presentation/source')), 0) def test_no_tracks(self): mp = mediapackage.Mediapackage() file_path = path.join(self.baseDir, 'SCREEN.mpeg') mp.add(file_path, mediapackage.TYPE_TRACK, 'presenter/source') self.assertEqual(len(mp.getCatalogs()), 0) def test_add_tracks(self): mp = mediapackage.Mediapackage() file_path = path.join(self.baseDir, 'SCREEN.mpeg') mp.add(file_path, mediapackage.TYPE_TRACK, 'presenter/source') file_path = path.join(self.baseDir, 'CAMERA.mpeg') mp.add(file_path, mediapackage.TYPE_TRACK, 'presentation/source') file_path = path.join(self.baseDir, 'episode.xml') mp.add(file_path, mediapackage.TYPE_CATALOG, 'dublincore/episode') self.assertEqual(len(mp.getElements()), 3) def test_fromXML(self): xml = path.join(self.baseDir, 'manifest.xml') mp = fromXML(xml) self.assertEqual(mp.title, "Opening a folder...") self.assertEqual(mp.getIdentifier(), "dae91194-2114-481b-8908-8a8962baf8dc") self.assertEqual(mp.status, 0) self.assertEqual(mp.properties['notes'], u"Nota de Prueba <?php Caracteres ñ I'm raros >") def test_mediapackage_size(self): xml = path.join(self.baseDir, 'manifest.xml') mp = fromXML(xml) self.assertEqual(mp.getSize(), 598) def test_mediapackage_get_oc_capture_agent_property(self): mp = mediapackage.Mediapackage() mp.add(self.path_capture_agent_properties, mediapackage.TYPE_ATTACHMENT, identifier='org.opencastproject.capture.agent.properties') self.assertEqual(mp.getOCCaptureAgentProperty('capture.device.names'), 'camera,screen,audio') self.assertNotEqual( mp.getOCCaptureAgentProperty('capture.device.names.error'), 'camera,screen,audio') mp2 = mediapackage.Mediapackage() self.assertNotEqual( mp2.getOCCaptureAgentProperty('capture.device.names'), 'camera,screen,audio') self.assertEqual( mp.getOCCaptureAgentProperties(), { u'org.opencastproject.workflow.config.trimHold': 'false', u'capture.device.names': 'camera,screen,audio', u'org.opencastproject.workflow.definition': 'full', u'event.series': 'f16b43df-d1d4-4a85-8989-c060b85cea8d', u'event.title': 'Clase 2', u'event.location': 'GC-Etna', u'org.opencastproject.workflow.config.captionHold': 'false' }) def test_mp_and_operations(self): xml = path.join(self.baseDir, 'manifest.xml') mp = fromXML(xml) self.assertEqual(0, len(mp.operation)) def test_properties(self): mp = mediapackage.Mediapackage() mp.title = 'title' self.assertEqual(mp.title, 'title') self.assertEqual(mp.metadata_episode['title'], 'title')
class TestFunctions(TestCase): baseDir = get_resource('mediapackage') path_track1 = os.path.join(baseDir, 'SCREEN.mpeg') path_track2 = os.path.join(baseDir, 'CAMERA.mpeg') path_catalog = os.path.join(baseDir, 'episode.xml') path_attach = os.path.join(baseDir, 'attachment.txt') path_other = os.path.join(baseDir, 'manifest.xml') def setUp(self): self.track1 = mediapackage.Track(uri=self.path_track1, duration=532, flavor="presentation/source", mimetype="video/mpeg") self.track2 = mediapackage.Track(uri=self.path_track2, duration=532, flavor="presenter/source", mimetype="video/mpeg") self.catalog = mediapackage.Catalog(uri=self.path_catalog, flavor="catalog/source", mimetype="text/xml") self.tmppath = mkdtemp() def tearDown(self): rmtree(self.tmppath) def test_create_repository(self): repo = repository.Repository() self.assertTrue(repo.root, os.path.expanduser('~/Repository')) self.assertTrue(repo.get_attach_path(), os.path.expanduser('~/Repository/attach')) root = '/tmp' repo = repository.Repository(root) self.assertTrue(os.path.isdir('/tmp/attach/')) root = '/tmp/AAA' repo = repository.Repository(root) self.assertTrue(os.path.isdir('/tmp/AAA/attach/')) def test_repository(self): root = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'resources') repo = repository.Repository(root) self.assertEqual(repo.size(), 1) def test_big_repository(self): root = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'resources', 'repository') repo = repository.Repository(root) self.assertEqual(len(repo), 5) self.assertEqual(len(repo.list_by_status(mediapackage.FAILED)), 1) for (key, mp) in repo.items(): self.assertTrue(mp.getDuration() >= 0) self.assertEqual( repo["dae91194-2114-481b-8908-8a8962baf8da"].getIdentifier(), "dae91194-2114-481b-8908-8a8962baf8da") self.assertFalse( repo.get("dae91194-2114-481b-8908-8a8962baf8da").manual) self.assertTrue( repo.get("dae91194-2114-481b-8908-8a8962baf8db").manual) self.assertFalse( repo.get("dae91194-2114-481b-8908-8a8962baf8dd").manual) self.assertTrue( repo.get("dae91194-2114-481b-8908-8a8962baf8de").manual) self.assertEqual( repo.get("dae91194-2114-481b-8908-8a8962baf8da").status, mediapackage.SCHEDULED) self.assertEqual( repo.get("dae91194-2114-481b-8908-8a8962baf8db").status, mediapackage.RECORDING) self.assertEqual( repo.get("dae91194-2114-481b-8908-8a8962baf8dc").status, mediapackage.RECORDED) self.assertEqual( repo.get("dae91194-2114-481b-8908-8a8962baf8dd").status, mediapackage.FAILED) self.assertEqual( repo.get("dae91194-2114-481b-8908-8a8962baf8de").status, mediapackage.RECORDED) self.assertEqual( len(repo.get("dae91194-2114-481b-8908-8a8962baf8da").operation), 0) self.assertEqual( len(repo.get("dae91194-2114-481b-8908-8a8962baf8db").operation), 0) self.assertEqual( len(repo.get("dae91194-2114-481b-8908-8a8962baf8dc").operation), 1) self.assertEqual( len(repo.get("dae91194-2114-481b-8908-8a8962baf8dd").operation), 2) self.assertEqual( len(repo.get("dae91194-2114-481b-8908-8a8962baf8de").operation), 3) mp_duration = repo.get( "dae91194-2114-481b-8908-8a8962baf8da").getDuration() self.assertEqual(mp_duration, 2106) track_duration = repo.get("dae91194-2114-481b-8908-8a8962baf8da" ).getTrack("track-1").getDuration() self.assertEqual(track_duration, 2160) def test_add(self): repo = repository.Repository(self.tmppath) mp = mediapackage.Mediapackage() mp.add(self.track1) mp.add(self.track2) mp.add(self.catalog) repo.add(mp) self.assertRaises(KeyError, repo.add, mp) self.assertEqual(repo.size(), 1) def test_update(self): repo = repository.Repository(self.tmppath) mp = mediapackage.Mediapackage() mp.add(self.track1) mp.add(self.track2) mp.add(self.catalog) mp.metadata_episode["title"] = "Title" self.assertRaises(KeyError, repo.update, mp) repo.add(mp) self.assertEqual(repo.size(), 1) mp.metadata_episode["title"] = "new Title" repo.update(mp) self.assertEqual(repo.size(), 1) def test_delete(self): repo = repository.Repository(self.tmppath) mp = mediapackage.Mediapackage() mp.add(self.track1) mp.add(self.track2) mp.add(self.catalog) mp.metadata_episode["title"] = "Title" repo.add(mp) self.assertEqual(repo.size(), 1) repo.delete(mp) self.assertEqual(repo.size(), 0) self.assertEqual(len(os.listdir(self.tmppath)), 2) #attach and rectemp def test_bad_delete(self): repo = repository.Repository(self.tmppath) mp = mediapackage.Mediapackage() mp.add(self.track1) mp.add(self.track2) mp.add(self.catalog) mp.metadata_episode["title"] = "Title" self.assertRaises(KeyError, repo.delete, mp) def test_bad_add_and_update(self): pass def __get_tmp_bin(self, name, values): tmp_file = mkstemp(name)[1] bin = { 'file': os.path.basename(tmp_file), 'path': os.path.dirname(tmp_file) } bin.update(values) return bin def test_add_after_rec_manual(self): duration = 134 repo = repository.Repository(self.tmppath) mp = mediapackage.Mediapackage() #TODO file extension to mimetype??? bins = [ self.__get_tmp_bin( 't.avi', { 'device': 'test', 'name': 'name1', 'dev': 'dev1', 'flavor': 'presenter' }), self.__get_tmp_bin( 't.mp4', { 'device': 'test', 'name': 'name2', 'dev': 'dev2', 'flavor': 'presentation' }) ] self.assertTrue(mp.manual) repo.add_after_rec(mp, bins, duration) self.assertEqual(mp.getDuration(), duration) self.assertEqual(len(repo), 1) self.assertEqual(len(mp.getTracks()), len(bins)) def test_add_after_rec_no_manual(self): duration = 134 repo = repository.Repository(self.tmppath) mp = mediapackage.Mediapackage() repo.add(mp) mp.addAttachmentAsString( 'capture.device.names=name1,name3', name='org.opencastproject.capture.agent.properties', identifier='org.opencastproject.capture.agent.properties') mp.manual = False #TODO file extension to mimetype??? bins = [ self.__get_tmp_bin( 't.avi', { 'device': 'test', 'name': 'name1', 'dev': 'dev1', 'flavor': 'presenter' }), self.__get_tmp_bin( 't.mp4', { 'device': 'test', 'name': 'name2', 'dev': 'dev2', 'flavor': 'presentation' }) ] self.assertFalse(mp.manual) repo.add_after_rec(mp, bins, duration) self.assertEqual(mp.getDuration(), duration) self.assertEqual(len(repo), 1) self.assertEqual(len(mp.getTracks()), 1) def test_get_next_and_past_mediapackages(self): repo = repository.Repository(self.tmppath) now = datetime.datetime.utcnow() mp = mediapackage.Mediapackage(identifier="1", title='MP#1', date=(now - datetime.timedelta(days=1))) repo.add(mp) mp = mediapackage.Mediapackage(identifier="2", title='MP#2', date=(now - datetime.timedelta(days=30))) repo.add(mp) mp = mediapackage.Mediapackage(identifier="3", title='MP#3', date=(now - datetime.timedelta(days=60))) repo.add(mp) mp_next = mediapackage.Mediapackage(identifier="4", title='MP#4', date=(now + datetime.timedelta(days=1))) repo.add(mp_next) mp = mediapackage.Mediapackage(identifier="5", title='MP#5', date=(now + datetime.timedelta(days=30))) repo.add(mp) self.assertEqual(repo.get_next_mediapackage(), mp_next) self.assertEqual(len(repo.get_next_mediapackages()), 2) self.assertEqual(len(repo.get_past_mediapackages()), 3) self.assertEqual(len(repo.get_past_mediapackages(40)), 1) def test_repair_inconsistencies(self): repo = repository.Repository(self.tmppath) mp = mediapackage.Mediapackage() mp.status = mediapackage.INGESTED mp.setOpStatus("pr0", mediapackage.OP_IDLE) mp.setOpStatus("pr1", mediapackage.OP_PENDING) mp.setOpStatus("pr2", mediapackage.OP_PROCESSING) mp.setOpStatus("pr3", mediapackage.OP_DONE) mp.setOpStatus("pr4", mediapackage.OP_FAILED) repo.add(mp) repo.repair_inconsistencies(mp) self.assertEqual(mp.status, mediapackage.RECORDED) self.assertEqual(mp.getOpStatus("pr0"), mediapackage.OP_IDLE) self.assertEqual(mp.getOpStatus("pr1"), mediapackage.OP_FAILED) self.assertEqual(mp.getOpStatus("pr2"), mediapackage.OP_FAILED) self.assertEqual(mp.getOpStatus("pr3"), mediapackage.OP_DONE) self.assertEqual(mp.getOpStatus("pr4"), mediapackage.OP_FAILED) def test_repo_lifecycle(self): repo = repository.Repository(self.tmppath) mp = mediapackage.Mediapackage() mp.title = 'lifecycle test MP' self.assertEqual(len(repo), 0) repo.add_after_rec(mp, [], 30) self.assertEqual(len(repo), 1) for catalog in mp.getCatalogs(): self.assertEqual(mp.getURI(), os.path.dirname(catalog.getURI())) self.assertTrue( os.path.isfile(catalog.getURI()), 'The catalog path {0} not exists'.format(catalog.getURI())) def test_folder_name_template(self): repo = repository.Repository(self.tmppath, 'test', 'gc_{hostname}_m{second}') mp = mediapackage.Mediapackage() repo.add(mp) self.assertEqual( mp.getURI(), os.path.join( repo.root, 'gc_{hostname}_m{second}'.format( hostname="test", second=mp.getDate().strftime('%S')))) def test_folder_name_template_no_alphanumeric(self): repo = repository.Repository(self.tmppath, 'test', 'Foo-Bar[!!??]-{hostname}_m{second}') mp = mediapackage.Mediapackage() repo.add(mp) self.assertEqual( mp.getURI(), os.path.join( repo.root, 'FooBar{hostname}_m{second}'.format( hostname="test", second=mp.getDate().strftime('%S')))) def test_folder_name_template_unique(self): repo = repository.Repository(self.tmppath, 'test', 'test') mp1 = mediapackage.Mediapackage() mp2 = mediapackage.Mediapackage() mp3 = mediapackage.Mediapackage() repo.add(mp1) self.assertEqual(mp1.getURI(), os.path.join(repo.root, 'test')) repo.add(mp2) self.assertEqual(mp2.getURI(), os.path.join(repo.root, 'test_2')) repo.add(mp3) self.assertEqual(mp3.getURI(), os.path.join(repo.root, 'test_3')) def test_save_temprec_on_crash(self): repo = repository.Repository(self.tmppath, 'test', 'test') for file_name in ('CAMERA.avi', 'SCREEN.avi'): f = open(repo.get_rectemp_path(file_name), 'w') f.write("DATA" * 1000) f.close() open(repo.get_rectemp_path("None.avi"), 'w').close() # After crash. Create a new repo repo = repository.Repository(self.tmppath, 'test', 'test') num_files = num_backup_files = 0 for name in os.listdir(repo.get_rectemp_path()): full_path = os.path.join(repo.get_rectemp_path(), name) if os.path.isfile(full_path) and os.path.getsize(full_path): num_files += 1 if os.path.isdir(full_path): num_backup_files = len(os.listdir(full_path)) self.assertEqual(num_files, 0) self.assertEqual(num_backup_files, 2)
def test_init_all_files(self): conf_file = get_resource('conf/conf.ini') conf_dist_file = get_resource('conf/conf-dist.ini') conf = Conf(conf_file, conf_dist_file) self.assertEqual(conf_file, conf.conf_file) self.assertEqual(conf_dist_file, conf.conf_dist_file)
def test_element_set_uri(self): self.assertEqual(self.track1.uri, path.join(get_resource('mediapackage'), 'SCREEN.mpeg')) self.track1.setURI(self.path_track2) self.assertEqual(self.track1.uri, path.join(get_resource('mediapackage'), 'CAMERA.mpeg'))
class TestFunctions(TestCase): baseDir = get_resource('mediapackage') path_capture_agent_properties = os.path.join( baseDir, 'org.opencastproject.capture.agent.properties') class RepoMock(object): def update(self, mp): pass class MHHTTPClientMock(object): def __init__(self): self.calls = [] def ingest(self, mp_file, workflow=None, workflow_instance=None, workflow_parameters=None): self.calls.append({ 'file': mp_file, 'workflow': workflow, 'workflow_instance': workflow_instance, 'workflow_parameters': workflow_parameters }) class DispatcherMock(object): def connect(self, *args): pass def emit(self, *args): pass def test_init_parameters(self): repo = self.RepoMock() client = self.MHHTTPClientMock() dispatcher = self.DispatcherMock() logger = Logger(None) w = worker.Worker(dispatcher, repo, logger, client) self.assertEqual(w.export_path, os.path.expanduser('~')) self.assertEqual(w.tmp_path, tempfile.gettempdir()) #self.assertRaises(OSError, worker.Worker, repo, client, '/a/b/c', None) #self.assertRaises(OSError, worker.Worker, repo, client, None, '/a/b/c') w = worker.Worker(dispatcher, repo, logger, client, '/tmp/galicaster_tdd/a/b/c', '/tmp/galicaster_tdd/1/2/3') self.assertEqual(w.export_path, '/tmp/galicaster_tdd/a/b/c') self.assertEqual(w.tmp_path, '/tmp/galicaster_tdd/1/2/3') for dir_path in ('/tmp/galicaster_tdd/a/b/c', '/tmp/galicaster_tdd/1/2/3'): self.assertTrue(os.path.isdir(dir_path)) rmtree('/tmp/galicaster_tdd') def test_manual(self): repo = self.RepoMock() client = self.MHHTTPClientMock() dispatcher = self.DispatcherMock() logger = Logger(None) w = worker.Worker(dispatcher, repo, logger, client) mp = mediapackage.Mediapackage(uri='/tmp') mp.manual = True w._ingest(mp) self.assertEqual(client.calls[0]['workflow'], None) self.assertEqual(client.calls[0]['workflow_instance'], None) self.assertEqual(client.calls[0]['workflow_parameters'], None) def test_no_manual(self): repo = self.RepoMock() client = self.MHHTTPClientMock() dispatcher = self.DispatcherMock() logger = Logger(None) w = worker.Worker(dispatcher, repo, logger, client) mp = mediapackage.Mediapackage(identifier='1', uri='/tmp') mp.add(self.path_capture_agent_properties, mediapackage.TYPE_ATTACHMENT, identifier='org.opencastproject.capture.agent.properties') mp.manual = False w._ingest(mp) self.assertEqual(client.calls[0]['workflow'], 'full') self.assertEqual(client.calls[0]['workflow_instance'], '1') self.assertEqual(client.calls[0]['workflow_parameters'], { 'trimHold': 'false', 'captionHold': 'false' }) def test_no_manual_only_workflow(self): repo = self.RepoMock() client = self.MHHTTPClientMock() dispatcher = self.DispatcherMock() logger = Logger(None) w = worker.Worker(dispatcher, repo, logger, client) mp = mediapackage.Mediapackage(identifier='1', uri='/tmp') mp.addAttachmentAsString( 'org.opencastproject.workflow.definition=mini-full', name='org.opencastproject.capture.agent.properties', identifier='org.opencastproject.capture.agent.properties') mp.manual = False w._ingest(mp) self.assertEqual(client.calls[0]['workflow'], 'mini-full') self.assertEqual(client.calls[0]['workflow_instance'], '1') self.assertEqual(client.calls[0]['workflow_parameters'], {}) def test_exec_nightly(self): repo = Repository('/tmp/repo_night') client = self.MHHTTPClientMock() dispatcher = Dispatcher() logger = Logger(None) w = worker.Worker(dispatcher, repo, logger, client) mp = mediapackage.Mediapackage() mp.setOpStatus(worker.INGEST_CODE, mediapackage.OP_NIGHTLY) repo.add(mp) dispatcher.emit('galicaster-notify-nightly') time.sleep(1) # Need time to create zip self.assertEqual(len(client.calls), 1) self.assertEqual(mp.getOpStatus(worker.INGEST_CODE), mediapackage.OP_DONE) rmtree('/tmp/repo_night')
class TestFunctions(TestCase): baseDir = get_resource('mediapackage') path_track1 = path.join(baseDir, 'SCREEN.mpeg') path_track2 = path.join(baseDir, 'CAMERA.mpeg') path_catalog = path.join(baseDir, 'episode.xml') path_attach = path.join(baseDir, 'attachment.txt') path_capture_agent_properties = path.join( baseDir, 'org.opencastproject.capture.agent.properties') path_other = path.join(baseDir, 'manifest.xml') def setUp(self): self.track1 = mediapackage.Track(uri=self.path_track1, duration=532, flavor="presentation/source") self.track2 = mediapackage.Track(uri=self.path_track2, duration=532, flavor="presenter/source") self.catalog = mediapackage.Catalog(uri=self.path_catalog, flavor="catalog/source") self.attach = mediapackage.Attachment(uri=self.path_attach, flavor="attachment/source") self.other = mediapackage.Other(uri=self.path_other, flavor="other/source") def tearDown(self): del self.track1 del self.track2 del self.catalog del self.attach del self.other def test_element_instantiation(self): # Check Element can't be instantiated self.assertRaises(RuntimeError, mediapackage.Element, self.path_track1) # Check Track self.assertEqual(self.track1.getElementType(), mediapackage.TYPE_TRACK) # Check Catalog self.assertEqual(self.catalog.getElementType(), mediapackage.TYPE_CATALOG) # Check Attachment self.assertEqual(self.attach.getElementType(), mediapackage.TYPE_ATTACHMENT) # Check Other self.assertEqual(self.other.getElementType(), mediapackage.TYPE_OTHER) def test_element_equality(self): track = mediapackage.Track(self.path_track1, 532, "presentation/source") attach = mediapackage.Attachment(self.path_attach, "attachment/source") catalog = mediapackage.Catalog(self.path_catalog, "catalog/source") other = mediapackage.Other(self.path_other, "other/source") self.assertFalse(track == self.track2) self.assertFalse(track == attach) self.assertFalse(attach == catalog) self.assertFalse(catalog == other) self.assertFalse(other == track) self.assertTrue(track == self.track1) self.assertTrue(attach == self.attach) self.assertTrue(catalog == self.catalog) self.assertTrue(other == self.other) def test_no_elements(self): mp = mediapackage.Mediapackage() self.assertEqual(len(mp.getElements()), 0) def test_add_uris(self): mp = mediapackage.Mediapackage() mp.add(self.path_track1, mediapackage.TYPE_TRACK, "presentation/source", None, 532) self.assertTrue(mp.contains(self.track1)) mp.add(self.path_track2, mediapackage.TYPE_TRACK, "presenter/source", None, 532) self.assertTrue(mp.contains(self.track2)) mp.add(self.path_catalog, mediapackage.TYPE_CATALOG, "catalog/source") self.assertTrue(mp.contains(self.catalog)) mp.add(self.path_attach, mediapackage.TYPE_ATTACHMENT, "attachment/source") self.assertTrue(mp.contains(self.attach)) mp.add(self.path_other, mediapackage.TYPE_OTHER, "other/source") self.assertTrue(mp.contains(self.other)) self.assertEqual(len(mp.getElements()), 5) self.assertEqual(len(mp.getTracks()), 2) self.assertEqual(len(mp.getAttachments()), 1) self.assertEqual(len(mp.getCatalogs()), 1) self.assertEqual(len(mp.getUnclassifiedElements()), 1) def test_duration_add_track(self): mp = mediapackage.Mediapackage() mp.add(self.path_track1, mediapackage.TYPE_TRACK, "presentation/source", None, 532) mp.add(self.path_track2, mediapackage.TYPE_TRACK, "presenter/source", None, 1532) self.assertEqual(mp.getDuration(), 1532) def test_add_elements(self): mp = mediapackage.Mediapackage() mp.add(self.track1) self.assertTrue(mp.contains(self.track1)) self.assertEqual(self.track1.getMediapackage(), mp) mp.add(self.track2) self.assertTrue(mp.contains(self.track2)) self.assertEqual(self.track2.getMediapackage(), mp) mp.add(self.catalog) self.assertTrue(mp.contains(self.catalog)) self.assertEqual(self.catalog.getMediapackage(), mp) mp.add(self.attach) self.assertTrue(mp.contains(self.attach)) self.assertEqual(self.attach.getMediapackage(), mp) mp.add(self.other) self.assertTrue(mp.contains(self.other)) self.assertEqual(self.other.getMediapackage(), mp) self.assertEqual(len(mp.getElements()), 5) self.assertEqual(len(mp.getTracks()), 2) self.assertEqual(len(mp.getAttachments()), 1) self.assertEqual(len(mp.getCatalogs()), 1) self.assertEqual(len(mp.getUnclassifiedElements()), 1) def test_tracks(self): mp = mediapackage.Mediapackage() file_path = path.join(self.baseDir, 'SCREEN.mpeg') mp.add(file_path, mediapackage.TYPE_TRACK, 'presenter/source') self.assertEqual(len(mp.getTracks()), 1) def test_no_tracks_by_flavour(self): mp = mediapackage.Mediapackage() file_path = path.join(self.baseDir, 'SCREEN.mpeg') mp.add(file_path, mediapackage.TYPE_TRACK, 'presenter/source') self.assertEqual(len(mp.getTracks('presentation/source')), 0) def test_no_tracks(self): mp = mediapackage.Mediapackage() file_path = path.join(self.baseDir, 'SCREEN.mpeg') mp.add(file_path, mediapackage.TYPE_TRACK, 'presenter/source') self.assertEqual(len(mp.getCatalogs()), 0) def test_add_tracks(self): mp = mediapackage.Mediapackage() file_path = path.join(self.baseDir, 'SCREEN.mpeg') mp.add(file_path, mediapackage.TYPE_TRACK, 'presenter/source') file_path = path.join(self.baseDir, 'CAMERA.mpeg') mp.add(file_path, mediapackage.TYPE_TRACK, 'presentation/source') file_path = path.join(self.baseDir, 'episode.xml') mp.add(file_path, mediapackage.TYPE_CATALOG, 'dublincore/episode') self.assertEqual(len(mp.getElements()), 3) def test_fromXML(self): xml = path.join(self.baseDir, 'manifest.xml') mp = fromXML(xml) self.assertEqual(mp.title, "Opening a folder...") self.assertEqual(mp.getIdentifier(), "dae91194-2114-481b-8908-8a8962baf8dc") self.assertEqual(mp.status, 0) self.assertEqual(mp.properties['notes'], u"Nota de Prueba <?php Caracteres ñ I'm raros >") def test_fromXML_without_galicaster_xml(self): logger = context.get_logger() xml = path.join(self.baseDir, 'wrongmp', 'manifest.xml') mp = fromXML(xml, logger) self.assertEqual(mp.title, "Opening a folder...") self.assertEqual(mp.getIdentifier(), "dae91194-2114-481b-8908-8a8962baf8dc") self.assertEqual(mp.status, 4) def test_mediapackage_size(self): xml = path.join(self.baseDir, 'manifest.xml') mp = fromXML(xml) self.assertEqual(mp.getSize(), 598) def test_mediapackage_get_oc_capture_agent_property(self): mp = mediapackage.Mediapackage() mp.add(self.path_capture_agent_properties, mediapackage.TYPE_ATTACHMENT, identifier='org.opencastproject.capture.agent.properties') self.assertEqual(mp.getOCCaptureAgentProperty('capture.device.names'), 'camera,screen,audio') self.assertNotEqual( mp.getOCCaptureAgentProperty('capture.device.names.error'), 'camera,screen,audio') mp2 = mediapackage.Mediapackage() self.assertNotEqual( mp2.getOCCaptureAgentProperty('capture.device.names'), 'camera,screen,audio') self.assertEqual( mp.getOCCaptureAgentProperties(), { u'org.opencastproject.workflow.config.trimHold': 'false', u'capture.device.names': 'camera,screen,audio', u'org.opencastproject.workflow.definition': 'full', u'event.series': 'f16b43df-d1d4-4a85-8989-c060b85cea8d', u'event.title': 'Clase 2', u'event.location': 'GC-Etna', u'org.opencastproject.workflow.config.captionHold': 'false' }) def test_mp_and_operations(self): xml = path.join(self.baseDir, 'manifest.xml') mp = fromXML(xml) self.assertEqual(0, len(mp.operation)) def test_properties(self): mp = mediapackage.Mediapackage() mp.setTitle('title') self.assertEqual(mp.title, 'title') self.assertEqual(mp.metadata_episode['title'], 'title') self.assertEqual(mp.getMetadataByName('title'), 'title') now = datetime.datetime.now() timeok = False if (mp.getMetadataByName('created') < now + datetime.timedelta(10) and mp.getMetadataByName('created') > now - datetime.timedelta(10)): timeok = True self.assertTrue(timeok) mp.setIdentifier('12345') mp.setNewIdentifier() self.assertTrue(mp.getIdentifier() != '12345') self.assertEqual(mp.getMetadataByName('test'), None) self.assertEqual(mp.getMetadataByName('seriestitle'), None) self.assertEqual(mp.getMetadataByName('ispartof'), { 'title': None, 'identifier': None }) mp.setMetadataByName('seriestitle', 'testseries') self.assertEqual(mp.getMetadataByName('seriestitle'), 'testseries') mp.setSeriesTitle('test2') self.assertEqual(mp.getSeriesTitle(), 'test2') mp.setCreator('someone') self.assertEqual(mp.getCreator(), 'someone') mp.setLicense('Creative Commons') self.assertEqual(mp.getLicense(), 'Creative Commons') mp.setContributor('contributor1') self.assertEqual(mp.getContributor(), 'contributor1') mp.setLanguage('language1') self.assertEqual(mp.getLanguage(), 'language1') mp.setDescription('description1') self.assertEqual(mp.getDescription(), 'description1') now = datetime.datetime.now() mp.setLocalDate(now) self.assertEqual(mp.getLocalDate(), now) self.assertEqual(mp.getStartDateAsString(), now.isoformat()) aux = time.time() utcdiff = datetime.datetime.utcfromtimestamp( aux) - datetime.datetime.fromtimestamp(aux) self.assertEqual(mp.getStartDateAsString(True, False), (now + utcdiff).isoformat()) self.assertEqual(mp.getStartDateAsString(False, True), unicode(mp.getDate() - utcdiff)) self.assertEqual(mp.getStartDateAsString(False, False), unicode(mp.getDate())) mp.setSeries(None) self.assertEqual(mp.metadata_series, { 'title': None, 'identifier': None }) self.assertEqual(mp.metadata_episode["isPartOf"], None) def test_getAsDict(self): mp = mediapackage.Mediapackage() mp.add(self.path_track1, mediapackage.TYPE_TRACK, "presentation/source", None, 532) mp.add(self.path_track2, mediapackage.TYPE_TRACK, "presenter/source", None, 532) mp.add(self.path_catalog, mediapackage.TYPE_CATALOG, "catalog/source") mp.add(self.path_attach, mediapackage.TYPE_ATTACHMENT, "attachment/source") mp.add(self.path_other, mediapackage.TYPE_OTHER, "other/source") info = mp.getAsDict() self.assertTrue(info.has_key('id')) self.assertTrue(info.has_key('title')) self.assertTrue(info.has_key('status')) self.assertTrue(info.has_key('start')) self.assertTrue(info.has_key('creator')) self.assertTrue(info.has_key('tracks')) def test_element_tags(self): self.assertTrue(self.track1.getTags(), ['archive']) self.track1.addTag('engage') self.assertTrue(self.track1.getTags(), ['archive', 'engage']) self.track1.removeTag('archive') self.assertEqual(self.track1.getTags(), ['engage']) self.assertTrue(self.track1.containsTag('engage')) self.assertEqual(self.track1.containsTag('archive'), False) self.track1.setTags(['test', 'sometag']) self.assertEqual(self.track1.containsTag('engage'), False) self.track1.clearTags() self.assertEqual(self.track1.getTags(), set([])) def test_element_set_uri(self): self.assertEqual( self.track1.uri, path.join(get_resource('mediapackage'), 'SCREEN.mpeg')) self.track1.setURI(self.path_track2) self.assertEqual( self.track1.uri, path.join(get_resource('mediapackage'), 'CAMERA.mpeg')) def test_element_set_mime(self): self.assertEqual(self.track1.mime, None) self.track1.setMimeType('video/mp4') self.assertEqual(self.track1.mime, 'video/mp4') def test_element_set_flavor(self): self.assertEqual(self.track1.flavor, 'presentation/source') self.track1.setFlavor('presenter/source') self.assertEqual(self.track1.flavor, 'presenter/source') def test_element_set_mp(self): mp = mediapackage.Mediapackage() self.track1.setMediapackage(mp) string = 'test' self.assertRaises(TypeError, self.track1.setMediapackage, string)
class TestFunctions(TestCase): baseDir = get_resource('mediapackage') path_track1 = os.path.join(baseDir, 'SCREEN.mpeg') path_track2 = os.path.join(baseDir, 'CAMERA.mpeg') path_catalog = os.path.join(baseDir, 'episode.xml') path_attach = os.path.join(baseDir, 'attachment.txt') path_other = os.path.join(baseDir, 'manifest.xml') def setUp(self): self.track1 = mediapackage.Track(uri=self.path_track1, duration=532, flavor="presentation/source", mimetype="video/mpeg") self.track2 = mediapackage.Track(uri=self.path_track2, duration=532, flavor="presenter/source", mimetype="video/mpeg") self.catalog = mediapackage.Catalog(uri=self.path_catalog, flavor="catalog/source", mimetype="text/xml") self.tmppath = mkdtemp() def tearDown(self): rmtree(self.tmppath) def get_folders_in_repository(self, d): folders_list = [ os.path.join(d, o) for o in os.listdir(d) if (os.path.isdir(os.path.join(d, o)) and not 'attach' in (os.path.join(d, o)) and not 'rectemp' in (os.path.join(d, o))) ] return folders_list def test_create_repository(self): repo = repository.Repository() self.assertTrue(repo.root, os.path.expanduser('~/Repository')) self.assertTrue(repo.get_attach_path(), os.path.expanduser('~/Repository/attach')) root = '/tmp' repo = repository.Repository(root) self.assertTrue(os.path.isdir('/tmp/attach/')) root = '/tmp/AAA' repo = repository.Repository(root) self.assertTrue(os.path.isdir('/tmp/AAA/attach/')) def test_repository(self): root = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'resources') repo = repository.Repository(root) self.assertEqual(repo.size(), 1) def test_big_repository(self): root = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'resources', 'repository') repo = repository.Repository(root) self.assertEqual(len(repo), 5) self.assertEqual(len(repo.list_by_status(mediapackage.FAILED)), 1) for (key, mp) in list(repo.items()): self.assertTrue(mp.getDuration() >= 0) self.assertEqual( repo["dae91194-2114-481b-8908-8a8962baf8da"].getIdentifier(), "dae91194-2114-481b-8908-8a8962baf8da") self.assertFalse( repo.get("dae91194-2114-481b-8908-8a8962baf8da").manual) self.assertTrue( repo.get("dae91194-2114-481b-8908-8a8962baf8db").manual) self.assertFalse( repo.get("dae91194-2114-481b-8908-8a8962baf8dd").manual) self.assertTrue( repo.get("dae91194-2114-481b-8908-8a8962baf8de").manual) self.assertEqual( repo.get("dae91194-2114-481b-8908-8a8962baf8da").status, mediapackage.SCHEDULED) self.assertEqual( repo.get("dae91194-2114-481b-8908-8a8962baf8db").status, mediapackage.RECORDING) self.assertEqual( repo.get("dae91194-2114-481b-8908-8a8962baf8dc").status, mediapackage.RECORDED) self.assertEqual( repo.get("dae91194-2114-481b-8908-8a8962baf8dd").status, mediapackage.FAILED) self.assertEqual( repo.get("dae91194-2114-481b-8908-8a8962baf8de").status, mediapackage.RECORDED) self.assertEqual( len(repo.get("dae91194-2114-481b-8908-8a8962baf8da").operations), 0) self.assertEqual( len(repo.get("dae91194-2114-481b-8908-8a8962baf8db").operations), 0) self.assertEqual( len(repo.get("dae91194-2114-481b-8908-8a8962baf8dc").operations), 1) self.assertEqual( len(repo.get("dae91194-2114-481b-8908-8a8962baf8dd").operations), 2) self.assertEqual( len(repo.get("dae91194-2114-481b-8908-8a8962baf8de").operations), 3) mp_duration = repo.get( "dae91194-2114-481b-8908-8a8962baf8da").getDuration() self.assertEqual(mp_duration, 2106) track_duration = repo.get("dae91194-2114-481b-8908-8a8962baf8da" ).getTrack("track-1").getDuration() self.assertEqual(track_duration, 2160) @skip("need special configuration") def test_add(self): repo = repository.Repository(self.tmppath) mp = mediapackage.Mediapackage() mp.add(self.track1) mp.add(self.track2) mp.add(self.catalog) repo.add(mp) self.assertRaises(KeyError, repo.add, mp) self.assertEqual(repo.size(), 1) @skip("need special configuration") def test_update(self): repo = repository.Repository(self.tmppath) mp = mediapackage.Mediapackage() mp.add(self.track1) mp.add(self.track2) mp.add(self.catalog) mp.metadata_episode["title"] = "Title" self.assertRaises(KeyError, repo.update, mp) repo.add(mp) self.assertEqual(repo.size(), 1) mp.metadata_episode["title"] = "new Title" repo.update(mp) self.assertEqual(repo.size(), 1) @skip("need special configuration") def test_delete(self): repo = repository.Repository(self.tmppath) mp = mediapackage.Mediapackage() mp.add(self.track1) mp.add(self.track2) mp.add(self.catalog) mp.metadata_episode["title"] = "Title" repo.add(mp) self.assertEqual(repo.size(), 1) repo.delete(mp) self.assertEqual(repo.size(), 0) self.assertEqual(len(os.listdir(self.tmppath)), 2) #attach and rectemp @skip("need special configuration") def test_bad_delete(self): repo = repository.Repository(self.tmppath) mp = mediapackage.Mediapackage() mp.add(self.track1) mp.add(self.track2) mp.add(self.catalog) mp.metadata_episode["title"] = "Title" self.assertRaises(KeyError, repo.delete, mp) def test_bad_add_and_update(self): pass def __get_tmp_bin(self, name, values): tmp_file = mkstemp(name)[1] bin = { 'file': os.path.basename(tmp_file), 'path': os.path.dirname(tmp_file) } bin.update(values) return bin def test_add_after_rec_manual(self): duration = 134 repo = repository.Repository(self.tmppath) mp = mediapackage.Mediapackage() #TODO file extension to mimetype??? bins = [ self.__get_tmp_bin( 't.avi', { 'device': 'test', 'name': 'name1', 'dev': 'dev1', 'mimetype': 'video/mp4', 'flavor': 'presenter' }), self.__get_tmp_bin( 't.mp4', { 'device': 'test', 'name': 'name2', 'dev': 'dev2', 'mimetype': 'video/mp4', 'flavor': 'presentation' }) ] self.assertTrue(mp.manual) repo.add_after_rec(mp, bins, duration) self.assertEqual(mp.getDuration(), duration) self.assertEqual(len(repo), 1) self.assertEqual(len(mp.getTracks()), len(bins)) def test_add_after_rec_no_manual(self): duration = 134 repo = repository.Repository(self.tmppath) mp = mediapackage.Mediapackage() repo.add(mp) mp.addAttachmentAsString( 'capture.device.names=name1,name3', name='org.opencastproject.capture.agent.properties', identifier='org.opencastproject.capture.agent.properties') mp.manual = False #TODO file extension to mimetype??? bins = [ self.__get_tmp_bin( 't.avi', { 'device': 'test', 'name': 'name1', 'dev': 'dev1', 'mimetype': 'video/mp4', 'flavor': 'presenter' }), self.__get_tmp_bin( 't.mp4', { 'device': 'test', 'name': 'name2', 'dev': 'dev2', 'mimetype': 'video/mp4', 'flavor': 'presentation' }) ] self.assertFalse(mp.manual) repo.add_after_rec(mp, bins, duration) self.assertEqual(mp.getDuration(), duration) self.assertEqual(len(repo), 1) self.assertEqual(len(mp.getTracks()), 2) def test_get_next_and_past_mediapackages(self): repo = repository.Repository(self.tmppath) now = datetime.datetime.utcnow() mp = mediapackage.Mediapackage(identifier="1", title='MP#1', date=(now - datetime.timedelta(days=1))) repo.add(mp) mp = mediapackage.Mediapackage(identifier="2", title='MP#2', date=(now - datetime.timedelta(days=30))) repo.add(mp) mp = mediapackage.Mediapackage(identifier="3", title='MP#3', date=(now - datetime.timedelta(days=60))) repo.add(mp) mp_next = mediapackage.Mediapackage(identifier="4", title='MP#4', date=(now + datetime.timedelta(days=1))) repo.add(mp_next) mp = mediapackage.Mediapackage(identifier="5", title='MP#5', date=(now + datetime.timedelta(days=30))) repo.add(mp) self.assertEqual(repo.get_next_mediapackage(), mp_next) self.assertEqual(len(repo.get_next_mediapackages()), 2) self.assertEqual(len(repo.get_past_mediapackages()), 3) self.assertEqual(len(repo.get_past_mediapackages(40)), 1) def test_repair_inconsistencies(self): repo = repository.Repository(self.tmppath) mp = mediapackage.Mediapackage() mp.status = mediapackage.RECORDED mp.setOpStatus("pr0", mediapackage.OP_IDLE) mp.setOpStatus("pr1", mediapackage.OP_PENDING) mp.setOpStatus("pr2", mediapackage.OP_PROCESSING) mp.setOpStatus("pr3", mediapackage.OP_DONE) mp.setOpStatus("pr4", mediapackage.OP_FAILED) repo.add(mp) repo.repair_inconsistencies(mp) self.assertEqual(mp.status, mediapackage.RECORDED) self.assertEqual(mp.getOpStatus("pr0"), mediapackage.OP_IDLE) self.assertEqual(mp.getOpStatus("pr1"), mediapackage.OP_FAILED) self.assertEqual(mp.getOpStatus("pr2"), mediapackage.OP_FAILED) self.assertEqual(mp.getOpStatus("pr3"), mediapackage.OP_DONE) self.assertEqual(mp.getOpStatus("pr4"), mediapackage.OP_FAILED) def test_repo_lifecycle(self): repo = repository.Repository(self.tmppath) mp = mediapackage.Mediapackage() mp.title = 'lifecycle test MP' self.assertEqual(len(repo), 0) repo.add_after_rec(mp, [], 30) self.assertEqual(len(repo), 1) for catalog in mp.getCatalogs(): self.assertEqual(mp.getURI(), os.path.dirname(catalog.getURI())) self.assertTrue( os.path.isfile(catalog.getURI()), 'The catalog path {0} not exists'.format(catalog.getURI())) def test_folder_name_template(self): repo = repository.Repository(self.tmppath, 'test', 'gc_{hostname}_m{second}') mp = mediapackage.Mediapackage() repo.add(mp) self.assertEqual( mp.getURI(), os.path.join( repo.root, 'gc_{hostname}_m{second}'.format( hostname="test", second=mp.getDate().strftime('%S')))) def test_folder_name_template_no_alphanumeric(self): repo = repository.Repository(self.tmppath, 'test', 'Foo-Bar[!!??]-{hostname}_m{second}') mp = mediapackage.Mediapackage() repo.add(mp) self.assertEqual( mp.getURI(), os.path.join( repo.root, 'FooBar{hostname}_m{second}'.format( hostname="test", second=mp.getDate().strftime('%S')))) def test_folder_name_template_unique(self): repo = repository.Repository(self.tmppath, 'test', 'test') mp1 = mediapackage.Mediapackage() mp2 = mediapackage.Mediapackage() mp3 = mediapackage.Mediapackage() repo.add(mp1) self.assertEqual(mp1.getURI(), os.path.join(repo.root, 'test')) repo.add(mp2) self.assertEqual(mp2.getURI(), os.path.join(repo.root, 'test_2')) repo.add(mp3) self.assertEqual(mp3.getURI(), os.path.join(repo.root, 'test_3')) def test_save_temprec_on_crash(self): repo = repository.Repository(self.tmppath, 'test', 'test') for file_name in ('CAMERA.avi', 'SCREEN.avi'): f = open(repo.get_rectemp_path(file_name), 'w') f.write("DATA" * 1000) f.close() open(repo.get_rectemp_path("None.avi"), 'w').close() # After crash. Create a new repo repo = repository.Repository(self.tmppath, 'test', 'test') num_files = num_backup_files = 0 for name in os.listdir(repo.get_rectemp_path()): full_path = os.path.join(repo.get_rectemp_path(), name) if os.path.isfile(full_path) and os.path.getsize(full_path): num_files += 1 if os.path.isdir(full_path): num_backup_files = len(os.listdir(full_path)) self.assertEqual(num_files, 0) self.assertEqual(num_backup_files, 2) def test_recover_recording(self): repo_folder = get_resource('repository') rectemp_aux = get_resource('utils/temporary_recording') rectemp = get_resource('repository/rectemp') # Read info.json info = {} info_filename = os.path.join(rectemp_aux, 'info.json') with open(info_filename, 'r') as handle: info = json.load(handle) # Modify path of tracks for indx, track in enumerate(info['tracks']): info['tracks'][indx]['path'] = rectemp # Copy temporary files for temp_file in os.listdir(rectemp_aux): full_path = os.path.join(rectemp_aux, temp_file) copy(full_path, os.path.join(rectemp, temp_file)) # Overwrite info.json with new paths f = open(os.path.join(rectemp, 'info.json'), 'w') f.write(json.dumps(info, indent=4, sort_keys=True)) f.close() # Get old length old_length = len(self.get_folders_in_repository(repo_folder)) # Create the repository from galicaster.core import context logger = context.get_logger() repo = repository.Repository( repo_folder, '', 'gc_{hostname}_{year}-{month}-{day}T{hour}h{minute}m{second}', logger) # Check 1 self.assertEqual(old_length + 1, len(self.get_folders_in_repository(repo_folder))) # Check 2 mp = repo.get('4ea1049f-c946-4d36-95d4-b8d01223bd73') self.assertNotEqual(mp, None) mp_info = mp.getAsDict() self.assertEqual(mp_info['status'], 4) self.assertTrue('Recovered' in mp_info['title']) self.assertEqual(len(mp_info['tracks']), 2) # Clean for temp_file in os.listdir(rectemp): os.remove(os.path.join(rectemp, temp_file)) repo.delete(mp)
def setUp(self): conf_file = get_resource('profile/conf_good.ini') conf_dist_file = get_resource('profile/conf-dist.ini') folder_path = get_resource('profile/folder') self.conf = Conf(conf_file,conf_dist_file, folder_path)
@pytest.fixture() def tmp_py(tmp_dir: Path): yield tmp_dir / f"{secrets.token_hex(8)}.py" @pytest.fixture() def tmp_yaml(tmp_dir: Path): yield tmp_dir / f"{secrets.token_hex(8)}.yaml" @pytest.mark.parametrize( "pipeline_yaml", [ T("Hello World", get_resource("hello_world.yaml")), T("CF Deployment", get_resource("simple_cf_deploy.yaml")), T("Simple Python pipeline", get_resource("simple_python.yaml")), # Testflight ymls from https://github.com/concourse/concourse/tree/master/testflight/fixtures T("archive-pipeline-1.yml", "archive-pipeline-1.yml"), T("archive-pipeline-2.yml", "archive-pipeline-2.yml"), T("archive-pipeline-3.yml", "archive-pipeline-3.yml"), T("caching.yml", "caching.yml"), T("clear-task-cache.yml", "clear-task-cache.yml"), T("config-test.yml", "config-test.yml"), T("config_params.yml", "config_params.yml"), T( "container_limits.yml", "container_limits.yml" ), # Memory limit not int -> 1GB T( "container_limits_failing.yml", "container_limits_failing.yml"
def setUp(self): conf_file = get_resource('conf/conf.ini') dist_file = get_resource('conf/conf-dist.ini') self.conf = Conf(conf_file,dist_file)