]>
Commit | Line | Data |
---|---|---|
f67539c2 TL |
1 | // Licensed to the Apache Software Foundation (ASF) under one |
2 | // or more contributor license agreements. See the NOTICE file | |
3 | // distributed with this work for additional information | |
4 | // regarding copyright ownership. The ASF licenses this file | |
5 | // to you under the Apache License, Version 2.0 (the | |
6 | // "License"); you may not use this file except in compliance | |
7 | // with the License. You may obtain a copy of the License at | |
8 | // | |
9 | // http://www.apache.org/licenses/LICENSE-2.0 | |
10 | // | |
11 | // Unless required by applicable law or agreed to in writing, | |
12 | // software distributed under the License is distributed on an | |
13 | // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
14 | // KIND, either express or implied. See the License for the | |
15 | // specific language governing permissions and limitations | |
16 | // under the License. | |
17 | ||
18 | library thrift.test.transport.t_socket_transport_test; | |
19 | ||
20 | import 'dart:async'; | |
21 | import 'dart:convert' show Encoding; | |
22 | import 'dart:convert' show Utf8Codec; | |
23 | import 'dart:typed_data' show Uint8List; | |
24 | ||
25 | import 'package:dart2_constant/convert.dart' show base64; | |
26 | import 'package:http/http.dart' show BaseRequest; | |
27 | import 'package:http/http.dart' show Client; | |
28 | import 'package:http/http.dart' show Response; | |
29 | import 'package:http/http.dart' show StreamedResponse; | |
30 | import 'package:test/test.dart'; | |
31 | import 'package:thrift/thrift.dart'; | |
32 | ||
33 | void main() { | |
34 | const utf8Codec = const Utf8Codec(); | |
35 | ||
36 | group('THttpClientTransport', () { | |
37 | FakeHttpClient client; | |
38 | THttpClientTransport transport; | |
39 | ||
40 | setUp(() { | |
41 | client = new FakeHttpClient(sync: false); | |
42 | var config = new THttpConfig(Uri.parse('http://localhost'), {}); | |
43 | transport = new THttpClientTransport(client, config); | |
44 | }); | |
45 | ||
46 | test('Test transport sends body', () async { | |
47 | var expectedText = 'my request'; | |
48 | transport.writeAll(utf8Codec.encode(expectedText)); | |
49 | ||
50 | expect(client.postRequest, isEmpty); | |
51 | ||
52 | await transport.flush(); | |
53 | ||
54 | expect(client.postRequest, isNotEmpty); | |
55 | ||
56 | var requestText = utf8Codec.decode(base64.decode(client.postRequest)); | |
57 | expect(requestText, expectedText); | |
58 | }); | |
59 | ||
60 | test('Test transport receives response', () async { | |
61 | var expectedText = 'my response'; | |
62 | var expectedBytes = utf8Codec.encode(expectedText); | |
63 | client.postResponse = base64.encode(expectedBytes); | |
64 | ||
65 | transport.writeAll(utf8Codec.encode('my request')); | |
66 | expect(transport.hasReadData, isFalse); | |
67 | ||
68 | await transport.flush(); | |
69 | ||
70 | expect(transport.hasReadData, isTrue); | |
71 | ||
72 | var buffer = new Uint8List(expectedBytes.length); | |
73 | transport.readAll(buffer, 0, expectedBytes.length); | |
74 | ||
75 | var bufferText = utf8Codec.decode(buffer); | |
76 | expect(bufferText, expectedText); | |
77 | }); | |
78 | }); | |
79 | ||
80 | group('THttpClientTransport with multiple messages', () { | |
81 | FakeHttpClient client; | |
82 | THttpClientTransport transport; | |
83 | ||
84 | setUp(() { | |
85 | client = new FakeHttpClient(sync: true); | |
86 | var config = new THttpConfig(Uri.parse('http://localhost'), {}); | |
87 | transport = new THttpClientTransport(client, config); | |
88 | }); | |
89 | ||
90 | test('Test read correct buffer after flush', () async { | |
91 | String bufferText; | |
92 | var expectedText = 'response 1'; | |
93 | var expectedBytes = utf8Codec.encode(expectedText); | |
94 | ||
95 | // prepare a response | |
96 | transport.writeAll(utf8Codec.encode('request 1')); | |
97 | client.postResponse = base64.encode(expectedBytes); | |
98 | ||
99 | Future responseReady = transport.flush().then((_) { | |
100 | var buffer = new Uint8List(expectedBytes.length); | |
101 | transport.readAll(buffer, 0, expectedBytes.length); | |
102 | bufferText = utf8Codec.decode(buffer); | |
103 | }); | |
104 | ||
105 | // prepare a second response | |
106 | transport.writeAll(utf8Codec.encode('request 2')); | |
107 | var response2Bytes = utf8Codec.encode('response 2'); | |
108 | client.postResponse = base64.encode(response2Bytes); | |
109 | await transport.flush(); | |
110 | ||
111 | await responseReady; | |
112 | expect(bufferText, expectedText); | |
113 | }); | |
114 | }); | |
115 | } | |
116 | ||
117 | class FakeHttpClient implements Client { | |
118 | String postResponse = ''; | |
119 | String postRequest = ''; | |
120 | ||
121 | final bool sync; | |
122 | ||
123 | FakeHttpClient({this.sync: false}); | |
124 | ||
125 | Future<Response> post(url, | |
126 | {Map<String, String> headers, body, Encoding encoding}) { | |
127 | postRequest = body; | |
128 | var response = new Response(postResponse, 200); | |
129 | ||
130 | if (sync) { | |
131 | return new Future.sync(() => response); | |
132 | } else { | |
133 | return new Future.value(response); | |
134 | } | |
135 | } | |
136 | ||
137 | Future<Response> head(url, {Map<String, String> headers}) => | |
138 | throw new UnimplementedError(); | |
139 | ||
140 | Future<Response> get(url, {Map<String, String> headers}) => | |
141 | throw new UnimplementedError(); | |
142 | ||
143 | Future<Response> put(url, | |
144 | {Map<String, String> headers, body, Encoding encoding}) => | |
145 | throw new UnimplementedError(); | |
146 | ||
147 | Future<Response> patch(url, | |
148 | {Map<String, String> headers, body, Encoding encoding}) => | |
149 | throw new UnimplementedError(); | |
150 | ||
151 | Future<Response> delete(url, {Map<String, String> headers}) => | |
152 | throw new UnimplementedError(); | |
153 | ||
154 | Future<String> read(url, {Map<String, String> headers}) => | |
155 | throw new UnimplementedError(); | |
156 | ||
157 | Future<Uint8List> readBytes(url, {Map<String, String> headers}) => | |
158 | throw new UnimplementedError(); | |
159 | ||
160 | Future<StreamedResponse> send(BaseRequest request) => | |
161 | throw new UnimplementedError(); | |
162 | ||
163 | void close() => throw new UnimplementedError(); | |
164 | } |