Skip to content
This repository was archived by the owner on Sep 12, 2018. It is now read-only.

Commit e839b65

Browse files
author
Mangled Deutz
committed
Now better test removal + updated dumb driver to match
Docker-DCO-1.1-Signed-off-by: Mangled Deutz <[email protected]> (github: dmp42)
1 parent a55a016 commit e839b65

File tree

2 files changed

+37
-2
lines changed

2 files changed

+37
-2
lines changed

depends/docker-registry-core/docker_registry/drivers/dumb.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,20 @@ def put_content(self, path, content):
5353
self._storage[path] = content
5454

5555
def remove(self, path):
56-
if path not in self._storage:
56+
# Straight key, delete
57+
if path in self._storage:
58+
del self._storage[path]
59+
return
60+
# Directory like, get the list
61+
ls = []
62+
for k in self._storage.keys():
63+
if (not k == path) and k.startswith(path):
64+
ls.append(k)
65+
66+
if not len(ls):
5767
raise exceptions.FileNotFoundError('%s is not there' % path)
58-
del self._storage[path]
68+
for item in ls:
69+
self.remove(item)
5970

6071
def stream_read(self, path, bytes_range=None):
6172
if path not in self._storage:

depends/docker-registry-core/docker_registry/testing/driver.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,30 @@ def test_remove_existent(self):
167167
self._storage.remove(filename)
168168
assert not self._storage.exists(filename)
169169

170+
def test_remove_folder(self):
171+
dirname = self.gen_random_string()
172+
filename1 = self.gen_random_string()
173+
filename2 = self.gen_random_string()
174+
content = self.gen_random_string().encode('utf8')
175+
self._storage.put_content('%s/%s' % (dirname, filename1), content)
176+
self._storage.put_content('%s/%s' % (dirname, filename2), content)
177+
self._storage.remove(dirname)
178+
assert not self._storage.exists(filename1)
179+
assert not self._storage.exists(filename2)
180+
assert not self._storage.exists(dirname)
181+
# Check the lru is ok
182+
try:
183+
self._storage.get_content(filename1)
184+
assert False
185+
except Exception:
186+
pass
187+
188+
try:
189+
self._storage.get_content(filename2)
190+
assert False
191+
except Exception:
192+
pass
193+
170194
@tools.raises(exceptions.FileNotFoundError)
171195
def test_remove_inexistent(self):
172196
filename = self.gen_random_string()

0 commit comments

Comments
 (0)