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! -- Jason L Connor linear on freenode #pulp http://pulpproject.org/ RHCE: 805010912355231 GPG Fingerprint: 2048R/CC4ED7C1
signature.asc
Description: This is a digitally signed message part
_______________________________________________ Pulp-list mailing list [email protected] https://www.redhat.com/mailman/listinfo/pulp-list
