def test_post_stream(mock_post): # Create a mocked response object. mock_r = mock.create_autospec(requests.Response) mock_r.json = mock.MagicMock(return_value=dict(stream_id='test_stream')) mock_post.return_value = mock_r # Do the actual call. stream_cfg = StreamConfig(['a', 'b', 'c'], 64, 'test_hw') stream_id = idport.post_stream('http://example.com', 'test-user', stream_cfg) # Verify URL and data posted to URL. (url,), kwargs = mock_post.call_args assert url == 'http://example.com/u/test-user/s' assert StreamConfig.fromstring(kwargs['data']) == stream_cfg # Check that errors are raised. mock_r.raise_for_status.assert_called_with() assert stream_id == 'test_stream'
ftc = ftbuffer.Client() log.info('Connecting to FieldTrip buffer at %s:%s...', args.ft_hostname, args.ft_port) ftc.connect(args.ft_hostname, args.ft_port) log.info('Reading EEG config.') H = ftc.getHeader() assert H assert H.dataType == 10 # Magic number from Emotiv EPOC stream... I don't know how well other # data types work. # Create a stream on the IDPort server stream_config = idport.StreamConfig(H.labels, H.fSample, args.hardware_id) stream_id = idport.post_stream(args.idport_url, args.user_id, stream_config) log.info('Created stream %s.', stream_id) # Start streaming from the /current/ point in time. i = H.nSamples - 1 log.info('Starting streaming from sample %d...', i) while True: nsamples, nevents = ftc.poll() log.debug('Server holds %d samples and %d events.', nsamples, nevents) assert nevents == 0, 'Handling of events is not implemented!' lag = nsamples - i if lag > (stream_config.sample_rate * .1): log.warning('Lagging %d samples', lag) assert lag < stream_config.sample_rate * .2