Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(454)

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: Address Andrei's comments. Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
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 #import "components/cronet/ios/Cronet+TestSupport.h"
18 #include "components/cronet/ios/cronet_c_for_grpc.h" 19 #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" 20 #include "components/cronet/ios/test/quic_test_server.h"
21 #include "net/base/mac/url_conversions.h" 21 #include "net/base/mac/url_conversions.h"
22 #include "net/base/net_errors.h" 22 #include "net/base/net_errors.h"
23 #include "net/cert/mock_cert_verifier.h" 23 #include "net/cert/mock_cert_verifier.h"
24 #include "net/test/test_data_directory.h" 24 #include "net/test/test_data_directory.h"
25 #include "testing/gtest/include/gtest/gtest.h" 25 #include "testing/gtest/include/gtest/gtest.h"
26 #include "testing/gtest_mac.h" 26 #include "testing/gtest_mac.h"
27 #include "url/gurl.h" 27 #include "url/gurl.h"
28 28
29 namespace { 29 namespace {
30 30
31 cronet_bidirectional_stream_header kTestHeaders[] = { 31 cronet_bidirectional_stream_header kTestHeaders[] = {
32 {"header1", "foo"}, 32 {"header1", "foo"},
33 {"header2", "bar"}, 33 {"header2", "bar"},
34 }; 34 };
35 const cronet_bidirectional_stream_header_array kTestHeadersArray = { 35 const cronet_bidirectional_stream_header_array kTestHeadersArray = {
36 2, 2, kTestHeaders}; 36 2, 2, kTestHeaders};
37 } // namespace 37 } // namespace
38 38
39 namespace cronet { 39 namespace cronet {
40 40
41 void StartCronetIfNecessary() {
42 static bool initialized = false;
43 if (!initialized) {
44 initialized = true;
45 [Cronet setPartialUserAgent:@"CronetTest/1.0.0.0"];
46 [Cronet setHttp2Enabled:true];
47 [Cronet setQuicEnabled:true];
48 [Cronet setSslKeyLogFileName:@"SSLKEYLOGFILE"];
49
50 net::MockCertVerifier* mock_cert_verifier = new net::MockCertVerifier();
51 mock_cert_verifier->set_default_result(net::OK);
52 [Cronet setMockCertVerifierForTesting:mock_cert_verifier];
53 [Cronet
54 setHostResolverRulesForTesting:@"MAP test.example.com 127.0.0.1,"
55 "MAP notfound.example.com ~NOTFOUND"];
56 [Cronet addQuicHint:@"test.example.com"
57 port:cronet::kTestServerPort
58 altPort:cronet::kTestServerPort];
59 [Cronet start];
60 }
61 }
62
41 class CronetBidirectionalStreamTest : public ::testing::TestWithParam<bool> { 63 class CronetBidirectionalStreamTest : public ::testing::TestWithParam<bool> {
42 protected: 64 protected:
43 CronetBidirectionalStreamTest() {} 65 CronetBidirectionalStreamTest() {}
44 ~CronetBidirectionalStreamTest() override {} 66 ~CronetBidirectionalStreamTest() override {}
45 67
46 void SetUp() override { 68 void SetUp() override {
47 static bool initialized = false; 69 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(); 70 StartQuicTestServer();
76 cronet_environment_->StartNetLog("cronet_netlog.json", true); 71 [Cronet startNetLogToFile:@"cronet_netlog.json" logBytes:YES];
77 } 72 }
78 73
79 void TearDown() override { 74 void TearDown() override {
80 ShutdownQuicTestServer(); 75 ShutdownQuicTestServer();
81 cronet_environment_->StopNetLog(); 76 [Cronet stopNetLog];
82 } 77 }
83 78
84 cronet_engine* engine() { return &cronet_engine_; } 79 cronet_engine* engine() { return [Cronet getGlobalEngine]; }
85
86 private:
87 static CronetEnvironment* cronet_environment_;
88 static cronet_engine cronet_engine_;
89 }; 80 };
90 81
91 CronetEnvironment* CronetBidirectionalStreamTest::cronet_environment_ = nullptr;
92 cronet_engine CronetBidirectionalStreamTest::cronet_engine_ = {0};
93
94 class TestBidirectionalStreamCallback { 82 class TestBidirectionalStreamCallback {
95 public: 83 public:
96 enum ResponseStep { 84 enum ResponseStep {
97 NOTHING, 85 NOTHING,
98 ON_STREAM_READY, 86 ON_STREAM_READY,
99 ON_RESPONSE_STARTED, 87 ON_RESPONSE_STARTED,
100 ON_READ_COMPLETED, 88 ON_READ_COMPLETED,
101 ON_WRITE_COMPLETED, 89 ON_WRITE_COMPLETED,
102 ON_TRAILERS, 90 ON_TRAILERS,
103 ON_CANCELED, 91 ON_CANCELED,
(...skipping 572 matching lines...) Expand 10 before | Expand all | Expand 10 after
676 ASSERT_EQ(TestBidirectionalStreamCallback::ON_FAILED, test.response_step); 664 ASSERT_EQ(TestBidirectionalStreamCallback::ON_FAILED, test.response_step);
677 ASSERT_EQ(net::ERR_NAME_NOT_RESOLVED, test.net_error); 665 ASSERT_EQ(net::ERR_NAME_NOT_RESOLVED, test.net_error);
678 cronet_bidirectional_stream_destroy(test.stream); 666 cronet_bidirectional_stream_destroy(test.stream);
679 } 667 }
680 668
681 INSTANTIATE_TEST_CASE_P(CronetBidirectionalStreamDelayRequestHeadersUntilFlush, 669 INSTANTIATE_TEST_CASE_P(CronetBidirectionalStreamDelayRequestHeadersUntilFlush,
682 CronetBidirectionalStreamTest, 670 CronetBidirectionalStreamTest,
683 ::testing::Values(true, false)); 671 ::testing::Values(true, false));
684 672
685 } // namespace cronet 673 } // namespace cronet
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698