[Pulp-list] Testing Web Service Controllers

Jeff Ortel jortel at redhat.com
Thu Nov 17 02:30:18 UTC 2011



On 11/16/2011 04:23 PM, Jason L Connor wrote:
> On Wed, 2011-11-16 at 15:28 -0500, Jay Dobies wrote:
>> Currently we have pretty much zero tests for our web service
>> controllers. The biggest problem is that it's a non-trivial setup to be
>> able to do it. But as we go back now and implement the REST APIs
>> correctly, we have a much stronger need to test that response codes are
>> coming back correctly and the serialized return objects are what is
>> expected (empty lists for collection GET, 404 for resource GET, etc.)
>>
>> I added a new test case subclass (PulpWebserviceTest) to testutil that
>> will set up web.py to be run without the need for an app server. That
>> way all the ugly setup is hidden and automagically done so we can get
>> right to the actual tests. Here are a few samples:
>>
>>
>> class RepoCollectionTest(testutil.PulpWebserviceTest):
>>
>>       def test_get(self):
>>           """
>>           Tests retrieving a list of repositories.
>>           """
>>
>>           # Setup
>>           repo_manager = manager_factory.repo_manager()
>>           repo_manager.create_repo('dummy-1')
>>           repo_manager.create_repo('dummy-2')
>>
>>           # Test
>>           status, body = self.get('/v2/repositories/')
>>
>>           # Verify
>>           self.assertEqual(200, status)
>>           self.assertEqual(2, len(body))
>>
>>       def test_get_no_repos(self):
>>           """
>>           Tests that an empty list is returned when no repos are present.
>>           """
>>
>>           # Test
>>           status, body = self.get('/v2/repositories/')
>>
>>           # Verify
>>           self.assertEqual(200, status)
>>           self.assertEqual(0, len(body))
>>
>>       def test_get_missing_repo(self):
>>           """
>>           Tests that an empty list is returned when no repos are present.
>>           """
>>
>>           # Test
>>           status, body = self.get('/v2/repositories/foo/')
>>
>>           # Verify
>>           self.assertEqual(404, status)
>>
>>
>> A few notes:
>> * Make sure you remember to call PulpWebserviceTest.setUp if you
>> override the method in your test, that's where all the magic happens.
>> * PulpWebserviceTest has methods get, put, post, delete that are
>> shortcuts to the HTTP method of the same name.
>> * Pass in just the API portion of the URI (i.e. /repositories/, not
>> /pulp/api/repositories/) to the http method calls.
>> * The test case setup creates a super user and automatically adds in
>> those auth credentials to the calls. Eventually we should make it
>> possible to test permissions on calls through this setup, but frankly I
>> have just too much else to do to go there right now.
>>
>> I'm still not at a point where I can merge my v2 branch into master yet,
>> but I wanted to get this out there for anyone who is working with
>> refining our web services this sprint (I'm pretty sure we added a story
>> for redoing the distribution services, for instance). I cherry picked it
>> over to master and the existing tests still passed for me. Nothing in
>> master is using it yet, but ping me if hudson starts to complain and it
>> looks related.
>>
>> So far it looks like it works for my v2 tests, but let me know if you
>> run into any issues (or ping me if you fix anything so I can cherry pick
>> it into my branch.
>>
>>
>>
>
> We've needed this forever. Jay, thank you for setting this up!

Very nice!

>
>
>
>
> _______________________________________________
> Pulp-list mailing list
> Pulp-list at redhat.com
> https://www.redhat.com/mailman/listinfo/pulp-list




More information about the Pulp-list mailing list