Skip to content
This repository was archived by the owner on Oct 25, 2024. It is now read-only.

Commit 2843cb3

Browse files
authored
Fix WebTransport test server and client. (#65)
1 parent b2000c4 commit 2843cb3

File tree

2 files changed

+53
-13
lines changed

2 files changed

+53
-13
lines changed

web_transport/sdk/impl/tests/web_transport_test_client.cc

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,36 @@
1414
#include "net/third_party/quiche/src/quic/platform/api/quic_system_event_loop.h"
1515
#include "owt/quic/web_transport_factory.h"
1616

17+
class WebTransportTestClientVisitor
18+
: public owt::quic::WebTransportClientInterface::Visitor {
19+
void OnConnected() override {
20+
LOG(INFO) << "WebTransport client connected.";
21+
}
22+
// Called when the connection state changed from connecting to failed.
23+
void OnConnectionFailed() override {
24+
LOG(INFO) << "WebTransport client connection failed.";
25+
}
26+
// Called when an incoming stream is received.
27+
void OnIncomingStream(owt::quic::WebTransportStreamInterface*) override {
28+
LOG(INFO) << "WebTransport client received an incoming stream.";
29+
}
30+
// Called when datagram is processed.
31+
void OnDatagramProcessed(owt::quic::MessageStatus) override {
32+
LOG(INFO) << "WebTransport client processed datagram.";
33+
}
34+
35+
void OnClosed(uint32_t code, const char* reason) override {
36+
LOG(INFO) << "WebTransport client closed.";
37+
}
38+
};
39+
1740
DEFINE_QUIC_COMMAND_LINE_FLAG(std::string,
1841
fingerprint,
1942
"",
2043
"Certificate fingerprint.");
2144

2245
int main(int argc, char* argv[]) {
23-
QuicSystemEventLoop event_loop("quic_client");
46+
QuicSystemEventLoop event_loop("web_transport_test_client");
2447
const char* usage = "Usage: owt_web_transport_test_client [options] <url>";
2548

2649
// All non-flag arguments should be interpreted as URLs to fetch.
@@ -38,13 +61,20 @@ int main(int argc, char* argv[]) {
3861
parameters.server_certificate_fingerprints_length = 0;
3962
} else {
4063
parameters.server_certificate_fingerprints_length = 1;
41-
auto* fingerprints = new owt::quic::CertificateFingerprint[1];
42-
fingerprints[0].fingerprint = fingerprint.c_str();
43-
parameters.server_certificate_fingerprints = &fingerprints;
64+
owt::quic::CertificateFingerprint** fingerprints =
65+
new owt::quic::CertificateFingerprint*[1];
66+
fingerprints[0] = new owt::quic::CertificateFingerprint();
67+
fingerprints[0]->fingerprint = fingerprint.c_str();
68+
parameters.server_certificate_fingerprints = fingerprints;
4469
}
4570
std::unique_ptr<owt::quic::WebTransportFactory> factory_(
4671
owt::quic::WebTransportFactory::CreateForTesting());
4772
std::unique_ptr<owt::quic::WebTransportClientInterface> client_(
4873
factory_->CreateWebTransportClient(urls[0].c_str(), parameters));
74+
WebTransportTestClientVisitor client_visitor;
75+
client_->SetVisitor(&client_visitor);
4976
client_->Connect();
77+
78+
base::RunLoop run_loop;
79+
run_loop.Run();
5080
}

web_transport/sdk/impl/tests/web_transport_test_server.cc

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
// Similar to net/tools/quic/quic_simple_server_bin.cc, it starts a WebTransport
88
// echo server for testing.
99

10+
#include "base/test/bind.h"
1011
#include "base/threading/thread.h"
1112
#include "impl/tests/web_transport_echo_visitors.h"
1213
#include "impl/web_transport_owt_server_impl.h"
@@ -24,19 +25,28 @@ int main(int argc, char* argv[]) {
2425
exit(0);
2526
}
2627

27-
base::Thread::Options options;
28-
options.message_pump_type = base::MessagePumpType::IO;
28+
base::Thread::Options io_thread_options;
29+
io_thread_options.message_pump_type = base::MessagePumpType::IO;
2930
base::Thread io_thread("web_transport_test_server_io_thread");
30-
io_thread.StartWithOptions(options);
31+
io_thread.StartWithOptions(std::move(io_thread_options));
32+
base::Thread::Options event_thread_options;
33+
event_thread_options.message_pump_type = base::MessagePumpType::IO;
3134
base::Thread event_thread("web_transport_test_server_event_thread");
32-
event_thread.StartWithOptions(options);
35+
event_thread.StartWithOptions(std::move(event_thread_options));
3336
auto proof_source = ::quic::CreateDefaultProofSource();
3437
auto server_visitor = std::make_unique<owt::quic::test::ServerEchoVisitor>();
35-
owt::quic::WebTransportOwtServerImpl server(20001, std::vector<url::Origin>(),
36-
std::move(proof_source),
37-
&io_thread, &event_thread);
38-
server.SetVisitor(server_visitor.get());
39-
server.Start();
38+
base::WaitableEvent event;
39+
std::unique_ptr<owt::quic::WebTransportOwtServerImpl> server;
40+
io_thread.task_runner()->PostTask(
41+
FROM_HERE, base::BindLambdaForTesting([&]() {
42+
server = std::make_unique<owt::quic::WebTransportOwtServerImpl>(
43+
20001, std::vector<url::Origin>(), std::move(proof_source),
44+
&io_thread, &event_thread);
45+
event.Signal();
46+
}));
47+
event.Wait();
48+
server->SetVisitor(server_visitor.get());
49+
server->Start();
4050

4151
base::RunLoop run_loop;
4252
run_loop.Run();

0 commit comments

Comments
 (0)