示例#1
0
def test_file_delivery_service_check(testdir_delivery_service):
    storage = FileStorage(item_type=Delivery, path=testdir_delivery_service)
    fds = DeliveryService(storage=storage)
    sender = 'sender'
    serial_number = '1234'
    serial_numbers = ['123', '456', '789']
    try:
        fds.cancel(serial_number=serial_number)
    except Exception:
        pass
    for i in serial_numbers:
        try:
            fds.cancel(serial_number=i)
        except Exception:
            continue
    item = 'Hello, World!'
    fds.send(id=sender, serial_number=serial_number, item=item)
    check = fds.check(serial_number=serial_number)
    assert isinstance(check, bool)
    assert check is True
    fds.cancel(serial_number=serial_number)
    check = fds.check(serial_number=serial_number)
    assert check is False
    fds.send(id=sender, serial_number=serial_numbers[0], item=item)
    fds.send(id=sender, serial_number=serial_numbers[1], item=item)
    check = fds.check(serial_number=serial_numbers)
    assert isinstance(check, bool)
    assert check is False
    fds.send(id=sender, serial_number=serial_numbers[2], item=item)
    check = fds.check(serial_number=serial_numbers)
    assert check is True
示例#2
0
def test_file_storage_list_all(testdir_file_storage, dummy_deliveries):
    storage = FileStorage(item_type=Delivery,
                          key='id',
                          path=testdir_file_storage)
    assert storage.key == 'id'
    storage.save(item=dummy_deliveries)
    tmp = sorted(os.listdir(testdir_file_storage))
    assert tmp == sorted(['%s.json' % d.id for d in dummy_deliveries])
    dummy_keys = [d.id for d in dummy_deliveries]
    all_keys = storage.list_all()
    assert sorted(all_keys) == sorted(dummy_keys)
    all_items = storage.load(key=all_keys)
    assert type(all_items) == list and len(all_items) == 3
    assert sorted([d.id for d in all_items]) == sorted(all_keys)
    storage.remove(key=all_keys)
    assert len(os.listdir(testdir_file_storage)) == len(
        storage.list_all()) == 0
示例#3
0
def test_file_storage_jobstore_codepack_snapshot(testdir):
    code = Code(hello)
    codepack = CodePack('codepack_test', code=code, subscribe=code)
    argpack = codepack.make_argpack()
    argpack['hello']['name'] = 'CodePack'
    job_id = 'job_test'
    storage = FileStorage(item_type=StorableJob,
                          key='id',
                          path='testdir/scheduler/')
    jobstore = JobStore(storage=storage)
    scheduler = Scheduler(jobstore=jobstore, blocking=False)
    scheduler.add_codepack(job_id=job_id,
                           codepack=codepack,
                           argpack=argpack,
                           trigger='interval',
                           seconds=30)
    scheduler.start()
    assert scheduler.is_running()
    assert not storage.exist(key=codepack.id)
    assert storage.exist(key=job_id)
    job = storage.load(key=job_id, to_dict=True)
    for k in [
            '_id', 'trigger', 'codepack', 'snapshot', 'last_run_time',
            'next_run_time'
    ]:
        assert k in job
    assert job['_id'] == job_id
    assert job['trigger'] == 'interval[0:00:30]'
    assert job['codepack'] == codepack.id
    assert job['snapshot'] == codepack.serial_number
    scheduler.remove_job(job_id)
    assert len(storage.list_all()) == 0
    scheduler.stop()
示例#4
0
def test_file_code_snapshot_service_save_and_load(default_os_env,
                                                  testdir_snapshot_service):
    storage = FileStorage(item_type=CodeSnapshot,
                          path=testdir_snapshot_service)
    fss = SnapshotService(storage=storage)
    code = Code(add2)
    snapshot = CodeSnapshot(code)
    fss.save(snapshot=snapshot)
    assert len(os.listdir(testdir_snapshot_service)) == 1
    assert fss.load(snapshot.serial_number) == snapshot.to_dict()
    loaded = fss.load(snapshot.serial_number, projection=['state'])
    assert set(loaded.keys()) == {'serial_number', 'state'}
    assert 'state' in loaded
    assert loaded['state'] == 'UNKNOWN'
    assert 'serial_number' in loaded
    assert loaded['serial_number'] == snapshot.serial_number
示例#5
0
def test_file_snapshot_service_update(testdir_snapshot_service):
    storage = FileStorage(item_type=Snapshot, path=testdir_snapshot_service)
    fss = SnapshotService(storage=storage)
    timestamp = datetime.now().timestamp()
    snapshot1 = Snapshot(id='1234', serial_number='5678', timestamp=timestamp)
    snapshot2 = Snapshot(id='1234',
                         serial_number='5678',
                         timestamp=timestamp + 1)
    fss.save(snapshot=snapshot1)
    fss.save(snapshot=snapshot2)
    assert len(os.listdir(testdir_snapshot_service)) == 1
    search_result = fss.search(key='id',
                               value='1234',
                               projection=['timestamp'])
    assert len(search_result) == 1
    assert search_result[0]['timestamp'] == timestamp + 1
示例#6
0
def test_file_delivery_service(testdir_delivery_service):
    storage = FileStorage(item_type=Delivery, path=testdir_delivery_service)
    fds = DeliveryService(storage=storage)
    sender = 'sender'
    serial_number = '1234'
    item = 'Hello, World!'
    fds.send(id=sender, serial_number=serial_number, item=item)
    assert os.path.isfile(
        Delivery.get_path(key=serial_number,
                          path=storage.path)), "'send' failed"
    check = fds.check(serial_number=serial_number)
    receive = fds.receive(serial_number=serial_number)
    assert check is True
    assert receive == item, "'receive' error"
    fds.cancel(serial_number=serial_number)
    check2 = fds.check(serial_number=serial_number)
    assert check2 is False, "'cancel' error"
示例#7
0
def test_file_storage_service(default_os_env, testdir_storage_service):
    filepath = testdir_storage_service
    storage = FileStorage(item_type=Code, path=filepath)
    fss = StorageService(storage=storage)
    assert storage.path == filepath
    code1 = Code(hello, storage_service=fss)
    code2 = Code(add2, storage_service=fss)
    code1.save()
    assert not os.path.isfile(Code.get_path(key=code1.id))
    assert os.path.isfile(Code.get_path(key=code1.id, path=filepath))
    assert not os.path.isfile(Code.get_path(key=code2.id, path=filepath))
    code3 = fss.load(code1.id)
    assert code1.id == code3.id
    assert code1.source.strip() == code3.source.strip()
    assert code1("CodePack") == code3("CodePack")
    fss.remove(code3.id)
    assert not os.path.isfile(Code.get_path(key=code1.id, path=filepath))
示例#8
0
def test_file_code_snapshot_service_search_and_remove(
        default_os_env, testdir_snapshot_service):
    storage = FileStorage(item_type=CodeSnapshot,
                          path=testdir_snapshot_service)
    fss = SnapshotService(storage=storage)
    code1 = Code(add2)
    code2 = Code(add3)
    code1 >> code2
    code2(1, 2, 3)
    snapshot1 = CodeSnapshot(code1)
    snapshot2 = CodeSnapshot(code2)
    fss.save(snapshot=snapshot1)
    fss.save(snapshot=snapshot2)
    assert len(os.listdir(testdir_snapshot_service)) == 2
    loaded = fss.load(
        [snapshot1.serial_number, snapshot2.serial_number, '1234'])
    assert len(loaded) == 2
    assert loaded[0]['state'] == 'UNKNOWN'
    assert loaded[1]['state'] == 'WAITING'
    loaded = fss.load(
        [snapshot1.serial_number, snapshot2.serial_number, '1234'],
        projection=['state'])
    for x in loaded:
        assert set(x.keys()) == {'state', 'serial_number'}
    search_result = fss.search(key='state', value='WAITING')
    assert len(search_result) == 1
    assert search_result[0] == snapshot2.to_dict()
    search_result = fss.search(key='state',
                               value='WAITING',
                               projection=['state'])
    assert len(search_result) == 1
    assert len(search_result[0].keys()) == 2
    assert search_result[0]['state'] == 'WAITING'
    assert search_result[0]['serial_number'] == code2.serial_number
    fss.remove(snapshot2.serial_number)
    loaded = fss.load(
        [snapshot1.serial_number, snapshot2.serial_number, '1234'])
    assert len(loaded) == 1
    search_result = fss.search(key='state',
                               value='WAITING',
                               projection=['state'])
    assert len(search_result) == 0
示例#9
0
def test_file_storage_service_check(default_os_env, testdir_storage_service):
    storage = FileStorage(item_type=Code, path=testdir_storage_service)
    assert storage.key == 'serial_number'
    fss = StorageService(storage=storage)
    assert storage.key == 'id'
    code1 = Code(hello, id='hello1', storage_service=fss)
    code2 = Code(hello, id='hello2', storage_service=fss)
    code3 = Code(hello, id='hello3', storage_service=fss)
    for i in ['hello1', 'hello2', 'hello3']:
        try:
            fss.remove(id=i)
        except Exception:
            continue
    code1.save()
    code2.save()
    check = fss.check([code1.id, code2.id, code3.id])
    assert isinstance(check, list)
    assert check[0] and check[1] and not check[2]
    fss.remove(id=code1.id)
    code3.save()
    check = fss.check([code1.id, code2.id, code3.id])
    assert isinstance(check, list)
    assert not check[0] and check[1] and check[2]
    assert len(check) == 3
示例#10
0
                     '--callback',
                     action='append',
                     help='callback functions for the snapshot')
 parser.add_argument(
     '-p',
     '--path',
     help='path to the directory including callback functions')
 parser.add_argument('-l', '--logger', help='a logger name to write logs')
 args = parser.parse_args()
 if args.logger:
     logger = Default.get_logger(args.logger)
     sys.stdout.write = partial(Worker.log, logger.info)
 else:
     logger = None
 try:
     callback_storage = FileStorage(item_type=Callback,
                                    path=args.path if args.path else '.')
     callback_service = CallbackService(storage=callback_storage)
     code_snapshot = CodeSnapshot.from_file(args.snapshot)
     code_args = code_snapshot.args
     code_kwargs = code_snapshot.kwargs
     code = Code.from_snapshot(code_snapshot)
     if args.callback:
         callbacks = list()
         for name in args.callback:
             cb = callback_service.pull(name)
             callbacks.append(cb)
         code.register_callback(callbacks)
     code(*code_args, **code_kwargs)
 except Exception as e:
     if logger:
         logger.error(e)
示例#11
0
def test_file_storage(testdir_file_storage, dummy_deliveries):
    storage = FileStorage(item_type=Delivery,
                          key='id',
                          path=testdir_file_storage)
    assert storage.key == 'id'
    storage.save(item=dummy_deliveries)
    assert sorted(os.listdir(testdir_file_storage)) == sorted(
        ['%s.json' % d.id for d in dummy_deliveries])
    with pytest.raises(ValueError):
        storage.save(item=dummy_deliveries[0])
    assert dummy_deliveries[0].item == 'x'
    dummy_deliveries[0].send(item='z')
    storage.save(item=dummy_deliveries[0], update=True)
    storage.remove(key=[dummy_deliveries[1].id, dummy_deliveries[2].id])
    assert storage.exist(key=[d.id for d in dummy_deliveries]) == [
        True, False, False
    ]
    assert storage.exist(key=[d.id for d in dummy_deliveries],
                         summary='and') is False
    assert storage.exist(key=[d.id
                              for d in dummy_deliveries], summary='or') is True
    storage.save(item=[dummy_deliveries[1], dummy_deliveries[2]])
    assert storage.exist(key=[d.id for d in dummy_deliveries]) == [
        True, True, True
    ]
    assert storage.exist(key=[d.id for d in dummy_deliveries],
                         summary='and') is True
    assert storage.exist(key=[d.id
                              for d in dummy_deliveries], summary='or') is True
    search_result = storage.search(key='item', value=json.dumps('?'))
    assert type(search_result) == list and len(search_result) == 0
    ref = sorted([dummy_deliveries[1].id, dummy_deliveries[2].id])
    search_result = storage.search(key='item', value=json.dumps('z'))
    assert len(
        search_result) == 1 and search_result[0].id == dummy_deliveries[0].id
    search_result = storage.search(key='item', value=json.dumps('y'))
    assert len(search_result) == 2
    assert sorted([s.id for s in search_result]) == ref
    search_result = storage.search(key='item',
                                   value=json.dumps('y'),
                                   to_dict=True)
    assert len(search_result) == 2
    assert sorted([s['id'] for s in search_result]) == ref
    assert type(search_result[0]) == dict and type(search_result[1]) == dict
    assert set(search_result[0].keys()) == {
        'item', 'id', '_id', 'timestamp', 'serial_number'
    }
    assert set(search_result[1].keys()) == {
        'item', 'id', '_id', 'timestamp', 'serial_number'
    }
    search_result = storage.search(key='item',
                                   value=json.dumps('y'),
                                   projection=['item'])
    assert len(search_result) == 2
    assert type(search_result[0]) == dict and type(search_result[1]) == dict
    assert set(search_result[0].keys()) == {'item', 'id'}
    assert set(search_result[1].keys()) == {'item', 'id'}
    load_result = storage.load(key='???')
    assert load_result is None
    load_result = storage.load(key=['!??', '?!?', '??!'])
    assert type(load_result) == list and len(load_result) == 0
    load_result = storage.load(key=[d.id for d in dummy_deliveries])
    assert type(load_result) == list and len(load_result) == len(
        dummy_deliveries)
    for i in range(len(load_result)):
        assert load_result[i].id == dummy_deliveries[i].id
        assert load_result[i].item == dummy_deliveries[i].item
        assert load_result[i].serial_number == dummy_deliveries[
            i].serial_number
    load_result = storage.load(key=dummy_deliveries[1].id)
    assert isinstance(load_result, Delivery)
    load_result = storage.load(
        key=[dummy_deliveries[1].id, dummy_deliveries[2].id, '???'],
        to_dict=True)
    assert type(load_result) == list and len(load_result) == 2
    assert type(load_result[0]) == dict and type(load_result[1]) == dict
    assert set(load_result[0].keys()) == {
        'item', 'id', '_id', 'timestamp', 'serial_number'
    }
    assert set(load_result[1].keys()) == {
        'item', 'id', '_id', 'timestamp', 'serial_number'
    }
    load_result = storage.load(
        key=[dummy_deliveries[1].id, dummy_deliveries[2].id],
        projection=['timestamp', '_id'])
    assert type(load_result) == list
    assert type(load_result[0]) == dict and type(load_result[1]) == dict
    assert set(load_result[0].keys()) == {'id', '_id', 'timestamp'}
    assert set(load_result[1].keys()) == {'id', '_id', 'timestamp'}
    storage.new_path = True
    storage.close()
    assert not os.path.exists(testdir_file_storage)