def testIsProtocolRequest(self):
        # No command => not protocol request
        hgaccess = MercurialAccessControl(DummyReq('cartman', 'cartmans_pw', 'GET', '/hg/storageauthtest', ''))
        self.assertFalse(hgaccess.is_protocol_request())

        # Not protocol command => not protocol request
        hgaccess = MercurialAccessControl(DummyReq('cartman', 'cartmans_pw', 'GET', '/hg/storageauthtest', 'cmd=log'))
        self.assertFalse(hgaccess.is_protocol_request())

        # Path continues after project name => not protocol request
        hgaccess = MercurialAccessControl(DummyReq('cartman', 'cartmans_pw', 'GET', '/hg/storageauthtest/branches', 'cmd=log'))
        self.assertFalse(hgaccess.is_protocol_request())

        # Ending slash in the request and wrong command, => not protocol request
        hgaccess = MercurialAccessControl(DummyReq('cartman', 'cartmans_pw', 'GET', '/hg/storageauthtest/', 'cmd=log'))
        self.assertFalse(hgaccess.is_protocol_request())

        # Ending slash in the request but no path, => protocol request
        hgaccess = MercurialAccessControl(DummyReq('cartman', 'cartmans_pw', 'GET', '/hg/storageauthtest/', 'cmd=branches'))
        self.assertTrue(hgaccess.is_protocol_request())

        # Valid cmd, valid path => protocol request
        hgaccess = MercurialAccessControl(DummyReq('cartman', 'cartmans_pw', 'GET', '/hg/storageauthtest', 'cmd=branches&foo=bar'))
        self.assertTrue(hgaccess.is_protocol_request())

        # Valid cmd, valid path => protocol request
        hgaccess = MercurialAccessControl(DummyReq('cartman', 'cartmans_pw', 'GET', '/hg/storageauthtest', 'foo=bar&cmd=branches'))
        self.assertTrue(hgaccess.is_protocol_request())