2017-04-22 18:46:00 +00:00
|
|
|
import 'dart:convert';
|
|
|
|
import 'dart:io';
|
2024-10-13 01:45:27 +00:00
|
|
|
import 'package:protevus_framework/protevus_framework.dart';
|
|
|
|
import 'package:protevus_framework/http.dart';
|
|
|
|
import 'package:protevus_proxy/protevus_proxy.dart';
|
|
|
|
import 'package:protevus_test/protevus_test.dart';
|
2018-11-08 22:13:26 +00:00
|
|
|
import 'package:logging/logging.dart';
|
2024-10-13 01:45:27 +00:00
|
|
|
import 'package:protevus_mock_request/protevus_mock_request.dart';
|
2017-04-22 18:46:00 +00:00
|
|
|
import 'package:test/test.dart';
|
|
|
|
|
2021-06-10 08:47:05 +00:00
|
|
|
void main() {
|
2024-10-12 10:35:14 +00:00
|
|
|
Protevus? app, testApp;
|
2021-06-10 08:47:05 +00:00
|
|
|
late TestClient client;
|
|
|
|
late Proxy layer;
|
2017-04-22 18:46:00 +00:00
|
|
|
|
|
|
|
setUp(() async {
|
2024-10-12 10:35:14 +00:00
|
|
|
testApp = Protevus();
|
2021-06-10 08:47:05 +00:00
|
|
|
testApp!.get('/foo', (req, res) async {
|
2018-11-08 22:13:26 +00:00
|
|
|
res.useBuffer();
|
2017-09-24 18:49:18 +00:00
|
|
|
res.write('pub serve');
|
|
|
|
});
|
2021-06-10 08:47:05 +00:00
|
|
|
testApp!.get('/empty', (req, res) => res.close());
|
2017-09-24 18:49:18 +00:00
|
|
|
|
2021-06-10 08:47:05 +00:00
|
|
|
testApp!.responseFinalizers.add((req, res) async {
|
2022-08-27 09:23:41 +00:00
|
|
|
print('OUTGOING: ${String.fromCharCodes(res.buffer!.toBytes())}');
|
2017-09-24 18:49:18 +00:00
|
|
|
});
|
|
|
|
|
2021-06-10 08:47:05 +00:00
|
|
|
testApp!.encoders.addAll({'gzip': gzip.encoder});
|
2017-09-24 18:49:18 +00:00
|
|
|
|
2024-10-12 10:35:14 +00:00
|
|
|
var server = await ProtevusHttp(testApp!).startServer();
|
2017-04-22 18:46:00 +00:00
|
|
|
|
2024-10-12 10:35:14 +00:00
|
|
|
app = Protevus();
|
2021-06-10 08:47:05 +00:00
|
|
|
app!.fallback((req, res) {
|
2018-11-08 22:13:26 +00:00
|
|
|
res.useBuffer();
|
|
|
|
return true;
|
|
|
|
});
|
2021-06-10 08:47:05 +00:00
|
|
|
app!.get('/bar', (req, res) => res.write('normal'));
|
2017-09-24 18:49:18 +00:00
|
|
|
|
2019-05-02 23:19:30 +00:00
|
|
|
layer = Proxy(
|
|
|
|
Uri(scheme: 'http', host: server.address.address, port: server.port),
|
2017-09-24 18:49:18 +00:00
|
|
|
publicPath: '/proxy',
|
|
|
|
);
|
2017-04-22 18:46:00 +00:00
|
|
|
|
2021-06-10 08:47:05 +00:00
|
|
|
app!.fallback(layer.handleRequest);
|
2018-11-08 22:13:26 +00:00
|
|
|
|
2021-06-10 08:47:05 +00:00
|
|
|
app!.responseFinalizers.add((req, res) async {
|
2022-08-27 09:23:41 +00:00
|
|
|
print(
|
|
|
|
'Normal. Buf: ${String.fromCharCodes(res.buffer!.toBytes())}, headers: ${res.headers}');
|
2017-04-22 18:46:00 +00:00
|
|
|
});
|
2017-09-24 18:49:18 +00:00
|
|
|
|
2021-06-10 08:47:05 +00:00
|
|
|
app!.encoders.addAll({'gzip': gzip.encoder});
|
2017-04-22 18:46:00 +00:00
|
|
|
|
2021-06-10 08:47:05 +00:00
|
|
|
client = await connectTo(app!);
|
2018-11-08 22:13:26 +00:00
|
|
|
|
2021-06-10 08:47:05 +00:00
|
|
|
app!.logger = testApp!.logger = Logger('proxy')
|
2018-11-08 22:13:26 +00:00
|
|
|
..onRecord.listen((rec) {
|
|
|
|
print(rec);
|
|
|
|
if (rec.error != null) print(rec.error);
|
|
|
|
if (rec.stackTrace != null) print(rec.stackTrace);
|
|
|
|
});
|
2017-04-22 18:46:00 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
tearDown(() async {
|
|
|
|
await client.close();
|
2021-06-10 08:47:05 +00:00
|
|
|
await app!.close();
|
|
|
|
await testApp!.close();
|
2017-04-22 18:46:00 +00:00
|
|
|
app = null;
|
|
|
|
testApp = null;
|
|
|
|
});
|
|
|
|
|
|
|
|
test('proxied', () async {
|
2019-05-02 23:19:30 +00:00
|
|
|
var rq = MockHttpRequest('GET', Uri.parse('/proxy/foo'));
|
|
|
|
await rq.close();
|
2021-06-10 08:47:05 +00:00
|
|
|
var rqc = await HttpRequestContext.from(rq, app!, '/proxy/foo');
|
2018-11-02 04:22:32 +00:00
|
|
|
var rsc = HttpResponseContext(rq.response, app);
|
2021-06-10 08:47:05 +00:00
|
|
|
await app!.executeHandler(layer.handleRequest, rqc, rsc);
|
2018-11-08 22:13:26 +00:00
|
|
|
var response = await rq.response
|
|
|
|
//.transform(gzip.decoder)
|
|
|
|
.transform(utf8.decoder)
|
|
|
|
.join();
|
2017-09-24 18:49:18 +00:00
|
|
|
expect(response, 'pub serve');
|
2017-04-22 18:46:00 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
test('empty', () async {
|
2021-06-10 08:47:05 +00:00
|
|
|
var response = await client.get(Uri.parse('/proxy/empty'));
|
2017-04-26 12:20:14 +00:00
|
|
|
expect(response.body, isEmpty);
|
2017-04-22 18:46:00 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
test('normal', () async {
|
2021-06-10 08:47:05 +00:00
|
|
|
var response = await client.get(Uri.parse('/bar'));
|
2017-04-26 12:20:14 +00:00
|
|
|
expect(response, hasBody('normal'));
|
2017-04-22 18:46:00 +00:00
|
|
|
});
|
|
|
|
}
|