Chromium Code Reviews

Side by Side Diff: components/cronet/ios/test/cronet_bidirectional_stream_test.mm

Issue 2146643002: [Cronet] Integrate CrNet functionality into Cronet on iOS. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove prototype CronetEngine from this CL. Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff |
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import <Foundation/Foundation.h>
6 #include <stdint.h> 5 #include <stdint.h>
7 #include <list> 6 #include <list>
8 #include <map> 7 #include <map>
9 #include <string> 8 #include <string>
10 9
11 #include "base/logging.h" 10 #include "base/logging.h"
12 #include "base/mac/scoped_nsobject.h" 11 #include "base/mac/scoped_nsobject.h"
13 #include "base/macros.h" 12 #include "base/macros.h"
14 #include "base/memory/ptr_util.h" 13 #include "base/memory/ptr_util.h"
15 #include "base/strings/string_util.h" 14 #include "base/strings/string_util.h"
16 #include "base/strings/sys_string_conversions.h" 15 #include "base/strings/sys_string_conversions.h"
17 #include "base/synchronization/waitable_event.h" 16 #include "base/synchronization/waitable_event.h"
17 #import "components/cronet/ios/Cronet.h"
18 #include "components/cronet/ios/cronet_c_for_grpc.h" 18 #include "components/cronet/ios/cronet_c_for_grpc.h"
19 #include "components/cronet/ios/cronet_environment.h"
20 #include "components/cronet/ios/test/quic_test_server.h" 19 #include "components/cronet/ios/test/quic_test_server.h"
21 #include "net/base/mac/url_conversions.h" 20 #include "net/base/mac/url_conversions.h"
22 #include "net/base/net_errors.h" 21 #include "net/base/net_errors.h"
23 #include "net/cert/mock_cert_verifier.h" 22 #include "net/cert/mock_cert_verifier.h"
24 #include "net/test/test_data_directory.h" 23 #include "net/test/test_data_directory.h"
25 #include "testing/gtest/include/gtest/gtest.h" 24 #include "testing/gtest/include/gtest/gtest.h"
26 #include "testing/gtest_mac.h" 25 #include "testing/gtest_mac.h"
27 #include "url/gurl.h" 26 #include "url/gurl.h"
28 27
29 namespace { 28 namespace {
30 29
31 cronet_bidirectional_stream_header kTestHeaders[] = { 30 cronet_bidirectional_stream_header kTestHeaders[] = {
32 {"header1", "foo"}, 31 {"header1", "foo"},
33 {"header2", "bar"}, 32 {"header2", "bar"},
34 }; 33 };
35 const cronet_bidirectional_stream_header_array kTestHeadersArray = { 34 const cronet_bidirectional_stream_header_array kTestHeadersArray = {
36 2, 2, kTestHeaders}; 35 2, 2, kTestHeaders};
37 } // namespace 36 } // namespace
38 37
39 namespace cronet { 38 namespace cronet {
40 39
40 void StartCronetIfNecessary() {
41 static bool initialized = false;
42 if (!initialized) {
43 initialized = true;
44 [Cronet setPartialUserAgent:@"CronetTest/1.0.0.0"];
45 [Cronet setHttp2Enabled:true];
46 [Cronet setQuicEnabled:true];
47 [Cronet setSslKeyLogFileName:@"SSLKEYLOGFILE"];
48
49 net::MockCertVerifier* mock_cert_verifier = new net::MockCertVerifier();
50 mock_cert_verifier->set_default_result(net::OK);
51 [Cronet setMockCertVerifierForTesting:mock_cert_verifier];
52 [Cronet
53 setHostResolverRulesForTesting:@"MAP test.example.com 127.0.0.1,"
54 "MAP notfound.example.com ~NOTFOUND"];
55 [Cronet addQuicHint:@"test.example.com"
56 port:cronet::kTestServerPort
57 altPort:cronet::kTestServerPort];
58 [Cronet start];
59 }
60 }
61
41 class CronetBidirectionalStreamTest : public ::testing::TestWithParam<bool> { 62 class CronetBidirectionalStreamTest : public ::testing::TestWithParam<bool> {
42 protected: 63 protected:
43 CronetBidirectionalStreamTest() {} 64 CronetBidirectionalStreamTest() {}
44 ~CronetBidirectionalStreamTest() override {} 65 ~CronetBidirectionalStreamTest() override {}
45 66
46 void SetUp() override { 67 void SetUp() override {
47 static bool initialized = false; 68 StartCronetIfNecessary();
48 if (!initialized) {
49 initialized = true;
50 // Hack to work around issues with SetUp being called multiple times
51 // during the test, and QuicTestServer not shutting down / restarting
52 // gracefully.
53 CronetEnvironment::Initialize();
54 cronet_environment_ = new CronetEnvironment("CronetTest/1.0.0.0");
55 cronet_environment_->set_http2_enabled(true);
56 cronet_environment_->set_quic_enabled(true);
57 cronet_environment_->set_ssl_key_log_file_name("SSLKEYLOGFILE");
58
59 std::unique_ptr<net::MockCertVerifier> mock_cert_verifier(
60 new net::MockCertVerifier());
61 mock_cert_verifier->set_default_result(net::OK);
62
63 cronet_environment_->set_cert_verifier(std::move(mock_cert_verifier));
64 cronet_environment_->set_host_resolver_rules(
65 "MAP test.example.com 127.0.0.1,"
66 "MAP notfound.example.com ~NOTFOUND");
67 cronet_environment_->AddQuicHint(kTestServerDomain, kTestServerPort,
68 kTestServerPort);
69
70 cronet_environment_->Start();
71
72 cronet_engine_.obj = cronet_environment_;
73 }
74
75 StartQuicTestServer(); 69 StartQuicTestServer();
76 cronet_environment_->StartNetLog("cronet_netlog.json", true); 70 [Cronet startNetLogToFile:@"cronet_netlog.json" logBytes:YES];
77 } 71 }
78 72
79 void TearDown() override { 73 void TearDown() override {
80 ShutdownQuicTestServer(); 74 ShutdownQuicTestServer();
81 cronet_environment_->StopNetLog(); 75 [Cronet stopNetLog];
82 } 76 }
83 77
84 cronet_engine* engine() { return &cronet_engine_; } 78 cronet_engine* engine() { return [Cronet getGlobalEngine]; }
85
86 private:
87 static CronetEnvironment* cronet_environment_;
88 static cronet_engine cronet_engine_;
89 }; 79 };
90 80
91 CronetEnvironment* CronetBidirectionalStreamTest::cronet_environment_ = nullptr;
92 cronet_engine CronetBidirectionalStreamTest::cronet_engine_ = {0};
93
94 class TestBidirectionalStreamCallback { 81 class TestBidirectionalStreamCallback {
95 public: 82 public:
96 enum ResponseStep { 83 enum ResponseStep {
97 NOTHING, 84 NOTHING,
98 ON_STREAM_READY, 85 ON_STREAM_READY,
99 ON_RESPONSE_STARTED, 86 ON_RESPONSE_STARTED,
100 ON_READ_COMPLETED, 87 ON_READ_COMPLETED,
101 ON_WRITE_COMPLETED, 88 ON_WRITE_COMPLETED,
102 ON_TRAILERS, 89 ON_TRAILERS,
103 ON_CANCELED, 90 ON_CANCELED,
(...skipping 572 matching lines...)
676 ASSERT_EQ(TestBidirectionalStreamCallback::ON_FAILED, test.response_step); 663 ASSERT_EQ(TestBidirectionalStreamCallback::ON_FAILED, test.response_step);
677 ASSERT_EQ(net::ERR_NAME_NOT_RESOLVED, test.net_error); 664 ASSERT_EQ(net::ERR_NAME_NOT_RESOLVED, test.net_error);
678 cronet_bidirectional_stream_destroy(test.stream); 665 cronet_bidirectional_stream_destroy(test.stream);
679 } 666 }
680 667
681 INSTANTIATE_TEST_CASE_P(CronetBidirectionalStreamDelayRequestHeadersUntilFlush, 668 INSTANTIATE_TEST_CASE_P(CronetBidirectionalStreamDelayRequestHeadersUntilFlush,
682 CronetBidirectionalStreamTest, 669 CronetBidirectionalStreamTest,
683 ::testing::Values(true, false)); 670 ::testing::Values(true, false));
684 671
685 } // namespace cronet 672 } // namespace cronet
OLDNEW

Powered by Google App Engine