Example #1
0
    def test_validate_internal_container(self):
        self.assertIsNone(rh.validate_internal_container('AUTH_foo', 'bar'))
        self.assertIsNone(
            rh.validate_internal_container(rh.get_reserved_name('AUTH_foo'),
                                           'bar'))
        self.assertIsNone(
            rh.validate_internal_container('foo', rh.get_reserved_name('bar')))
        self.assertIsNone(
            rh.validate_internal_container(rh.get_reserved_name('AUTH_foo'),
                                           rh.get_reserved_name('bar')))
        with self.assertRaises(HTTPException) as raised:
            rh.validate_internal_container('AUTH_foo' + rh.RESERVED, 'bar')
        e = raised.exception
        self.assertEqual(e.status_int, 400)
        self.assertEqual(str(e), '400 Bad Request')
        self.assertEqual(e.body, b"Invalid reserved-namespace account")
        with self.assertRaises(HTTPException) as raised:
            rh.validate_internal_container('AUTH_foo', 'bar' + rh.RESERVED)
        e = raised.exception
        self.assertEqual(e.status_int, 400)
        self.assertEqual(str(e), '400 Bad Request')
        self.assertEqual(e.body, b"Invalid reserved-namespace container")

        # These should always be operating on split_path outputs so this
        # shouldn't really be an issue, but just in case...
        for acct in ('', None):
            with self.assertRaises(ValueError) as raised:
                rh.validate_internal_container(acct, 'bar')
            self.assertEqual(raised.exception.args[0], 'Account is required')
Example #2
0
def get_container_name_and_placement(req):
    """
    Split and validate path for a container.

    :param req: a swob request

    :returns: a tuple of path parts as strings
    """
    drive, part, account, container = split_and_validate_path(req, 4)
    validate_internal_container(account, container)
    return drive, part, account, container