blob: db2f555e41f022a8b64889b00e4c12c0b1eac445 [file] [log] [blame]
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
#
import humanfriendly
from behave import step, given, then
from minifi_test_framework.steps import checking_steps # noqa: F401
from minifi_test_framework.steps import configuration_steps # noqa: F401
from minifi_test_framework.steps import core_steps # noqa: F401
from minifi_test_framework.steps import flow_building_steps # noqa: F401
from minifi_test_framework.core.helpers import wait_for_condition
from minifi_test_framework.minifi.controller_service import ControllerService
from minifi_test_framework.core.minifi_test_context import MinifiTestContext
from postgress_server_container import PostgresContainer
@given("an ODBCService is setup up for {processor_name} with the name \"{service_name}\"")
def step_impl(context: MinifiTestContext, processor_name: str, service_name: str):
odb_service = ControllerService(class_name="ODBCService", service_name=service_name)
postgres_server_hostname = f"postgres-server-{context.scenario_id}"
odb_service.add_property("Connection String", f"Driver={{PostgreSQL ANSI}};Server={postgres_server_hostname};Port=5432;Database=postgres;Uid=postgres;Pwd=password;")
context.get_or_create_default_minifi_container().flow_definition.controller_services.append(odb_service)
processor = context.get_or_create_default_minifi_container().flow_definition.get_processor(processor_name)
processor.add_property("DB Controller Service", "ODBCService")
@step("a PostgreSQL server is set up")
def step_impl(context):
context.containers["postgres-server"] = PostgresContainer(context)
@then('the query "{query}" returns {rows:d} rows in less than {timeout_str} on the PostgreSQL server')
def step_impl(context, query: str, rows: int, timeout_str: str):
timeout_seconds = humanfriendly.parse_timespan(timeout_str)
postgres_container = context.containers["postgres-server"]
assert isinstance(postgres_container, PostgresContainer)
assert wait_for_condition(
condition=lambda: postgres_container.check_query_results(query, int(rows)),
timeout_seconds=timeout_seconds,
bail_condition=lambda: postgres_container.exited,
context=context)