Exemplo n.º 1
0
def test_concurrent_syncs(db, default_account, config):
    ss1 = SyncService(cpu_id=1, total_cpus=2)
    ss2 = SyncService(cpu_id=1, total_cpus=2)
    ss2.host = 'other-host'
    # Check that only one SyncService instance claims the account.
    assert ss1.accounts_to_start() == [1]
    assert ss2.accounts_to_start() == []
Exemplo n.º 2
0
def test_concurrent_syncs(db, default_account, config):
    ss1 = SyncService(cpu_id=1, total_cpus=2)
    ss2 = SyncService(cpu_id=1, total_cpus=2)
    ss2.host = 'other-host'
    # Check that only one SyncService instance claims the account.
    assert ss1.accounts_to_start() == [1]
    assert ss2.accounts_to_start() == []
Exemplo n.º 3
0
def test_dont_start_disabled_accounts(db, config, default_account):
    purge_other_accounts(default_account)
    config['SYNC_STEAL_ACCOUNTS'] = True
    default_account.sync_host = None
    default_account.disable_sync(reason='testing')
    db.session.commit()
    ss = SyncService(cpu_id=0, total_cpus=1)
    assert ss.accounts_to_start() == []
    assert default_account.sync_host is None
    assert default_account.sync_should_run is False

    default_account.sync_host = platform.node()
    default_account.disable_sync('testing')
    db.session.commit()
    ss = SyncService(cpu_id=0, total_cpus=1)
    assert ss.accounts_to_start() == []
    assert default_account.sync_should_run is False

    # Invalid Credentials
    default_account.mark_invalid()
    default_account.sync_host = None
    db.session.commit()

    # Don't steal invalid accounts
    ss = SyncService(cpu_id=0, total_cpus=1)
    assert ss.accounts_to_start() == []

    # Don't explicitly start invalid accounts
    default_account.sync_host = platform.node()
    db.session.commit()
    ss = SyncService(cpu_id=0, total_cpus=1)
    assert ss.accounts_to_start() == []
Exemplo n.º 4
0
def test_dont_start_disabled_accounts(db, config, default_account):
    purge_other_accounts(default_account)
    config['SYNC_STEAL_ACCOUNTS'] = True
    default_account.sync_host = None
    default_account.disable_sync(reason='testing')
    db.session.commit()
    ss = SyncService(cpu_id=0, total_cpus=1)
    assert ss.accounts_to_start() == []
    assert default_account.sync_host is None
    assert default_account.sync_should_run is False

    default_account.sync_host = platform.node()
    default_account.disable_sync('testing')
    db.session.commit()
    ss = SyncService(cpu_id=0, total_cpus=1)
    assert ss.accounts_to_start() == []
    assert default_account.sync_should_run is False

    # Invalid Credentials
    default_account.mark_invalid()
    default_account.sync_host = None
    db.session.commit()

    # Don't steal invalid accounts
    ss = SyncService(cpu_id=0, total_cpus=1)
    assert ss.accounts_to_start() == []

    # Don't explicitly start invalid accounts
    default_account.sync_host = platform.node()
    db.session.commit()
    ss = SyncService(cpu_id=0, total_cpus=1)
    assert ss.accounts_to_start() == []
Exemplo n.º 5
0
def test_concurrent_syncs(db, default_account, config):
    purge_other_accounts(default_account)
    ss1 = SyncService(cpu_id=default_account.id % 2, total_cpus=2)
    ss2 = SyncService(cpu_id=default_account.id % 2, total_cpus=2)
    ss2.host = "other-host"
    # Check that only one SyncService instance claims the account.
    assert ss1.accounts_to_start() == [default_account.id]
    assert ss2.accounts_to_start() == []
Exemplo n.º 6
0
def test_start_new_accounts_when_stealing_enabled(db, default_account):
    default_account.sync_host = None
    db.session.commit()
    ss = SyncService(cpu_id=1, total_cpus=2)
    assert ss.accounts_to_start() == [1]
    db.session.expire_all()
    assert default_account.sync_host == platform.node()
Exemplo n.º 7
0
def test_start_new_accounts_when_stealing_enabled(db, default_account):
    default_account.sync_host = None
    db.session.commit()
    ss = SyncService(cpu_id=1, total_cpus=2)
    assert ss.accounts_to_start() == [1]
    db.session.expire_all()
    assert default_account.sync_host == platform.node()
Exemplo n.º 8
0
def test_dont_start_new_accounts_when_stealing_disabled(
        db, config, default_account):
    default_account.sync_host = None
    db.session.commit()
    config['SYNC_STEAL_ACCOUNTS'] = False
    ss = SyncService(cpu_id=1, total_cpus=2)
    assert ss.accounts_to_start() == []
    assert default_account.sync_host is None
Exemplo n.º 9
0
def test_dont_start_new_accounts_when_stealing_disabled(db, config, default_account):
    purge_other_accounts(default_account)
    default_account.sync_host = None
    db.session.commit()
    config["SYNC_STEAL_ACCOUNTS"] = False
    ss = SyncService(cpu_id=default_account.id % 2, total_cpus=2)
    assert ss.accounts_to_start() == []
    assert default_account.sync_host is None
Exemplo n.º 10
0
def test_sync_transitions(db, default_account, config):
    purge_other_accounts(default_account)
    ss = SyncService(cpu_id=default_account.id % 2, total_cpus=2)
    default_account.enable_sync()
    db.session.commit()
    assert ss.accounts_to_start() == [default_account.id]

    default_account.disable_sync("manual")
    db.session.commit()
    assert ss.accounts_to_start() == []
    assert default_account.sync_should_run is False
    assert default_account._sync_status["sync_disabled_reason"] == "manual"

    default_account.mark_invalid()
    db.session.commit()
    assert ss.accounts_to_start() == []
    assert default_account.sync_state == "invalid"
    assert default_account._sync_status["sync_disabled_reason"] == "invalid credentials"
    assert default_account.sync_should_run is False
Exemplo n.º 11
0
def test_sync_transitions(db, default_account, config):
    ss = SyncService(cpu_id=1, total_cpus=2)
    default_account.enable_sync()
    db.session.commit()
    assert ss.accounts_to_start() == [1]

    default_account.disable_sync('manual')
    db.session.commit()
    assert ss.accounts_to_start() == []
    assert default_account.sync_should_run is False
    assert default_account._sync_status['sync_disabled_reason'] == 'manual'

    default_account.mark_invalid()
    db.session.commit()
    assert ss.accounts_to_start() == []
    assert default_account.sync_state == 'invalid'
    assert default_account._sync_status['sync_disabled_reason'] == \
        'invalid credentials'
    assert default_account.sync_should_run is False
Exemplo n.º 12
0
def test_sync_transitions(db, default_account, config):
    ss = SyncService(cpu_id=1, total_cpus=2)
    default_account.enable_sync()
    db.session.commit()
    assert ss.accounts_to_start() == [1]

    default_account.disable_sync('manual')
    db.session.commit()
    assert ss.accounts_to_start() == []
    assert default_account.sync_should_run is False
    assert default_account._sync_status['sync_disabled_reason'] == 'manual'

    default_account.mark_invalid()
    db.session.commit()
    assert ss.accounts_to_start() == []
    assert default_account.sync_state == 'invalid'
    assert default_account._sync_status['sync_disabled_reason'] == \
        'invalid credentials'
    assert default_account.sync_should_run is False
Exemplo n.º 13
0
def test_stealing_limited_by_host(db, config):
    host = platform.node()
    config['DATABASE_HOSTS'][0]['SHARDS'][0]['SYNC_HOSTS'] = [host]
    config['DATABASE_HOSTS'][0]['SHARDS'][1]['SYNC_HOSTS'] = ['otherhost']
    purge_other_accounts()
    ss = SyncService(cpu_id=0, total_cpus=1)
    for key in (0, 1):
        with session_scope_by_shard_id(key) as db_session:
            acc = Account()
            acc.namespace = Namespace()
            db_session.add(acc)
            db_session.commit()

    ss.accounts_to_start()
    with session_scope_by_shard_id(0) as db_session:
        acc = db_session.query(Account).first()
        assert acc.sync_host == host
    with session_scope_by_shard_id(1) as db_session:
        acc = db_session.query(Account).first()
        assert acc.sync_host is None
def test_stealing_limited_by_host(db, config):
    host = platform.node()
    config['DATABASE_HOSTS'][0]['SHARDS'][0]['SYNC_HOSTS'] = [host]
    config['DATABASE_HOSTS'][0]['SHARDS'][1]['SYNC_HOSTS'] = ['otherhost']
    purge_other_accounts()
    ss = SyncService(cpu_id=0, total_cpus=1)
    for key in (0, 1):
        with session_scope_by_shard_id(key) as db_session:
            acc = Account()
            acc.namespace = Namespace()
            db_session.add(acc)
            db_session.commit()

    ss.accounts_to_start()
    with session_scope_by_shard_id(0) as db_session:
        acc = db_session.query(Account).first()
        assert acc.sync_host == host
    with session_scope_by_shard_id(1) as db_session:
        acc = db_session.query(Account).first()
        assert acc.sync_host is None
Exemplo n.º 15
0
def test_accounts_started_on_all_shards(db, default_account, config):
    config['SYNC_STEAL_ACCOUNTS'] = True
    purge_other_accounts(default_account)
    default_account.sync_host = None
    db.session.commit()
    ss = SyncService(cpu_id=0, total_cpus=1)
    ss.host = 'localhost'
    account_ids = {default_account.id}
    for key in (0, 1):
        with session_scope_by_shard_id(key) as db_session:
            acc = Account()
            acc.namespace = Namespace()
            db_session.add(acc)
            db_session.commit()
            account_ids.add(acc.id)

    assert len(account_ids) == 3
    assert set(ss.accounts_to_start()) == account_ids
    for id_ in account_ids:
        with session_scope(id_) as db_session:
            acc = db_session.query(Account).get(id_)
            assert acc.sync_host == 'localhost'
Exemplo n.º 16
0
def test_accounts_started_on_all_shards(db, default_account, config):
    config['SYNC_STEAL_ACCOUNTS'] = True
    purge_other_accounts(default_account)
    default_account.sync_host = None
    db.session.commit()
    ss = SyncService(cpu_id=0, total_cpus=1)
    ss.host = 'localhost'
    account_ids = {default_account.id}
    for key in (0, 1):
        with session_scope_by_shard_id(key) as db_session:
            acc = Account()
            acc.namespace = Namespace()
            db_session.add(acc)
            db_session.commit()
            account_ids.add(acc.id)

    assert len(account_ids) == 3
    assert set(ss.accounts_to_start()) == account_ids
    for id_ in account_ids:
        with session_scope(id_) as db_session:
            acc = db_session.query(Account).get(id_)
            assert acc.sync_host == 'localhost'
Exemplo n.º 17
0
def test_start_already_assigned_accounts(db, default_account):
    purge_other_accounts(default_account)
    default_account.sync_host = platform.node()
    ss = SyncService(cpu_id=default_account.id % 2, total_cpus=2)
    assert ss.accounts_to_start() == [default_account.id]
Exemplo n.º 18
0
def test_dont_start_accounts_on_other_host(db, default_account):
    purge_other_accounts(default_account)
    default_account.sync_host = 'other-host'
    db.session.commit()
    ss = SyncService(cpu_id=1, total_cpus=2)
    assert ss.accounts_to_start() == []
Exemplo n.º 19
0
def test_dont_start_accounts_for_other_cpus(db, default_account):
    purge_other_accounts(default_account)
    default_account.sync_host = platform.node()
    ss = SyncService(cpu_id=default_account.id + 1, total_cpus=2**22)
    assert ss.accounts_to_start() == []
Exemplo n.º 20
0
def test_start_already_assigned_accounts(db, default_account):
    purge_other_accounts(default_account)
    default_account.sync_host = platform.node()
    ss = SyncService(cpu_id=default_account.id % 2, total_cpus=2)
    assert ss.accounts_to_start() == [default_account.id]
Exemplo n.º 21
0
def test_start_already_assigned_accounts(db, default_account):
    default_account.sync_host = platform.node()
    ss = SyncService(cpu_id=1, total_cpus=2)
    assert ss.accounts_to_start() == [1]
Exemplo n.º 22
0
def test_dont_start_accounts_on_other_host(db, default_account):
    purge_other_accounts(default_account)
    default_account.sync_host = 'other-host'
    db.session.commit()
    ss = SyncService(cpu_id=1, total_cpus=2)
    assert ss.accounts_to_start() == []
Exemplo n.º 23
0
def test_dont_start_accounts_for_other_cpus(db, default_account):
    purge_other_accounts(default_account)
    default_account.sync_host = platform.node()
    ss = SyncService(cpu_id=default_account.id + 1, total_cpus=2**22)
    assert ss.accounts_to_start() == []
Exemplo n.º 24
0
def test_start_already_assigned_accounts(db, default_account):
    default_account.sync_host = platform.node()
    ss = SyncService(cpu_id=1, total_cpus=2)
    assert ss.accounts_to_start() == [1]