예제 #1
0
 def test_invalid_since_argument(self):
     """
     Scenario: CFG_STATE is enabled.
               Check if techsupport is invoked and an invalid since argument in identified
     """
     db_wrap = Db()
     redis_mock = db_wrap.db
     set_auto_ts_cfg(redis_mock, state="enabled", since_cfg="whatever")
     set_feature_table_cfg(redis_mock, state="enabled")
     populate_state_db(redis_mock)
     with Patcher() as patcher:
         def mock_cmd(cmd, env):
             cmd_str = " ".join(cmd)
             if "show techsupport --since '2 days ago'" in cmd_str:
                 patcher.fs.create_file("/var/dump/sonic_dump_random3.tar.gz")
                 return 0, "", ""
             elif "date --date='whatever'" in cmd_str:
                 return 1, "", "Invalid Date Format"
             else:
                 return 1, "", ""
         cdump_mod.subprocess_exec = mock_cmd
         patcher.fs.create_file("/var/dump/sonic_dump_random1.tar.gz")
         patcher.fs.create_file("/var/dump/sonic_dump_random2.tar.gz")
         patcher.fs.create_file("/var/core/orchagent.12345.123.core.gz")
         cls = cdump_mod.CriticalProcCoreDumpHandle("orchagent.12345.123.core.gz", "swss", redis_mock)
         cls.handle_core_dump_creation_event()
         cdump_mod.handle_coredump_cleanup("orchagent.12345.123.core.gz", redis_mock)
         assert "sonic_dump_random1.tar.gz" in os.listdir(cdump_mod.TS_DIR)
         assert "sonic_dump_random2.tar.gz" in os.listdir(cdump_mod.TS_DIR)
         assert "sonic_dump_random3.tar.gz" in os.listdir(cdump_mod.TS_DIR)
     expect = ["sonic_dump_random1", "sonic_dump_random2", "sonic_dump_random3"]
     ts_mp = {"sonic_dump_random3": "swss"}
     verify_post_exec_state(redis_mock, expect, [], ts_mp)
예제 #2
0
 def test_global_rate_limit_interval(self):
     """
     Scenario: CFG_STATE is enabled.
               Global rate_limit_interval is not passed yet.  Check if techsupport isn't invoked.
     """
     db_wrap = Db()
     redis_mock = db_wrap.db
     set_auto_ts_cfg(redis_mock, state="enabled", rate_limit_interval="1")
     set_feature_table_cfg(redis_mock, state="enabled")
     populate_state_db(redis_mock)
     with Patcher() as patcher:
         def mock_cmd(cmd, env):
             cmd_str = " ".join(cmd)
             if "show techsupport" in cmd_str:
                 patcher.fs.create_file("/var/dump/sonic_dump_random3.tar.gz")
             else:
                 return 1, "", "Command Not Found"
             return 0, "", ""
         cdump_mod.subprocess_exec = mock_cmd
         patcher.fs.create_file("/var/dump/sonic_dump_random1.tar.gz")
         patcher.fs.create_file("/var/dump/sonic_dump_random2.tar.gz")
         patcher.fs.create_file("/var/core/orchagent.12345.123.core.gz")
         cls = cdump_mod.CriticalProcCoreDumpHandle("orchagent.12345.123.core.gz", "swss", redis_mock)
         cls.handle_core_dump_creation_event()
         cdump_mod.handle_coredump_cleanup("orchagent.12345.123.core.gz", redis_mock)
         assert "sonic_dump_random1.tar.gz" in os.listdir(cdump_mod.TS_DIR)
         assert "sonic_dump_random2.tar.gz" in os.listdir(cdump_mod.TS_DIR)
         assert "sonic_dump_random3.tar.gz" not in os.listdir(cdump_mod.TS_DIR)
     cdump_expect = ["sonic_dump_random1", "sonic_dump_random2"]
     cdump_not_expect = ["sonic_dump_random3"]
     verify_post_exec_state(redis_mock, cdump_expect, cdump_not_expect)
예제 #3
0
 def test_masic_core_dump(self):
     """
     Scenario: Dump is generated from swss12 container. Config specified for swss shoudl be applied
     """
     db_wrap = Db()
     redis_mock = db_wrap.db
     set_auto_ts_cfg(redis_mock, state="enabled")
     set_feature_table_cfg(redis_mock, state="enabled")
     populate_state_db(redis_mock)
     with Patcher() as patcher:
         def mock_cmd(cmd, env):
             cmd_str = " ".join(cmd)
             if "show techsupport" in cmd_str:
                 patcher.fs.create_file("/var/dump/sonic_dump_random3.tar.gz")
             else:
                 return 1, "", "Command Not Found"
             return 0, "", ""
         cdump_mod.subprocess_exec = mock_cmd
         patcher.fs.create_file("/var/dump/sonic_dump_random1.tar.gz")
         patcher.fs.create_file("/var/dump/sonic_dump_random2.tar.gz")
         patcher.fs.create_file("/var/core/orchagent.12345.123.core.gz")
         cls = cdump_mod.CriticalProcCoreDumpHandle("orchagent.12345.123.core.gz", "swss12", redis_mock)
         cls.handle_core_dump_creation_event()
         cdump_mod.handle_coredump_cleanup("orchagent.12345.123.core.gz", redis_mock)
         assert "sonic_dump_random1.tar.gz" in os.listdir(cdump_mod.TS_DIR)
         assert "sonic_dump_random2.tar.gz" in os.listdir(cdump_mod.TS_DIR)
         assert "sonic_dump_random3.tar.gz" in os.listdir(cdump_mod.TS_DIR)
     cdump_expect = ["sonic_dump_random1", "sonic_dump_random2", "sonic_dump_random3"]
     verify_post_exec_state(redis_mock, cdump_expect)
예제 #4
0
 def test_feature_table_not_set(self):
     """
     Scenario: CFG_STATE is enabled.
               The auto-techsupport in Feature table is not enabled for the core-dump generated
               Check if techsupport is not invoked
     """
     db_wrap = Db()
     redis_mock = db_wrap.db
     set_auto_ts_cfg(redis_mock, state="enabled")
     set_feature_table_cfg(redis_mock, state="disabled", container_name="snmp")
     populate_state_db(redis_mock, {})
     with Patcher() as patcher:
         def mock_cmd(cmd, env):
             cmd_str = " ".join(cmd)
             if "show techsupport" in cmd_str:
                 patcher.fs.create_file("/var/dump/sonic_dump_random3.tar.gz")
             else:
                 return 1, "", "Command Not Found"
             return 0, "", ""
         cdump_mod.subprocess_exec = mock_cmd
         patcher.fs.create_file("/var/dump/sonic_dump_random1.tar.gz")
         patcher.fs.create_file("/var/core/python3.12345.123.core.gz")
         cls = cdump_mod.CriticalProcCoreDumpHandle("python3.12345.123.core.gz", "snmp", redis_mock)
         cls.handle_core_dump_creation_event()
         cdump_mod.handle_coredump_cleanup("python3.12345.123.core.gz", redis_mock)
         assert "sonic_dump_random3.tar.gz" not in os.listdir(cdump_mod.TS_DIR)
    def test_max_core_size_limit_not_crossed(self):
        """
        Scenario: CFG_STATE is enabled. core-dump limit is crossed
                  Verify Whether is cleanup is performed
        """
        db_wrap = Db()
        redis_mock = db_wrap.db
        set_auto_ts_cfg(redis_mock, state="enabled", max_core_size="5.0")
        with Patcher() as patcher:

            def mock_cmd(cmd, env):
                cmd_str = " ".join(cmd)
                if "show techsupport" in cmd_str:
                    patcher.fs.create_file(
                        "/var/dump/sonic_dump_random3.tar.gz")
                return 0, AUTO_TS_STDOUT + ts_dump, ""

            patcher.fs.set_disk_usage(2000, path="/var/core/")
            patcher.fs.create_file("/var/core/orchagent.12345.123.core.gz",
                                   st_size=25)
            patcher.fs.create_file("/var/core/lldpmgrd.12345.22.core.gz",
                                   st_size=25)
            patcher.fs.create_file("/var/core/python3.12345.21.core.gz",
                                   st_size=25)
            cdump_mod.handle_coredump_cleanup("python3.12345.21.core.gz",
                                              redis_mock)
            current_fs = os.listdir(cdump_mod.CORE_DUMP_DIR)
            assert len(current_fs) == 3
            assert "orchagent.12345.123.core.gz" in current_fs
            assert "lldpmgrd.12345.22.core.gz" in current_fs
            assert "python3.12345.21.core.gz" in current_fs
예제 #6
0
 def test_core_dump_cleanup(self):
     """
     Scenario: CFG_STATE is enabled. core-dump limit is crossed
               Verify Whether is cleanup is performed
     """
     db_wrap = Db()
     redis_mock = db_wrap.db
     set_auto_ts_cfg(redis_mock, state="enabled", max_core_size="6.0")
     with Patcher() as patcher:
         patcher.fs.set_disk_usage(1000, path="/var/core/")
         patcher.fs.create_file("/var/core/orchagent.12345.123.core.gz", st_size=25)
         patcher.fs.create_file("/var/core/lldpmgrd.12345.22.core.gz", st_size=25)
         patcher.fs.create_file("/var/core/python3.12345.21.core.gz", st_size=25)
         cdump_mod.handle_coredump_cleanup("python3.12345.21.core.gz", redis_mock)
         current_fs = os.listdir(cdump_mod.CORE_DUMP_DIR)
         assert len(current_fs) == 2
         assert "orchagent.12345.123.core.gz" not in current_fs
         assert "lldpmgrd.12345.22.core.gz" in current_fs
         assert "python3.12345.21.core.gz" in current_fs
    def test_invoc_ts_state_db_update(self):
        """
        Scenario: CFG_STATE is enabled. CFG_CORE_CLEANUP is disabled and no rate_limit_interval is provided
                  Check if techsupport is invoked, file is created and State DB is updated
        """
        db_wrap = Db()
        redis_mock = db_wrap.db
        set_auto_ts_cfg(redis_mock, state="enabled")
        set_feature_table_cfg(redis_mock, state="enabled")
        populate_state_db(redis_mock)
        with Patcher() as patcher:

            def mock_cmd(cmd, env):
                ts_dump = "/var/dump/sonic_dump_random3.tar.gz"
                cmd_str = " ".join(cmd)
                if "show techsupport" in cmd_str:
                    patcher.fs.create_file(ts_dump)
                else:
                    return 1, "", "Command Not Found"
                return 0, AUTO_TS_STDOUT + ts_dump, ""

            ts_helper.subprocess_exec = mock_cmd
            patcher.fs.create_file("/var/dump/sonic_dump_random1.tar.gz")
            patcher.fs.create_file("/var/dump/sonic_dump_random2.tar.gz")
            patcher.fs.create_file("/var/core/orchagent.12345.123.core.gz")
            cls = cdump_mod.CriticalProcCoreDumpHandle(
                "orchagent.12345.123.core.gz", "swss", redis_mock)
            cls.handle_core_dump_creation_event()
            cdump_mod.handle_coredump_cleanup("orchagent.12345.123.core.gz",
                                              redis_mock)
            assert "sonic_dump_random1.tar.gz" in os.listdir(cdump_mod.TS_DIR)
            assert "sonic_dump_random2.tar.gz" in os.listdir(cdump_mod.TS_DIR)
            assert "sonic_dump_random3.tar.gz" in os.listdir(cdump_mod.TS_DIR)
        cdump_expect = [
            "sonic_dump_random1", "sonic_dump_random2", "sonic_dump_random3"
        ]
        verify_post_exec_state(redis_mock, cdump_expect)