def test_missing_ring_location(self):
        conf = self._format_config('''
            [ring:test]
            sproxyd_endpoints = http://localhost
            ''')

        utils.assertRaisesRegexp(
            ConfigurationError,
            '''Section 'ring:test' lacks a 'location' setting''',
            Configuration.from_stream, conf)
    def test_non_int_storage_policy_index(self):
        conf = self._format_config('''
            [storage-policy:test]
            read =
            write = test
            ''')

        utils.assertRaisesRegexp(ConfigurationError,
                                 'Invalid policy index: \'test\'',
                                 Configuration.from_stream, conf)
    def test_empty_storage_policy_index(self):
        conf = self._format_config('''
            [storage-policy:]
            read =
            write = test
            ''')

        utils.assertRaisesRegexp(ConfigurationError,
                                 'Invalid section name \'storage-policy:\'',
                                 Configuration.from_stream, conf)
    def test_missing_ring_sproxyd_endpoints(self):
        conf = self._format_config('''
            [ring:test]
            location = paris
            ''')

        utils.assertRaisesRegexp(
            ConfigurationError,
            '''Section 'ring:test' lacks a 'sproxyd_endpoints' setting''',
            Configuration.from_stream, conf)
    def test_missing_ring_sproxyd_endpoints(self):
        conf = self._format_config('''
            [ring:test]
            location = paris
            ''')

        utils.assertRaisesRegexp(
            ConfigurationError,
            '''Section 'ring:test' lacks a 'sproxyd_endpoints' setting''',
            Configuration.from_stream, conf)
    def test_missing_ring_location(self):
        conf = self._format_config('''
            [ring:test]
            sproxyd_endpoints = http://localhost
            ''')

        utils.assertRaisesRegexp(
            ConfigurationError,
            '''Section 'ring:test' lacks a 'location' setting''',
            Configuration.from_stream, conf)
    def test_missing_ring_name(self):
        conf = self._format_config('''
            [ring:]
            location = test
            sproxyd_endpoints = http://localhost
            ''')

        utils.assertRaisesRegexp(ConfigurationError,
                                 'Invalid section name \'ring:\'',
                                 Configuration.from_stream, conf)
    def test_empty_ring_sproxyd_endpoints(self):
        conf = self._format_config('''
            [ring:test]
            location = test
            sproxyd_endpoints =
            ''')

        utils.assertRaisesRegexp(
            ConfigurationError,
            'Invalid \'sproxyd_endpoints\' setting in \'ring:test\'',
            Configuration.from_stream, conf)
    def test_missing_ring_name(self):
        conf = self._format_config('''
            [ring:]
            location = test
            sproxyd_endpoints = http://localhost
            ''')

        utils.assertRaisesRegexp(
            ConfigurationError,
            'Invalid section name \'ring:\'',
            Configuration.from_stream, conf)
    def test_empty_storage_policy_index(self):
        conf = self._format_config('''
            [storage-policy:]
            read =
            write = test
            ''')

        utils.assertRaisesRegexp(
            ConfigurationError,
            'Invalid section name \'storage-policy:\'',
            Configuration.from_stream, conf)
    def test_empty_ring_sproxyd_endpoints(self):
        conf = self._format_config('''
            [ring:test]
            location = test
            sproxyd_endpoints =
            ''')

        utils.assertRaisesRegexp(
            ConfigurationError,
            'Invalid \'sproxyd_endpoints\' setting in \'ring:test\'',
            Configuration.from_stream, conf)
    def test_non_int_storage_policy_index(self):
        conf = self._format_config('''
            [storage-policy:test]
            read =
            write = test
            ''')

        utils.assertRaisesRegexp(
            ConfigurationError,
            'Invalid policy index: \'test\'',
            Configuration.from_stream, conf)
    def test_invalid_ring_sproxyd_endpoint(self):
        conf = self._format_config('''
            [ring:test]
            location = paris
            sproxyd_endpoints = http://localhost, http://otherhost/?a=b
            ''')

        utils.assertRaisesRegexp(
            ConfigurationError,
            'Error parsing endpoint \'http://otherhost/\?a=b\' in '
            '\'ring:test\': Endpoint URL can\'t have query values',
            Configuration.from_stream, conf)
    def test_invalid_ring_sproxyd_endpoint(self):
        conf = self._format_config('''
            [ring:test]
            location = paris
            sproxyd_endpoints = http://localhost, http://otherhost/?a=b
            ''')

        utils.assertRaisesRegexp(
            ConfigurationError,
            'Error parsing endpoint \'http://otherhost/\?a=b\' in '
            '\'ring:test\': Endpoint URL can\'t have query values',
            Configuration.from_stream, conf)
    def test_unknown_read_ring_in_storage_policy(self):
        conf = self._format_config('''
            [ring:test1]
            location = paris
            sproxyd_endpoints = http://localhost

            [storage-policy:1]
            read = test2
            write = test1
            ''')

        utils.assertRaisesRegexp(
            ConfigurationError, 'Unknown \'read\' ring \'test2\' in policy 1',
            Configuration.from_stream, conf)
    def test_unknown_read_ring_in_storage_policy(self):
        conf = self._format_config('''
            [ring:test1]
            location = paris
            sproxyd_endpoints = http://localhost

            [storage-policy:1]
            read = test2
            write = test1
            ''')

        utils.assertRaisesRegexp(
            ConfigurationError,
            'Unknown \'read\' ring \'test2\' in policy 1',
            Configuration.from_stream, conf)
    def test_multiple_write_rings_in_storage_policy(self):
        conf = self._format_config('''
            [ring:test1]
            location = paris
            sproxyd_endpoints = http://paris

            [ring:test2]
            location = london
            sproxyd_endpoints = http://london

            [storage-policy:1]
            read =
            write = test1, test2
            ''')

        utils.assertRaisesRegexp(
            ConfigurationError,
            'Multiple \'write\' rings defined in \'storage-policy:1\'',
            Configuration.from_stream, conf)
    def test_multiple_write_rings_in_storage_policy(self):
        conf = self._format_config('''
            [ring:test1]
            location = paris
            sproxyd_endpoints = http://paris

            [ring:test2]
            location = london
            sproxyd_endpoints = http://london

            [storage-policy:1]
            read =
            write = test1, test2
            ''')

        utils.assertRaisesRegexp(
            ConfigurationError,
            'Multiple \'write\' rings defined in \'storage-policy:1\'',
            Configuration.from_stream, conf)
 def test_reject_fragment(self):
     utils.assertRaisesRegexp(
         ValueError,
         r'Endpoint URL can\'t have a fragment',
         Endpoint, 'http://localhost/#fragment')
 def test_reject_query(self):
     utils.assertRaisesRegexp(
         ValueError,
         r'Endpoint URL can\'t have query values',
         Endpoint, 'http://localhost/?query')
 def test_reject_params(self):
     utils.assertRaisesRegexp(
         ValueError,
         r'Endpoint URL can\'t have params',
         Endpoint, 'http://localhost/;param')
 def test_reject_fragment(self):
     utils.assertRaisesRegexp(ValueError,
                              r'Endpoint URL can\'t have a fragment',
                              Endpoint, 'http://localhost/#fragment')
 def test_reject_query(self):
     utils.assertRaisesRegexp(ValueError,
                              r'Endpoint URL can\'t have query values',
                              Endpoint, 'http://localhost/?query')
 def test_reject_params(self):
     utils.assertRaisesRegexp(ValueError,
                              r'Endpoint URL can\'t have params', Endpoint,
                              'http://localhost/;param')