summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimo Sorce <simo@redhat.com>2015-04-07 18:42:05 -0400
committerSimo Sorce <simo@redhat.com>2015-04-07 18:48:32 -0400
commit2760061c014558325f2011a02e5150f4efa2eb6a (patch)
tree8f273f8f0a76a40f0cd19dbfb4adff20bbee8dc4
parent6e5a83f9d9ed80268ba29b1d2404f5d9897fe0c0 (diff)
downloadcustodia-2760061c014558325f2011a02e5150f4efa2eb6a.tar.gz
custodia-2760061c014558325f2011a02e5150f4efa2eb6a.tar.xz
custodia-2760061c014558325f2011a02e5150f4efa2eb6a.zip
Add detection of conflicts when creating elements
-rw-r--r--custodia/secrets.py27
1 files changed, 26 insertions, 1 deletions
diff --git a/custodia/secrets.py b/custodia/secrets.py
index 4235b82..7661277 100644
--- a/custodia/secrets.py
+++ b/custodia/secrets.py
@@ -3,6 +3,7 @@
from custodia.httpd.consumer import HTTPConsumer
from custodia.httpd.server import HTTPError
from custodia.store.interface import CSStoreError
+from custodia.store.interface import CSStoreExists
import json
import os
@@ -136,6 +137,8 @@ class Secrets(HTTPConsumer):
raise HTTPError(404)
self.root.store.set(basename, '')
+ except CSStoreExists:
+ raise HTTPError(409)
except CSStoreError:
raise HTTPError(500)
@@ -200,7 +203,9 @@ class Secrets(HTTPConsumer):
if not ok:
raise HTTPError(404)
- self.root.store.set(key, value)
+ ok = self.root.store.set(key, value)
+ except CSStoreExists:
+ raise HTTPError(409)
except CSStoreError:
raise HTTPError(500)
@@ -341,6 +346,17 @@ class SecretsTests(unittest.TestCase):
self.secrets.PUT(req, rep)
self.assertEqual(err.exception.code, 405)
+ def test_4_PUTKey_errors_409(self):
+ req = {'headers': {'Content-Type': 'application/json; charset=utf-8'},
+ 'remote_user': 'test',
+ 'trail': ['test', 'key3'],
+ 'body': '{"type":"simple","value":"2345"}'}
+ rep = {}
+ self.secrets.PUT(req, rep)
+ with self.assertRaises(HTTPError) as err:
+ self.secrets.PUT(req, rep)
+ self.assertEqual(err.exception.code, 409)
+
def test_5_GETKey_errors_403(self):
req = {'remote_user': 'case',
'trail': ['test', 'key1']}
@@ -435,6 +451,15 @@ class SecretsTests(unittest.TestCase):
self.secrets.POST(req, rep)
self.assertEqual(err.exception.code, 405)
+ def test_8_CREATEcont_erros_409(self):
+ req = {'remote_user': 'test',
+ 'trail': ['test', 'exists', '']}
+ rep = {}
+ self.secrets.POST(req, rep)
+ with self.assertRaises(HTTPError) as err:
+ self.secrets.POST(req, rep)
+ self.assertEqual(err.exception.code, 409)
+
def test_8_DESTROYcont(self):
req = {'remote_user': 'test',
'trail': ['test', 'container', '']}