def test_multiple_values_for_option(self): with self.assertRaisesRegexp( ValueError, 'Multiple values specified for sentinel_socket_timeout'): parse_sentinel_url( 'redis+sentinel://hostname:7000/?sentinel_socket_timeout=0.1&sentinel_socket_timeout=2' )
def test_multiple_hosts(self): parsed = parse_sentinel_url( 'redis+sentinel://hostname:7000,hostname2:7002,hostname3:7003') self.assertEqual(parsed.hosts, [('hostname', 7000), ('hostname2', 7002), ('hostname3', 7003)]) self.assertEqual(parsed.sentinel_options, {}) self.assertEqual(parsed.client_options, {'db': 0}) self.assertEqual(parsed.default_client, DefaultClient('master', None))
def get_conn_info(url): conn_info = [] if url.startswith('redis://'): urlparts = urlparse(url) netloc = urlparts[1].partition(':') conn_info = [('Address', netloc[0]), ('Port', (netloc[2] or '6379'))] elif url.startswith('redis+sentinel://'): result = redis_sentinel_url.parse_sentinel_url(url) print(result.hosts) conn_info = [('Sentinel Hosts', ','.join( ['%s:%s' % (pair[0], pair[1]) for pair in result.hosts])), ('Service', result.default_client.service)] return conn_info
def get_master(url): if not url.startswith('redis+sentinel://'): abort(406, "not supported") result = redis_sentinel_url.parse_sentinel_url(url) return sentinel.discover_master(result.default_client.service)
def test_no_value_for_option2(self): parsed = parse_sentinel_url( 'redis+sentinel://hostname:7000/?socket_timeout=') self.assertNotIn('sentinel_socket_timeout', parsed.client_options)
def test_sentinel_socket_timeout(self): parsed = parse_sentinel_url( 'redis+sentinel://hostname:7000/themaster/2?sentinel_socket_timeout=0.1' ) self.assertEqual(parsed.sentinel_options['socket_timeout'], 0.1)
def test_db_in_query(self): parsed = parse_sentinel_url( 'redis+sentinel://hostname:7000/themaster/2?db=4') self.assertEqual(parsed.client_options['db'], 4)
def test_invalid_client_type(self): with self.assertRaises(ValueError): parse_sentinel_url( 'redis+sentinel://hostname:7000/theslave?client_type=whatever')
def test_slave_service(self): parsed = parse_sentinel_url( 'redis+sentinel://hostname:7000/theslave?client_type=slave') self.assertEqual(parsed.default_client, DefaultClient('slave', 'theslave'))
def test_service_name_in_query(self): parsed = parse_sentinel_url( 'redis+sentinel://hostname:7000/theother?service=themaster') self.assertEqual(parsed.default_client, DefaultClient('master', 'themaster'))
def test_without_port(self): parsed = parse_sentinel_url('redis+sentinel://hostname') self.assertEqual(parsed.hosts, [('hostname', 26379)]) self.assertEqual(parsed.sentinel_options, {}) self.assertEqual(parsed.client_options, {'db': 0}) self.assertEqual(parsed.default_client, DefaultClient('master', None))
def test_basic_url(self): parsed = parse_sentinel_url('redis+sentinel://hostname:7000') self.assertEqual(parsed.hosts, [('hostname', 7000)]) self.assertEqual(parsed.sentinel_options, {}) self.assertEqual(parsed.client_options, {'db': 0}) self.assertEqual(parsed.default_client, DefaultClient('master', None))
def test_with_password(self): parsed = parse_sentinel_url( 'redis+sentinel://:thesecret@hostname:7000') self.assertEquals(parsed.sentinel_options, {}) self.assertEquals(parsed.client_options['password'], 'thesecret')
def test_unsupported_scheme(self): with self.assertRaisesRegexp(ValueError, 'Unsupported scheme: redis'): parse_sentinel_url('redis://hostname:7000/')
def test_unknown_option(self): parsed = parse_sentinel_url( 'redis+sentinel://hostname:7000/?unknown_option=1') self.assertNotIn('unknown_option', parsed.client_options)