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 [email protected] https://www.redhat.com/mailman/listinfo/pulp-list
_______________________________________________ Pulp-list mailing list [email protected] https://www.redhat.com/mailman/listinfo/pulp-list
