platform/test/all_test.dart
2017-08-08 17:04:36 -04:00

87 lines
2.6 KiB
Dart

import 'dart:isolate';
import 'package:angel_framework/angel_framework.dart';
import 'package:angel_sync/angel_sync.dart';
import 'package:angel_test/angel_test.dart';
import 'package:angel_websocket/io.dart' as client;
import 'package:angel_websocket/server.dart';
import 'package:pub_sub/isolate.dart' as pub_sub;
import 'package:pub_sub/pub_sub.dart' as pub_sub;
import 'package:test/test.dart';
main() {
Angel app1, app2;
TestClient app1Client;
client.WebSockets app2Client;
pub_sub.Server server;
ReceivePort app1Port, app2Port;
setUp(() async {
var adapter = new pub_sub.IsolateAdapter();
server = new pub_sub.Server([
adapter,
])
..registerClient(const pub_sub.ClientInfo('angel_sync1'))
..registerClient(const pub_sub.ClientInfo('angel_sync2'))
..start();
app1 = new Angel();
app2 = new Angel();
app1.post('/message', (RequestContext req, AngelWebSocket ws) async {
// Manually broadcast. Even though app1 has no clients, it *should*
// propagate to app2.
ws.batchEvent(new WebSocketEvent(
eventName: 'message',
data: req.body['message'],
));
return 'Sent: ${req.body['message']}';
});
app1Port = new ReceivePort();
await app1.configure(new AngelWebSocket(
synchronizer: new PubSubWebSocketSynchronizer(
new pub_sub.IsolateClient('angel_sync1', adapter.receivePort.sendPort),
),
));
app1Client = await connectTo(app1);
app2Port = new ReceivePort();
await app2.configure(new AngelWebSocket(
synchronizer: new PubSubWebSocketSynchronizer(
new pub_sub.IsolateClient('angel_sync2', adapter.receivePort.sendPort),
),
));
var http = await app2.startServer();
app2Client =
new client.WebSockets('ws://${http.address.address}:${http.port}/ws');
await app2Client.connect();
});
tearDown(() {
server.close();
app1Port.close();
app2Port.close();
app1.close();
app2.close();
app1Client.close();
app2Client.close();
});
test('events propagate', () async {
// The point of this test is that neither app1 nor app2
// is aware that the other even exists.
//
// Regardless, a WebSocket event broadcast in app1 will be
// broadcast by app2 as well.
var stream = app2Client.on['message'];
var response =
await app1Client.post('/message', body: {'message': 'Hello, world!'});
print('app1 response: ${response.body}');
var msg = await stream.first.timeout(const Duration(seconds: 5));
print('app2 got message: ${msg.data}');
});
}