def __init__(self, **kwargs):
     if not 'diagnostic_opt_out' in kwargs:
         kwargs['diagnostic_opt_out'] = True
     if not 'sdk_key' in kwargs:
         kwargs['sdk_key'] = 'SDK_KEY'
     config = Config(**kwargs)
     diagnostic_accumulator = _DiagnosticAccumulator(create_diagnostic_id(config))
     DefaultEventProcessor.__init__(self, config, mock_http, diagnostic_accumulator = diagnostic_accumulator)
def test_diagnostic_accumulator():
    test_config = Config(sdk_key="SDK_KEY")
    diag_id = create_diagnostic_id(test_config)
    diag_accum = _DiagnosticAccumulator(diag_id)

    # Test default periodic event
    def_diag_event = diag_accum.create_event_and_reset(0, 0)
    assert len(def_diag_event) == 8
    assert def_diag_event['kind'] == 'diagnostic'
    assert def_diag_event['id'] == diag_id
    assert def_diag_event['creationDate'] == diag_accum.data_since_date
    assert def_diag_event['dataSinceDate']
    assert def_diag_event['droppedEvents'] == 0
    assert def_diag_event['deduplicatedUsers'] == 0
    assert def_diag_event['eventsInLastBatch'] == 0
    assert def_diag_event['streamInits'] == []

    # Verify converts to json without failure
    json.dumps(def_diag_event)

    # Test periodic event after recording values
    diag_accum.record_stream_init(100, 100, False)
    diag_accum.record_stream_init(300, 200, True)
    diag_accum.record_events_in_batch(10)
    diag_accum.record_events_in_batch(50)
    diag_event = diag_accum.create_event_and_reset(10, 15)
    assert len(diag_event) == 8
    assert diag_event['kind'] == 'diagnostic'
    assert diag_event['id'] == diag_id
    assert diag_event['creationDate'] == diag_accum.data_since_date
    assert diag_event['dataSinceDate'] == def_diag_event['creationDate']
    assert diag_event['droppedEvents'] == 10
    assert diag_event['deduplicatedUsers'] == 15
    assert diag_event['eventsInLastBatch'] == 50
    assert diag_event['streamInits'] == [{
        'timestamp': 100,
        'durationMillis': 100,
        'failed': False
    }, {
        'timestamp': 300,
        'durationMillis': 200,
        'failed': True
    }]
    json.dumps(diag_event)

    reset_diag_event = diag_accum.create_event_and_reset(0, 0)
    assert reset_diag_event['creationDate'] == diag_accum.data_since_date
    assert reset_diag_event['dataSinceDate'] == diag_event['creationDate']
    del reset_diag_event['creationDate']
    del def_diag_event['creationDate']
    del reset_diag_event['dataSinceDate']
    del def_diag_event['dataSinceDate']
    assert reset_diag_event == def_diag_event
Example #3
0
 def _set_event_processor(self, config):
     if config.offline or not config.send_events:
         self._event_processor = NullEventProcessor()
         return None
     if not config.event_processor_class:
         diagnostic_id = create_diagnostic_id(config)
         diagnostic_accumulator = None if config.diagnostic_opt_out else _DiagnosticAccumulator(
             diagnostic_id)
         self._event_processor = DefaultEventProcessor(
             config, diagnostic_accumulator=diagnostic_accumulator)
         return diagnostic_accumulator
     self._event_processor = config.event_processor_class(config)
     return None
def test_records_diagnostic_on_stream_init_success():
    store = InMemoryFeatureStore()
    ready = Event()
    with start_server() as server:
        with stream_content(make_put_event()) as stream:
            config = Config(sdk_key='sdk-key', stream_uri=server.uri)
            server.for_path('/all', stream)
            diag_accum = _DiagnosticAccumulator(1)

            with StreamingUpdateProcessor(config, store, ready,
                                          diag_accum) as sp:
                sp.start()
                ready.wait(start_wait)
                recorded_inits = diag_accum.create_event_and_reset(
                    0, 0)['streamInits']

                assert len(recorded_inits) == 1
                assert recorded_inits[0]['failed'] is False
Example #5
0
def test_records_diagnostic_on_stream_init_failure():
    store = InMemoryFeatureStore()
    ready = Event()
    with start_server() as server:
        config = Config(sdk_key='sdk-key', stream_uri=server.uri)
        server.setup_response('/all', 200, 'event:put\ndata: {\n\n',
                              response_headers)
        diag_accum = _DiagnosticAccumulator(1)

        with StreamingUpdateProcessor(config, None, store, ready,
                                      diag_accum) as sp:
            sp.start()
            server.await_request()
            server.await_request()
            recorded_inits = diag_accum.create_event_and_reset(
                0, 0)['streamInits']

            assert recorded_inits[0]['failed'] is True
def test_records_diagnostic_on_stream_init_failure():
    store = InMemoryFeatureStore()
    ready = Event()
    with start_server() as server:
        with stream_content(make_put_event()) as stream:
            error_then_success = SequentialHandler(BasicResponse(503), stream)
            config = Config(sdk_key='sdk-key',
                            stream_uri=server.uri,
                            initial_reconnect_delay=brief_delay)
            server.for_path('/all', error_then_success)
            diag_accum = _DiagnosticAccumulator(1)

            with StreamingUpdateProcessor(config, store, ready,
                                          diag_accum) as sp:
                sp.start()
                ready.wait(start_wait)
                recorded_inits = diag_accum.create_event_and_reset(
                    0, 0)['streamInits']

                assert len(recorded_inits) == 2
                assert recorded_inits[0]['failed'] is True
                assert recorded_inits[1]['failed'] is False