[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [Pulp-list] Testing Web Service Controllers



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

Attachment: signature.asc
Description: This is a digitally signed message part


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]