Coverage for tests/config.py: 97%
35 statements
« prev ^ index » next coverage.py v7.10.2, created at 2025-08-05 11:07 +0000
« prev ^ index » next coverage.py v7.10.2, created at 2025-08-05 11:07 +0000
1import logging
2from uuid import uuid4
3from dotenv import find_dotenv
4from pydantic import AnyUrl, AnyHttpUrl, Field, AliasChoices, model_validator
5from filip.models.base import FiwareHeader, LogLevel
6from pydantic_settings import BaseSettings, SettingsConfigDict
7from typing import Union, Optional
10def generate_servicepath():
11 """
12 Generates a random service path
14 Returns:
15 String: unique service path
16 """
17 return f'/{str(uuid4()).replace("-", "")}'
20class TestSettings(BaseSettings):
21 """
22 Settings for the test case scenarios according to pydantic's documentaion
23 https://pydantic-docs.helpmanual.io/usage/settings/
24 """
26 LOG_LEVEL: LogLevel = Field(
27 default=LogLevel.ERROR, validation_alias=AliasChoices("LOG_LEVEL", "LOGLEVEL")
28 )
30 CB_URL: AnyHttpUrl = Field(
31 default="http://localhost:1026",
32 validation_alias=AliasChoices(
33 "ORION_URL", "CB_URL", "CB_HOST", "CONTEXTBROKER_URL", "OCB_URL"
34 ),
35 )
36 LD_CB_URL: AnyHttpUrl = Field(
37 default="http://localhost:1026",
38 validation_alias=AliasChoices(
39 "LD_ORION_URL", "LD_CB_URL", "ORION_LD_URL", "SCORPIO_URL", "STELLIO_URL"
40 ),
41 )
42 IOTA_URL: AnyHttpUrl = Field(
43 default="http://localhost:4041", validation_alias="IOTA_URL"
44 )
45 IOTA_JSON_URL: AnyHttpUrl = Field(
46 default="http://localhost:4041", validation_alias="IOTA_JSON_URL"
47 )
49 IOTA_UL_URL: AnyHttpUrl = Field(
50 default="http://127.0.0.1:4061", validation_alias=AliasChoices("IOTA_UL_URL")
51 )
53 QL_URL: AnyHttpUrl = Field(
54 default="http://127.0.0.1:8668",
55 validation_alias=AliasChoices("QUANTUMLEAP_URL", "QL_URL"),
56 )
58 MQTT_BROKER_URL: AnyUrl = Field(
59 default="mqtt://127.0.0.1:1883",
60 validation_alias=AliasChoices("MQTT_BROKER_URL", "MQTT_URL", "MQTT_BROKER"),
61 )
63 MQTT_BROKER_URL_INTERNAL: AnyUrl = Field(
64 default="mqtt://mosquitto:1883",
65 validation_alias=AliasChoices("MQTT_BROKER_URL_INTERNAL", "MQTT_URL_INTERNAL"),
66 )
68 LD_MQTT_BROKER_URL: AnyUrl = Field(
69 default="mqtt://127.0.0.1:1884",
70 validation_alias=AliasChoices(
71 "LD_MQTT_BROKER_URL", "LD_MQTT_URL", "LD_MQTT_BROKER"
72 ),
73 )
75 LD_MQTT_BROKER_URL_INTERNAL: AnyUrl = Field(
76 default="mqtt://mqtt-broker-ld:1883",
77 validation_alias=AliasChoices(
78 "LD_MQTT_BROKER_URL_INTERNAL", "LD_MQTT_URL_INTERNAL"
79 ),
80 )
82 # IF CI_JOB_ID is present it will always overwrite the service path
83 CI_JOB_ID: Optional[str] = Field(
84 default=None, validation_alias=AliasChoices("CI_JOB_ID")
85 )
87 # create service paths for multi tenancy scenario and concurrent testing
88 FIWARE_SERVICE: str = Field(
89 default="filip", validation_alias=AliasChoices("FIWARE_SERVICE")
90 )
92 FIWARE_SERVICEPATH: str = Field(
93 default_factory=generate_servicepath,
94 validation_alias=AliasChoices(
95 "FIWARE_PATH", "FIWARE_SERVICEPATH", "FIWARE_SERVICE_PATH"
96 ),
97 )
99 STATIC_RECORDS: int = Field(
100 default=1000, validation_alias=AliasChoices("STATIC_RECORDS")
101 )
103 @model_validator(mode="after")
104 def generate_multi_tenancy_setup(cls, values):
105 """
106 Tests if the fields for multi tenancy in fiware are consistent.
107 If CI_JOB_ID is present it will always overwrite the service path.
108 Args:
109 values: class variables
111 Returns:
113 """
114 if values.model_dump().get("CI_JOB_ID", None):
115 values.FIWARE_SERVICEPATH = f"/{values.CI_JOB_ID}"
117 # validate header
118 FiwareHeader(
119 service=values.FIWARE_SERVICE, service_path=values.FIWARE_SERVICEPATH
120 )
122 return values
124 model_config = SettingsConfigDict(
125 env_file=find_dotenv(".env"),
126 env_file_encoding="utf-8",
127 case_sensitive=False,
128 use_enum_values=True,
129 )
132# create settings object
133settings = TestSettings()
134print(
135 f"Running tests with the following settings: \n "
136 f"{settings.model_dump_json(indent=2)}"
137)
139# configure logging for all tests
140logging.basicConfig(
141 level=settings.LOG_LEVEL, format="%(asctime)s %(name)s %(levelname)s: %(message)s"
142)