def test_build_keycolumnlist(mocker, setup):
    (extractor, mockdb, mockargv, mock_producer, start_scn, end_scn) = setup

    query_results_config = {'fetchall.return_value': []}
    mock_query_results = mocker.Mock(**query_results_config)

    db_config = {'execute_query.return_value': mock_query_results}
    mockdb = mocker.Mock(**db_config)

    mock_audit_factory = unittest_utils.build_mock_audit_factory(mocker)

    extractor = OracleCdcExtractor(mockdb, mockargv, mock_audit_factory)

    extractor.build_keycolumnlist(['schemaA', 'schemaB'], ['tableA', 'tableB'])
    mockdb.assert_has_calls([
        mocker.call.execute_query(
            "SELECT cons.table_name tabname, LOWER(column_name) colname "
            "FROM   all_constraints cons, all_cons_columns col "
            "WHERE  cons.owner = col.owner "
            "AND    cons.constraint_name = col.constraint_name "
            "AND UPPER(cons.owner) IN ('SCHEMAA', 'SCHEMAB') "
            "AND UPPER(cons.table_name) IN ('TABLEA', 'TABLEB') "
            "AND   cons.constraint_type IN ('P', 'U') "
            "ORDER BY 1, col.position", 1000),
        mocker.call.execute_query(mocker.ANY).fetchall()
    ])
def setup_no_redolog_dict(tmpdir, mocker):
    mockargv_config = unittest_utils.get_default_argv_config(tmpdir)
    mockargv_config = utils.merge_dicts(
        mockargv_config, {
            'donotload': False,
            'donotsend': False,
            'streamhost': 'host',
            'streamchannel': 'channel',
            'streamschemafile': 'file',
            'streamschemahost': 'host',
            'sourcedictionary': 'redolog'
        })
    mockargv = mocker.Mock(**mockargv_config)
    unittest_utils.setup_logging(mockargv.workdirectory)

    db_config = {'execute_query.side_effect': execute_query_no_redolog_se}
    mockdb = mocker.Mock(**db_config)

    mock_audit_factory = unittest_utils.build_mock_audit_factory(mocker)

    unittest_utils.mock_get_prev_run_cdcs(mocker)
    mock_producer = unittest_utils.mock_build_kafka_producer(mocker)

    yield (OracleCdcExtractor(mockdb, mockargv, mock_audit_factory), mockdb,
           mockargv, mock_producer, 1, 2)
def setup_kill(tmpdir, mocker):
    mockargv_config = unittest_utils.get_default_argv_config(tmpdir)
    mockargv_config = utils.merge_dicts(mockargv_config, {
        'donotload': False,
        'donotsend': False,
        'kill': True
    })
    mockargv = mocker.Mock(**mockargv_config)
    unittest_utils.setup_logging(mockargv.workdirectory)

    db_config = {}
    mockdb = mocker.Mock(**db_config)

    mock_audit_factory = unittest_utils.build_mock_audit_factory(mocker)

    unittest_utils.mock_get_prev_run_cdcs(mocker)
    mock_producer = unittest_utils.mock_build_kafka_producer(mocker)

    yield (OracleCdcExtractor(mockdb, mockargv, mock_audit_factory), mockdb,
           mockargv, mock_producer)
def setup_scn_override(tmpdir, mocker):
    ARGV_STARTSCN = 99
    ARGV_ENDSCN = 100
    mockargv_config = unittest_utils.get_default_argv_config(tmpdir)
    mockargv_config = utils.merge_dicts(mockargv_config, {
        'startscn': ARGV_STARTSCN,
        'endscn': ARGV_ENDSCN,
    })
    mockargv = mocker.Mock(**mockargv_config)

    unittest_utils.setup_logging(mockargv.workdirectory)

    unittest_utils.mock_get_schemas_and_tables(mocker, [], [])

    db_config = {'execute_query.side_effect': default_execute_query_se}
    mockdb = mocker.Mock(**db_config)

    mock_audit_factory = unittest_utils.build_mock_audit_factory(mocker)

    unittest_utils.mock_get_prev_run_cdcs(mocker)
    mock_producer = unittest_utils.mock_build_kafka_producer(mocker)

    yield (OracleCdcExtractor(mockdb, mockargv, mock_audit_factory), mockdb,
           mockargv, ARGV_STARTSCN, ARGV_ENDSCN)