import json
import unittest
import sys
-import socket
import hashlib
+import socket
# Allow direct execution
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
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):
self.tearDown()
def tearDown(self):
- for fn in [ test.get('file', False) for test in self.defs ]:
- if fn and os.path.exists(fn):
- os.remove(fn)
+ for files in [ test['files'] for test in self.defs ]:
+ for fn, md5 in files:
+ if os.path.exists(fn):
+ os.remove(fn)
### Dinamically generate tests
if not ie._WORKING:
print('Skipping: IE marked as not _WORKING')
return
- if not test_case['file']:
- print('Skipping: No output file specified')
- return
if 'skip' in test_case:
print('Skipping: {0}'.format(test_case['skip']))
return
fd.add_info_extractor(getattr(youtube_dl.InfoExtractors, ien + 'IE')())
fd.download([test_case['url']])
- self.assertTrue(os.path.exists(test_case['file']))
- if 'md5' in test_case:
- md5_for_file = _file_md5(test_case['file'])
- self.assertEqual(md5_for_file, test_case['md5'])
+ for filename, md5 in test_case['files']:
+ self.assertTrue(os.path.exists(filename))
+ if md5:
+ md5_for_file = _file_md5(filename)
+ self.assertEqual(md5_for_file, md5)
info_dict = fd.processed_info_dicts[0]
- for (info_element, value) in test_case.get('info_dict', {}).items():
+ for (info_field, value) in test_case.get('info_dict', {}).items():
if value.startswith('md5:'):
- md5_info_value = hashlib.md5(info_dict[info_element]).hexdigest()
+ md5_info_value = hashlib.md5(info_dict.get(info_field, '')).hexdigest()
self.assertEqual(value[3:], md5_info_value)
else:
- self.assertEqual(value, info_dict[info_element])
+ self.assertEqual(value, info_dict.get(info_field))
return test_template