test automation
This commit is contained in:
		
							parent
							
								
									f6152b4b64
								
							
						
					
					
						commit
						1535ac2ae9
					
				
							
								
								
									
										132
									
								
								test/gentests.py
									
									
									
									
									
								
							
							
						
						
									
										132
									
								
								test/gentests.py
									
									
									
									
									
								
							| @ -1,132 +0,0 @@ | ||||
| #!/usr/bin/env python3 | ||||
| 
 | ||||
| import io  # for python 2 | ||||
| import json | ||||
| import os | ||||
| import sys | ||||
| import unittest | ||||
| 
 | ||||
| # Allow direct execution | ||||
| import os | ||||
| sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | ||||
| 
 | ||||
| import youtube_dl.InfoExtractors | ||||
| 
 | ||||
| HEADER = u'''#!/usr/bin/env python | ||||
| 
 | ||||
| # DO NOT EDIT THIS FILE BY HAND! | ||||
| # It is auto-generated from tests.json and gentests.py. | ||||
| 
 | ||||
| import hashlib | ||||
| import io | ||||
| import os | ||||
| import json | ||||
| import unittest | ||||
| import sys | ||||
| import socket | ||||
| 
 | ||||
| # Allow direct execution | ||||
| import os | ||||
| sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | ||||
| 
 | ||||
| import youtube_dl.FileDownloader | ||||
| import youtube_dl.InfoExtractors | ||||
| from youtube_dl.utils import * | ||||
| 
 | ||||
| # General configuration (from __init__, not very elegant...) | ||||
| jar = compat_cookiejar.CookieJar() | ||||
| cookie_processor = compat_urllib_request.HTTPCookieProcessor(jar) | ||||
| proxy_handler = compat_urllib_request.ProxyHandler() | ||||
| opener = compat_urllib_request.build_opener(proxy_handler, cookie_processor, YoutubeDLHandler()) | ||||
| compat_urllib_request.install_opener(opener) | ||||
| socket.setdefaulttimeout(300) # 5 minutes should be enough (famous last words) | ||||
| 
 | ||||
| class FileDownloader(youtube_dl.FileDownloader): | ||||
|     def __init__(self, *args, **kwargs): | ||||
|         youtube_dl.FileDownloader.__init__(self, *args, **kwargs) | ||||
|         self.to_stderr = self.to_screen | ||||
| 
 | ||||
| def _file_md5(fn): | ||||
|     with open(fn, 'rb') as f: | ||||
|         return hashlib.md5(f.read()).hexdigest() | ||||
| try: | ||||
|     _skip_unless = unittest.skipUnless | ||||
| except AttributeError: # Python 2.6 | ||||
|     def _skip_unless(cond, reason='No reason given'): | ||||
|         def resfunc(f): | ||||
|             # Start the function name with test to appease nosetests-2.6 | ||||
|             def test_wfunc(*args, **kwargs): | ||||
|                 if cond: | ||||
|                     return f(*args, **kwargs) | ||||
|                 else: | ||||
|                     print('Skipped test') | ||||
|                     return | ||||
|             return test_wfunc | ||||
|         return resfunc | ||||
| _skip = lambda *args, **kwargs: _skip_unless(False, *args, **kwargs) | ||||
| 
 | ||||
| class DownloadTest(unittest.TestCase): | ||||
|     PARAMETERS_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), "parameters.json") | ||||
| 
 | ||||
|     def setUp(self): | ||||
|         # Clear old files | ||||
|         self.tearDown() | ||||
| 
 | ||||
|         with io.open(self.PARAMETERS_FILE, encoding='utf-8') as pf: | ||||
|             self.parameters = json.load(pf) | ||||
| ''' | ||||
| 
 | ||||
| FOOTER = u''' | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|     unittest.main() | ||||
| ''' | ||||
| 
 | ||||
| DEF_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'tests.json') | ||||
| TEST_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'test_download.py') | ||||
| 
 | ||||
| def gentests(): | ||||
|     with io.open(DEF_FILE, encoding='utf-8') as deff: | ||||
|         defs = json.load(deff) | ||||
|     with io.open(TEST_FILE, 'w', encoding='utf-8') as testf: | ||||
|         testf.write(HEADER) | ||||
|         spaces = ' ' * 4 | ||||
|         write = lambda l: testf.write(spaces + l + u'\n') | ||||
| 
 | ||||
|         for d in defs: | ||||
|             name = d['name'] | ||||
|             ie = getattr(youtube_dl.InfoExtractors, name + 'IE') | ||||
|             testf.write(u'\n') | ||||
|             write('@_skip_unless(youtube_dl.InfoExtractors.' + name + 'IE._WORKING, "IE marked as not _WORKING")') | ||||
|             if not d['file']: | ||||
|                 write('@_skip("No output file specified")') | ||||
|             elif 'skip' in d: | ||||
|                 write('@_skip(' + repr(d['skip']) + ')') | ||||
|             write('def test_' + name + '(self):') | ||||
|             write('    filename = ' + repr(d['file'])) | ||||
|             write('    params = self.parameters') | ||||
|             for p in d.get('params', {}): | ||||
|                 write('    params["' + p + '"] = ' + repr(d['params'][p])) | ||||
|             write('    fd = FileDownloader(params)') | ||||
|             write('    fd.add_info_extractor(youtube_dl.InfoExtractors.' + name + 'IE())') | ||||
|             for ien in d.get('addIEs', []): | ||||
|                 write('    fd.add_info_extractor(youtube_dl.InfoExtractors.' + ien + 'IE())') | ||||
|             write('    fd.download([' + repr(d['url']) + '])') | ||||
|             write('    self.assertTrue(os.path.exists(filename))') | ||||
|             if 'md5' in d: | ||||
|                 write('    md5_for_file = _file_md5(filename)') | ||||
|                 write('    self.assertEqual(md5_for_file, ' + repr(d['md5']) + ')') | ||||
| 
 | ||||
|         testf.write(u'\n\n') | ||||
|         write('def tearDown(self):') | ||||
|         for d in defs: | ||||
|             if d['file']: | ||||
|                 write('    if os.path.exists(' + repr(d['file']) + '):') | ||||
|                 write('        os.remove(' + repr(d['file']) + ')') | ||||
|             else: | ||||
|                 write('    # No file specified for ' + d['name']) | ||||
|         testf.write(u'\n') | ||||
|         testf.write(FOOTER) | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|     gentests() | ||||
| @ -1,198 +1,73 @@ | ||||
| #!/usr/bin/env python | ||||
| 
 | ||||
| # DO NOT EDIT THIS FILE BY HAND! | ||||
| # It is auto-generated from tests.json and gentests.py. | ||||
| 
 | ||||
| #!/usr/bin/env python2 | ||||
| import hashlib | ||||
| import io | ||||
| import os | ||||
| import json | ||||
| import unittest | ||||
| import sys | ||||
| import socket | ||||
| 
 | ||||
| # Allow direct execution | ||||
| import os | ||||
| sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | ||||
| from youtube_dl.FileDownloader import FileDownloader | ||||
| #import all the info extractor | ||||
| import youtube_dl | ||||
| 
 | ||||
| import youtube_dl.FileDownloader | ||||
| import youtube_dl.InfoExtractors | ||||
| from youtube_dl.utils import * | ||||
| 
 | ||||
| # General configuration (from __init__, not very elegant...) | ||||
| jar = compat_cookiejar.CookieJar() | ||||
| cookie_processor = compat_urllib_request.HTTPCookieProcessor(jar) | ||||
| proxy_handler = compat_urllib_request.ProxyHandler() | ||||
| opener = compat_urllib_request.build_opener(proxy_handler, cookie_processor, YoutubeDLHandler()) | ||||
| compat_urllib_request.install_opener(opener) | ||||
| socket.setdefaulttimeout(300) # 5 minutes should be enough (famous last words) | ||||
| 
 | ||||
| class FileDownloader(youtube_dl.FileDownloader): | ||||
|     def __init__(self, *args, **kwargs): | ||||
|         youtube_dl.FileDownloader.__init__(self, *args, **kwargs) | ||||
|         self.to_stderr = self.to_screen | ||||
| 
 | ||||
| def _file_md5(fn): | ||||
|     with open(fn, 'rb') as f: | ||||
|         return hashlib.md5(f.read()).hexdigest() | ||||
| try: | ||||
|     _skip_unless = unittest.skipUnless | ||||
| except AttributeError: # Python 2.6 | ||||
|     def _skip_unless(cond, reason='No reason given'): | ||||
|         def resfunc(f): | ||||
|             # Start the function name with test to appease nosetests-2.6 | ||||
|             def test_wfunc(*args, **kwargs): | ||||
|                 if cond: | ||||
|                     return f(*args, **kwargs) | ||||
|                 else: | ||||
|                     print('Skipped test') | ||||
|                     return | ||||
|             return test_wfunc | ||||
|         return resfunc | ||||
| _skip = lambda *args, **kwargs: _skip_unless(False, *args, **kwargs) | ||||
| 
 | ||||
| class DownloadTest(unittest.TestCase): | ||||
|     PARAMETERS_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), "parameters.json") | ||||
| 
 | ||||
|     def setUp(self): | ||||
|         # Clear old files | ||||
|         self.tearDown() | ||||
| 
 | ||||
|         with io.open(self.PARAMETERS_FILE, encoding='utf-8') as pf: | ||||
|             self.parameters = json.load(pf) | ||||
| 
 | ||||
|     @_skip_unless(youtube_dl.InfoExtractors.YoutubeIE._WORKING, "IE marked as not _WORKING") | ||||
|     def test_Youtube(self): | ||||
|         filename = u'BaW_jenozKc.mp4' | ||||
|         params = self.parameters | ||||
|         fd = FileDownloader(params) | ||||
|         fd.add_info_extractor(youtube_dl.InfoExtractors.YoutubeIE()) | ||||
|         fd.download([u'http://www.youtube.com/watch?v=BaW_jenozKc']) | ||||
|         self.assertTrue(os.path.exists(filename)) | ||||
| 
 | ||||
|     @_skip_unless(youtube_dl.InfoExtractors.DailymotionIE._WORKING, "IE marked as not _WORKING") | ||||
|     def test_Dailymotion(self): | ||||
|         filename = u'x33vw9.mp4' | ||||
|         params = self.parameters | ||||
|         fd = FileDownloader(params) | ||||
|         fd.add_info_extractor(youtube_dl.InfoExtractors.DailymotionIE()) | ||||
|         fd.download([u'http://www.dailymotion.com/video/x33vw9_tutoriel-de-youtubeur-dl-des-video_tech']) | ||||
|         self.assertTrue(os.path.exists(filename)) | ||||
|         md5_for_file = _file_md5(filename) | ||||
|         self.assertEqual(md5_for_file, u'392c4b85a60a90dc4792da41ce3144eb') | ||||
| 
 | ||||
|     @_skip_unless(youtube_dl.InfoExtractors.MetacafeIE._WORKING, "IE marked as not _WORKING") | ||||
|     def test_Metacafe(self): | ||||
|         filename = u'_aUehQsCQtM.flv' | ||||
|         params = self.parameters | ||||
|         fd = FileDownloader(params) | ||||
|         fd.add_info_extractor(youtube_dl.InfoExtractors.MetacafeIE()) | ||||
|         fd.add_info_extractor(youtube_dl.InfoExtractors.YoutubeIE()) | ||||
|         fd.download([u'http://www.metacafe.com/watch/yt-_aUehQsCQtM/the_electric_company_short_i_pbs_kids_go/']) | ||||
|         self.assertTrue(os.path.exists(filename)) | ||||
| 
 | ||||
|     @_skip_unless(youtube_dl.InfoExtractors.BlipTVIE._WORKING, "IE marked as not _WORKING") | ||||
|     def test_BlipTV(self): | ||||
|         filename = u'5779306.m4v' | ||||
|         params = self.parameters | ||||
|         fd = FileDownloader(params) | ||||
|         fd.add_info_extractor(youtube_dl.InfoExtractors.BlipTVIE()) | ||||
|         fd.download([u'http://blip.tv/cbr/cbr-exclusive-gotham-city-imposters-bats-vs-jokerz-short-3-5796352']) | ||||
|         self.assertTrue(os.path.exists(filename)) | ||||
|         md5_for_file = _file_md5(filename) | ||||
|         self.assertEqual(md5_for_file, u'b2d849efcf7ee18917e4b4d9ff37cafe') | ||||
| 
 | ||||
|     @_skip_unless(youtube_dl.InfoExtractors.XVideosIE._WORKING, "IE marked as not _WORKING") | ||||
|     def test_XVideos(self): | ||||
|         filename = u'939581.flv' | ||||
|         params = self.parameters | ||||
|         fd = FileDownloader(params) | ||||
|         fd.add_info_extractor(youtube_dl.InfoExtractors.XVideosIE()) | ||||
|         fd.download([u'http://www.xvideos.com/video939581/funny_porns_by_s_-1']) | ||||
|         self.assertTrue(os.path.exists(filename)) | ||||
|         md5_for_file = _file_md5(filename) | ||||
|         self.assertEqual(md5_for_file, u'1d0c835822f0a71a7bf011855db929d0') | ||||
| 
 | ||||
|     @_skip_unless(youtube_dl.InfoExtractors.VimeoIE._WORKING, "IE marked as not _WORKING") | ||||
|     def test_Vimeo(self): | ||||
|         filename = u'14160053.mp4' | ||||
|         params = self.parameters | ||||
|         fd = FileDownloader(params) | ||||
|         fd.add_info_extractor(youtube_dl.InfoExtractors.VimeoIE()) | ||||
|         fd.download([u'http://vimeo.com/14160053']) | ||||
|         self.assertTrue(os.path.exists(filename)) | ||||
|         md5_for_file = _file_md5(filename) | ||||
|         self.assertEqual(md5_for_file, u'60540a4ec7cc378ec84b919c0aed5023') | ||||
| 
 | ||||
|     @_skip_unless(youtube_dl.InfoExtractors.SoundcloudIE._WORKING, "IE marked as not _WORKING") | ||||
|     def test_Soundcloud(self): | ||||
|         filename = u'62986583.mp3' | ||||
|         params = self.parameters | ||||
|         fd = FileDownloader(params) | ||||
|         fd.add_info_extractor(youtube_dl.InfoExtractors.SoundcloudIE()) | ||||
|         fd.download([u'http://soundcloud.com/ethmusic/lostin-powers-she-so-heavy']) | ||||
|         self.assertTrue(os.path.exists(filename)) | ||||
|         md5_for_file = _file_md5(filename) | ||||
|         self.assertEqual(md5_for_file, u'ebef0a451b909710ed1d7787dddbf0d7') | ||||
| 
 | ||||
|     @_skip_unless(youtube_dl.InfoExtractors.StanfordOpenClassroomIE._WORKING, "IE marked as not _WORKING") | ||||
|     def test_StanfordOpenClassroom(self): | ||||
|         filename = u'PracticalUnix_intro-environment.mp4' | ||||
|         params = self.parameters | ||||
|         fd = FileDownloader(params) | ||||
|         fd.add_info_extractor(youtube_dl.InfoExtractors.StanfordOpenClassroomIE()) | ||||
|         fd.download([u'http://openclassroom.stanford.edu/MainFolder/VideoPage.php?course=PracticalUnix&video=intro-environment&speed=100']) | ||||
|         self.assertTrue(os.path.exists(filename)) | ||||
|         md5_for_file = _file_md5(filename) | ||||
|         self.assertEqual(md5_for_file, u'544a9468546059d4e80d76265b0443b8') | ||||
| 
 | ||||
|     @_skip_unless(youtube_dl.InfoExtractors.XNXXIE._WORKING, "IE marked as not _WORKING") | ||||
|     def test_XNXX(self): | ||||
|         filename = u'1135332.flv' | ||||
|         params = self.parameters | ||||
|         fd = FileDownloader(params) | ||||
|         fd.add_info_extractor(youtube_dl.InfoExtractors.XNXXIE()) | ||||
|         fd.download([u'http://video.xnxx.com/video1135332/lida_naked_funny_actress_5_']) | ||||
|         self.assertTrue(os.path.exists(filename)) | ||||
|         md5_for_file = _file_md5(filename) | ||||
|         self.assertEqual(md5_for_file, u'0831677e2b4761795f68d417e0b7b445') | ||||
| 
 | ||||
|     @_skip_unless(youtube_dl.InfoExtractors.YoukuIE._WORKING, "IE marked as not _WORKING") | ||||
|     def test_Youku(self): | ||||
|         filename = u'XNDgyMDQ2NTQw_part00.flv' | ||||
|         params = self.parameters | ||||
|         params["test"] = False | ||||
|         fd = FileDownloader(params) | ||||
|         fd.add_info_extractor(youtube_dl.InfoExtractors.YoukuIE()) | ||||
|         fd.download([u'http://v.youku.com/v_show/id_XNDgyMDQ2NTQw.html']) | ||||
|         self.assertTrue(os.path.exists(filename)) | ||||
|         md5_for_file = _file_md5(filename) | ||||
|         self.assertEqual(md5_for_file, u'ffe3f2e435663dc2d1eea34faeff5b5b') | ||||
| DEF_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'tests.json') | ||||
| PARAM_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'parameters.json' | ||||
| ) | ||||
| 
 | ||||
| 
 | ||||
|     def tearDown(self): | ||||
|         if os.path.exists(u'BaW_jenozKc.mp4'): | ||||
|             os.remove(u'BaW_jenozKc.mp4') | ||||
|         if os.path.exists(u'x33vw9.mp4'): | ||||
|             os.remove(u'x33vw9.mp4') | ||||
|         if os.path.exists(u'_aUehQsCQtM.flv'): | ||||
|             os.remove(u'_aUehQsCQtM.flv') | ||||
|         if os.path.exists(u'5779306.m4v'): | ||||
|             os.remove(u'5779306.m4v') | ||||
|         if os.path.exists(u'939581.flv'): | ||||
|             os.remove(u'939581.flv') | ||||
|         if os.path.exists(u'14160053.mp4'): | ||||
|             os.remove(u'14160053.mp4') | ||||
|         if os.path.exists(u'62986583.mp3'): | ||||
|             os.remove(u'62986583.mp3') | ||||
|         if os.path.exists(u'PracticalUnix_intro-environment.mp4'): | ||||
|             os.remove(u'PracticalUnix_intro-environment.mp4') | ||||
|         if os.path.exists(u'1135332.flv'): | ||||
|             os.remove(u'1135332.flv') | ||||
|         if os.path.exists(u'XNDgyMDQ2NTQw_part00.flv'): | ||||
|             os.remove(u'XNDgyMDQ2NTQw_part00.flv') | ||||
| class TestDownload(unittest.TestCase): | ||||
|     pass | ||||
| 
 | ||||
| 
 | ||||
| def md5_for_file(filename, block_size=2**20): | ||||
|     with open(filename) as f: | ||||
|         md5 = hashlib.md5() | ||||
|         while True: | ||||
|             data = f.read(block_size) | ||||
|             if not data: | ||||
|                 break | ||||
|             md5.update(data) | ||||
|         return md5.hexdigest() | ||||
| 
 | ||||
| 
 | ||||
| def generator(name, url, md5, file, ie_param, optional_ie): | ||||
|     def test_template(self): | ||||
|         fd = FileDownloader(ie_param) | ||||
|         fd.add_info_extractor(getattr(youtube_dl, name + "IE")()) | ||||
|         fd.download([url]) | ||||
|         self.assertTrue(os.path.exists(file)) | ||||
|         self.assertEqual(md5_for_file(file), md5) | ||||
|     return test_template | ||||
|     #only python 2.7 | ||||
| 
 | ||||
| def clean_generator(files): | ||||
|     def clean_template(self): | ||||
|         for file_name in files: | ||||
|             if os.path.exists(file_name): | ||||
|                 os.remove(file_name) | ||||
|     return clean_template | ||||
| 
 | ||||
| with open(DEF_FILE, "r") as f: | ||||
|     with open(PARAM_FILE) as fp: | ||||
|         p = json.load(fp) | ||||
|         test_param = json.load(f) | ||||
|         files = set() | ||||
|         for test_case in test_param: | ||||
|             if test_case.get("broken", False): | ||||
|                 continue | ||||
|             try: | ||||
|                 files.add(test_case["file"]) | ||||
|                 test_method = generator(test_case['name'], test_case['url'], test_case['md5'], test_case['file'], p, test_case.get('add_ie', [])) | ||||
|                 test_method.__name__ = "test_{0}".format(test_case["name"]) | ||||
|                 setattr(TestDownload, test_method.__name__, test_method) | ||||
|                 del test_method | ||||
|             except KeyError as e: | ||||
|                 sys.stderr.write("Issue with the parameters of test {0}.\n".format(test_case.get("name", "unknown test"))) | ||||
|         #clean the files | ||||
|         ff = clean_generator(files) | ||||
|         ff.__name__ = "tearDown" | ||||
|         setattr(TestDownload, ff.__name__, ff) | ||||
|         del ff | ||||
| 
 | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|     unittest.main() | ||||
|  | ||||
| @ -12,7 +12,7 @@ | ||||
|   }, | ||||
|   { | ||||
|     "name": "Metacafe", | ||||
|     "addIEs": ["Youtube"], | ||||
|     "add_ie": ["Youtube"], | ||||
|     "url":  "http://www.metacafe.com/watch/yt-_aUehQsCQtM/the_electric_company_short_i_pbs_kids_go/", | ||||
|     "file":  "_aUehQsCQtM.flv" | ||||
|   }, | ||||
| @ -57,6 +57,6 @@ | ||||
|     "url": "http://v.youku.com/v_show/id_XNDgyMDQ2NTQw.html", | ||||
|     "file": "XNDgyMDQ2NTQw_part00.flv", | ||||
|     "md5": "ffe3f2e435663dc2d1eea34faeff5b5b", | ||||
|     "params": { "test": false } | ||||
|     "broken": true | ||||
|   } | ||||
| ] | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user