# This file is part of the sos project: https://github.com/sosreport/sos
#
# This copyrighted material is made available to anyone wishing to use,
# modify, copy, or redistribute it subject to the terms and conditions of
# version 2 of the GNU General Public License.
#
# See the LICENSE file in the source distribution for further information.

from sos_tests import StageOneReportTest, StageTwoReportTest


ARCHIVE = 'sosreport-cleanertest-2021-08-03-qpkxdid.tar.xz'


class ReportDisabledParsersTest(StageOneReportTest):
    """Run report with selected disabled parsers and ensure those parsers are
    in fact disabled and unused.

    :avocado: tags=stageone
    """

    sos_cmd = '--clean -o host,kernel,networking --disable-parsers=ip'

    def test_local_ip_not_obfuscated(self):
        self.assertFileHasContent(
            'ip_addr',
            self.sysinfo['pre']['networking']['ip_addr']
        )

    def test_disable_message_logged(self):
        self.assertSosLogContains('Disabling parser: ip')

    def test_ui_log_message_shown(self):
        self.assertSosUILogContains(
            '.*Be aware that this may leave sensitive plain-text data in '
            'the archive.'
        )

    # make sure that the other parsers remain functional
    def test_localhost_was_obfuscated(self):
        self.assertFileHasContent('hostname', 'host0')

    def test_mac_addrs_were_obfuscated(self):
        content = self.get_file_content(
            'sos_commands/networking/ip_maddr_show'
        )
        for line in content.splitlines():
            if line.strip().startswith('link'):
                mac = line.strip().split()[1]
                assert \
                    mac.startswith('53:4f:53'), \
                    f"Found unobfuscated mac addr {mac}"


class NativeCleanDisabledParsersTest(StageTwoReportTest):
    """Ensure that disabling parsers works when calling 'clean' directly as
    well.

    :avocado: tags=stagetwo
    """

    sos_cmd = f"--disable-parsers=hostname tests/test_data/{ARCHIVE}"
    sos_component = 'clean'

    def test_localhost_not_obfuscated(self):
        self.assertFileNotHasContent(
            'hostname',
            self.sysinfo['pre']['networking']['hostname']
            )
        self.assertFileNotHasContent(
            'uname',
            self.sysinfo['pre']['networking']['hostname']
        )

    def test_local_ip_was_obfuscated(self):
        self.assertFileNotHasContent(
            'ip_addr',
            self.sysinfo['pre']['networking']['ip_addr']
        )
