+ request.cls.test_backend_type = request.param
+ if request.param == 'standalone':
+ cfg = get_test_sdl_standby_config()
+ request.cls.configuration.get_params.return_value = cfg
+ with patch('ricsdl.backend.redis.Redis') as mock_redis, patch(
+ 'ricsdl.backend.redis.PubSub') as mock_pubsub, patch(
+ 'threading.Thread') as mock_thread:
+ db = ricsdl.backend.get_backend_instance(request.cls.configuration)
+ request.cls.mock_redis = mock_redis.return_value
+ request.cls.mock_pubsub = mock_pubsub.return_value
+ request.cls.mock_pubsub_thread = mock_thread.return_value
+ request.cls.mock_pubsub_thread.is_alive.return_value = False
+ request.cls.db = db
+
+ mock_redis.assert_called_once_with(db=0, host=cfg.db_host, max_connections=20, port=cfg.db_port)
+ mock_pubsub.assert_called_once_with(request.cls.mock_redis.connection_pool, ignore_subscribe_messages=True)
+ assert request.cls.mock_redis.set_response_callback.call_count == 2
+ assert request.cls.mock_redis.set_response_callback.call_args_list == [call('SETIE', ANY), call('DELIE', ANY)]
+
+ elif request.param == 'sentinel':
+ cfg = get_test_sdl_sentinel_config()
+ request.cls.configuration.get_params.return_value = cfg
+ with patch('ricsdl.backend.redis.Sentinel') as mock_sentinel, patch(
+ 'ricsdl.backend.redis.PubSub') as mock_pubsub, patch(
+ 'threading.Thread') as mock_thread:
+ db = ricsdl.backend.get_backend_instance(request.cls.configuration)
+ request.cls.mock_redis = mock_sentinel.return_value.master_for.return_value
+ request.cls.mock_pubsub = mock_pubsub.return_value
+ request.cls.mock_pubsub_thread = mock_thread.return_value
+ request.cls.mock_pubsub_thread.is_alive.return_value = False
+ request.cls.db = db
+
+ mock_sentinel.assert_called_once_with([(cfg.db_host, cfg.db_sentinel_port)])
+ mock_sentinel.master_for.called_once_with(cfg.db_sentinel_master_name)
+ mock_pubsub.assert_called_once_with(request.cls.mock_redis.connection_pool, ignore_subscribe_messages=True)
+ assert request.cls.mock_redis.set_response_callback.call_count == 2
+ assert request.cls.mock_redis.set_response_callback.call_args_list == [call('SETIE', ANY), call('DELIE', ANY)]
+
+ elif request.param == 'sentinel_cluster':
+ cfg = get_test_sdl_sentinel_cluster_config()
+ request.cls.configuration.get_params.return_value = cfg
+ with patch('ricsdl.backend.redis.Sentinel') as mock_sentinel, patch(
+ 'ricsdl.backend.redis.PubSub') as mock_pubsub, patch(
+ 'threading.Thread') as mock_thread:
+ db = ricsdl.backend.get_backend_instance(request.cls.configuration)
+ request.cls.mock_redis = mock_sentinel.return_value.master_for.return_value
+ request.cls.mock_pubsub = mock_pubsub.return_value
+ request.cls.mock_pubsub_thread = mock_thread.return_value
+ request.cls.mock_pubsub_thread.is_alive.return_value = False
+ request.cls.db = db
+
+ assert mock_sentinel.call_count == 2
+ mock_sentinel.assert_has_calls([
+ call([('service-ricplt-dbaas-tcp-cluster-0.ricplt', cfg.db_sentinel_port)]),
+ call([('service-ricplt-dbaas-tcp-cluster-1.ricplt', cfg.db_sentinel_port)]),
+ ], any_order=True)
+ assert mock_sentinel.return_value.master_for.call_count == 2
+ mock_sentinel.return_value.master_for.assert_has_calls(
+ [call(cfg.db_sentinel_master_name), call(cfg.db_sentinel_master_name)], any_order=True,
+ )
+ assert mock_pubsub.call_count == 2
+ mock_pubsub.assert_has_calls([
+ call(request.cls.mock_redis.connection_pool, ignore_subscribe_messages=True),
+ call(request.cls.mock_redis.connection_pool, ignore_subscribe_messages=True),
+ ])
+ assert request.cls.mock_redis.set_response_callback.call_count == 4
+ assert request.cls.mock_redis.set_response_callback.call_args_list == [
+ call('SETIE', ANY), call('DELIE', ANY),
+ call('SETIE', ANY), call('DELIE', ANY),
+ ]
+ else:
+ raise NotImplementedError