Exemplo n.º 1
0
            got_df = pd.DataFrame(json.loads(error.decode('utf-8').strip()))
        except json.JSONDecodeError:
            got_df = pd.DataFrame(error.decode('utf-8').strip())

        expected_df = pd.DataFrame(json.loads(testvar['error']['error']))

        assert_df_equal(expected_df, got_df, ignore_cols)
    else:
        raise Exception(f"either xfail or output requried {error}")


@pytest.mark.smoke
@pytest.mark.sqcmds
@pytest.mark.parametrize("testvar",
                         load_up_the_tests(
                             os.scandir(
                                 os.path.abspath(os.curdir) +
                                 '/tests/integration/sqcmds/cumulus-samples')))
def test_cumulus_sqcmds(testvar, create_context_config):
    _test_sqcmds(testvar, create_context_config)


@pytest.mark.smoke
@pytest.mark.sqcmds
@pytest.mark.parametrize("testvar",
                         load_up_the_tests(
                             os.scandir(
                                 os.path.abspath(os.curdir) +
                                 '/tests/integration/sqcmds/nxos-samples')))
def test_nxos_sqcmds(testvar, create_context_config):
    _test_sqcmds(testvar, create_context_config)
Exemplo n.º 2
0
class TestSingleAttach:
    topology = 'single-attach'

    @pytest.mark.cndcn
    @pytest.mark.gather_single_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ,
                        reason='Not updating data')
    @pytest.mark.parametrize("proto, scenario", tests)
    def test_gather_single_data(self, proto, scenario, tmp_path, vagrant_setup):
        _gather_cndcn_data('single-attach', proto, scenario, tmp_path)


    @pytest.mark.update_single_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ,
                        reason='Not updating data')
    @pytest.mark.parametrize("proto, scenario", tests)
    def test_update_single_data(self, proto, scenario, tmp_path):
        # this takes the data that was captured with run-once=gather
        #  and creates the parquet data
        #   if you also have UPDATE_SQCMDS in your os environment
        #   it will update the data in the samples directories
        _update_cndcn_data(self.topology, proto, scenario, tmp_path)


    # this needs to be run after the tests are created and updated
    #  there is no way to have pytest run the load_up_the_tests before the updater

    @pytest.mark.cndcn
    @pytest.mark.single_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ,
                        reason='Not updating data')
    @pytest.mark.parametrize("testvar", conftest.load_up_the_tests(
        os.scandir(f"{cndcn_samples_dir}/single-attach_bgp_numbered-samples/")))
    def test_single_bgp_numbered_data(self, testvar): 
        proto = 'bgp'
        scenario = 'numbered'
        name = f'{self.topology}_{proto}_{scenario}'
        assert os.path.isdir(f'{parquet_dir}/{name}'), \
            f'missing {parquet_dir}/{name} directory. you need to run update_single_attach test first'
        _test_data(self.topology, proto, scenario, testvar)

    @pytest.mark.cndcn
    @pytest.mark.single_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ,
                        reason='Not updating data')
    @pytest.mark.parametrize("testvar", conftest.load_up_the_tests(
        os.scandir(f"{cndcn_samples_dir}/single-attach_bgp_unnumbered-samples/")))
    def test_single_bgp_unnumbered_data(self, testvar): 
        proto = 'bgp'
        scenario = 'unnumbered'
        name = f'{self.topology}_{proto}_{scenario}'
        assert os.path.isdir(f'{parquet_dir}/{name}'), \
            f'missing {parquet_dir}/{name} directory. you need to run update_single_attach test first'
        _test_data(self.topology, proto, scenario, testvar)

    @pytest.mark.cndcn
    @pytest.mark.single_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ,
                        reason='Not updating data')
    @pytest.mark.parametrize("testvar", conftest.load_up_the_tests(
        os.scandir(f"{cndcn_samples_dir}/single-attach_bgp_docker-samples/")))
    def test_single_bgp_docker_data(self, testvar): 
        proto = 'bgp'
        scenario = 'docker'
        name = f'{self.topology}_{proto}_{scenario}'
        assert os.path.isdir(f'{parquet_dir}/{name}'), \
            f'missing {parquet_dir}/{name} directory. you need to run update_single_attach test first'
        _test_data(self.topology, proto, scenario, testvar)

    @pytest.mark.cndcn
    @pytest.mark.single_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ,
                        reason='Not updating data')
    @pytest.mark.parametrize("testvar", conftest.load_up_the_tests(
        os.scandir(f"{cndcn_samples_dir}/single-attach_ospf_numbered-samples/")))
    def test_single_ospf_numbered_data(self, testvar): 
        proto = 'ospf'
        scenario = 'numbered'
        name = f'{self.topology}_{proto}_{scenario}'
        assert os.path.isdir(f'{parquet_dir}/{name}'), \
            f'missing {parquet_dir}/{name} directory. you need to run update_single_attach test first'
        _test_data(self.topology, proto, scenario, testvar)

    @pytest.mark.cndcn
    @pytest.mark.single_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ,
                        reason='Not updating data')
    @pytest.mark.parametrize("testvar", conftest.load_up_the_tests(
        os.scandir(f"{cndcn_samples_dir}/single-attach_ospf_unnumbered-samples/")))
    def test_single_ospf_unnumbered_data(self, testvar): 
        proto = 'ospf'
        scenario = 'unnumbered'
        name = f'{self.topology}_{proto}_{scenario}'
        assert os.path.isdir(f'{parquet_dir}/{name}'), \
            f'missing {parquet_dir}/{name} directory. you need to run update_single_attach test first'
        _test_data(self.topology, proto, scenario, testvar)

    @pytest.mark.cndcn
    @pytest.mark.single_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ,
                        reason='Not updating data')
    @pytest.mark.parametrize("testvar", conftest.load_up_the_tests(
        os.scandir(f"{cndcn_samples_dir}/single-attach_ospf_docker-samples/")))
    def test_single_ospf_docker_data(self, testvar): 
        proto = 'ospf'
        scenario = 'docker'
        name = f'{self.topology}_{proto}_{scenario}'
        assert os.path.isdir(f'{parquet_dir}/{name}'), \
            f'missing {parquet_dir}/{name} directory. you need to run update_single_attach test first'
        _test_data(self.topology, proto, scenario, testvar)

    @pytest.mark.cndcn
    @pytest.mark.single_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ,
                        reason='Not updating data')
    @pytest.mark.parametrize("testvar", conftest.load_up_the_tests(
        os.scandir(f"{cndcn_samples_dir}/single-attach_evpn_centralized-samples/")))
    def test_single_evpn_centralized_data(self, testvar): 
        proto = 'evpn'
        scenario = 'centralized'
        name = f'{self.topology}_{proto}_{scenario}'
        assert os.path.isdir(f'{parquet_dir}/{name}'), \
            f'missing {parquet_dir}/{name} directory. you need to run update_single_attach test first'
        _test_data(self.topology, proto, scenario, testvar)

    @pytest.mark.cndcn
    @pytest.mark.single_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ,
                        reason='Not updating data')
    @pytest.mark.parametrize("testvar", conftest.load_up_the_tests(
        os.scandir(f"{cndcn_samples_dir}/single-attach_evpn_distributed-samples/")))
    def test_single_evpn_distributed_data(self, testvar): 
        proto = 'evpn'
        scenario = 'distributed'
        name = f'{self.topology}_{proto}_{scenario}'
        assert os.path.isdir(f'{parquet_dir}/{name}'), \
            f'missing {parquet_dir}/{name} directory. you need to run update_single_attach test first'
        _test_data(self.topology, proto, scenario, testvar)

    @pytest.mark.cndcn
    @pytest.mark.single_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ,
                        reason='Not updating data')
    @pytest.mark.parametrize("testvar", conftest.load_up_the_tests(
        os.scandir(f"{cndcn_samples_dir}/single-attach_evpn_ospf-ibgp-samples/")))
    def test_single_evpn_ospf_ibgp_data(self, testvar): 
        proto = 'evpn'
        scenario = 'ospf-ibgp'
        name = f'{self.topology}_{proto}_{scenario}'
        assert os.path.isdir(f'{parquet_dir}/{name}'), \
            f'missing {parquet_dir}/{name} directory. you need to run update_single_attach test first'
        _test_data(self.topology, proto, scenario, testvar)
Exemplo n.º 3
0
class TestSingleAttach:
    @pytest.mark.single_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ,
                        reason='Not updating data')
    @pytest.mark.parametrize("proto, scenario", tests)
    def test_create_single_data(self, proto, scenario, tmp_path, vagrant_setup):
        _create_data('single-attach', proto, scenario, tmp_path)

    # this needs to be run after the tests are created and updated
    #  there is no way to have pytest run the load_up_the_tests before the updater
    #  so we prevent this running if you are updating the sqcmds
    @pytest.mark.single_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ or
                        'UPDATE_SQCMDS' in os.environ,
                        reason='Not updating data')
    @pytest.mark.depends(on=['test_create_single_data'])
    @pytest.mark.parametrize("testvar", conftest.load_up_the_tests(
        os.scandir(f"{cndcn_samples_dir}/single-attach_bgp_numbered/")))
    def test_single_bgp_numbered_data(self, testvar, test_cleanup_single_numbered_suzieq):
        _test_data('single-attach', 'bgp', 'numbered', testvar)

    @pytest.fixture(scope='session', autouse=True)
    def test_cleanup_single_numbered_suzieq(self):
        yield
        name = 'single-attach_bgp_numbered'
        dir = f"{parquet_dir}/{name}/parquet-out"
        if os.path.isdir(dir):
            shutil.rmtree(dir)

    @pytest.mark.single_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ or
                        'UPDATE_SQCMDS' in os.environ,
                        reason='Not updating data')
    @pytest.mark.depends(on=['test_create_single_data'])
    @pytest.mark.parametrize("testvar", conftest.load_up_the_tests(
        os.scandir(f"{cndcn_samples_dir}/single-attach_bgp_unnumbered/")))
    def test_single_bgp_numbered_data(self, testvar, test_cleanup_single_numbered_suzieq):
        _test_data('single-attach', 'bgp', 'unnumbered', testvar)

    @pytest.fixture(scope='session', autouse=True)
    def test_cleanup_single_unnumbered_suzieq(self):
        yield
        name = 'single-attach_bgp_unnumbered'
        dir = f"{parquet_dir}/{name}/parquet-out"
        if os.path.isdir(dir):
            shutil.rmtree(dir)

    @pytest.mark.single_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ or
                        'UPDATE_SQCMDS' in os.environ,
                        reason='Not updating data')
    @pytest.mark.depends(on=['test_create_single_data'])
    @pytest.mark.parametrize("testvar", conftest.load_up_the_tests(
        os.scandir(f"{cndcn_samples_dir}/single-attach_bgp_docker/")))
    def test_single_bgp_numbered_data(self, testvar, test_cleanup_single_numbered_suzieq):
        _test_data('single-attach', 'bgp', 'docker', testvar)

    @pytest.fixture(scope='session', autouse=True)
    def test_cleanup_single_docker_suzieq(self):
        yield
        name = 'single-attach_bgp_docker'
        dir = f"{parquet_dir}/{name}/parquet-out"
        if os.path.isdir(dir):
            shutil.rmtree(dir)

    @pytest.mark.single_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ or
                        'UPDATE_SQCMDS' in os.environ,
                        reason='Not updating data')
    @pytest.mark.depends(on=['test_create_single_data'])
    @pytest.mark.parametrize("testvar", conftest.load_up_the_tests(
        os.scandir(f"{cndcn_samples_dir}/single-attach_ospf_numbered/")))
    def test_single_ospf_numbered_data(self, testvar, test_cleanup_single_numbered_suzieq):
        _test_data('single-attach', 'ospf', 'numbered', testvar)

    @pytest.fixture(scope='session', autouse=True)
    def test_cleanup_single_numbered_suzieq(self):
        yield
        name = 'single-attach_ospf_numbered'
        dir = f"{parquet_dir}/{name}/parquet-out"
        if os.path.isdir(dir):
            shutil.rmtree(dir)

    @pytest.mark.single_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ or
                        'UPDATE_SQCMDS' in os.environ,
                        reason='Not updating data')
    @pytest.mark.depends(on=['test_create_single_data'])
    @pytest.mark.parametrize("testvar", conftest.load_up_the_tests(
        os.scandir(f"{cndcn_samples_dir}/single-attach_ospf_unnumbered/")))
    def test_single_ospf_numbered_data(self, testvar, test_cleanup_single_numbered_suzieq):
        _test_data('single-attach', 'ospf', 'unnumbered', testvar)

    @pytest.fixture(scope='session', autouse=True)
    def test_cleanup_single_unnumbered_suzieq(self):
        yield
        name = 'single-attach_ospf_unnumbered'
        dir = f"{parquet_dir}/{name}/parquet-out"
        if os.path.isdir(dir):
            shutil.rmtree(dir)

    @pytest.mark.single_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ or
                        'UPDATE_SQCMDS' in os.environ,
                        reason='Not updating data')
    @pytest.mark.depends(on=['test_create_single_data'])
    @pytest.mark.parametrize("testvar", conftest.load_up_the_tests(
        os.scandir(f"{cndcn_samples_dir}/single-attach_ospf_docker/")))
    def test_single_ospf_numbered_data(self, testvar, test_cleanup_single_numbered_suzieq):
        _test_data('single-attach', 'ospf', 'docker', testvar)

    @pytest.fixture(scope='session', autouse=True)
    def test_cleanup_single_docker_suzieq(self):
        yield
        name = 'single-attach_ospf_docker'
        dir = f"{parquet_dir}/{name}/parquet-out"
        if os.path.isdir(dir):
            shutil.rmtree(dir)
    @pytest.mark.single_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ or
                        'UPDATE_SQCMDS' in os.environ,
                        reason='Not updating data')
    @pytest.mark.depends(on=['test_create_single_data'])
    @pytest.mark.parametrize("testvar", conftest.load_up_the_tests(
        os.scandir(f"{cndcn_samples_dir}/single-attach_evpn_centralized/")))
    def test_single_evpn_centralized_data(self, testvar, test_cleanup_evpn_centralized_suzieq):
        _test_data('single-attach', 'evpn', 'centralized', testvar)

    @pytest.fixture(scope='session', autouse=True)
    def test_cleanup_evpn_centralized_suzieq(self):
        yield
        name = 'single-attach_evpn_centralized'
        dir = f"{parquet_dir}/{name}/parquet-out"
        if os.path.isdir(dir):
            shutil.rmtree(dir)

    @pytest.mark.single_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ or
                        'UPDATE_SQCMDS' in os.environ,
                        reason='Not updating data')
    @pytest.mark.depends(on=['test_create_single_data'])
    @pytest.mark.parametrize("testvar", conftest.load_up_the_tests(
        os.scandir(f"{cndcn_samples_dir}/single-attach_evpn_distributed/")))
    def test_single_evpn_distributed_data(self, testvar, test_cleanup_evpn_distributed_suzieq):
        _test_data('single-attach', 'evpn', 'distributed', testvar)

    @pytest.fixture(scope='session', autouse=True)
    def test_cleanup_evpn_distributed_suzieq(self):
        yield
        name = 'single-attach_evpn_distributed'
        dir = f"{parquet_dir}/{name}/parquet-out"
        if os.path.isdir(dir):
            shutil.rmtree(dir)

    @pytest.mark.single_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ or
                        'UPDATE_SQCMDS' in os.environ,
                        reason='Not updating data')
    @pytest.mark.depends(on=['test_create_single_data'])
    @pytest.mark.parametrize("testvar", conftest.load_up_the_tests(
        os.scandir(f"{cndcn_samples_dir}/single-attach_evpn_ospf-ibgp/")))
    def test_single_evpn_ospf_ibgp_data(self, testvar, test_cleanup_evpn_ospf_ibgp_suzieq):
        _test_data('single-attach', 'evpn', 'ospf-ibgp', testvar)

    @pytest.fixture(scope='session', autouse=True)
    def test_cleanup_evpn_ospf_ibgp_suzieq(self):
        yield
        name = 'single-attach_evpn_ospf-ibgp'
        dir = f"{parquet_dir}/{name}/parquet-out"
        if os.path.isdir(dir):
            shutil.rmtree(dir)
Exemplo n.º 4
0
class TestSingleAttach:
    @pytest.mark.single_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ,
                        reason='Not updating data')
    @pytest.mark.parametrize("proto, scenario", tests)
    def test_create_single_data(self, proto, scenario, tmp_path,
                                vagrant_setup):
        _create_data('single-attach', proto, scenario, tmp_path)

    # this needs to be run after the tests are created and updated
    #  there is no way to have pytest run the load_up_the_tests before the updater
    #  so we prevent this running if you are updating the sqcmds
    @pytest.mark.single_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ
                        or 'UPDATE_SQCMDS' in os.environ,
                        reason='Not updating data')
    @pytest.mark.depends(on=['test_create_single_data'])
    @pytest.mark.parametrize(
        "testvar",
        conftest.load_up_the_tests(
            os.scandir(f"{cndcn_samples_dir}/single-attach_bgp_numbered/")))
    def test_single_bgp_numbered_data(self, testvar):
        _test_data('single-attach', 'bgp', 'numbered', testvar)

    @pytest.mark.single_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ
                        or 'UPDATE_SQCMDS' in os.environ,
                        reason='Not updating data')
    @pytest.mark.depends(on=['test_create_single_data'])
    @pytest.mark.parametrize(
        "testvar",
        conftest.load_up_the_tests(
            os.scandir(f"{cndcn_samples_dir}/single-attach_bgp_unnumbered/")))
    def test_single_bgp_numbered_data(self, testvar):
        _test_data('single-attach', 'bgp', 'unnumbered', testvar)

    @pytest.mark.single_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ
                        or 'UPDATE_SQCMDS' in os.environ,
                        reason='Not updating data')
    @pytest.mark.depends(on=['test_create_single_data'])
    @pytest.mark.parametrize(
        "testvar",
        conftest.load_up_the_tests(
            os.scandir(f"{cndcn_samples_dir}/single-attach_bgp_docker/")))
    def test_single_bgp_numbered_data(self, testvar):
        _test_data('single-attach', 'bgp', 'docker', testvar)

    @pytest.mark.single_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ
                        or 'UPDATE_SQCMDS' in os.environ,
                        reason='Not updating data')
    @pytest.mark.depends(on=['test_create_single_data'])
    @pytest.mark.parametrize(
        "testvar",
        conftest.load_up_the_tests(
            os.scandir(f"{cndcn_samples_dir}/single-attach_ospf_numbered/")))
    def test_single_ospf_numbered_data(self, testvar):
        _test_data('single-attach', 'ospf', 'numbered', testvar)

    @pytest.mark.single_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ
                        or 'UPDATE_SQCMDS' in os.environ,
                        reason='Not updating data')
    @pytest.mark.depends(on=['test_create_single_data'])
    @pytest.mark.parametrize(
        "testvar",
        conftest.load_up_the_tests(
            os.scandir(f"{cndcn_samples_dir}/single-attach_ospf_unnumbered/")))
    def test_single_ospf_numbered_data(self, testvar):
        _test_data('single-attach', 'ospf', 'unnumbered', testvar)

    @pytest.mark.single_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ
                        or 'UPDATE_SQCMDS' in os.environ,
                        reason='Not updating data')
    @pytest.mark.depends(on=['test_create_single_data'])
    @pytest.mark.parametrize(
        "testvar",
        conftest.load_up_the_tests(
            os.scandir(f"{cndcn_samples_dir}/single-attach_ospf_docker/")))
    def test_single_ospf_numbered_data(self, testvar):
        _test_data('single-attach', 'ospf', 'docker', testvar)

    @pytest.mark.single_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ
                        or 'UPDATE_SQCMDS' in os.environ,
                        reason='Not updating data')
    @pytest.mark.depends(on=['test_create_single_data'])
    @pytest.mark.parametrize(
        "testvar",
        conftest.load_up_the_tests(
            os.scandir(f"{cndcn_samples_dir}/single-attach_evpn_centralized/"))
    )
    def test_single_evpn_centralized_data(self, testvar):
        _test_data('single-attach', 'evpn', 'centralized', testvar)

    @pytest.mark.single_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ
                        or 'UPDATE_SQCMDS' in os.environ,
                        reason='Not updating data')
    @pytest.mark.depends(on=['test_create_single_data'])
    @pytest.mark.parametrize(
        "testvar",
        conftest.load_up_the_tests(
            os.scandir(f"{cndcn_samples_dir}/single-attach_evpn_distributed/"))
    )
    def test_single_evpn_distributed_data(self, testvar):
        _test_data('single-attach', 'evpn', 'distributed', testvar)

    @pytest.mark.single_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ
                        or 'UPDATE_SQCMDS' in os.environ,
                        reason='Not updating data')
    @pytest.mark.depends(on=['test_create_single_data'])
    @pytest.mark.parametrize(
        "testvar",
        conftest.load_up_the_tests(
            os.scandir(f"{cndcn_samples_dir}/single-attach_evpn_ospf-ibgp/")))
    def test_single_evpn_ospf_ibgp_data(self, testvar):
        _test_data('single-attach', 'evpn', 'ospf-ibgp', testvar)
Exemplo n.º 5
0
class TestDualAttach:
    '''Update Tests and data for dual-attach topology'''
    topology = 'dual-attach'

    @pytest.mark.cndcn
    @pytest.mark.gather_dual_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ,
                        reason='Not updating data')
    @pytest.mark.parametrize("proto, scenario", tests)
    # pylint: disable=unused-argument
    def test_gather_dual_data(self, proto, scenario, tmp_path, vagrant_setup):
        '''Collect run-once=gather data for dual-attach topology'''
        _gather_cndcn_data(self.topology, proto, scenario, tmp_path)  # noqa

    @pytest.mark.update_dual_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ,
                        reason='Not updating data')
    @pytest.mark.parametrize("proto, scenario", tests)
    def test_update_dual_data(self, proto, scenario, tmp_path):
        '''Update parquet for dual-attach topology scenarios'''
        # this takes the data that was captured with run-once=gather
        #  and creates the parquet data
        #   if you also have UPDATE_SQCMDS in your os environment
        #   it will update the data in the samples directories
        _update_cndcn_data(self.topology, proto, scenario, tmp_path)

    # these needs to be run after the tests are created and updated
    # there is no way to have pytest run the load_up_the_tests before the
    # updater
    @pytest.mark.cndcn
    @pytest.mark.dual_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ,
                        reason='Not updating data')
    @pytest.mark.parametrize(
        "testvar",
        conftest.load_up_the_tests(
            os.scandir(
                f"{cndcn_samples_dir}/dual-attach_bgp_numbered-samples/")))
    # pylint: disable=unused-argument
    def test_dual_bgp_numbered_data(self, testvar, tmp_path):
        '''Update test data for dual-attach numbered ospf'''
        proto = 'bgp'
        scenario = 'numbered'
        name = f'{self.topology}_{proto}_{scenario}'
        assert os.path.isdir(f'{parquet_dir}/{name}'), \
            (f'missing {parquet_dir}/{name} directory. '
             f'you need to run update_dual_attach test first')
        _test_data(self.topology, proto, scenario, testvar)

    @pytest.mark.cndcn
    @pytest.mark.dual_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ,
                        reason='Not updating data')
    @pytest.mark.parametrize(
        "testvar",
        conftest.load_up_the_tests(
            os.scandir(
                f"{cndcn_samples_dir}/dual-attach_bgp_unnumbered-samples/")))
    def test_dual_bgp_unnumbered_data(self, testvar):
        '''Update test data for dual-attach unnumbered bgp'''
        proto = 'bgp'
        scenario = 'unnumbered'
        name = f'{self.topology}_{proto}_{scenario}'
        assert os.path.isdir(f'{parquet_dir}/{name}'), \
            (f'missing {parquet_dir}/{name} directory. '
             'you need to run update_dual_attach test first')
        _test_data(self.topology, proto, scenario, testvar)

    @pytest.mark.cndcn
    @pytest.mark.dual_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ,
                        reason='Not updating data')
    @pytest.mark.parametrize(
        "testvar",
        conftest.load_up_the_tests(
            os.scandir(f"{cndcn_samples_dir}/dual-attach_bgp_docker-samples/"))
    )
    def test_dual_bgp_docker_data(self, testvar):
        '''Update test data for dual-attach bgp w/docker'''
        proto = 'bgp'
        scenario = 'docker'
        name = f'{self.topology}_{proto}_{scenario}'
        assert os.path.isdir(f'{parquet_dir}/{name}'), \
            (f'missing {parquet_dir}/{name} directory. '
             'you need to run update_dual_attach test first')
        _test_data(self.topology, proto, scenario, testvar)

    @pytest.mark.cndcn
    @pytest.mark.dual_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ,
                        reason='Not updating data')
    @pytest.mark.parametrize(
        "testvar",
        conftest.load_up_the_tests(
            os.scandir(
                f"{cndcn_samples_dir}/dual-attach_ospf_numbered-samples/")))
    def test_dual_ospf_numbered_data(self, testvar):
        '''Update test data for dual-attach numbered ospf'''
        proto = 'ospf'
        scenario = 'numbered'
        name = f'{self.topology}_{proto}_{scenario}'
        assert os.path.isdir(f'{parquet_dir}/{name}'), \
            (f'missing {parquet_dir}/{name} directory. '
             'you need to run update_dual_attach test first')
        _test_data(self.topology, proto, scenario, testvar)

    @pytest.mark.cndcn
    @pytest.mark.dual_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ,
                        reason='Not updating data')
    @pytest.mark.parametrize(
        "testvar",
        conftest.load_up_the_tests(
            os.scandir(
                f"{cndcn_samples_dir}/dual-attach_ospf_unnumbered-samples/")))
    def test_dual_ospf_unnumbered_data(self, testvar):
        '''Update test data for dual-attach unnumbered ospf'''
        proto = 'ospf'
        scenario = 'unnumbered'
        name = f'{self.topology}_{proto}_{scenario}'
        assert os.path.isdir(f'{parquet_dir}/{name}'), \
            (f'missing {parquet_dir}/{name} directory. '
             'you need to run update_dual_attach test first')
        _test_data(self.topology, proto, scenario, testvar)

    @pytest.mark.cndcn
    @pytest.mark.dual_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ,
                        reason='Not updating data')
    @pytest.mark.parametrize(
        "testvar",
        conftest.load_up_the_tests(
            os.scandir(
                f"{cndcn_samples_dir}/dual-attach_ospf_docker-samples/")))
    def test_dual_ospf_docker_data(self, testvar):
        '''Update test data for dual-attach ospf w/docker'''
        proto = 'ospf'
        scenario = 'docker'
        name = f'{self.topology}_{proto}_{scenario}'
        assert os.path.isdir(f'{parquet_dir}/{name}'), \
            (f'missing {parquet_dir}/{name} directory. '
             'you need to run update_dual_attach test first')
        _test_data(self.topology, proto, scenario, testvar)

    @pytest.mark.cndcn
    @pytest.mark.dual_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ,
                        reason='Not updating data')
    @pytest.mark.parametrize(
        "testvar",
        conftest.load_up_the_tests(
            os.scandir(
                f"{cndcn_samples_dir}/dual-attach_evpn_centralized-samples/")))
    def test_dual_evpn_centralized_data(self, testvar):
        '''Update test data for dual-attach centralized evpn'''
        proto = 'evpn'
        scenario = 'centralized'
        name = f'{self.topology}_{proto}_{scenario}'
        assert os.path.isdir(f'{parquet_dir}/{name}'), \
            (f'missing {parquet_dir}/{name} directory. '
             'you need to run update_dual_attach test first')
        _test_data(self.topology, proto, scenario, testvar)

    @pytest.mark.cndcn
    @pytest.mark.dual_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ,
                        reason='Not updating data')
    @pytest.mark.parametrize(
        "testvar",
        conftest.load_up_the_tests(
            os.scandir(
                f"{cndcn_samples_dir}/dual-attach_evpn_distributed-samples/")))
    def test_dual_evpn_distributed_data(self, testvar):
        '''Update test data for dual-attach evpn'''
        proto = 'evpn'
        scenario = 'distributed'
        name = f'{self.topology}_{proto}_{scenario}'
        assert os.path.isdir(f'{parquet_dir}/{name}'), \
            (f'missing {parquet_dir}/{name} directory. '
             'you need to run update_dual_attach test first')
        _test_data(self.topology, proto, scenario, testvar)

    @pytest.mark.cndcn
    @pytest.mark.dual_attach
    @pytest.mark.skipif('SUZIEQ_POLLER' not in os.environ,
                        reason='Not updating data')
    @pytest.mark.parametrize(
        "testvar",
        conftest.load_up_the_tests(
            os.scandir(
                f"{cndcn_samples_dir}/dual-attach_evpn_ospf-ibgp-samples/")))
    def test_dual_evpn_ospf_ibgp_data(self, testvar):
        '''Update test data for dual attach ospf-ibgp'''
        proto = 'evpn'
        scenario = 'ospf-ibgp'
        name = f'{self.topology}_{proto}_{scenario}'
        assert os.path.isdir(f'{parquet_dir}/{name}'), \
            (f'missing {parquet_dir}/{name} directory. '
             'you need to run update_dual_attach test first')
        _test_data(self.topology, proto, scenario, testvar)