summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimo Sorce <simo@redhat.com>2015-04-07 17:41:05 -0400
committerSimo Sorce <simo@redhat.com>2015-04-07 18:48:31 -0400
commitfc5dae8f16f5e4c2b3f0b6a22b93a0ab2844bb02 (patch)
treeefab7fab8100de47cded44329bf74c9d724ff4fe
parente35d48dbb2362fe06f62e19c2594ef1fdfc4c8c5 (diff)
downloadcustodia-fc5dae8f16f5e4c2b3f0b6a22b93a0ab2844bb02.tar.gz
custodia-fc5dae8f16f5e4c2b3f0b6a22b93a0ab2844bb02.tar.xz
custodia-fc5dae8f16f5e4c2b3f0b6a22b93a0ab2844bb02.zip
Add code and tests to delete keys
-rw-r--r--custodia/secrets.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/custodia/secrets.py b/custodia/secrets.py
index 980ab38..a9a29f9 100644
--- a/custodia/secrets.py
+++ b/custodia/secrets.py
@@ -65,6 +65,15 @@ class Secrets(HTTPConsumer):
else:
self._set_key(trail, request, response)
+ def DELETE(self, request, response):
+ trail = request.get('trail', [])
+ if len(trail) == 0:
+ raise HTTPError(405)
+ if trail[-1] == '':
+ raise HTTPError(405)
+ else:
+ self._del_key(trail, request, response)
+
def _list(self, trail, request, response):
ns = self._namespaces(request)
try:
@@ -143,6 +152,18 @@ class Secrets(HTTPConsumer):
response['code'] = 201
+ def _del_key(self, trail, request, response):
+ ns = self._namespaces(request)
+ key = self._db_key(ns, trail)
+ try:
+ ret = self.root.store.cut(key)
+ except CSStoreError:
+ ret = False
+
+ if ret is False:
+ raise HTTPError(404)
+
+ response['code'] = 204
# unit tests
import unittest
@@ -300,3 +321,31 @@ class SecretsTests(unittest.TestCase):
self.secrets.GET(req, rep)
self.assertEqual(err.exception.code, 404)
+ def test_7_DELETEKey(self):
+ req = {'remote_user': 'test',
+ 'trail': ['test', 'key1']}
+ rep = {}
+ self.secrets.DELETE(req, rep)
+
+ def test_7_DELETEKey_errors_403(self):
+ req = {'remote_user': 'case',
+ 'trail': ['test', 'key1']}
+ rep = {}
+ with self.assertRaises(HTTPError) as err:
+ self.secrets.DELETE(req, rep)
+ self.assertEqual(err.exception.code, 403)
+
+ def test_7_DELETEKey_errors_404(self):
+ req = {'remote_user': 'test',
+ 'trail': ['test', 'nokey']}
+ rep = {}
+ with self.assertRaises(HTTPError) as err:
+ self.secrets.DELETE(req, rep)
+ self.assertEqual(err.exception.code, 404)
+
+ def test_7_DELETEKey_errors_405(self):
+ req = {'remote_user': 'test'}
+ rep = {}
+ with self.assertRaises(HTTPError) as err:
+ self.secrets.DELETE(req, rep)
+ self.assertEqual(err.exception.code, 405)