def test_concurrent_sequences_with_no_handler(scale, clients): total_resources = scale * 3 timeout = scale * 2 scheduler_client = clients['scheduler'] assert len(change.staged_log()) == total_resources ModelMeta.session_end() plan = change.send_to_orchestration() scheduler_client.next({}, plan.graph['uid']) def wait_function(timeout): try: for summary in wait_finish(plan.graph['uid'], timeout): assert summary[states.ERROR.name] == 0 time.sleep(0.5) except ExecutionTimeout: pass return summary waiter = gevent.spawn(wait_function, timeout) waiter.join(timeout=timeout) res = waiter.get(block=True) assert res[states.SUCCESS.name] == total_resources assert len(data.CL()) == total_resources clear_cache() assert len(change.staged_log()) == 0
def test_concurrent_sequences_with_no_handler(scale, clients): total_resources = scale * 3 timeout = scale * 2 scheduler_client = clients['scheduler'] assert len(change.staged_log()) == total_resources ModelMeta.save_all_lazy() plan = change.send_to_orchestration() ModelMeta.save_all_lazy() scheduler_client.next({}, plan.graph['uid']) def wait_function(timeout): try: for summary in wait_finish(plan.graph['uid'], timeout): assert summary[states.ERROR.name] == 0 time.sleep(0.5) except ExecutionTimeout: pass return summary waiter = gevent.spawn(wait_function, timeout) waiter.join(timeout=timeout) res = waiter.get(block=True) assert res[states.SUCCESS.name] == total_resources assert len(data.CL()) == total_resources clear_cache() assert len(change.staged_log()) == 0
def test_discard_update(): res1 = create_resource('test1') res1.db_obj.inputs['a'] = '9' operations.commit_log_item(change.create_run(res1)) res1.update({'a': '11'}) ModelMeta.save_all_lazy() assert len(change.staged_log()) == 1 assert res1.args == {'a': '11'} change.discard_single(change.staged_log()[0]) assert res1.args == {'a': '9'}
def test_discard_removed(): res1 = create_resource('test1') res1.db_obj.inputs['a'] = '9' res1.db_obj.save_lazy() res1 = resource.load('test1') res1.remove() ModelMeta.save_all_lazy() assert len(change.staged_log()) == 1 assert res1.to_be_removed() change.discard_all() assert len(change.staged_log()) == 0 assert not resource.load('test1').to_be_removed()
def test_discard_removed(): res1 = create_resource('test1') res1.inputs['a'] = '9' res1.save_lazy() res1 = resource.load('test1') res1.remove() ModelMeta.save_all_lazy() assert len(change.staged_log()) == 1 assert res1.to_be_removed() change.discard_all() assert len(change.staged_log()) == 0 assert not resource.load('test1').to_be_removed()
def test_update_action_after_commit(): res = resource.load(create_resource('1').name) res.set_operational() res.update({'a': 10}) ModelMeta.save_all_lazy() staged_log = change.staged_log() assert staged_log[0].action == 'update'
def test_childs_added_on_stage(): res_0, res_1 = [create_resource(str(n)) for n in range(2)] ModelMeta.save_all_lazy() for res in (res_0, res_1): change.create_run(res) res_0.connect(res_1, {'a': 'a'}) change.staged_log() ModelMeta.save_all_lazy() change.commit_all() res_0.update({'a': '10'}) ModelMeta.save_all_lazy() staged_log = change.staged_log() assert len(staged_log) == 2 child_log_item = next(li for li in staged_log if li.resource == res_1.name) assert child_log_item.action == 'update'
def test_only_relevant_child_updated(): res1, res2, res3 = ( create_resource( name, inputs={'a': '', 'b': ''}) for name in ('t1', 't2', 't3')) res1.update({'a': '9', 'b': '10'}) res1.connect(res2, {'a': 'a'}) res1.connect(res3, {'b': 'b'}) ModelMeta.save_all_lazy() # currently childs added as a side effect of staged log, thus we need # to run it before commiting changes assert set(s.resource for s in change.staged_log()) == {'t1', 't2', 't3'} change.commit_all() res1.update({'a': '12'}) ModelMeta.save_all_lazy() # t3 not updated because "a" connected only to t2 assert set(s.resource for s in change.staged_log()) == {'t1', 't2'}
def test_childs_added_on_stage(): res_0, res_1 = [create_resource(str(n)) for n in range(2)] res_0.connect(res_1, {'a': 'a'}) ModelMeta.save_all_lazy() created_log_items = stage_resources(res_0.name, 'run') assert len(created_log_items) == 1 assert created_log_items[0].resource == res_0.name staged_log = change.staged_log() assert len(staged_log) == 2 child_log_item = next(li for li in staged_log if li.resource == res_1.name) assert child_log_item.action == 'run'
def stage(action, name, tag, d): if action and (name or tag): resource.stage_resources(name or tag, action) log = change.staged_log(populate_with_changes=True) for item in log: click.echo(data.compact(item)) if d: for line in data.details(item.diff): click.echo(' ' * 4 + line) if not log: click.echo('No changes')
def stage(action, name, tag, d): if action and (name or tag): resource.stage_resources(name or tag, action) log = change.staged_log() for item in log: click.echo(data.compact(item)) if d: for line in data.details(item.diff): click.echo(' ' * 4 + line) if not log: click.echo('No changes')
def test_revert_update(): prev = {'a': '9'} new = {'a': '10'} res = create_resource('test1') ModelMeta.save_all_lazy() res.update(prev) ModelMeta.save_all_lazy() logitem = change.staged_log()[0] operations.commit_log_item(logitem) res.update(new) ModelMeta.save_all_lazy() logitem = change.staged_log()[0] uid = logitem.uid assert logitem.diff == [['change', 'a', ['9', '10']]] operations.commit_log_item(logitem) assert res.args == new change.revert(uid) assert res.args == {'a': '9'}
def test_discard_removed_with_childs_not_affected(): res1, res2, res3 = ( create_resource( name, inputs={'a': '', 'b': ''}) for name in ('t1', 't2', 't3')) res1.update({'a': '9', 'b': '10'}) res1.connect(res2, {'a': 'a'}) res1.connect(res3, {'b': 'b'}) ModelMeta.save_all_lazy() change.staged_log() change.commit_all() res1.remove() ModelMeta.save_all_lazy() staged_items = change.staged_log() assert len(staged_items) == 1 assert staged_items[0].log_action == 't1.remove' change.discard_all() assert not res1.to_be_removed() assert not res2.to_be_removed() assert not res3.to_be_removed() assert change.staged_log() == []
def test_revert_update_connected(): res1 = create_resource('test1') res1.update({'a': '9'}) res2 = create_resource('test2') res2.update({'a': ''}) res3 = create_resource('test3') res3.update({'a': ''}) res1 = resource.load('test1') res2 = resource.load('test2') res3 = resource.load('test3') res1.connect(res2) res2.connect(res3) ModelMeta.save_all_lazy() staged_items = change.staged_log() assert len(staged_items) == 3 for item in staged_items: assert item.action == 'run' operations.commit_log_item(item) res1.disconnect(res2) staged_log = change.staged_log() to_revert = [] for item in staged_log: assert item.action == 'run' to_revert.append(item.uid) operations.commit_log_item(item) change.revert_uids(sorted(to_revert, reverse=True)) ModelMeta.save_all_lazy() staged_log = change.staged_log() for item in staged_log: assert item.diff == [['change', 'a', ['', '9']]]
def test_discard_update(): res1 = create_resource('test1') res1.inputs['a'] = '9' res1.save_lazy() operations.commit_log_item(change.create_run(res1.name)) res1 = resource.load('test1') res1.update({'a': '11'}) ModelMeta.save_all_lazy() assert len(change.staged_log()) == 1 assert res1.args == {'a': '11'} change.discard_all() assert res1.args == {'a': '9'}
def test_discard_all_pending_changes_resources_created(): res1 = create_resource('test1') res1.inputs['a'] = '9' res1.save_lazy() res2 = create_resource('test2') res2.inputs['a'] = '0' res2.save_lazy() staged_log = map(change.create_run, (res1.name, res2.name)) change.discard_all() staged_log = change.staged_log() assert len(staged_log) == 0 assert resource.load_all() == []
def test_discard_connection(): res1 = create_resource('test1') res1.inputs['a'] = '9' res1.save_lazy() res2 = create_resource('test2') res2.inputs['a'] = '0' res2.save_lazy() staged_log = map(change.create_run, (res1.name, res2.name)) for item in staged_log: operations.commit_log_item(item) res1 = resource.load('test1') res2 = resource.load('test2') res1.connect(res2, {'a': 'a'}) ModelMeta.save_all_lazy() staged_log = change.staged_log() assert len(staged_log) == 1 assert res2.args == {'a': '9'} change.discard_all() assert res2.args == {'a': '0'} assert len(change.staged_log()) == 0
def test_discard_connection(): res1 = create_resource('test1') res1.db_obj.inputs['a'] = '9' res1.db_obj.save_lazy() res2 = create_resource('test2') res2.db_obj.inputs['a'] = '0' res2.db_obj.save_lazy() staged_log = map(change.create_run, (res1, res2)) for item in staged_log: operations.commit_log_item(item) res1 = resource.load('test1') res2 = resource.load('test2') res1.connect(res2, {'a': 'a'}) ModelMeta.save_all_lazy() staged_log = change.staged_log() assert len(staged_log) == 1 assert res2.args == {'a': '9'} change.discard_all() assert res2.args == {'a': '0'} assert len(change.staged_log()) == 0
def test_discard_all_pending_changes_resources_created(): res1 = create_resource('test1') res1.db_obj.inputs['a'] = '9' res1.db_obj.save_lazy() res2 = create_resource('test2') res2.db_obj.inputs['a'] = '0' res2.db_obj.save_lazy() staged_log = map(change.create_run, (res1, res2)) change.discard_all() staged_log = change.staged_log() assert len(staged_log) == 0 assert resource.load_all() == []
def test_revert_create(): res = create_resource('test1') res.db_obj.inputs['a'] = '9' logitem = change.create_run(res) assert logitem.diff == [['add', '', [['a', '9']]]] uid = logitem.uid operations.commit_log_item(logitem) commited = CommitedResource.get('test1') assert commited.inputs == {'a': '9'} change.revert(uid) ModelMeta.save_all_lazy() staged_log = change.staged_log() assert len(staged_log) == 1 for item in staged_log: operations.commit_log_item(item) assert resource.load_all() == []
def test_revert_create(): res = create_resource('test1') res.inputs['a'] = '9' res.save_lazy() logitem = change.create_run(res.name) assert logitem.diff == [['add', '', [['a', '9']]]] uid = logitem.uid operations.commit_log_item(logitem) commited = CommitedResource.get('test1') assert commited.inputs == {'a': '9'} change.revert(uid) ModelMeta.save_all_lazy() staged_log = change.staged_log() assert len(staged_log) == 1 for item in staged_log: operations.commit_log_item(item) assert resource.load_all() == []
def test_revert_removal(): res = create_resource('test1') commited = CommitedResource.from_dict('test1', {'inputs': {'a': '9'}, 'state': 'operational'}) commited.save_lazy() resource_obj = resource.load(res.name) resource_obj.remove() ModelMeta.save_all_lazy() staged_items = change.staged_log() assert len(staged_items) == 1 log_item = staged_items[0] uid = log_item.uid assert log_item.diff == [['remove', '', [['a', '9']]]] operations.commit_log_item(log_item) ModelMeta.save_all_lazy() with mock.patch.object(repository.Repository, 'read_meta') as mread: mread.return_value = { 'input': {'a': {'schema': 'str!'}}, 'id': 'mocked' } with mock.patch.object(repository.Repository, 'get_path') as mpath: mpath.return_value = 'x' change.revert(uid) ModelMeta.save_all_lazy() resource_obj = resource.load('test1') assert resource_obj.args == { 'a': '9', 'location_id': '', 'transports_id': '' }