1 #!/usr/bin/env python
2 # coding: utf-8
3
4 from __future__ import unicode_literals
5
6 # Allow direct execution
7 import os
8 import sys
9 import unittest
10 sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
11
12 import shutil
13
14 from test.helper import FakeYDL
15 from youtube_dl.cache import Cache
16 from youtube_dl.utils import version_tuple
17 from youtube_dl.version import __version__
18
19
20 def _is_empty(d):
21 return not bool(os.listdir(d))
22
23
24 def _mkdir(d):
25 if not os.path.exists(d):
26 os.mkdir(d)
27
28
29 class TestCache(unittest.TestCase):
30 def setUp(self):
31 TEST_DIR = os.path.dirname(os.path.abspath(__file__))
32 TESTDATA_DIR = os.path.join(TEST_DIR, 'testdata')
33 _mkdir(TESTDATA_DIR)
34 self.test_dir = os.path.join(TESTDATA_DIR, 'cache_test')
35 self.tearDown()
36
37 def tearDown(self):
38 if os.path.exists(self.test_dir):
39 shutil.rmtree(self.test_dir)
40
41 def test_cache(self):
42 ydl = FakeYDL({
43 'cachedir': self.test_dir,
44 })
45 c = Cache(ydl)
46 obj = {'x': 1, 'y': ['ä', '\\a', True]}
47 self.assertEqual(c.load('test_cache', 'k.'), None)
48 c.store('test_cache', 'k.', obj)
49 self.assertEqual(c.load('test_cache', 'k2'), None)
50 self.assertFalse(_is_empty(self.test_dir))
51 self.assertEqual(c.load('test_cache', 'k.'), obj)
52 self.assertEqual(c.load('test_cache', 'y'), None)
53 self.assertEqual(c.load('test_cache2', 'k.'), None)
54 c.remove()
55 self.assertFalse(os.path.exists(self.test_dir))
56 self.assertEqual(c.load('test_cache', 'k.'), None)
57
58 def test_cache_validation(self):
59 ydl = FakeYDL({
60 'cachedir': self.test_dir,
61 })
62 c = Cache(ydl)
63 obj = {'x': 1, 'y': ['ä', '\\a', True]}
64 c.store('test_cache', 'k.', obj)
65 self.assertEqual(c.load('test_cache', 'k.', min_ver='1970.01.01'), obj)
66 new_version = '.'.join(('%d' % ((v + 1) if i == 0 else v, )) for i, v in enumerate(version_tuple(__version__)))
67 self.assertIs(c.load('test_cache', 'k.', min_ver=new_version), None)
68
69
70 if __name__ == '__main__':
71 unittest.main()
|