Implement StopObject()

For some test cases, we might want to stop a service earlier. This
functionality is done by StopObject().

Test log collection is still done by UndeployObject(), which will
collect the logs of all services (at that point, stopped or not).
This commit is contained in:
Robert Schmidt
2025-11-14 14:57:12 +01:00
parent de8d0991ec
commit 81680e29a9
5 changed files with 83 additions and 1 deletions
+29
View File
@@ -758,6 +758,35 @@ class Containerize():
logging.error('\u001B[1m Deploying objects Failed\u001B[0m')
return deployed
def StopObject(self, ctx, node, HTML):
lSourcePath = self.eNBSourceCodePath
if not self.services:
raise ValueError(f'no services provided')
logging.info(f'\u001B[1m Stopping objects "{self.services}" from server: {node}\u001B[0m')
reqServices = self.services.split()
yaml = self.yamlPath.strip('/')
wd = f'{lSourcePath}/{yaml}'
wd_yaml = f'{wd}/docker-compose.y*ml'
with cls_cmd.getConnection(node) as ssh:
ExistEnvFilePrint(ssh, wd)
services = GetDeployedServices(ssh, wd_yaml)
success = []
fail = []
for s in reqServices:
if s in services:
ssh.run(f'docker compose -f {wd_yaml} stop -- {s}')
success.append(s)
else:
logging.error(f"no such service {s}")
fail.append(s)
if success == reqServices:
logging.info('\u001B[1m Stopping object Pass\u001B[0m')
HTML.CreateHtmlTestRowQueue(self.services, 'OK', [f'Stopped {self.services}'])
else:
logging.error('\u001B[1m Stopping object Failed\u001B[0m')
HTML.CreateHtmlTestRowQueue(self.services, 'KO', [f'Failed stopping {" ".join(fail)}, succeeded {" ".join(success)}'])
return success
def UndeployObject(self, ctx, node, HTML, RAN):
lSourcePath = self.eNBSourceCodePath
logging.info(f'\u001B[1m Undeploying all objects from server {node}\u001B[0m')
+3 -1
View File
@@ -214,7 +214,7 @@ def ExecuteActionWithParam(action, ctx, node):
core_op = getattr(cls_oaicitest.OaiCiTest, action)
success = core_op(cn_id, ctx, HTML)
elif action == 'Deploy_Object' or action == 'Undeploy_Object' or action == "Create_Workspace":
elif action == 'Deploy_Object' or action == 'Undeploy_Object' or action == "Create_Workspace" or action == "Stop_Object":
CONTAINERS.yamlPath = test.findtext('yaml_path')
string_field=test.findtext('d_retx_th')
if (string_field is not None):
@@ -227,6 +227,8 @@ def ExecuteActionWithParam(action, ctx, node):
CONTAINERS.deploymentTag = cls_containerize.CreateTag(CONTAINERS.ranCommitID, CONTAINERS.ranBranch, CONTAINERS.ranAllowMerge)
if action == 'Deploy_Object':
success = CONTAINERS.DeployObject(ctx, node, HTML)
elif action == 'Stop_Object':
success = CONTAINERS.StopObject(ctx, node, HTML)
elif action == 'Undeploy_Object':
success = CONTAINERS.UndeployObject(ctx, node, HTML, RAN)
elif action == 'Create_Workspace':
+27
View File
@@ -60,6 +60,33 @@ class TestDeploymentMethods(unittest.TestCase):
self.assertTrue(deploy)
self.assertTrue(undeploy)
def test_stop_services(self):
self.cont.yamlPath = 'tests/simple-undep/'
self.cont.deploymentTag = "noble"
# should deploy both testA and testB
deploy = self.cont.DeployObject(self.ctx, self.node, self.html)
# should fail (no such service)
self.cont.services = "testC"
stopC = self.cont.StopObject(self.ctx, self.node, self.html)
# should stop testA
self.cont.services = "testA"
stopA = self.cont.StopObject(self.ctx, self.node, self.html)
# should (re-)stop testA (no-op)
self.cont.services = "testA"
stopA2 = self.cont.StopObject(self.ctx, self.node, self.html)
# should deploy testB
self.cont.services = "testB"
stopB = self.cont.StopObject(self.ctx, self.node, self.html)
# should not undeploy anything (everything already stopped)
self.cont.services = None
undeployAll = self.cont.UndeployObject(self.ctx, self.node, self.html, self.ran)
self.assertTrue(deploy)
self.assertFalse(stopC)
self.assertTrue(stopA)
self.assertTrue(stopA2)
self.assertTrue(stopB)
self.assertTrue(undeployAll)
def test_deployfails(self):
# fails reliably
old = self.cont.yamlPath
@@ -0,0 +1,23 @@
services:
testA:
image: ubuntu:${TAG:-jammy}
container_name: test_container_A
cap_drop:
- ALL
entrypoint: /bin/bash -c "sleep infinity"
healthcheck:
test: /bin/bash -c "true"
interval: 1s
timeout: 1s
retries: 1
testB:
image: ubuntu:${TAG:-jammy}
container_name: test_container_B
cap_drop:
- ALL
entrypoint: /bin/bash -c "sleep infinity"
healthcheck:
test: /bin/bash -c "true"
interval: 1s
timeout: 1s
retries: 1
+1
View File
@@ -20,6 +20,7 @@
- Build_Image
- Build_Run_Tests
- Deploy_Object
- Stop_Object
- Undeploy_Object
- Cppcheck_Analysis
- Deploy_Run_OC_PhySim