def test_Event__init__():
    e = Event('rfid_id', {'context': True}, EventType.NONE)

    assert e.id == 'rfid_id'
    assert e.ctx == {'context': True}
    assert e.type == EventType.NONE
    assert e.__repr__(
    ) == "Event('rfid_id', {'context': True}, EventType.NONE)"
    assert e.__str__() == e.__repr__()
Exemple #2
0
def main(**config):
    ctx = SimpleNamespace(**config)
    logging.basicConfig(
        level=getattr(logging, ctx.log_level.upper()),
        format=
        '%(asctime)s %(levelname)s %(pathname)s (line: %(lineno)d): %(message)s'
    )
    ctx.handlers = register_handlers(ctx)
    logging.debug(f'Handlers: {ctx.handlers}')
    reader = rfidreader.RFIDReader(
        ctx.reader_type,
        parse_reader_args(ctx.reader_type, config['reader_args']))
    router = Router(ctx)
    logging.info('Waiting for MagicBand...')
    ctx.led_controller = LedController(brightness=ctx.brightness_level,
                                       outer_pixels=ctx.outer_pixel_count,
                                       inner_pixels=ctx.inner_pixel_count)
    while True:
        rfid_id = reader.read()
        # There are times when the reader does not return a value. I believe this has to do with not being able to fully
        # power up the tag, probably due to an older tag, make sure we don't attempt to handle this event
        if rfid_id:
            logging.debug(f'Read "{rfid_id}" from the reader')
            # Need to create the event once, handlers may update attributes
            event = Event(rfid_id, ctx)
            router.route(event)
Exemple #3
0
def test_AbstractHandler_handle_none_event():
    # Call the real one, it's an empty method so it should never throw and exception
    # and this ensures coverage
    AbstractHandler().handle_none_event(None)
    h = FakeHandler()
    e = Event(None, {}, type=EventType.NONE)
    h.handle_event(e)
    assert h.handle_none_event_called == (e,)
Exemple #4
0

@patch('magicbandreader.handlers.event_type.RfidSecuritySvcAuthorizer')
def test_Handler___init__(RfidSecuritySvcAuthorizer, context):
    authorizer = RfidSecuritySvcAuthorizer.return_value
    assert not hasattr(context, 'authorizer')
    h = Handler(context, authorizer)
    assert h.priority == 10
    assert hasattr(context, 'authorizer')
    assert context.authorizer == authorizer


@pytest.mark.parametrize(
    ('event', 'authorized', 'event_type'),
    [
        (Event('test_id', None), True, EventType.AUTHORIZED),
        (Event('test_id', None), False, EventType.UNAUTHORIZED),
        (Event(None, None), None, EventType.NONE),
    ]
    )
@patch('magicbandreader.handlers.event_type.RfidSecuritySvcAuthorizer')
def test_Handler_handle_event(RfidSecuritySvcAuthorizer, event, authorized, event_type, context):
    assert event.type is None
    authorizer = RfidSecuritySvcAuthorizer.return_value
    h = Handler(context, authorizer)
    authorizer.authorized.return_value = authorized
    h.handle_event(event)
    if event.id:
        authorizer.authorized.assert_called_once_with(event.id)
    assert event.type == event_type
Exemple #5
0
def auth_event(context):
    return Event('test_id', context, EventType.AUTHORIZED)
Exemple #6
0
def none_event(context):
    return Event(None, context, EventType.NONE)
Exemple #7
0
def test_AbstractHandler_handle_event_notype(logging):
    h = FakeHandler(priority=1)
    e = Event(None, {}, type=None)
    h.handle_event(e)
    logging.warn.assert_called_once_with(('handle_event called on FakeHandler (priority: 1) but the event has no type. ',
                                         'Please check the priority order of the handlers.'))