Exemple #1
0
    def test_exclusions(self):
        argument_composer = ArgumentComposer()
        argument_composer.classifications_to_include = []
        argument_composer.patches_to_include = []
        argument_composer.patches_to_exclude = ["ssh*", "test"]
        runtime = RuntimeCompositor(argument_composer.get_composed_arguments(),
                                    True)

        self.assertEqual(runtime.package_filter.is_exclusion_list_present(),
                         True)

        self.assertEqual(runtime.package_filter.check_for_exclusion("ssh"),
                         True)
        self.assertEqual(
            runtime.package_filter.check_for_exclusion("ssh-client"), True)
        self.assertEqual(
            runtime.package_filter.check_for_exclusion("custom-ssh"), False)
        self.assertEqual(runtime.package_filter.check_for_exclusion("test"),
                         True)
        self.assertEqual(runtime.package_filter.check_for_exclusion("kernel"),
                         False)

        self.assertEqual(
            runtime.package_filter.check_for_exclusion(["kernel", "firefox"]),
            False)
        self.assertEqual(
            runtime.package_filter.check_for_exclusion(
                ["firefox", "ssh-client"]), True)
        runtime.stop()
Exemple #2
0
    def test_inclusion_type_critical(self):
        """Unit test for yum package manager with inclusion and Classification = Critical"""
        self.runtime.set_legacy_test_type('HappyPath')
        package_manager = self.container.get('package_manager')
        self.assertIsNotNone(package_manager)
        self.runtime.stop()

        argument_composer = ArgumentComposer()
        argument_composer.classifications_to_include = [
            Constants.PackageClassification.CRITICAL
        ]
        argument_composer.patches_to_exclude = ["ssh*", "test"]
        argument_composer.patches_to_include = ["ssh", "tar*"]
        self.runtime = RuntimeCompositor(
            argument_composer.get_composed_arguments(), True, Constants.YUM)
        self.container = self.runtime.container

        package_filter = self.container.get('package_filter')
        self.assertIsNotNone(package_filter)

        # test for get_available_updates
        available_updates, package_versions = package_manager.get_available_updates(
            package_filter)
        self.assertIsNotNone(available_updates)
        self.assertIsNotNone(package_versions)
        self.assertEqual(len(available_updates), 2)
        self.assertEqual(len(package_versions), 2)
        self.assertEqual(available_updates[0], "libgcc.i686")
        self.assertEqual(available_updates[1], "tar.x86_64")
        self.assertEqual(package_versions[0], "4.8.5-28.el7")
        self.assertEqual(package_versions[1], "2:1.26-34.el7")
Exemple #3
0
    def test_exclusions_with_python_arch(self):
        argument_composer = ArgumentComposer()
        argument_composer.classifications_to_include = []
        argument_composer.patches_to_include = []
        argument_composer.patches_to_exclude = [
            "python", "ssh.i686", "all*", "added"
        ]
        runtime = RuntimeCompositor(argument_composer.get_composed_arguments(),
                                    True)

        self.assertEqual(runtime.package_filter.is_exclusion_list_present(),
                         True)
        self.assertEqual(
            runtime.package_filter.check_for_exclusion("python.x86_64"), True)
        self.assertEqual(
            runtime.package_filter.check_for_exclusion("python.i686"), True)
        self.assertEqual(
            runtime.package_filter.check_for_exclusion("python.test"), False)
        self.assertEqual(runtime.package_filter.check_for_exclusion("python."),
                         False)
        self.assertEqual(
            runtime.package_filter.check_for_exclusion("ssh.i686"), True)
        self.assertEqual(runtime.package_filter.check_for_exclusion("all"),
                         True)
        self.assertEqual(runtime.package_filter.check_for_exclusion("added"),
                         True)
        self.assertEqual(
            runtime.package_filter.check_for_exclusion("added.v4"), False)
        self.assertEqual(runtime.package_filter.check_for_exclusion("random"),
                         False)
        runtime.stop()
 def test_reboot_setting_default_config(self):
     argument_composer = ArgumentComposer()
     argument_composer.reboot_setting = ""
     runtime = RuntimeCompositor(argument_composer.get_composed_arguments(), True, Constants.YUM)
     reboot_manager = runtime.reboot_manager
     self.assertEqual(reboot_manager.is_setting(Constants.REBOOT_IF_REQUIRED), True)
     runtime.stop()
 def test_reboot_time_available(self):
     runtime = RuntimeCompositor(ArgumentComposer().get_composed_arguments(), True)
     reboot_manager = runtime.reboot_manager
     self.assertEqual(reboot_manager.is_reboot_time_available(20), True)
     self.assertEqual(reboot_manager.is_reboot_time_available(15), True)
     self.assertEqual(reboot_manager.is_reboot_time_available(14), False)
     runtime.stop()
Exemple #6
0
    def test_inclusion_only(self):
        """Unit test for yum package manager with inclusion only and NotSelected Classifications"""
        self.runtime.set_legacy_test_type('HappyPath')
        package_manager = self.container.get('package_manager')
        self.assertIsNotNone(package_manager)
        self.runtime.stop()

        argument_composer = ArgumentComposer()
        argument_composer.classifications_to_include = [
            Constants.PackageClassification.UNCLASSIFIED
        ]
        argument_composer.patches_to_include = ["ssh", "tar*"]
        argument_composer.patches_to_exclude = ["ssh*", "test"]
        self.runtime = RuntimeCompositor(
            argument_composer.get_composed_arguments(), True, Constants.YUM)
        self.container = self.runtime.container

        package_filter = self.container.get('package_filter')
        self.assertIsNotNone(package_filter)

        # test for get_available_updates
        available_updates, package_versions = package_manager.get_available_updates(
            package_filter)
        self.assertIsNotNone(available_updates)
        self.assertIsNotNone(package_versions)
        self.assertEqual(len(available_updates), 1)
        self.assertEqual(len(package_versions), 1)
        self.assertEqual(available_updates[0], "tar.x86_64")
        self.assertEqual(package_versions[0], "2:1.26-34.el7")
Exemple #7
0
    def test_inclusion_dependency_only(self):
        """Unit test for yum with test dependencies in Inclusion & NotSelected Classifications"""
        self.runtime.set_legacy_test_type('HappyPath')
        package_manager = self.container.get('package_manager')
        self.assertIsNotNone(package_manager)
        self.runtime.stop()

        argument_composer = ArgumentComposer()
        argument_composer.classifications_to_include = [
            Constants.PackageClassification.UNCLASSIFIED
        ]
        argument_composer.patches_to_include = [
            "ssh", "selinux-policy-targeted.noarch"
        ]
        argument_composer.patches_to_exclude = ["ssh*", "test"]
        self.runtime = RuntimeCompositor(
            argument_composer.get_composed_arguments(), True, Constants.YUM)
        self.container = self.runtime.container

        package_filter = self.container.get('package_filter')
        self.assertIsNotNone(package_filter)

        # test for get_available_updates
        available_updates, package_versions = package_manager.get_available_updates(
            package_filter)
        self.assertIsNotNone(available_updates)
        self.assertIsNotNone(package_versions)
        self.assertEqual(len(available_updates), 1)
        self.assertEqual(len(package_versions), 1)
        self.assertEqual(available_updates[0],
                         "selinux-policy-targeted.noarch")
        self.assertEqual(package_versions[0], "3.13.1-102.el7_3.16")
    def test_reboot_always_runs_only_once_if_no_reboot_is_required(self):
        reboot_setting_in_api = 'Always'
        argument_composer = ArgumentComposer()
        argument_composer.reboot_setting = reboot_setting_in_api
        runtime = RuntimeCompositor(argument_composer.get_composed_arguments(),
                                    True, Constants.YUM)
        reboot_manager = runtime.reboot_manager

        # Validate single reboot scenario
        runtime.status_handler.is_reboot_pending = True
        self.assertEqual(
            reboot_manager.start_reboot_if_required_and_time_available(20),
            True)

        # mock completing the reboot once, with no reboot required
        runtime.status_handler.set_installation_reboot_status(
            Constants.RebootStatus.REQUIRED)
        runtime.status_handler.set_installation_reboot_status(
            Constants.RebootStatus.STARTED)
        runtime.status_handler.is_reboot_pending = False
        runtime.status_handler.set_installation_reboot_status(
            Constants.RebootStatus.COMPLETED)

        # no further reboot should be required
        self.assertEqual(
            reboot_manager.start_reboot_if_required_and_time_available(20),
            False)
        runtime.stop()
Exemple #9
0
    def test_inclusion_notexist(self):
        """Unit test for yum with Inclusion which does not exist & NotSelected Classifications"""
        self.runtime.set_legacy_test_type('HappyPath')
        package_manager = self.container.get('package_manager')
        self.assertIsNotNone(package_manager)
        self.runtime.stop()

        argument_composer = ArgumentComposer()
        argument_composer.classifications_to_include = [
            Constants.PackageClassification.UNCLASSIFIED
        ]
        argument_composer.patches_to_include = ["ssh"]
        argument_composer.patches_to_exclude = ["ssh*", "test"]
        self.runtime = RuntimeCompositor(
            argument_composer.get_composed_arguments(), True, Constants.YUM)
        self.container = self.runtime.container

        package_filter = self.container.get('package_filter')
        self.assertIsNotNone(package_filter)

        # test for get_available_updates
        available_updates, package_versions = package_manager.get_available_updates(
            package_filter)
        self.assertIsNotNone(available_updates)
        self.assertIsNotNone(package_versions)
        self.assertEqual(len(available_updates), 0)
        self.assertEqual(len(package_versions), 0)
 def test_reboot_setting(self, reboot_setting_in_api='Never', reboot_setting_in_code=Constants.REBOOT_NEVER):
     argument_composer = ArgumentComposer()
     argument_composer.reboot_setting = reboot_setting_in_api
     runtime = RuntimeCompositor(argument_composer.get_composed_arguments(), True, Constants.YUM)
     reboot_manager = runtime.reboot_manager
     self.assertEqual(reboot_manager.is_setting(reboot_setting_in_code), True)
     runtime.stop()
 def test_reboot_always_time_not_available(self):
     reboot_setting_in_api = 'Always'
     argument_composer = ArgumentComposer()
     argument_composer.reboot_setting = reboot_setting_in_api
     runtime = RuntimeCompositor(argument_composer.get_composed_arguments(), True, Constants.YUM)
     reboot_manager = runtime.reboot_manager
     self.assertEqual(reboot_manager.start_reboot_if_required_and_time_available(10), False)
     runtime.stop()
Exemple #12
0
class TestTelemetryWriter(unittest.TestCase):
    def setUp(self):
        self.runtime = RuntimeCompositor(
            ArgumentComposer().get_composed_arguments(), True)
        self.container = self.runtime.container

    def tearDown(self):
        self.runtime.stop()

    def test_something(self):
        self.assertEqual(True, True)
Exemple #13
0
    def test_invalid_classifications(self):
        argument_composer = ArgumentComposer()
        argument_composer.classifications_to_include = ['Security', "Other"]
        argument_composer.patches_to_include = []
        argument_composer.patches_to_exclude = []
        runtime = RuntimeCompositor(argument_composer.get_composed_arguments(),
                                    True)

        self.assertEqual(
            runtime.package_filter.is_invalid_classification_combination(),
            True)
        runtime.stop()
 def test_check_available_time(self):
     argument_composer = ArgumentComposer()
     argument_composer.start_time = (
         datetime.datetime.utcnow() -
         datetime.timedelta(minutes=39)).strftime("%Y-%m-%dT%H:%M:%S.9999Z")
     argument_composer.maximum_duration = "PT1H"
     runtime = RuntimeCompositor(argument_composer.get_composed_arguments(),
                                 True)
     self.assertEqual(
         runtime.maintenance_window.is_package_install_time_available(),
         True)
     runtime.stop()
    def test_with_none_for_classifications(self):
        argument_composer = ArgumentComposer()
        argument_composer.classifications_to_include = None
        argument_composer.patches_to_include = []
        argument_composer.patches_to_exclude = []
        runtime = RuntimeCompositor(argument_composer.get_composed_arguments(),
                                    True)

        self.assertEqual(
            runtime.package_filter.is_invalid_classification_combination(),
            False)
        runtime.stop()
Exemple #16
0
    def test_included_classifications(self):
        argument_composer = ArgumentComposer()
        argument_composer.classifications_to_include = ['Critical', 'Security']
        argument_composer.patches_to_include = []
        argument_composer.patches_to_exclude = []
        runtime = RuntimeCompositor(argument_composer.get_composed_arguments(),
                                    True)

        self.assertEqual(
            runtime.package_filter.is_msft_critsec_classification_only(), True)
        self.assertEqual(
            runtime.package_filter.is_msft_other_classification_only(), False)
        runtime.stop()
Exemple #17
0
class TestContainer(unittest.TestCase):
    def setUp(self):
        self.runtime = RuntimeCompositor(ArgumentComposer().get_composed_arguments(), True, package_manager_name=Constants.ZYPPER)
        self.container = self.runtime.container

    def tearDown(self):
        self.runtime.stop()

    def test_get_unsupported_service(self):
        """Try get a registered service"""
        try:
            self.container.get('unsupported_service')
        except KeyError as ex:
            self.assertEqual("'No component for: unsupported_service'", str(ex))
    def test_RemainingTime_after_duration_complete(self):
        argument_composer = ArgumentComposer()
        argument_composer.start_time = "2017-02-15T18:15:12.9828835Z"
        argument_composer.maximum_duration = "PT1H"
        runtime = RuntimeCompositor(argument_composer.get_composed_arguments(),
                                    True)

        current_time = datetime.datetime.strptime('2017-02-15 19:16:20',
                                                  "%Y-%m-%d %H:%M:%S")
        remaining_time = runtime.maintenance_window.get_remaining_time_in_minutes(
            current_time)

        self.assertEqual(int(remaining_time), 0)
        runtime.stop()
Exemple #19
0
class TestConfigurationFactory(unittest.TestCase):
    def setUp(self):
        self.argument_composer = ArgumentComposer().get_composed_arguments()
        self.runtime = RuntimeCompositor(self.argument_composer,
                                         True,
                                         package_manager_name=Constants.ZYPPER)
        self.container = self.runtime.container

    def tearDown(self):
        self.runtime.stop()

    def test_get_prod_config_correctly(self):
        bootstrapper = Bootstrapper(self.argument_composer,
                                    capture_stdout=False)
        config_factory = bootstrapper.configuration_factory
        self.assertTrue(config_factory)

        config = config_factory.get_configuration(Constants.PROD,
                                                  Constants.YUM)

        self.assertEqual(config['package_manager_name'], Constants.YUM)
        self.assertEqual(config['config_env'], Constants.PROD)

    def test_get_test_config_correctly(self):
        bootstrapper = Bootstrapper(self.argument_composer,
                                    capture_stdout=False)
        config_factory = bootstrapper.configuration_factory
        self.assertTrue(config_factory)
        config = config_factory.get_configuration(Constants.TEST,
                                                  Constants.APT)

        self.assertEqual(config['package_manager_name'], Constants.APT)
        self.assertEqual(config['config_env'], Constants.TEST)

    def test_get_dev_config_correctly(self):
        bootstrapper = Bootstrapper(self.argument_composer,
                                    capture_stdout=False)
        config_factory = bootstrapper.configuration_factory
        self.assertTrue(config_factory)

        config = config_factory.get_configuration(Constants.DEV, Constants.APT)

        self.assertEqual(config['package_manager_name'], Constants.APT)
        self.assertEqual(config['config_env'], Constants.DEV)
class TestPatchAssessor(unittest.TestCase):
    def setUp(self):
        self.runtime = RuntimeCompositor(
            ArgumentComposer().get_composed_arguments(), legacy_mode=True)
        self.container = self.runtime.container

    def tearDown(self):
        self.runtime.stop()

    def test_assessment_success(self):
        self.assertTrue(self.runtime.patch_assessor.start_assessment())

    def test_assessment_fail(self):
        self.runtime.set_legacy_test_type('UnalignedPath')
        self.assertRaises(Exception,
                          self.runtime.patch_assessor.start_assessment)

    def test_get_all_updates_fail(self):
        self.runtime.set_legacy_test_type('UnalignedPath')
        self.assertRaises(Exception,
                          self.runtime.package_manager.get_all_updates)

    def test_get_all_security_updates_fail(self):
        self.runtime.set_legacy_test_type('UnalignedPath')
        self.assertRaises(Exception,
                          self.runtime.package_manager.get_security_updates)

    def test_assessment_fail_with_status_update(self):
        self.runtime.package_manager.refresh_repo = self.mock_refresh_repo
        self.runtime.set_legacy_test_type('UnalignedPath')
        self.assertRaises(Exception,
                          self.runtime.patch_assessor.start_assessment)
        with open(self.runtime.execution_config.status_file_path,
                  'r') as file_handle:
            file_contents = json.loads(file_handle.read())
            self.assertTrue(
                'Unexpected return code (100) from package manager on command: LANG=en_US.UTF8 sudo apt-get -s dist-upgrade'
                in str(file_contents))

    def mock_refresh_repo(self):
        pass
    def test_included_classifications_short_term_accomodations(self):
        # this test should be removed once the accommodations in execution config are removed
        argument_composer = ArgumentComposer()
        argument_composer.classifications_to_include = ['Security', 'Other']
        argument_composer.patches_to_include = []
        argument_composer.patches_to_exclude = []
        runtime = RuntimeCompositor(argument_composer.get_composed_arguments(),
                                    True)

        self.assertEqual(
            runtime.package_filter.is_invalid_classification_combination(),
            False)  # this will fail after accommodations are removed.
        self.assertEqual(
            runtime.package_filter.is_msft_all_classification_included(),
            True)  # this will fail after accommodations are removed.
        self.assertEqual(
            runtime.package_filter.is_msft_critsec_classification_only(),
            False)
        self.assertEqual(
            runtime.package_filter.is_msft_other_classification_only(), False)
        runtime.stop()
Exemple #22
0
    def healthstore_writes_helper(self, health_store_id, maintenance_run_id,
                                  expected_patch_version):
        current_time = datetime.datetime.utcnow()
        td = datetime.timedelta(hours=0, minutes=20)
        job_start_time = (current_time -
                          td).strftime("%Y-%m-%dT%H:%M:%S.9999Z")
        argument_composer = ArgumentComposer()
        argument_composer.maximum_duration = 'PT1H'
        argument_composer.start_time = job_start_time
        argument_composer.health_store_id = health_store_id
        argument_composer.maintenance_run_id = maintenance_run_id
        runtime = RuntimeCompositor(argument_composer.get_composed_arguments(),
                                    True, Constants.YUM)

        runtime.set_legacy_test_type('SuccessInstallPath')
        installed_update_count, update_run_successful, maintenance_window_exceeded = runtime.patch_installer.install_updates(
            runtime.maintenance_window, runtime.package_manager, simulate=True)
        runtime.patch_installer.mark_installation_completed()

        with runtime.env_layer.file_system.open(
                runtime.execution_config.status_file_path, 'r') as file_handle:
            substatus_file_data = json.load(
                file_handle)[0]["status"]["substatus"][1]

        self.assertEqual(
            True,
            json.loads(substatus_file_data['formattedMessage']['message'])
            ['shouldReportToHealthStore'])
        self.assertEqual(
            expected_patch_version,
            json.loads(substatus_file_data['formattedMessage']['message'])
            ['patchVersion'])
        runtime.stop()
 def test_iso8601_duration_to_timedelta_str_conversion(self):
     runtime = RuntimeCompositor(
         ArgumentComposer().get_composed_arguments(), True)
     self.assertEqual(
         "2:00:00",
         runtime.execution_config.
         _ExecutionConfig__convert_iso8601_duration_to_timedelta_str(
             "PT2H"))
     self.assertEqual(
         "0:03:00",
         runtime.execution_config.
         _ExecutionConfig__convert_iso8601_duration_to_timedelta_str(
             "PT3M"))
     self.assertEqual(
         "0:00:40",
         runtime.execution_config.
         _ExecutionConfig__convert_iso8601_duration_to_timedelta_str(
             "PT40S"))
     self.assertEqual(
         "0:03:40",
         runtime.execution_config.
         _ExecutionConfig__convert_iso8601_duration_to_timedelta_str(
             "PT3M40S"))
     self.assertEqual(
         "12:03:40",
         runtime.execution_config.
         _ExecutionConfig__convert_iso8601_duration_to_timedelta_str(
             "PT12H3M40S"))
     self.assertEqual(
         "1:00:40",
         runtime.execution_config.
         _ExecutionConfig__convert_iso8601_duration_to_timedelta_str(
             "PT1H40S"))
     with self.assertRaises(Exception):
         runtime.env_layer.datetime.convert_iso8601_duration_to_timedelta_str(
             "P1DT12H3M40S")
     runtime.stop()
Exemple #24
0
    def test_inclusion_type_all(self):
        """Unit test for yum package manager Classification = all and IncludedPackageNameMasks not specified."""
        self.runtime.set_legacy_test_type('HappyPath')
        package_manager = self.container.get('package_manager')
        self.assertIsNotNone(package_manager)
        self.runtime.stop()

        argument_composer = ArgumentComposer()
        argument_composer.classifications_to_include = [
            Constants.PackageClassification.UNCLASSIFIED
        ]
        argument_composer.patches_to_exclude = ["ssh*", "test"]
        self.runtime = RuntimeCompositor(
            argument_composer.get_composed_arguments(), True, Constants.YUM)
        self.container = self.runtime.container

        package_filter = self.container.get('package_filter')

        # test for get_available_updates
        available_updates, package_versions = package_manager.get_available_updates(
            package_filter)
        self.assertIsNotNone(available_updates)
        self.assertIsNotNone(package_versions)
        self.assertEqual(len(available_updates), 5)
        self.assertEqual(len(package_versions), 5)
        self.assertEqual(available_updates[0], "selinux-policy.noarch")
        self.assertEqual(package_versions[0], "3.13.1-102.el7_3.16")
        self.assertEqual(available_updates[1],
                         "selinux-policy-targeted.noarch")
        self.assertEqual(package_versions[1], "3.13.1-102.el7_3.16")
        self.assertEqual(available_updates[2], "libgcc.i686")
        self.assertEqual(package_versions[2], "4.8.5-28.el7")
        self.assertEqual(available_updates[3], "tar.x86_64")
        self.assertEqual(package_versions[3], "2:1.26-34.el7")
        self.assertEqual(available_updates[4], "tcpdump.x86_64")
        self.assertEqual(package_versions[4], "14:4.9.2-3.el7")
Exemple #25
0
    def test_inclusion_type_other(self):
        """Unit test for yum package manager with inclusion and Classification = Other"""
        self.runtime.set_legacy_test_type('HappyPath')
        package_manager = self.container.get('package_manager')
        self.assertIsNotNone(package_manager)
        self.runtime.stop()

        argument_composer = ArgumentComposer()
        argument_composer.classifications_to_include = [
            Constants.PackageClassification.OTHER
        ]
        argument_composer.patches_to_include = ["ssh", "tcpdump"]
        argument_composer.patches_to_exclude = ["ssh*", "test"]
        self.runtime = RuntimeCompositor(
            argument_composer.get_composed_arguments(), True, Constants.YUM)
        self.container = self.runtime.container

        package_filter = self.container.get('package_filter')
        self.assertIsNotNone(package_filter)

        # test for get_available_updates
        available_updates, package_versions = package_manager.get_available_updates(
            package_filter)
        self.assertIsNotNone(available_updates)
        self.assertIsNotNone(package_versions)
        self.assertEqual(len(available_updates), 4)
        self.assertEqual(len(package_versions), 4)
        self.assertEqual(available_updates[0], "selinux-policy.noarch")
        self.assertEqual(package_versions[0], "3.13.1-102.el7_3.16")
        self.assertEqual(available_updates[1],
                         "selinux-policy-targeted.noarch")
        self.assertEqual(package_versions[1], "3.13.1-102.el7_3.16")
        self.assertEqual(available_updates[2], "tar.x86_64")
        self.assertEqual(package_versions[2], "2:1.26-34.el7")
        self.assertEqual(available_updates[3], "tcpdump.x86_64")
        self.assertEqual(package_versions[3], "14:4.9.2-3.el7")
 def test_operation_success_for_non_autopatching_request(self):
     argument_composer = ArgumentComposer()
     runtime = RuntimeCompositor(argument_composer.get_composed_arguments(), True, Constants.ZYPPER)
     runtime.set_legacy_test_type('SuccessInstallPath')
     CoreMain(argument_composer.get_composed_arguments())
     with runtime.env_layer.file_system.open(runtime.execution_config.status_file_path, 'r') as file_handle:
         substatus_file_data = json.load(file_handle)[0]["status"]["substatus"]
     self.assertEquals(len(substatus_file_data), 2)
     self.assertTrue(substatus_file_data[0]["name"] == Constants.PATCH_ASSESSMENT_SUMMARY)
     self.assertTrue(substatus_file_data[0]["status"] == Constants.STATUS_SUCCESS.lower())
     self.assertTrue(substatus_file_data[1]["name"] == Constants.PATCH_INSTALLATION_SUMMARY)
     self.assertTrue(substatus_file_data[1]["status"] == Constants.STATUS_SUCCESS.lower())
     runtime.stop()
Exemple #27
0
 def test_zypper_install_updates_maintenance_window_exceeded(self):
     current_time = datetime.datetime.utcnow()
     td = datetime.timedelta(hours=1, minutes=2)
     job_start_time = (current_time -
                       td).strftime("%Y-%m-%dT%H:%M:%S.9999Z")
     argument_composer = ArgumentComposer()
     argument_composer.maximum_duration = 'PT1H'
     argument_composer.start_time = job_start_time
     runtime = RuntimeCompositor(argument_composer.get_composed_arguments(),
                                 True, Constants.ZYPPER)
     # Path change
     runtime.set_legacy_test_type('FailInstallPath')
     installed_update_count, update_run_successful, maintenance_window_exceeded = runtime.patch_installer.install_updates(
         runtime.maintenance_window, runtime.package_manager, simulate=True)
     self.assertEqual(0, installed_update_count)
     self.assertTrue(update_run_successful)
     self.assertTrue(maintenance_window_exceeded)
     runtime.stop()
 def test_operation_fail_for_autopatching_request(self):
     argument_composer = ArgumentComposer()
     argument_composer.maintenance_run_id = str(datetime.datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S.%fZ"))
     runtime = RuntimeCompositor(argument_composer.get_composed_arguments(), True, Constants.ZYPPER)
     runtime.set_legacy_test_type('FailInstallPath')
     CoreMain(argument_composer.get_composed_arguments())
     with runtime.env_layer.file_system.open(runtime.execution_config.status_file_path, 'r') as file_handle:
         substatus_file_data = json.load(file_handle)[0]["status"]["substatus"]
     self.assertEquals(len(substatus_file_data), 3)
     self.assertTrue(substatus_file_data[0]["name"] == Constants.PATCH_ASSESSMENT_SUMMARY)
     self.assertTrue(substatus_file_data[0]["status"] == Constants.STATUS_SUCCESS.lower())
     self.assertTrue(substatus_file_data[1]["name"] == Constants.PATCH_INSTALLATION_SUMMARY)
     self.assertTrue(substatus_file_data[1]["status"] == Constants.STATUS_ERROR.lower())
     self.assertEqual(len(json.loads(substatus_file_data[1]["formattedMessage"]["message"])["errors"]["details"]), 1)
     self.assertTrue(substatus_file_data[2]["name"] == Constants.PATCH_METADATA_FOR_HEALTHSTORE)
     self.assertTrue(substatus_file_data[2]["status"] == Constants.STATUS_SUCCESS.lower())
     substatus_file_data_patch_metadata_summary = json.loads(substatus_file_data[2]["formattedMessage"]["message"])
     self.assertTrue(substatus_file_data_patch_metadata_summary["patchVersion"], Constants.PATCH_VERSION_UNKNOWN)
     self.assertFalse(substatus_file_data_patch_metadata_summary["shouldReportToHealthStore"])
     runtime.stop()
 def test_operation_success_for_autopatching_request(self):
     # test with valid datetime string for maintenance run id
     argument_composer = ArgumentComposer()
     maintenance_run_id = "9/28/2020 02:00:00 PM +00:00"
     argument_composer.maintenance_run_id = str(maintenance_run_id)
     runtime = RuntimeCompositor(argument_composer.get_composed_arguments(), True, Constants.ZYPPER)
     runtime.set_legacy_test_type('SuccessInstallPath')
     CoreMain(argument_composer.get_composed_arguments())
     with runtime.env_layer.file_system.open(runtime.execution_config.status_file_path, 'r') as file_handle:
         substatus_file_data = json.load(file_handle)[0]["status"]["substatus"]
     self.assertEquals(len(substatus_file_data), 3)
     self.assertTrue(substatus_file_data[0]["name"] == Constants.PATCH_ASSESSMENT_SUMMARY)
     self.assertTrue(substatus_file_data[0]["status"] == Constants.STATUS_SUCCESS.lower())
     self.assertTrue(substatus_file_data[1]["name"] == Constants.PATCH_INSTALLATION_SUMMARY)
     self.assertTrue(substatus_file_data[1]["status"] == Constants.STATUS_SUCCESS.lower())
     self.assertTrue(substatus_file_data[2]["name"] == Constants.PATCH_METADATA_FOR_HEALTHSTORE)
     self.assertTrue(substatus_file_data[2]["status"] == Constants.STATUS_SUCCESS.lower())
     substatus_file_data_patch_metadata_summary = json.loads(substatus_file_data[2]["formattedMessage"]["message"])
     self.assertEqual(substatus_file_data_patch_metadata_summary["patchVersion"], "2020.09.28")
     self.assertTrue(substatus_file_data_patch_metadata_summary["shouldReportToHealthStore"])
     runtime.stop()
Exemple #30
0
 def setUp(self):
     self.argument_composer = ArgumentComposer().get_composed_arguments()
     self.runtime = RuntimeCompositor(self.argument_composer,
                                      True,
                                      package_manager_name=Constants.ZYPPER)
     self.container = self.runtime.container