diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/test_aes.py | 55 | ||||
| -rw-r--r-- | test/test_all_urls.py | 2 | ||||
| -rw-r--r-- | test/test_execution.py | 12 | ||||
| -rw-r--r-- | test/test_utils.py | 22 | 
4 files changed, 90 insertions, 1 deletions
| diff --git a/test/test_aes.py b/test/test_aes.py new file mode 100644 index 000000000..4dc7de7b5 --- /dev/null +++ b/test/test_aes.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python + +from __future__ import unicode_literals + +# Allow direct execution +import os +import sys +import unittest +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +from youtube_dl.aes import aes_decrypt, aes_encrypt, aes_cbc_decrypt, aes_decrypt_text +from youtube_dl.utils import bytes_to_intlist, intlist_to_bytes +import base64 + +# the encrypted data can be generate with 'devscripts/generate_aes_testdata.py' + + +class TestAES(unittest.TestCase): +    def setUp(self): +        self.key = self.iv = [0x20, 0x15] + 14 * [0] +        self.secret_msg = b'Secret message goes here' + +    def test_encrypt(self): +        msg = b'message' +        key = list(range(16)) +        encrypted = aes_encrypt(bytes_to_intlist(msg), key) +        decrypted = intlist_to_bytes(aes_decrypt(encrypted, key)) +        self.assertEqual(decrypted, msg) + +    def test_cbc_decrypt(self): +        data = bytes_to_intlist( +            b"\x97\x92+\xe5\x0b\xc3\x18\x91ky9m&\xb3\xb5@\xe6'\xc2\x96.\xc8u\x88\xab9-[\x9e|\xf1\xcd" +        ) +        decrypted = intlist_to_bytes(aes_cbc_decrypt(data, self.key, self.iv)) +        self.assertEqual(decrypted.rstrip(b'\x08'), self.secret_msg) + +    def test_decrypt_text(self): +        password = intlist_to_bytes(self.key).decode('utf-8') +        encrypted = base64.b64encode( +            intlist_to_bytes(self.iv[:8]) + +            b'\x17\x15\x93\xab\x8d\x80V\xcdV\xe0\t\xcdo\xc2\xa5\xd8ksM\r\xe27N\xae' +        ) +        decrypted = (aes_decrypt_text(encrypted, password, 16)) +        self.assertEqual(decrypted, self.secret_msg) + +        password = intlist_to_bytes(self.key).decode('utf-8') +        encrypted = base64.b64encode( +            intlist_to_bytes(self.iv[:8]) + +            b'\x0b\xe6\xa4\xd9z\x0e\xb8\xb9\xd0\xd4i_\x85\x1d\x99\x98_\xe5\x80\xe7.\xbf\xa5\x83' +        ) +        decrypted = (aes_decrypt_text(encrypted, password, 32)) +        self.assertEqual(decrypted, self.secret_msg) + +if __name__ == '__main__': +    unittest.main() diff --git a/test/test_all_urls.py b/test/test_all_urls.py index 6ae168b7f..a9db42b30 100644 --- a/test/test_all_urls.py +++ b/test/test_all_urls.py @@ -59,7 +59,7 @@ class TestAllURLsMatching(unittest.TestCase):          self.assertMatch('www.youtube.com/NASAgovVideo/videos', ['youtube:user'])      def test_youtube_feeds(self): -        self.assertMatch('https://www.youtube.com/feed/watch_later', ['youtube:watch_later']) +        self.assertMatch('https://www.youtube.com/feed/watch_later', ['youtube:watchlater'])          self.assertMatch('https://www.youtube.com/feed/subscriptions', ['youtube:subscriptions'])          self.assertMatch('https://www.youtube.com/feed/recommended', ['youtube:recommended'])          self.assertMatch('https://www.youtube.com/my_favorites', ['youtube:favorites']) diff --git a/test/test_execution.py b/test/test_execution.py index 60df187de..620db080e 100644 --- a/test/test_execution.py +++ b/test/test_execution.py @@ -1,4 +1,6 @@  #!/usr/bin/env python +# coding: utf-8 +  from __future__ import unicode_literals  import unittest @@ -6,6 +8,9 @@ import unittest  import sys  import os  import subprocess +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +from youtube_dl.utils import encodeArgument  rootDir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) @@ -27,5 +32,12 @@ class TestExecution(unittest.TestCase):      def test_main_exec(self):          subprocess.check_call([sys.executable, 'youtube_dl/__main__.py', '--version'], cwd=rootDir, stdout=_DEV_NULL) +    def test_cmdline_umlauts(self): +        p = subprocess.Popen( +            [sys.executable, 'youtube_dl/__main__.py', encodeArgument('ä'), '--version'], +            cwd=rootDir, stdout=_DEV_NULL, stderr=subprocess.PIPE) +        _, stderr = p.communicate() +        self.assertFalse(stderr) +  if __name__ == '__main__':      unittest.main() diff --git a/test/test_utils.py b/test/test_utils.py index 3431ad24e..2e3a6480c 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -24,6 +24,7 @@ from youtube_dl.utils import (      encodeFilename,      escape_rfc3986,      escape_url, +    ExtractorError,      find_xpath_attr,      fix_xml_ampersands,      InAdvancePagedList, @@ -54,6 +55,7 @@ from youtube_dl.utils import (      urlencode_postdata,      version_tuple,      xpath_with_ns, +    xpath_text,      render_table,      match_str,  ) @@ -198,6 +200,8 @@ class TestUtil(unittest.TestCase):      def test_unescape_html(self):          self.assertEqual(unescapeHTML('%20;'), '%20;') +        self.assertEqual(unescapeHTML('/'), '/') +        self.assertEqual(unescapeHTML('/'), '/')          self.assertEqual(              unescapeHTML('é'), 'é') @@ -223,6 +227,7 @@ class TestUtil(unittest.TestCase):          self.assertEqual(              unified_strdate('2/2/2015 6:47:40 PM', day_first=False),              '20150202') +        self.assertEqual(unified_strdate('25-09-2014'), '20140925')      def test_find_xpath_attr(self):          testxml = '''<root> @@ -250,6 +255,17 @@ class TestUtil(unittest.TestCase):          self.assertEqual(find('media:song/media:author').text, 'The Author')          self.assertEqual(find('media:song/url').text, 'http://server.com/download.mp3') +    def test_xpath_text(self): +        testxml = '''<root> +            <div> +                <p>Foo</p> +            </div> +        </root>''' +        doc = xml.etree.ElementTree.fromstring(testxml) +        self.assertEqual(xpath_text(doc, 'div/p'), 'Foo') +        self.assertTrue(xpath_text(doc, 'div/bar') is None) +        self.assertRaises(ExtractorError, xpath_text, doc, 'div/bar', fatal=True) +      def test_smuggle_url(self):          data = {"ö": "ö", "abc": [3]}          url = 'https://foo.bar/baz?x=y#a' @@ -455,6 +471,12 @@ class TestUtil(unittest.TestCase):          self.assertEqual(d['x'], 1)          self.assertEqual(d['y'], 'a') +        on = js_to_json('["abc", "def",]') +        self.assertEqual(json.loads(on), ['abc', 'def']) + +        on = js_to_json('{"abc": "def",}') +        self.assertEqual(json.loads(on), {'abc': 'def'}) +      def test_clean_html(self):          self.assertEqual(clean_html('a:\nb'), 'a: b')          self.assertEqual(clean_html('a:\n   "b"'), 'a:    "b"') | 
