From a09db9f287a02873c0226759f8ea444bb304cd59 Mon Sep 17 00:00:00 2001 From: Justin Choquette Date: Thu, 8 Jun 2023 12:46:53 -0400 Subject: LaaS 3.0 Almost MVP Change-Id: Ided9a43cf3088bb58a233dc459711c03f43e11b8 Signed-off-by: Justin Choquette --- src/workflow/tests/__init__.py | 8 -- src/workflow/tests/constants.py | 198 -------------------------- src/workflow/tests/test_fixtures.py | 2 - src/workflow/tests/test_steps.py | 269 ----------------------------------- src/workflow/tests/test_workflows.py | 99 ------------- 5 files changed, 576 deletions(-) delete mode 100644 src/workflow/tests/__init__.py delete mode 100644 src/workflow/tests/constants.py delete mode 100644 src/workflow/tests/test_fixtures.py delete mode 100644 src/workflow/tests/test_steps.py delete mode 100644 src/workflow/tests/test_workflows.py (limited to 'src/workflow/tests') diff --git a/src/workflow/tests/__init__.py b/src/workflow/tests/__init__.py deleted file mode 100644 index 4f0437d..0000000 --- a/src/workflow/tests/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -############################################################################## -# Copyright (c) 2018 Parker Berberian, Sawyer Bergeron and others. -# -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Apache License, Version 2.0 -# which accompanies this distribution, and is available at -# http://www.apache.org/licenses/LICENSE-2.0 -############################################################################## diff --git a/src/workflow/tests/constants.py b/src/workflow/tests/constants.py deleted file mode 100644 index f94a949..0000000 --- a/src/workflow/tests/constants.py +++ /dev/null @@ -1,198 +0,0 @@ -############################################################################## -# Copyright (c) 2018 Parker Berberian, Sawyer Bergeron, and others. -# -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Apache License, Version 2.0 -# which accompanies this distribution, and is available at -# http://www.apache.org/licenses/LICENSE-2.0 -############################################################################## -POD_XML = """ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -""" diff --git a/src/workflow/tests/test_fixtures.py b/src/workflow/tests/test_fixtures.py deleted file mode 100644 index fe16be7..0000000 --- a/src/workflow/tests/test_fixtures.py +++ /dev/null @@ -1,2 +0,0 @@ - -MX_GRAPH_MODEL = '' diff --git a/src/workflow/tests/test_steps.py b/src/workflow/tests/test_steps.py deleted file mode 100644 index 57bf6a3..0000000 --- a/src/workflow/tests/test_steps.py +++ /dev/null @@ -1,269 +0,0 @@ -############################################################################## -# Copyright (c) 2018 Parker Berberian, Sawyer Bergeron, and others. -# -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Apache License, Version 2.0 -# which accompanies this distribution, and is available at -# http://www.apache.org/licenses/LICENSE-2.0 -############################################################################## - -""" -This file tests basic functionality of each step class. - -More in depth case coverage of WorkflowStep.post() must happen elsewhere. -""" - -import json -from unittest import SkipTest, mock - -from django.test import TestCase, RequestFactory -from dashboard.testing_utils import make_lab, make_user, make_os,\ - make_complete_host_profile, make_opnfv_role, make_image, make_grb,\ - make_config_bundle, make_host, make_user_profile, make_generic_host -from workflow import resource_bundle_workflow -from workflow import booking_workflow -from workflow import sw_bundle_workflow -from workflow.models import Repository -from workflow.tests import test_fixtures - - -class TestConfig: - """ - Basic class to instantiate and hold reference. - - to models we will need often - """ - - def __init__(self, usr=None): - self.lab = make_lab() - self.user = usr or make_user() - self.os = make_os() - self.host_prof = make_complete_host_profile(self.lab) - self.host = make_host(self.host_prof, self.lab, name="host1") - - # pod description as required by testing lib - self.topology = { - "host1": { - "type": self.host_prof, - "role": make_opnfv_role(), - "image": make_image(self.lab, 3, self.user, self.os, self.host_prof), - "nets": [ - [{"name": "public", "tagged": True, "public": True}] - ] - } - } - self.grb = make_grb(self.topology, self.user, self.lab)[0] - self.generic_host = make_generic_host(self.grb, self.host_prof, "host1") - - -class StepTestCase(TestCase): - - # after setUp is called, this should be an instance of a step - step = None - - post_data = {} # subclasses will set this - - @classmethod - def setUpTestData(cls): - super().setUpTestData() - cls.factory = RequestFactory() - cls.user_prof = make_user_profile() - cls.user = cls.user_prof.user - - def setUp(self): - super().setUp() - if self.step is None: - raise SkipTest("Step instance not given") - repo = Repository() - self.add_to_repo(repo) - self.step = self.step(1, repo) - - def assertCorrectPostBehavior(self, post_data): - """ - Stub for validating step behavior on POST request. - - allows subclasses to override and make assertions about - the side effects of self.step.post() - post_data is the data passed into post() - """ - return - - def add_to_repo(self, repo): - """ - Stub for modifying the step's repo. - - This method is a hook that allows subclasses to modify - the contents of the repo before the step is created. - """ - return - - def assertValidHtml(self, html_str): - """ - Assert that html_str is a valid html fragment. - - However, I know of no good way of doing this in python - """ - self.assertTrue(isinstance(html_str, str)) - self.assertGreater(len(html_str), 0) - - def test_render_to_string(self): - request = self.factory.get("/workflow/manager/") - request.user = self.user - response_html = self.step.render_to_string(request) - self.assertValidHtml(response_html) - - def test_post(self, data=None): - post_data = data or self.post_data - self.step.post(post_data, self.user) - self.assertCorrectPostBehavior(data) - - -class SelectStepTestCase(StepTestCase): - # ID of model to be sent to the step's form - # can be an int or a list of ints - obj_id = -1 - - def setUp(self): - super().setUp() - - try: - iter(self.obj_id) - except TypeError: - self.obj_id = [self.obj_id] - - field_data = json.dumps(self.obj_id) - self.post_data = { - "searchable_select": [field_data] - } - - -class DefineHardwareTestCase(StepTestCase): - step = resource_bundle_workflow.Define_Hardware - post_data = { - "filter_field": { - "lab": { - "lab_35": {"selected": True, "id": 35}}, - "host": { - "host_1": {"selected": True, "id": 1}} - } - } - - -class DefineNetworkTestCase(StepTestCase): - step = resource_bundle_workflow.Define_Nets - post_data = {"xml": test_fixtures.MX_GRAPH_MODEL} - - -class ResourceMetaTestCase(StepTestCase): - step = resource_bundle_workflow.Resource_Meta_Info - post_data = { - "bundle_name": "my_bundle", - "bundle_description": "My Bundle" - } - - -class BookingResourceTestCase(SelectStepTestCase): - step = booking_workflow.Booking_Resource_Select - - def add_to_repo(self, repo): - repo.el[repo.SESSION_USER] = self.user - - @classmethod - def setUpTestData(cls): - super().setUpTestData() - conf = TestConfig(usr=cls.user) - cls.obj_id = conf.grb.id - - -class SoftwareSelectTestCase(SelectStepTestCase): - step = booking_workflow.SWConfig_Select - - def add_to_repo(self, repo): - repo.el[repo.SESSION_USER] = self.user - repo.el[repo.SELECTED_RESOURCE_TEMPLATE] = self.conf.grb - - @classmethod - def setUpTestData(cls): - super().setUpTestData() - cls.conf = TestConfig(usr=cls.user) - host_map = {"host1": cls.conf.generic_host} - config_bundle = make_config_bundle(cls.conf.grb, cls.conf.user, cls.conf.topology, host_map)[0] - cls.obj_id = config_bundle.id - - -class OPNFVSelectTestCase(SelectStepTestCase): - step = booking_workflow.OPNFV_Select - - def add_to_repo(self, repo): - repo.el[repo.SELECTED_CONFIG_BUNDLE] = self.config_bundle - - @classmethod - def setUpTestData(cls): - super().setUpTestData() - conf = TestConfig(usr=cls.user) - host_map = {"host1": conf.generic_host} - cls.config_bundle, opnfv_config = make_config_bundle(conf.grb, conf.user, conf.topology, host_map) - cls.obj_id = opnfv_config.id - - -class BookingMetaTestCase(StepTestCase): - step = booking_workflow.Booking_Meta - post_data = { - "length": 14, - "purpose": "Testing", - "project": "Lab as a Service", - "users": ["[-1]"] - } - - def add_to_repo(self, repo): - repo.el[repo.SESSION_MANAGER] = mock.MagicMock() - - @classmethod - def setUpTestData(cls): - super().setUpTestData() - new_user = make_user(username="collaborator", email="different@mail.com") - new_user_prof = make_user_profile(user=new_user) - data = "[" + str(new_user_prof.id) + "]" # list of IDs - cls.post_data['users'] = [data] - - -class ConfigResourceSelectTestCase(SelectStepTestCase): - step = sw_bundle_workflow.SWConf_Resource_Select - - def add_to_repo(self, repo): - repo.el[repo.SESSION_USER] = self.user - - @classmethod - def setUpTestData(cls): - super().setUpTestData() - conf = TestConfig(usr=cls.user) - cls.obj_id = conf.grb.id - - -class DefineSoftwareTestCase(StepTestCase): - step = sw_bundle_workflow.Define_Software - post_data = { - "form-0-image": 1, - "headnode": 1, - "form-0-headnode": "", - "form-TOTAL_FORMS": 1, - "form-INITIAL_FORMS": 1, - "form-MIN_NUM_FORMS": 0, - "form-MAX_NUM_FORMS": 1000, - } - - def add_to_repo(self, repo): - repo.el[repo.SELECTED_RESOURCE_TEMPLATE] = self.conf.grb - - @classmethod - def setUpTestData(cls): - super().setUpTestData() - cls.conf = TestConfig(usr=cls.user) - - -class ConfigSoftwareTestCase(StepTestCase): - step = sw_bundle_workflow.Config_Software - post_data = { - "name": "config_bundle", - "description": "My Config Bundle" - } diff --git a/src/workflow/tests/test_workflows.py b/src/workflow/tests/test_workflows.py deleted file mode 100644 index 995d699..0000000 --- a/src/workflow/tests/test_workflows.py +++ /dev/null @@ -1,99 +0,0 @@ -############################################################################## -# Copyright (c) 2018 Parker Berberian, Sawyer Bergeron, and others. -# -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Apache License, Version 2.0 -# which accompanies this distribution, and is available at -# http://www.apache.org/licenses/LICENSE-2.0 -############################################################################## - -from unittest import SkipTest -from django.test import TestCase -from workflow.workflow_factory import WorkflowFactory - - -""" -To start a workflow: - POST to /wf/workflow {"add": - - types: - 0 - Booking - 1 - Resource - 2 - Config - -To remove a workflow: - POST to /wf/workflow {"cancel": ""} -""" - - -class WorkflowTestCase(TestCase): - - @classmethod - def setUpClass(cls): - super().setUpClass() - raise SkipTest("These tests are no good") - - def setUp(self): - self.clear_workflow() - self.create_workflow(self.wf_type) - - def create_workflow(self, wf_type): - self.clear_workflow() - - # creates workflow on backend - self.client.post("/", {"create": int(wf_type)}) # TODO: verify content type, etc - - def clear_workflow(self): - session = self.client.session - for k in session.keys(): - del session[k] - session.save() - - def render_steps(self): - """Retrieve each step individually at /wf/workflow/step=.""" - for i in range(self.step_count): - # renders the step itself, not in an iframe - exception = None - try: - response = self.client.get("/wf/workflow/", {"step": str(i)}) - self.assertLess(response.status_code, 300) - except Exception as e: - exception = e - - self.assertIsNone(exception) - - -class BookingWorkflowTestCase(WorkflowTestCase): - - @classmethod - def setUpClass(cls): - super(BookingWorkflowTestCase, cls).setUpClass() - cls.step_count = len(WorkflowFactory.booking_steps) - cls.wf_type = 0 - - def test_steps_render(self): - super(BookingWorkflowTestCase, self).render_steps() - - -class ResourceWorkflowTestCase(WorkflowTestCase): - - @classmethod - def setUpClass(cls): - super(ResourceWorkflowTestCase, cls).setUpClass() - cls.step_count = len(WorkflowFactory.resource_steps) - cls.wf_type = 1 - - def test_steps_render(self): - super(ResourceWorkflowTestCase, self).render_steps() - - -class ConfigWorkflowTestCase(WorkflowTestCase): - - @classmethod - def setUpClass(cls): - super(ConfigWorkflowTestCase, cls).setUpClass() - cls.step_count = len(WorkflowFactory.config_steps) - cls.wf_type = 2 - - def test_steps_render(self): - super(ConfigWorkflowTestCase, self).render_steps() -- cgit 1.2.3-korg