Stop always encoding resource
This makes sure we do not try to guess the mechanism used by the server if it ever changes. The test is changed to not make UUID with / in it working. This won't work for a lot of reasons, and it should probably not work, so it's the responsibility of the caller to not use a / in the resource id. Change-Id: Ic7ce4033ee13c65e6f542f52ebf15d8f271deee6
This commit is contained in:
parent
3615beca8f
commit
641ac0861b
|
@ -13,14 +13,11 @@
|
|||
from oslo_utils import uuidutils
|
||||
|
||||
from gnocchiclient.tests.functional import base
|
||||
from gnocchiclient import utils
|
||||
|
||||
|
||||
class ResourceClientTest(base.ClientTestBase):
|
||||
RESOURCE_ID = uuidutils.generate_uuid()
|
||||
RESOURCE_ID2 = uuidutils.generate_uuid()
|
||||
RAW_RESOURCE_ID2 = uuidutils.generate_uuid() + "/foo"
|
||||
RESOURCE_ID2 = utils.encode_resource_id(RAW_RESOURCE_ID2)
|
||||
RESOURCE_ID2 = "foo"
|
||||
PROJECT_ID = uuidutils.generate_uuid()
|
||||
|
||||
def test_help(self):
|
||||
|
@ -123,10 +120,9 @@ class ResourceClientTest(base.ClientTestBase):
|
|||
result = self.gnocchi(
|
||||
'resource', params=("create %s -t generic "
|
||||
"-a project_id:%s"
|
||||
) % (self.RAW_RESOURCE_ID2, self.PROJECT_ID))
|
||||
) % (self.RESOURCE_ID2, self.PROJECT_ID))
|
||||
resource2 = self.details_multiple(result)[0]
|
||||
self.assertEqual(self.RESOURCE_ID2, resource2["id"])
|
||||
self.assertEqual(self.RAW_RESOURCE_ID2,
|
||||
self.assertEqual(self.RESOURCE_ID2,
|
||||
resource2["original_resource_id"])
|
||||
self.assertEqual(self.PROJECT_ID, resource2["project_id"])
|
||||
self.assertNotEqual('None', resource2["started_at"])
|
||||
|
@ -141,7 +137,8 @@ class ResourceClientTest(base.ClientTestBase):
|
|||
"--limit 1"
|
||||
) % (self.PROJECT_ID, self.RESOURCE_ID))
|
||||
resource_limit = self.parser.listing(result)[0]
|
||||
self.assertEqual(self.RESOURCE_ID2, resource_limit["id"])
|
||||
self.assertEqual(self.RESOURCE_ID2,
|
||||
resource_limit["original_resource_id"])
|
||||
self.assertEqual(self.PROJECT_ID, resource_limit["project_id"])
|
||||
self.assertEqual(resource2["started_at"], resource_limit["started_at"])
|
||||
|
||||
|
@ -180,7 +177,7 @@ class ResourceClientTest(base.ClientTestBase):
|
|||
resource1 = self.details_multiple(result1)[0]
|
||||
resource2 = self.details_multiple(result2)[0]
|
||||
self.assertEqual(self.RESOURCE_ID, resource1['id'])
|
||||
self.assertEqual(self.RESOURCE_ID2, resource2['id'])
|
||||
self.assertEqual(self.RESOURCE_ID2, resource2['original_resource_id'])
|
||||
result3 = self.gnocchi(
|
||||
'resource batch delete ',
|
||||
params=("'id in [%s, %s]' "
|
||||
|
|
|
@ -12,8 +12,6 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import uuid
|
||||
|
||||
import pyparsing as pp
|
||||
import six
|
||||
from six.moves.urllib import parse as urllib_parse
|
||||
|
@ -217,27 +215,6 @@ def build_pagination_options(details=False, history=False,
|
|||
return "%s" % "&".join(options)
|
||||
|
||||
|
||||
# uuid5 namespace for id transformation.
|
||||
# NOTE(chdent): This UUID must stay the same, forever, across all
|
||||
# of gnocchi to preserve its value as a URN namespace.
|
||||
RESOURCE_ID_NAMESPACE = uuid.UUID('0a7a15ff-aa13-4ac2-897c-9bdf30ce175b')
|
||||
|
||||
|
||||
def encode_resource_id(value):
|
||||
try:
|
||||
try:
|
||||
return str(uuid.UUID(value))
|
||||
except ValueError:
|
||||
if len(value) <= 255:
|
||||
if six.PY2:
|
||||
value = value.encode('utf-8')
|
||||
return str(uuid.uuid5(RESOURCE_ID_NAMESPACE, value))
|
||||
raise ValueError(
|
||||
'transformable resource id >255 max allowed characters')
|
||||
except Exception as e:
|
||||
raise ValueError(e)
|
||||
|
||||
|
||||
def get_client(obj):
|
||||
if hasattr(obj.app, 'client_manager'):
|
||||
# NOTE(sileht): cliff objects loaded by OSC
|
||||
|
|
|
@ -64,7 +64,6 @@ class MetricManager(base.Manager):
|
|||
self._ensure_metric_is_uuid(metric)
|
||||
url = self.metric_url + metric
|
||||
else:
|
||||
resource_id = utils.encode_resource_id(resource_id)
|
||||
url = (self.resource_url % resource_id) + metric
|
||||
return self._get(url).json()
|
||||
|
||||
|
@ -93,7 +92,6 @@ class MetricManager(base.Manager):
|
|||
raise TypeError("metric_name is required if resource_id is set")
|
||||
|
||||
del metric['resource_id']
|
||||
resource_id = utils.encode_resource_id(resource_id)
|
||||
metric = {metric_name: metric}
|
||||
metric = self._post(
|
||||
self.resource_url % resource_id,
|
||||
|
@ -114,7 +112,6 @@ class MetricManager(base.Manager):
|
|||
self._ensure_metric_is_uuid(metric)
|
||||
url = self.metric_url + metric
|
||||
else:
|
||||
resource_id = utils.encode_resource_id(resource_id)
|
||||
url = self.resource_url % resource_id + metric
|
||||
self._delete(url)
|
||||
|
||||
|
@ -133,7 +130,6 @@ class MetricManager(base.Manager):
|
|||
self._ensure_metric_is_uuid(metric)
|
||||
url = self.metric_url + metric + "/measures"
|
||||
else:
|
||||
resource_id = utils.encode_resource_id(resource_id)
|
||||
url = self.resource_url % resource_id + metric + "/measures"
|
||||
return self._post(
|
||||
url, headers={'Content-Type': "application/json"},
|
||||
|
@ -205,7 +201,6 @@ class MetricManager(base.Manager):
|
|||
self._ensure_metric_is_uuid(metric)
|
||||
url = self.metric_url + metric + "/measures"
|
||||
else:
|
||||
resource_id = utils.encode_resource_id(resource_id)
|
||||
url = self.resource_url % resource_id + metric + "/measures"
|
||||
return self._get(url, params=params).json()
|
||||
|
||||
|
|
|
@ -55,7 +55,6 @@ class ResourceManager(base.Manager):
|
|||
:type history: bool
|
||||
"""
|
||||
history = "/history" if history else ""
|
||||
resource_id = utils.encode_resource_id(resource_id)
|
||||
url = self.url + "%s/%s%s" % (resource_type, resource_id, history)
|
||||
return self._get(url).json()
|
||||
|
||||
|
@ -80,7 +79,6 @@ class ResourceManager(base.Manager):
|
|||
"""
|
||||
qs = utils.build_pagination_options(details, False, limit, marker,
|
||||
sorts)
|
||||
resource_id = utils.encode_resource_id(resource_id)
|
||||
url = "%s%s/%s/history?%s" % (self.url, resource_type, resource_id, qs)
|
||||
return self._get(url).json()
|
||||
|
||||
|
@ -107,8 +105,6 @@ class ResourceManager(base.Manager):
|
|||
:param resource: Attribute of the resource
|
||||
:type resource: dict
|
||||
"""
|
||||
|
||||
resource_id = utils.encode_resource_id(resource_id)
|
||||
return self._patch(
|
||||
self.url + resource_type + "/" + resource_id,
|
||||
headers={'Content-Type': "application/json"},
|
||||
|
@ -120,7 +116,6 @@ class ResourceManager(base.Manager):
|
|||
:param resource_id: ID of the resource
|
||||
:type resource_id: str
|
||||
"""
|
||||
resource_id = utils.encode_resource_id(resource_id)
|
||||
self._delete(self.url + "generic/" + resource_id)
|
||||
|
||||
def batch_delete(self, query, resource_type="generic"):
|
||||
|
|
Loading…
Reference in New Issue