TestScanner now inserts new capabilities in database.

test_scanner_uploader will now insert new capabilities in the database.

Change-Id: I7a054b73ee8958c08c67dc2b01a6a3b83eff0e83
Signed-off-by: croy <Christian.Roy@windriver.com>
This commit is contained in:
croy
2025-08-22 15:01:34 -04:00
parent 8781f771f2
commit d5ea8f3bdb
2 changed files with 39 additions and 16 deletions

View File

@@ -1,7 +1,8 @@
from psycopg2.extras import RealDictCursor
from framework.database.connection.database_operation_manager import DatabaseOperationManager
from framework.database.objects.capability import Capability
from framework.logging.automation_logger import get_logger
from psycopg2.extras import RealDictCursor
class CapabilityOperation:
@@ -12,16 +13,36 @@ class CapabilityOperation:
def __init__(self):
self.database_operation_manager = DatabaseOperationManager()
def insert_capability(self, capability_name: str, capability_marker: str) -> Capability:
"""
Inserts into the database a new capability with capability_name and capability_marker passed in.
Args:
capability_name (str): the name of the new capability
capability_marker (str): the marker associated with the new capability
Returns:
Capability: A Capability object with the capability_id generated from the database.
"""
insert_query = f"INSERT INTO capability (capability_name, capability_marker) " f"VALUES ('{capability_name}', '{capability_marker}') " f"returning capability_id"
results = self.database_operation_manager.execute_query(insert_query, cursor_factory=RealDictCursor)
if results: # can only ever be 1 result
capability = Capability(results[0]["capability_id"], capability_name, capability_marker)
return capability
raise ValueError("Unable to insert the capability and get a capability_id.")
def get_capability_by_marker(self, capability_marker: str) -> Capability:
"""
Getter for capability given a capability name
Args:
capability_marker (): the marker
Returns: The capability
capability_marker (str): The marker used to identify the capability.
Returns:
Capability: The capability object if found, -1 if no capability is found.
"""
get_capability_query = f"SELECT * FROM capability where capability_marker='{capability_marker}'"
results = self.database_operation_manager.execute_query(get_capability_query, cursor_factory=RealDictCursor)
@@ -29,9 +50,9 @@ class CapabilityOperation:
if len(results) > 1:
get_logger().log_info(f"WARNING: We have found more than one result matching the Capability Name: {capability_marker}")
result = results[0]
capability = Capability(result['capability_id'], result['capability_name'], result['capability_marker'])
capability = Capability(result["capability_id"], result["capability_name"], result["capability_marker"])
return capability
else:
get_logger().log_error(f"ERROR: no capability with the name {capability_marker}")
get_logger().log_warning(f"There is no capability with the name {capability_marker}")
return -1

View File

@@ -6,6 +6,7 @@ from framework.database.objects.testcase import TestCase
from framework.database.operations.capability_operation import CapabilityOperation
from framework.database.operations.test_capability_operation import TestCapabilityOperation
from framework.database.operations.test_info_operation import TestInfoOperation
from framework.logging.automation_logger import get_logger
from framework.pytest_plugins.collection_plugin import CollectionPlugin
@@ -120,14 +121,15 @@ class TestScannerUploader:
capability_test_operation = TestCapabilityOperation()
# get all the capabilities associated with this test
capabilities = test.get_markers()
for capability in capabilities:
capability_markers = test.get_markers()
for capability_marker in capability_markers:
capability_object = capability_operation.get_capability_by_marker(capability)
capability_object = capability_operation.get_capability_by_marker(capability_marker)
# If capability does not exist, raise an exception
# If capability does not exist, insert it in the database and update the capability_object with the returned capability_id.
if capability_object == -1:
raise ValueError(f"No capability with name {capability} exists")
get_logger().log_info(f"Inserting a new Capability in the database for marker: {capability_marker}")
capability_object = capability_operation.insert_capability(capability_marker, capability_marker)
capability_id = capability_object.get_capability_id()
@@ -136,15 +138,15 @@ class TestScannerUploader:
if mapping_id == -1:
capability_test_operation.create_new_mapping(capability_id, test_info_id)
self.check_for_capabilities_to_remove(test_info_id, capabilities)
self.check_for_capabilities_to_remove(test_info_id, capability_markers)
def check_for_capabilities_to_remove(self, test_info_id: int, capabilities: [str]):
def check_for_capabilities_to_remove(self, test_info_id: int, capability_markers: [str]):
"""
Checks for capabilities in the db that no longer exist on the test
Args:
test_info_id (int): the test_info_id
capabilities ([str]): the capabilities on the test
capability_markers ([str]): the capability markers on the test
"""
# next we need to remove capabilities that are in the database but no longer on the test
@@ -155,7 +157,7 @@ class TestScannerUploader:
db_marker_names = map(lambda db_capability: db_capability.get_capability_marker(), db_capabilities)
# this will get the capabilities that exist in the db but not on the test itself
capabilities_to_be_removed = list(set(db_marker_names).difference(capabilities))
capabilities_to_be_removed = list(set(db_marker_names).difference(capability_markers))
for marker_name in capabilities_to_be_removed:
# find the correct db_capability