Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor/fk revise package names #105

Merged
merged 4 commits into from
Nov 30, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions everest-testing/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ The core_utils basically provide two fixtures that you can require in your test
- **ocpp_config** Used to provide the configuration, i.e. the JSON device model, to set up the OCPP (1.6 or 2.0.1) module.
- **evse_security_config** Used to provide the configuration to set up the EvseSecurity module.
- **persistent_storage_config** Used to provide the configuration to set up the PersistentStorage module.
- **everest_config_visitors**: Provides a list of additional `EverestConfigAdjustmentVisitor` instances that are called to manipulate the resulting Everest configuration.
- **everest_config_strategies**: Provides a list of additional `EverestConfigAdjustmentStrategy` instances that are called to manipulate the resulting Everest configuration.

### pytest markers

Expand All @@ -42,7 +42,7 @@ Some OCPP fixtures will parse pytest markers of test cases. The following marker
- **probe_module**: If set, the ProbeModule will be injected into the config (used by the `probe_module_config` fixture). This marker accepts optional keyword arguments `connections` and `module_id` to configure the probe module.
- **source_certs_dir**: If set and the default `evse_security_config` fixture is used, this will cause the `EvseSecurity` module configuration to use a temporary certificates folder into which the source certificate folder trees are copied.
- **use_temporary_persistent_store**: If set and the default `persistent_storage_config` fixture is used, this will cause the `PersistentStore` module configuration to use a temporary database.
- **everest_config_adaptions**: Can be given instances of `EverestConfigAdjustmentVisitor` as positional arguments which will be applied to the resulting Everest configuration.
- **everest_config_adaptions**: Can be given instances of `EverestConfigAdjustmentStrategy` as positional arguments which will be applied to the resulting Everest configuration.

## OCPP utils

Expand Down Expand Up @@ -70,7 +70,7 @@ An important function that you will frequently use when writing test cases is th
- **ocpp_config_adaptions**: Specification of the .json OCPP config file. Used in `ocpp_config` fixture and used as template configuration (if not specified, the OCPP config as specified in the EVerest configuration is used)
- **inject_csms_mock**: (currently only OCPP 2.0.1) If set, the `central_system_v201` will wrap any csms handler method into an unittest mock. In particular, this allows changing the CSMS behavior even after the chargepoint is started by setting side effects of the mock. See `everest.testing.ocpp_utils.charge_point_v201.inject_csms_v201_mock` docstring for an example.
- **csms_tls**: Enable/disable TLS for the CSMS websocket server. If given without arguments, enables TLS. First argument can be `False` to explicitly disable TLS. Further optional keyword arguments `certificate`, `private_key`,`passphrase`, `root_ca` , and `verify_client_certificate` allow to overwrite SSL context options.
- **ocpp_config_adaptions**: Can be given instances of `OCPPConfigAdjustmentVisitor` as positional arguments which will be applied to the resulting OCPP configuration.
- **ocpp_config_adaptions**: Can be given instances of `OCPPConfigAdjustmentStrategy` as positional arguments which will be applied to the resulting OCPP configuration.


## Add a conftest.py
Expand Down
2 changes: 1 addition & 1 deletion everest-testing/src/everest/testing/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__="0.1.8"
__version__="0.2.0"
6 changes: 6 additions & 0 deletions everest-testing/src/everest/testing/core_utils/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from ._configuration.everest_configuration_strategies.everest_configuration_strategy import \
EverestConfigAdjustmentStrategy # flake8: noqa
from ._configuration.libocpp_configuration_helper import OCPPConfigAdjustmentStrategy, \
OCPPConfigAdjustmentStrategyWrapper # flake8: noqa

__all__ = ["common", "everest_core", "fixtures", "probe_module"]
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
"""
See base class `EverestConfigAdjustmentStrategy`

"""
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
from typing import Dict


class EverestConfigAdjustmentVisitor(ABC):
""" Visitor that manipulates a (parsed) EVerest config when called.
class EverestConfigAdjustmentStrategy(ABC):
""" Strategy that manipulates a (parsed) EVerest config when called.

Used to build up / adapt EVerest configurations for tests.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
from pathlib import Path
from typing import Dict, Optional, Union

from everest.testing.core_utils.configuration.everest_configuration_visitors.everest_configuration_visitor import \
EverestConfigAdjustmentVisitor
from everest.testing.core_utils._configuration.everest_configuration_strategies.everest_configuration_strategy import \
EverestConfigAdjustmentStrategy


@dataclass
Expand All @@ -20,7 +20,7 @@ class EvseSecurityModuleConfiguration:
private_key_password: Optional[str] = None


class EvseSecurityModuleConfigurationVisitor(EverestConfigAdjustmentVisitor):
class EvseSecurityModuleConfigurationStrategy(EverestConfigAdjustmentStrategy):
""" Adjusts the Evse security module configuration in the Everest configuration merging a provided configuration into it (if provided) and adapt
all paths relative to a certificate target directory (if provided).
"""
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
from copy import deepcopy
from typing import Dict

from everest.testing.core_utils.configuration.everest_configuration_visitors.everest_configuration_visitor import \
EverestConfigAdjustmentVisitor
from everest.testing.core_utils._configuration.everest_configuration_strategies.everest_configuration_strategy import \
EverestConfigAdjustmentStrategy


class EverestMqttConfigurationAdjustmentVisitor(EverestConfigAdjustmentVisitor):
class EverestMqttConfigurationAdjustmentStrategy(EverestConfigAdjustmentStrategy):
""" Adjusts the Everest configuration by manipulating the "settings" block to use the prober Everest UUID and
external prefix.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from typing import Union, Dict

from everest.testing.core_utils.common import OCPPVersion
from everest.testing.core_utils.configuration.everest_configuration_visitors.everest_configuration_visitor import EverestConfigAdjustmentVisitor
from everest.testing.core_utils._configuration.everest_configuration_strategies.everest_configuration_strategy import EverestConfigAdjustmentStrategy



Expand All @@ -24,7 +24,7 @@ class OCPPModulePaths201(OCPPModuleConfigurationBase):
DeviceModelDatabasePath: str


class OCPPModuleConfigurationVisitor(EverestConfigAdjustmentVisitor):
class OCPPModuleConfigurationStrategy(EverestConfigAdjustmentStrategy):
""" Adjusts the Everest configuration by manipulating the OCPP module configuration to use proper (temporary test) paths.

"""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
from pathlib import Path
from typing import Dict, Optional

from everest.testing.core_utils.configuration.everest_configuration_visitors.everest_configuration_visitor import \
EverestConfigAdjustmentVisitor
from everest.testing.core_utils._configuration.everest_configuration_strategies.everest_configuration_strategy import \
EverestConfigAdjustmentStrategy


class PersistentStoreConfigurationVisitor(EverestConfigAdjustmentVisitor):
class PersistentStoreConfigurationStrategy(EverestConfigAdjustmentStrategy):
""" Adjusts the Everest configuration by manipulating the PersistentStore module configuration to point
to the desired (temporary) storage

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
from typing import Dict, List

from everest.testing.core_utils.common import Requirement
from everest.testing.core_utils.configuration.everest_configuration_visitors.everest_configuration_visitor import EverestConfigAdjustmentVisitor
from everest.testing.core_utils._configuration.everest_configuration_strategies.everest_configuration_strategy import EverestConfigAdjustmentStrategy


class ProbeModuleConfigurationVisitor(EverestConfigAdjustmentVisitor):
class ProbeModuleConfigurationStrategy(EverestConfigAdjustmentStrategy):
""" Adjusts the Everest configuration by adding the probe module into an EVerest config """

def __init__(self,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,22 +10,20 @@
import yaml

from everest.testing.core_utils.common import OCPPVersion
from everest.testing.core_utils.configuration.everest_configuration_visitors.everest_configuration_visitor import \
EverestConfigAdjustmentVisitor
from everest.testing.core_utils.configuration.everest_configuration_visitors.evse_security_configuration_visitor import \
EvseSecurityModuleConfigurationVisitor, EvseSecurityModuleConfiguration
from everest.testing.core_utils.configuration.everest_configuration_visitors.ocpp_module_configuration_visitor import \
OCPPModuleConfigurationVisitor, \
from everest.testing.core_utils.everest_core import EverestCore, Requirement
from .everest_configuration_strategies.everest_configuration_strategy import \
EverestConfigAdjustmentStrategy
from .everest_configuration_strategies.evse_security_configuration_strategy import \
EvseSecurityModuleConfigurationStrategy, EvseSecurityModuleConfiguration
from .everest_configuration_strategies.ocpp_module_configuration_strategy import \
OCPPModuleConfigurationStrategy, \
OCPPModulePaths16, OCPPModulePaths201
from everest.testing.core_utils.configuration.everest_configuration_visitors.persistent_store_configuration_visitor import \
PersistentStoreConfigurationVisitor
from everest.testing.core_utils.configuration.everest_configuration_visitors.probe_module_configuration_visitor import \
ProbeModuleConfigurationVisitor
from everest.testing.core_utils.configuration.libocpp_configuration_helper import \
from .everest_configuration_strategies.persistent_store_configuration_strategy import \
PersistentStoreConfigurationStrategy
from .everest_configuration_strategies.probe_module_configuration_strategy import \
ProbeModuleConfigurationStrategy
from .libocpp_configuration_helper import \
LibOCPP201ConfigurationHelper, LibOCPP16ConfigurationHelper
from everest.testing.core_utils.everest_core import EverestCore, Requirement

logging.basicConfig(level=logging.DEBUG)


@dataclass
Expand All @@ -39,7 +37,7 @@ class EverestEnvironmentOCPPConfiguration:
Path] = None # Path for OCPP config to be used; if not provided, will be determined from everest config
device_model_schemas_path: Optional[
Path] = None # Path of the OCPP device model json schemas. If not set, {libocpp_path} / 'config/v201/component_schemas' will be used
configuration_visitors: list[OCPPModuleConfigurationVisitor] | None = None
configuration_strategies: list[OCPPModuleConfigurationStrategy] | None = None


@dataclass
Expand Down Expand Up @@ -102,7 +100,7 @@ def __init__(self,
evse_security_config: Optional[EverestEnvironmentEvseSecurityConfiguration] = None,
persistent_store_config: Optional[EverestEnvironmentPersistentStoreConfiguration] = None,
standalone_module: Optional[Union[str, List[str]]] = None,
everest_config_visitors: Optional[List[EverestConfigAdjustmentVisitor]] = None
everest_config_strategies: Optional[List[EverestConfigAdjustmentStrategy]] = None
) -> None:
self._core_config = core_config
self._ocpp_config = ocpp_config
Expand All @@ -112,18 +110,18 @@ def __init__(self,
self._standalone_module = standalone_module
if not self._standalone_module and self._probe_config:
self._standalone_module = self._probe_config.module_id
self._additional_everest_config_visitors = everest_config_visitors if everest_config_visitors else []
self._additional_everest_config_strategies = everest_config_strategies if everest_config_strategies else []
self._everest_core = None

def setup_environment(self, tmp_path: Path):

temporary_paths = self._create_temporary_directory_structure(tmp_path)

configuration_visitors = self._create_everest_configuration_visitors(temporary_paths)
configuration_strategies = self._create_everest_configuration_strategies(temporary_paths)

self._everest_core = EverestCore(self._core_config.everest_core_path,
self._core_config.template_everest_config_path,
everest_configuration_adjustment_visitors=configuration_visitors + self._additional_everest_config_visitors,
everest_configuration_adjustment_strategies=configuration_strategies + self._additional_everest_config_strategies,
standalone_module=self._standalone_module,
tmp_path=tmp_path)

Expand Down Expand Up @@ -162,8 +160,8 @@ def _create_temporary_directory_structure(self, tmp_path: Path) -> _EverestEnvir
persistent_store_db_path=persistent_store_dir / "persistent_store.db"
)

def _create_ocpp_module_configuration_visitor(self,
temporary_paths: _EverestEnvironmentTemporaryPaths) -> OCPPModuleConfigurationVisitor:
def _create_ocpp_module_configuration_strategy(self,
temporary_paths: _EverestEnvironmentTemporaryPaths) -> OCPPModuleConfigurationStrategy:

if self._ocpp_config.ocpp_version == OCPPVersion.ocpp16:
ocpp_paths = OCPPModulePaths16(
Expand All @@ -184,9 +182,9 @@ def _create_ocpp_module_configuration_visitor(self,
else:
raise ValueError(f"unknown ocpp version {self._ocpp_config.ocpp_version}")

occp_module_configuration_helper = OCPPModuleConfigurationVisitor(ocpp_paths=ocpp_paths,
ocpp_module_id=self._ocpp_config.ocpp_module_id,
ocpp_version=self._ocpp_config.ocpp_version)
occp_module_configuration_helper = OCPPModuleConfigurationStrategy(ocpp_paths=ocpp_paths,
ocpp_module_id=self._ocpp_config.ocpp_module_id,
ocpp_version=self._ocpp_config.ocpp_version)

return occp_module_configuration_helper

Expand All @@ -205,7 +203,7 @@ def _setup_libocpp_configuration(self, temporary_paths: _EverestEnvironmentTempo
source_ocpp_config_file=source_ocpp_config,
target_ocpp_config_file=temporary_paths.ocpp_config_file,
target_ocpp_user_config_file=temporary_paths.ocpp_user_config_file,
configuration_visitors=self._ocpp_config.configuration_visitors
configuration_strategies=self._ocpp_config.configuration_strategies
)

if self._ocpp_config.ocpp_version == OCPPVersion.ocpp201:
Expand All @@ -218,31 +216,31 @@ def _setup_libocpp_configuration(self, temporary_paths: _EverestEnvironmentTempo
target_directory=temporary_paths.ocpp_database_dir
)

def _create_everest_configuration_visitors(self, temporary_paths: _EverestEnvironmentTemporaryPaths):
configuration_visitors = []
def _create_everest_configuration_strategies(self, temporary_paths: _EverestEnvironmentTemporaryPaths):
configuration_strategies = []
if self._ocpp_config:
configuration_visitors.append(self._create_ocpp_module_configuration_visitor(temporary_paths))
configuration_strategies.append(self._create_ocpp_module_configuration_strategy(temporary_paths))
if self._probe_config:
configuration_visitors.append(
ProbeModuleConfigurationVisitor(connections=self._probe_config.connections,
module_id=self._probe_config.module_id))
configuration_strategies.append(
ProbeModuleConfigurationStrategy(connections=self._probe_config.connections,
module_id=self._probe_config.module_id))

if self._evse_security_config:
configuration_visitors.append(
EvseSecurityModuleConfigurationVisitor(module_id=self._evse_security_config.module_id,
configuration=self._evse_security_config.module_configuration,
source_certificates_directory=self._evse_security_config.source_certificate_directory,
target_certificates_directory=temporary_paths.certs_dir \
if self._evse_security_config.use_temporary_certificates_folder \
else None
))
configuration_strategies.append(
EvseSecurityModuleConfigurationStrategy(module_id=self._evse_security_config.module_id,
configuration=self._evse_security_config.module_configuration,
source_certificates_directory=self._evse_security_config.source_certificate_directory,
target_certificates_directory=temporary_paths.certs_dir \
if self._evse_security_config.use_temporary_certificates_folder \
else None
))

if self._persistent_store_config and self._persistent_store_config.use_temporary_folder:
configuration_visitors.append(
PersistentStoreConfigurationVisitor(sqlite_db_file_path=temporary_paths.persistent_store_db_path)
configuration_strategies.append(
PersistentStoreConfigurationStrategy(sqlite_db_file_path=temporary_paths.persistent_store_db_path)
)

return configuration_visitors
return configuration_strategies

def _determine_configured_charge_point_config_path_from_everest_config(self):

Expand Down
Loading