Esempio n. 1
0
    def test_upgrade_cancel_when_past_version_not_supported(
            self, m_subp, m_parse_os, m_is_attached, capsys, caplog_text):
        m_parse_os.return_value = {"VERSION_ID": "20.10"}
        m_subp.return_value = ("", "")

        expected_msgs = [
            "Starting upgrade-lts-contract.",
            "Could not find past release for: groovy",
        ]
        expected_logs = ["Check whether to upgrade-lts-contract"]
        with pytest.raises(SystemExit) as execinfo:
            with mock.patch(
                    "lib.upgrade_lts_contract.version_to_codename",
                {"20.10": "groovy"},
            ):
                process_contract_delta_after_apt_lock()

        assert 1 == execinfo.value.code
        assert 1 == m_is_attached.call_count
        assert 1 == m_parse_os.call_count
        assert 1 == m_subp.call_count
        out, _err = capsys.readouterr()
        assert out == "\n".join(expected_msgs) + "\n"
        debug_logs = caplog_text()
        for log in expected_msgs + expected_logs:
            assert log in debug_logs
Esempio n. 2
0
    def test_upgrade_contract_when_apt_lock_is_held(self, m_sleep,
                                                    m_process_delta, m_subp,
                                                    m_parse_os):
        m_parse_os.return_value = {"VERSION_ID": "20.04"}

        m_subp.side_effect = [
            ("apt     146195 root", ""),
            ("apt     146195 root", ""),
            ("apt     146195 root", ""),
            ("", ""),
        ]

        m_process_delta.return_value = True
        m_sleep.return_value = True

        base_msg = "".join([
            "Starting upgrade-lts-contract.",
            " Retrying every 10 seconds waiting on released apt lock",
        ])

        expected_msg = "\n".join([
            base_msg,
            "upgrade-lts-contract processing contract deltas: {}".format(
                "bionic -> focal"),
            "upgrade-lts-contract succeeded after 3 retries",
        ])
        fake_stdout = io.StringIO()
        with contextlib.redirect_stdout(fake_stdout):
            process_contract_delta_after_apt_lock()

        assert expected_msg == fake_stdout.getvalue().strip()
        assert 1 == m_parse_os.call_count
        assert 4 == m_subp.call_count
        assert 1 == m_process_delta.call_count
Esempio n. 3
0
    def test_unattached_noops(self, m_is_attached, capsys, caplog_text):
        expected_logs = [
            "Check whether to upgrade-lts-contract",
            "Skipping upgrade-lts-contract. Machine is unattached",
        ]

        process_contract_delta_after_apt_lock()

        assert 1 == m_is_attached.call_count
        out, _err = capsys.readouterr()
        assert "" == out
        debug_logs = caplog_text()
        for log in expected_logs:
            assert log in debug_logs
Esempio n. 4
0
    def test_upgrade_contract_when_apt_lock_is_held(
        self,
        m_sleep,
        m_process_delta,
        m_subp,
        m_parse_os,
        m_is_attached,
        capsys,
        caplog_text,
    ):
        m_parse_os.return_value = {"VERSION_ID": "20.04"}

        m_subp.side_effect = [
            ("apt     146195 root", ""),
            ("apt     146195 root", ""),
            ("apt     146195 root", ""),
            ("", ""),
        ]

        m_process_delta.return_value = True
        m_sleep.return_value = True

        base_msg = "".join([
            "Starting upgrade-lts-contract.",
            " Retrying every 10 seconds waiting on released apt lock",
        ])

        expected_msgs = [
            base_msg,
            "upgrade-lts-contract processing contract deltas: {}".format(
                "bionic -> focal"),
            "upgrade-lts-contract succeeded after 3 retries",
        ]

        process_contract_delta_after_apt_lock()

        assert 1 == m_is_attached.call_count
        assert 1 == m_parse_os.call_count
        assert 4 == m_subp.call_count
        assert 1 == m_process_delta.call_count
        out, _err = capsys.readouterr()
        assert out == "\n".join(expected_msgs) + "\n"
        debug_logs = caplog_text()
        for log in expected_msgs + ["Check whether to upgrade-lts-contract"]:
            assert log in debug_logs
Esempio n. 5
0
    def test_upgrade_abort_when_upgrading_to_trusty(self, m_subp, m_parse_os):
        m_parse_os.return_value = {"VERSION_ID": "14.04"}

        m_subp.return_value = ("", "")

        expected_msg = "\n".join([
            "Starting upgrade-lts-contract.",
            "Unable to execute upgrade-lts-contract.py on trusty",
        ])
        fake_stdout = io.StringIO()
        with pytest.raises(SystemExit) as execinfo:
            with contextlib.redirect_stdout(fake_stdout):
                process_contract_delta_after_apt_lock()

        assert 1 == execinfo.value.code
        assert expected_msg == fake_stdout.getvalue().strip()
        assert 1 == m_parse_os.call_count
        assert 1 == m_subp.call_count
Esempio n. 6
0
    def test_upgrade_cancel_when_current_version_not_supported(
            self, m_subp, m_parse_os, m_is_attached, capsys, caplog_text):
        m_parse_os.return_value = {"VERSION_ID": "NOT-SUPPORTED"}
        m_subp.return_value = ("", "")

        expected_msgs = [
            "Starting upgrade-lts-contract.",
            "Unable to get release codename for version: NOT-SUPPORTED",
        ]
        expected_logs = ["Check whether to upgrade-lts-contract"]
        with pytest.raises(SystemExit) as execinfo:
            process_contract_delta_after_apt_lock()

        assert 1 == execinfo.value.code
        assert 1 == m_is_attached.call_count
        assert 1 == m_parse_os.call_count
        assert 1 == m_subp.call_count
        out, _err = capsys.readouterr()
        assert out == "\n".join(expected_msgs) + "\n"
        debug_logs = caplog_text()
        for log in expected_msgs + expected_logs:
            assert log in debug_logs
    def test_upgrade_abort_when_upgrading_to_trusty(self, m_subp, m_parse_os,
                                                    m_is_attached, capsys,
                                                    caplog_text):
        m_parse_os.return_value = {"VERSION_ID": "14.04"}

        m_subp.return_value = ("", "")

        expected_msgs = [
            "Starting upgrade-lts-contract.",
            "Unable to execute upgrade-lts-contract.py on trusty",
        ]
        expected_logs = ["Check whether to upgrade-lts-contract"]
        with pytest.raises(SystemExit) as execinfo:
            process_contract_delta_after_apt_lock()

        assert 1 == execinfo.value.code
        assert 1 == m_is_attached.call_count
        assert 1 == m_parse_os.call_count
        assert 1 == m_subp.call_count
        out, _err = capsys.readouterr()
        assert out == "\n".join(expected_msgs) + "\n"
        debug_logs = caplog_text()
        for log in expected_msgs + expected_logs:
            assert log in debug_logs