[openstack-dev] [qa][keystone] Help with XML Tempest API tests

Adam Young ayoung at redhat.com
Fri Nov 1 01:40:46 UTC 2013


On 10/31/2013 07:58 PM, Adam Young wrote:
> On 10/31/2013 03:40 PM, Steven Hardy wrote:
>> Hi all,
>>
>> So firstly, if you're an XML guru, I apologize, the questions below are
>> probably really basic, I always prefer JSON or YAML, because every 
>> time I
>> deal with XML, I get a week-long-headache ;)
>>
>> So I'm writing Tempest API tests for the keystone OS-TRUST extension, as
>> was previously requested - it's going pretty well, & I'm finding some 
>> real
>> bugs.  Here's a WIP review:
>>
>> https://review.openstack.org/#/c/54810/
>>
>> However, I've got a bit stuck formatting the POST body for the trust 
>> create
>> in XML (all works fine via JSON).  The json body looks like:
>>
>> {
>>      "trust": {
>>          "expires_at": "2013-02-27T18:30:59.999999Z",
>>          "impersonation": true,
>>          "project_id": "ddef321",
>>          "roles": [
>>              {
>>                  "name": "member"
>>              }
>>          ],
>>          "trustee_user_id": "86c0d5",
>>          "trustor_user_id": "a0fdfd"
>>      }
>> }
>>
>> And looking at other XML tests which format a POST body, they do 
>> something
>> like:
>>
>> post_body = Element("trust",
>>                      xmlns=XMLNS,
>>                      trustor_user_id=trustor_user_id,
>>                      trustee_user_id=trustee_user_id,
>>                      project_id=project_id,
>>                      impersonation=impersonation,
>>                      expires_at=expires_at)
>>
>> This gives me a post body which looks weird (but seems to work):
>>
>> <trust impersonation="True"
>> xmlns="http://docs.openstack.org/identity/api/v3"
>> trustor_user_id="efc6504105c54fbe95928a51459d06c9" expires_at=""
>> trustee_user_id="f55efd1d617e4367891d202a811d7728"
>> project_id="b5d498f9631244b59912ce2a0025cf8d"/>
>>
>>
>> So my questions are:
>> 1. Why do we create a single element like this, instead of appending
>> subelements so the XML body looks more like the JSON request?
>
> There are two sides. Some would say that the above is more like a JSON 
> map
>
>   ['a':'1','b':'2','c':'3']
>
> compare
>
> <'a':'1','b':'2','c':'3' />
>
> to
>
> <'a'='1'>,<'b'='2'>,<'c'='3'>
>
> And is starts getting even wonkier when the nested element is a 
> map...XML has two abstractions where JSON has one.  THere is no clean 
> way to always map on to the other (IMHO).
>
>>
>> 2. If any elements have a None value, they are encoded as a zero-length
>> string, is that expected?
>>
>> 3. How do I go about encoding the list of roles, as in the sample 
>> request
>> (it's a list of dicts, where each dict has one key called "name")
> That, I think is
>
> <role>
> <"name": "member">
> </role>
>
> However, all of this should be viewable with the existing unit tests.  
> Each API gets run with both JSON and XML.  In the keystone proejct, 
> the test is in tests/test_v3_auth.py
>
> I still use run_test.sh even though it is deprecated
>
> run_tests.sh  keystone.tests.test_v3_auth.TestAuthXML
>
> If you run that in a debugger you should be able to grab the actual 
> XML that gets marshalled.

I think it is safe to say that the trusts API is broken in XML.  I added 
the following test:

diff --git a/keystone/tests/test_v3_auth.py b/keystone/tests/test_v3_auth.py
index c0e191b..6a0c10c 100644
--- a/keystone/tests/test_v3_auth.py
+++ b/keystone/tests/test_v3_auth.py
@@ -2238,3 +2238,7 @@ class TestTrustAuth(TestAuthInfo):
          self.get('/OS-TRUST/trusts?trustor_user_id=%s' %
                   self.user_id, expected_status=401,
                   token=trust_token)
+
+
+class TestTrustAuthXML(TestTrustAuth):
+    content_type = 'xml'

And, when running it, I got:


Ran 24 tests in 5.832s

FAILED (SKIP=1, errors=12)


https://bugs.launchpad.net/keystone/+bug/1246941

>
>
>>
>> Any help, review feedback or pointers to docs/examples would be hugely
>> appreciated!
>>
>> Thanks,
>>
>> Steve
>>
>> _______________________________________________
>> OpenStack-dev mailing list
>> OpenStack-dev at lists.openstack.org
>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
>
> _______________________________________________
> OpenStack-dev mailing list
> OpenStack-dev at lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev




More information about the OpenStack-dev mailing list