コード例 #1
0
    def test_format_bad_json_data(self):
        class A:
            pass

        data = {'a': 1, 'b': A()}
        event = SseEvent('ev', data)
        self.assertEqual(event.format(11),
                         'id: 11\nevent: ev\ndata: {}\n\n'.format(str(data)))
コード例 #2
0
    def test_send_publish_multiple(self):

        subs = ('a', 'bbb')

        @self.stream.push('event1')
        def pusher(a, ev):
            return {'a': a}, subs, ev

        result = {sub: [] for sub in subs}

        def listen(sub):
            for event in self.stream.send(subchannel=sub):
                result[sub].append(event)

        base_args = [('event1', 1), ('event2', 2)]

        def publish():
            for event, data in base_args:
                pusher(data, event)
            for sub in subs:
                self.stream.unsubscribe(sub)

        sses = {sub: [SseEvent(event, {'a': arg}) for event, arg in base_args] for sub in subs}
        formatted_sses = {sub: [sse.format(i + 1) for i, sse in enumerate(sse_vals)] for sub, sse_vals in sses.items()}

        listen_threads = [gevent.spawn(listen, sub) for sub in subs]
        publish_thread = gevent.spawn(publish)
        gevent.joinall(listen_threads, timeout=2)
        publish_thread.join(timeout=2)
        for sub in subs:
            self.assertListEqual(result[sub], formatted_sses[sub])
コード例 #3
0
    def test_send_with_retry(self):

        @self.stream.push('event1')
        def pusher(a, ev, sub):
            return {'a': a}, sub, ev

        subs = ('a', 'b')

        result = {'a': [], 'b': []}

        def listen(sub):
            for event in self.stream.send(subchannel=sub, retry=50):
                result[sub].append(event)

        base_args = [('event1', 1), ('event2', 2)]
        args = {sub: [(event, data + i) for (event, data) in base_args] for i, sub in enumerate(subs)}

        def publish(sub):
            for event, data in args[sub]:
                pusher(data, event, sub)
            self.stream.unsubscribe(sub)

        sses = {sub: [SseEvent(event, {'a': arg}) for event, arg in args[sub]] for sub in subs}
        formatted_sses = {sub: [sse.format(i + 1, retry=50) for i, sse in enumerate(sse_vals)] for sub, sse_vals in
                          sses.items()}

        listen_threads = [gevent.spawn(listen, sub) for sub in subs]
        publish_threads = [gevent.spawn(publish, sub) for sub in subs]
        gevent.joinall(listen_threads, timeout=2)
        gevent.joinall(publish_threads, timeout=2)
        for sub in subs:
            self.assertListEqual(result[sub], formatted_sses[sub])
コード例 #4
0
    def test_send(self):
        @self.stream.push('event1')
        def pusher(a, ev):
            return {'a': a}, ev

        result = []

        def listen():
            for event in self.stream.send():
                result.append(event)

        args = [('event1', 1), ('event2', 2)]
        sses = [SseEvent(event, {'a': arg}) for event, arg in args]
        formatted_sses = [sse.format(i + 1) for i, sse in enumerate(sses)]

        def publish():
            for event, data in args:
                pusher(data, event)
            self.stream.unsubscribe()

        thread = gevent.spawn(listen)
        thread2 = gevent.spawn(publish)
        thread.start()
        thread2.start()
        thread.join(timeout=2)
        thread2.join(timeout=2)
        self.assertListEqual(result, formatted_sses)
コード例 #5
0
ファイル: test_sse_stream.py プロジェクト: iadgov/WALKOFF
    def test_format_bad_json_data(self):
        class A: pass

        data = {'a': 1, 'b': A()}
        event = SseEvent('ev', data)
        self.assertEqual(event.format(11), 'id: 11\nevent: ev\ndata: {}\n\n'.format(str(data)))
コード例 #6
0
ファイル: test_sse_stream.py プロジェクト: iadgov/WALKOFF
 def test_format_json_data(self):
     data = {'a': 1, 'b': 2}
     event = SseEvent('ev', data)
     self.assertEqual(event.format(11), 'id: 11\nevent: ev\ndata: {}\n\n'.format(json.dumps(data)))
コード例 #7
0
ファイル: test_sse_stream.py プロジェクト: iadgov/WALKOFF
 def test_format_with_retry(self):
     event = SseEvent('ev', 'abc')
     self.assertEqual(event.format(42, retry=50), 'id: 42\nevent: ev\nretry: 50\ndata: abc\n\n')
コード例 #8
0
ファイル: test_sse_stream.py プロジェクト: iadgov/WALKOFF
 def test_format_no_data(self):
     event = SseEvent('ev2', {})
     self.assertEqual(event.format(3), 'id: 3\nevent: ev2\n\n')
コード例 #9
0
ファイル: test_sse_stream.py プロジェクト: iadgov/WALKOFF
 def test_format_no_event(self):
     event = SseEvent('', 123)
     self.assertEqual(event.format(2), 'id: 2\ndata: 123\n\n')
コード例 #10
0
ファイル: test_sse_stream.py プロジェクト: iadgov/WALKOFF
 def test_format(self):
     event = SseEvent('ev', 'abc')
     self.assertEqual(event.format(42), 'id: 42\nevent: ev\ndata: abc\n\n')
コード例 #11
0
 def test_format_json_data(self):
     data = {'a': 1, 'b': 2}
     event = SseEvent('ev', data)
     self.assertEqual(
         event.format(11),
         'id: 11\nevent: ev\ndata: {}\n\n'.format(json.dumps(data)))
コード例 #12
0
 def test_format_with_retry(self):
     event = SseEvent('ev', 'abc')
     self.assertEqual(event.format(42, retry=50),
                      'id: 42\nevent: ev\nretry: 50\ndata: abc\n\n')
コード例 #13
0
 def test_format_no_data(self):
     event = SseEvent('ev2', {})
     self.assertEqual(event.format(3), 'id: 3\nevent: ev2\n\n')
コード例 #14
0
 def test_format_no_event(self):
     event = SseEvent('', 123)
     self.assertEqual(event.format(2), 'id: 2\ndata: 123\n\n')
コード例 #15
0
 def test_format(self):
     event = SseEvent('ev', 'abc')
     self.assertEqual(event.format(42), 'id: 42\nevent: ev\ndata: abc\n\n')
コード例 #16
0
 def test_init(self):
     event = SseEvent('ev', '12345')
     self.assertEqual(event.event, 'ev')
     self.assertEqual(event.data, '12345')