]> git.proxmox.com Git - ceph.git/blame - ceph/src/jaegertracing/thrift/lib/dart/test/transport/t_http_transport_test.dart
buildsys: switch source download to quincy
[ceph.git] / ceph / src / jaegertracing / thrift / lib / dart / test / transport / t_http_transport_test.dart
CommitLineData
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
18library thrift.test.transport.t_socket_transport_test;
19
20import 'dart:async';
21import 'dart:convert' show Encoding;
22import 'dart:convert' show Utf8Codec;
23import 'dart:typed_data' show Uint8List;
24
25import 'package:dart2_constant/convert.dart' show base64;
26import 'package:http/http.dart' show BaseRequest;
27import 'package:http/http.dart' show Client;
28import 'package:http/http.dart' show Response;
29import 'package:http/http.dart' show StreamedResponse;
30import 'package:test/test.dart';
31import 'package:thrift/thrift.dart';
32
33void 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
117class 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}