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

Unified Diff: components/cronet/ios/test/cronet_http_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 side-by-side diff with in-line comments
Download patch
Index: components/cronet/ios/test/cronet_http_test.mm
diff --git a/ios/crnet/test/crnet_http_tests.mm b/components/cronet/ios/test/cronet_http_test.mm
similarity index 56%
copy from ios/crnet/test/crnet_http_tests.mm
copy to components/cronet/ios/test/cronet_http_test.mm
index af74ec0d7ce1a4833823e4fe6ec45dd9352546e0..4d3ea4f46b9a5a606c1780a9387a1623fec7cb92 100644
--- a/ios/crnet/test/crnet_http_tests.mm
+++ b/components/cronet/ios/test/cronet_http_test.mm
@@ -5,13 +5,15 @@
#import <Foundation/Foundation.h>
#include <stdint.h>
-#import "CrNet.h"
+#import "components/cronet/ios/Cronet.h"
#include "base/logging.h"
#include "base/mac/scoped_nsobject.h"
#include "base/strings/sys_string_conversions.h"
-#import "ios/third_party/gcdwebserver/src/GCDWebServer/Core/GCDWebServer.h"
+#include "components/cronet/ios/test/quic_test_server.h"
#include "net/base/mac/url_conversions.h"
+#include "net/base/net_errors.h"
+#include "net/cert/mock_cert_verifier.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/gtest_mac.h"
#include "url/gurl.h"
@@ -96,21 +98,24 @@
@end
+namespace cronet {
// base::TimeDelta would normally be ideal for this but it does not support
// nanosecond resolution.
static const int64_t ns_in_second = 1000000000LL;
+// TODO(mef): Create common header file to declare this.
+void StartCronetIfNecessary();
+
class HttpTest : public ::testing::Test {
protected:
HttpTest() {}
~HttpTest() override {}
void SetUp() override {
- [CrNet setPartialUserAgent:@"CrNetTest/1.0.0.0"];
- [CrNet install];
+ StartCronetIfNecessary();
NSURLSessionConfiguration* config =
[NSURLSessionConfiguration ephemeralSessionConfiguration];
- [CrNet installIntoSessionConfiguration:config];
+ [Cronet installIntoSessionConfiguration:config];
delegate_.reset([[TestDelegate alloc] init]);
NSURLSession* session = [NSURLSession sessionWithConfiguration:config
delegate:delegate_
@@ -118,41 +123,10 @@ class HttpTest : public ::testing::Test {
// Take a reference to the session and store it so it doesn't get
// deallocated until this object does.
session_.reset([session retain]);
- web_server_.reset([[GCDWebServer alloc] init]);
- }
-
- void TearDown() override {
- [CrNet uninstall];
- [web_server_ stop];
- }
-
- // Starts a GCDWebServer instance on localhost port 8080, and remembers the
- // root URL for later; tests can use GetURL() to produce a URL referring to a
- // specific resource under the root URL.
- void StartWebServer() {
- [web_server_ startWithPort:8080 bonjourName:nil];
- server_root_ = net::GURLWithNSURL([web_server_ serverURL]);
- }
-
- // Registers a fixed response |text| to be returned to requests for |path|,
- // which is relative to |server_root_|.
- void RegisterPathText(const std::string& path, const std::string& text) {
- NSString* nspath = base::SysUTF8ToNSString(path);
- NSData* data = [NSData dataWithBytes:text.c_str() length:text.length()];
- [web_server_ addGETHandlerForPath:nspath
- staticData:data
- contentType:@"text/plain"
- cacheAge:30];
+ StartQuicTestServer();
}
- void RegisterPathHandler(const std::string& path,
- GCDWebServerProcessBlock handler) {
- NSString* nspath = base::SysUTF8ToNSString(path);
- [web_server_ addHandlerForMethod:@"GET"
- path:nspath
- requestClass:NSClassFromString(@"GCDWebServerRequest")
- processBlock:handler];
- }
+ void TearDown() override { ShutdownQuicTestServer(); }
// Launches the supplied |task| and blocks until it completes, with a timeout
// of 1 second.
@@ -163,67 +137,29 @@ class HttpTest : public ::testing::Test {
dispatch_time(DISPATCH_TIME_NOW, deadline_ns));
}
- // Returns a URL to refer to the resource named |path| served by the test
- // server. If |path| starts with a /, the leading / will be stripped.
- GURL GetURL(const std::string& path) {
- std::string real_path = path[0] == '/' ? path.substr(1) : path;
- return server_root_.Resolve(real_path);
- }
-
- // Some convenience functions for working with GCDWebServerRequest and
- // GCDWebServerResponse.
-
- // Returns true if the value for the request header |header| is not nil and
- // contains the string |target|.
- bool HeaderValueContains(GCDWebServerRequest* request,
- const std::string& header,
- const std::string& target) {
- NSString* key = base::SysUTF8ToNSString(header);
- NSString* needle = base::SysUTF8ToNSString(target);
- NSString* haystack = request.headers[key];
- if (!haystack)
- return false;
- return [haystack rangeOfString:needle].location != NSNotFound;
- }
-
base::scoped_nsobject<NSURLSession> session_;
base::scoped_nsobject<TestDelegate> delegate_;
-
- private:
- base::scoped_nsobject<GCDWebServer> web_server_;
- GURL server_root_;
};
TEST_F(HttpTest, NSURLSessionReceivesData) {
- const char kPath[] = "/foo";
- const char kData[] = "foobar";
- RegisterPathText(kPath, kData);
- StartWebServer();
-
- NSURL* url = net::NSURLWithGURL(GetURL(kPath));
+ NSURL* url = net::NSURLWithGURL(GURL(kTestServerUrl));
NSURLSessionDataTask* task = [session_ dataTaskWithURL:url];
StartDataTaskAndWaitForCompletion(task);
EXPECT_EQ(nil, [delegate_ error]);
- EXPECT_EQ(strlen(kData), [delegate_ receivedBytes]);
+ EXPECT_EQ(strlen(kHelloBodyValue), [delegate_ receivedBytes]);
}
-TEST_F(HttpTest, SdchDisabledByDefault) {
- const char kPath[] = "/foo";
- RegisterPathHandler(kPath,
- ^GCDWebServerResponse* (GCDWebServerRequest* req) {
- EXPECT_FALSE(HeaderValueContains(req, "Accept-Encoding", "sdch"));
- return nil;
- });
- StartWebServer();
- NSURL* url = net::NSURLWithGURL(GetURL(kPath));
+TEST_F(HttpTest, GetGlobalMetricsDeltas) {
+ NSData* delta1 = [Cronet getGlobalMetricsDeltas];
+
+ NSURL* url = net::NSURLWithGURL(GURL(kTestServerUrl));
NSURLSessionDataTask* task = [session_ dataTaskWithURL:url];
StartDataTaskAndWaitForCompletion(task);
EXPECT_EQ(nil, [delegate_ error]);
- EXPECT_TRUE([delegate_ receivedBytes]);
+ EXPECT_EQ(strlen(kHelloBodyValue), [delegate_ receivedBytes]);
+
+ NSData* delta2 = [Cronet getGlobalMetricsDeltas];
+ EXPECT_FALSE([delta2 isEqualToData:delta1]);
}
-// TODO(ellyjones): There needs to be a test that enabling SDCH works, but
-// because CrNet is static and 'uninstall' only disables it, there is no way to
-// have an individual test enable or disable SDCH.
-// Probably there is a way to get gtest tests to run in a separate process, but
-// I'm not sure what it is.
+} // namespace cronet

Powered by Google App Engine
This is Rietveld 408576698