benchmarks/plugin_manager_benchmarks.py (101 lines of code) (raw):
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License").
# You may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from __future__ import annotations
from typing import TYPE_CHECKING, List
import pytest
if TYPE_CHECKING:
from aws_advanced_python_wrapper.driver_dialect import DriverDialect
from aws_advanced_python_wrapper.plugin import PluginFactory
from aws_advanced_python_wrapper.driver_configuration_profiles import \
DriverConfigurationProfiles
from aws_advanced_python_wrapper.hostinfo import HostInfo
from aws_advanced_python_wrapper.plugin_service import (
PluginManager, PluginServiceManagerContainer)
from aws_advanced_python_wrapper.utils.properties import Properties
from benchmarks.benchmark_plugin import BenchmarkPluginFactory
host_info = HostInfo(host="host", port=1234)
@pytest.fixture
def props_without_plugins():
return Properties({"plugins": ""})
@pytest.fixture
def props_with_plugins():
factories: List[PluginFactory] = []
for _ in range(10):
factories.append(BenchmarkPluginFactory())
DriverConfigurationProfiles.add_or_replace_profile("benchmark", factories)
return Properties({"profile_name": "benchmark"})
@pytest.fixture
def statement_mock(mocker):
return mocker.MagicMock()
@pytest.fixture
def driver_dialect_mock(mocker):
dialect: DriverDialect = mocker.MagicMock()
dialect.get_connection_from_obj.return_value = None
return dialect
@pytest.fixture
def plugin_service_mock(mocker, driver_dialect_mock):
service_mock = mocker.MagicMock()
service_mock.driver_dialect = driver_dialect_mock
service_mock.current_host_info = host_info
return service_mock
@pytest.fixture
def plugin_service_manager_container_mock(mocker, plugin_service_mock):
container_mock: PluginServiceManagerContainer = mocker.MagicMock()
container_mock.plugin_service = plugin_service_mock
return container_mock
@pytest.fixture
def plugin_manager_with_no_plugins(plugin_service_manager_container_mock, props_without_plugins):
manager = PluginManager(plugin_service_manager_container_mock, props_without_plugins)
return manager
@pytest.fixture
def plugin_manager_with_plugins(plugin_service_manager_container_mock, props_with_plugins):
manager = PluginManager(plugin_service_manager_container_mock, props_with_plugins)
return manager
def init_plugin_manager(plugin_service_manager_container, props):
manager = PluginManager(plugin_service_manager_container, props)
return manager
def test_init_plugin_manager_with_no_plugins(
benchmark, plugin_service_manager_container_mock, props_without_plugins):
result = benchmark(init_plugin_manager, plugin_service_manager_container_mock, props_without_plugins)
assert result is not None
def test_init_plugin_manager_with_plugins(
benchmark, plugin_service_manager_container_mock, props_with_plugins):
result = benchmark(init_plugin_manager, plugin_service_manager_container_mock, props_with_plugins)
assert result is not None
def connect(mocker, plugin_manager, props):
conn = plugin_manager.connect(mocker.MagicMock(), mocker.MagicMock(), host_info, props, True)
return conn
def test_connect_with_no_plugins(benchmark, mocker, plugin_manager_with_no_plugins, props_without_plugins):
result = benchmark(connect, mocker, plugin_manager_with_no_plugins, props_without_plugins)
assert result is not None
def test_connect_with_plugins(benchmark, mocker, plugin_manager_with_plugins, props_with_plugins):
result = benchmark(connect, mocker, plugin_manager_with_plugins, props_with_plugins)
assert result is not None
def execute(mocker, plugin_manager, statement):
result = plugin_manager.execute(mocker.MagicMock(), "Statement.execute", statement)
return result
def test_execute_with_no_plugins(benchmark, mocker, plugin_manager_with_no_plugins, statement_mock):
result = benchmark(execute, mocker, plugin_manager_with_no_plugins, statement_mock)
assert result is not None
def test_execute_with_plugins(benchmark, mocker, plugin_manager_with_plugins, statement_mock):
result = benchmark(execute, mocker, plugin_manager_with_plugins, statement_mock)
assert result is not None
def init_host_provider(mocker, plugin_manager, props):
plugin_manager.init_host_provider(props, mocker.MagicMock())
def test_init_host_provider_with_no_plugins(benchmark, mocker, plugin_manager_with_no_plugins, props_without_plugins):
benchmark(init_host_provider, mocker, plugin_manager_with_no_plugins, props_without_plugins)
def test_init_host_provider_with_plugins(benchmark, mocker, plugin_manager_with_plugins, props_with_plugins):
benchmark(init_host_provider, mocker, plugin_manager_with_plugins, props_with_plugins)
def notify_connection_changed(mocker, plugin_manager):
result = plugin_manager.notify_connection_changed(mocker.MagicMock())
return result
def test_notify_connection_changed_with_no_plugins(benchmark, mocker, plugin_manager_with_no_plugins):
result = benchmark(notify_connection_changed, mocker, plugin_manager_with_no_plugins)
assert result is not None
def test_notify_connection_changed_with_plugins(benchmark, mocker, plugin_manager_with_plugins):
result = benchmark(notify_connection_changed, mocker, plugin_manager_with_plugins)
assert result is not None
def release_resources(plugin_manager):
plugin_manager.release_resources()
def test_release_resources_with_no_plugins(benchmark, plugin_manager_with_no_plugins):
benchmark(release_resources, plugin_manager_with_no_plugins)
def test_release_resources_with_plugins(benchmark, plugin_manager_with_plugins):
benchmark(release_resources, plugin_manager_with_plugins)