|
1 | 1 | # -*- coding: utf-8 -*-
|
2 | 2 |
|
3 | 3 | import backports.lzma as lzma
|
| 4 | +import mock |
4 | 5 | import os
|
5 | 6 | import random
|
6 | 7 | import string
|
@@ -53,6 +54,58 @@ def _get_xzfile(filenames):
|
53 | 54 | return lzma_fobj
|
54 | 55 |
|
55 | 56 |
|
| 57 | +class TestHelpers(base.TestCase): |
| 58 | + |
| 59 | + @mock.patch.object(layers.cache, 'redis_conn') |
| 60 | + @mock.patch.object(layers.diff_queue, 'push') |
| 61 | + @mock.patch.object(layers.logger, 'warning') |
| 62 | + def test_enqueue_diff(self, logger, diff_queue, redis): |
| 63 | + redis.return_value = False |
| 64 | + self.assertEqual(logger.call_count, 0) |
| 65 | + diff_queue.return_value = mock.MagicMock() |
| 66 | + redis.return_value = True |
| 67 | + image_id = 'abcd' |
| 68 | + layers.enqueue_diff(image_id) |
| 69 | + diff_queue.assert_called_once_with(image_id) |
| 70 | + self.assertEqual(logger.call_count, 0) |
| 71 | + diff_queue.side_effect = layers.cache.redis.exceptions.ConnectionError |
| 72 | + layers.enqueue_diff(image_id) |
| 73 | + self.assertEqual(logger.call_count, 1) |
| 74 | + |
| 75 | + |
| 76 | +class TestArchive(base.TestCase): |
| 77 | + |
| 78 | + def setUp(self): |
| 79 | + self.archive = layers.Archive(_get_tarfile(list(comp(5, rndstr)))) |
| 80 | + |
| 81 | + def test_properties(self): |
| 82 | + self.assertEqual(self.archive.seekable(), True) |
| 83 | + self.assertEqual(self.archive.readable(), True) |
| 84 | + self.assertEqual(self.archive._check_can_seek(), True) |
| 85 | + |
| 86 | + |
| 87 | +class TestTarFilesInfo(base.TestCase): |
| 88 | + |
| 89 | + def setUp(self): |
| 90 | + self.tar_files_info = layers.TarFilesInfo() |
| 91 | + |
| 92 | + def test__init__(self): |
| 93 | + self.assertEqual(type(self.tar_files_info.infos), list) |
| 94 | + |
| 95 | + @mock.patch('docker_registry.lib.layers.serialize_tar_info') |
| 96 | + def test_append(self, serialize_tar_info): |
| 97 | + tar_info = ('test', True) |
| 98 | + serialize_tar_info.return_value = tar_info |
| 99 | + self.assertEqual(len(self.tar_files_info.infos), 0) |
| 100 | + self.assertEqual(self.tar_files_info.append('test'), None) |
| 101 | + self.assertNotEqual(len(self.tar_files_info.infos), 0) |
| 102 | + self.assertTrue(tar_info in self.tar_files_info.infos) |
| 103 | + |
| 104 | + def test_json(self): |
| 105 | + self.assertEqual(type(self.tar_files_info.json()), str) |
| 106 | + self.assertEqual(self.tar_files_info.json(), '[]') |
| 107 | + |
| 108 | + |
56 | 109 | class TestLayers(base.TestCase):
|
57 | 110 |
|
58 | 111 | def setUp(self):
|
@@ -86,6 +139,22 @@ def test_info_serialization(self):
|
86 | 139 | assert sinfo[0] in self.filenames
|
87 | 140 | assert sinfo[1:] == ('f', False, 512, 0, 420, 0, 0)
|
88 | 141 |
|
| 142 | + tar_info = mock.MagicMock() |
| 143 | + expectations = [(".", "/"), ("./", "/"), ("./ab", "/ab")] |
| 144 | + for name_in, name_out in expectations: |
| 145 | + tar_info.name = name_in |
| 146 | + out = layers.serialize_tar_info(tar_info) |
| 147 | + self.assertEqual(out[0], name_out) |
| 148 | + self.assertEqual(out[2], False) |
| 149 | + tar_info.name = "./.wh..wh." |
| 150 | + self.assertEqual(layers.serialize_tar_info(tar_info), None) |
| 151 | + expectations = [("./.wh.", "/"), ("/.wh.", "/")] |
| 152 | + for name_in, name_out in expectations: |
| 153 | + tar_info.name = name_in |
| 154 | + out = layers.serialize_tar_info(tar_info) |
| 155 | + self.assertEqual(out[0], name_out) |
| 156 | + self.assertEqual(out[2], True) |
| 157 | + |
89 | 158 | def test_tar_serialization(self):
|
90 | 159 | tfobj = _get_tarfile(self.filenames)
|
91 | 160 | archive = layers.Archive(tfobj)
|
@@ -177,3 +246,9 @@ def test_image_diff_json(self):
|
177 | 246 | for type in ("deleted", "changed", "created"):
|
178 | 247 | assert type in diff
|
179 | 248 | assert type in diff[type]
|
| 249 | + |
| 250 | + @mock.patch('docker_registry.lib.layers.get_image_diff_cache') |
| 251 | + def test_get_image_diff_json(self, get_image_diff_cache): |
| 252 | + diff_json = 'test' |
| 253 | + get_image_diff_cache.return_value = diff_json |
| 254 | + self.assertEqual(layers.get_image_diff_json(1), diff_json) |
0 commit comments