You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by ji...@apache.org on 2017/02/02 21:18:56 UTC

mesos git commit: Added unit test for http::Headers abstraction.

Repository: mesos
Updated Branches:
  refs/heads/master 274cc3354 -> 074113537


Added unit test for http::Headers abstraction.

Review: https://reviews.apache.org/r/56144/


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/07411353
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/07411353
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/07411353

Branch: refs/heads/master
Commit: 0741135372151667ad17138752c3cd2a0c9a63ac
Parents: 274cc33
Author: Gilbert Song <so...@gmail.com>
Authored: Thu Feb 2 13:09:19 2017 -0800
Committer: Jie Yu <yu...@gmail.com>
Committed: Thu Feb 2 13:18:50 2017 -0800

----------------------------------------------------------------------
 3rdparty/libprocess/src/tests/http_tests.cpp | 118 ++++++++++++++++++++++
 1 file changed, 118 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/07411353/3rdparty/libprocess/src/tests/http_tests.cpp
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/src/tests/http_tests.cpp b/3rdparty/libprocess/src/tests/http_tests.cpp
index b12849e..fb4da9a 100644
--- a/3rdparty/libprocess/src/tests/http_tests.cpp
+++ b/3rdparty/libprocess/src/tests/http_tests.cpp
@@ -1443,6 +1443,58 @@ TEST_P_TEMP_DISABLED_ON_WINDOWS(HTTPTest, QueryEncodeDecode)
 }
 
 
+TEST_P(HTTPTest, Headers)
+{
+  http::Headers headers({
+    {"Content-Type", "application/json; charset=utf-8"},
+    {"Docker-Distribution-Api-Version", "registry/2.0"},
+    {"Www-Authenticate", "Basic realm=\"basic-realm\""},
+    {"Date", "Tue, 31 Jan 2017 13:48:24 GMT"}
+  });
+
+  EXPECT_EQ("application/json; charset=utf-8", headers["Content-Type"]);
+  EXPECT_EQ("registry/2.0", headers["Docker-Distribution-Api-Version"]);
+  EXPECT_EQ("Basic realm=\"basic-realm\"", headers["Www-Authenticate"]);
+  EXPECT_EQ("Tue, 31 Jan 2017 13:48:24 GMT", headers["Date"]);
+
+  EXPECT_SOME_EQ("application/json; charset=utf-8",
+                 headers.get("Content-Type"));
+
+  EXPECT_SOME_EQ("registry/2.0",
+                 headers.get("Docker-Distribution-Api-Version"));
+
+  EXPECT_SOME_EQ("Basic realm=\"basic-realm\"",
+                 headers.get("Www-Authenticate"));
+
+  EXPECT_SOME_EQ("Tue, 31 Jan 2017 13:48:24 GMT", headers.get("Date"));
+
+  EXPECT_EQ("application/json; charset=utf-8", headers.at("Content-Type"));
+  EXPECT_EQ("registry/2.0", headers.at("Docker-Distribution-Api-Version"));
+  EXPECT_EQ("Basic realm=\"basic-realm\"", headers.at("Www-Authenticate"));
+  EXPECT_EQ("Tue, 31 Jan 2017 13:48:24 GMT", headers.at("Date"));
+
+  EXPECT_TRUE(headers.contains("Content-Type"));
+  EXPECT_TRUE(headers.contains("Docker-Distribution-Api-Version"));
+  EXPECT_TRUE(headers.contains("Www-Authenticate"));
+  EXPECT_TRUE(headers.contains("Date"));
+  EXPECT_EQ(4u, headers.size());
+  EXPECT_FALSE(headers.empty());
+
+  headers.put("Date", "Wed, 1 Feb 2017 00:00:00 GMT");
+  headers.put("Content-Length", "87");
+
+  EXPECT_TRUE(headers.contains("Date"));
+  EXPECT_TRUE(headers.contains("Content-Length"));
+
+  EXPECT_EQ("Wed, 1 Feb 2017 00:00:00 GMT", headers["Date"]);
+  EXPECT_EQ("87", headers["Content-Length"]);
+
+  headers.clear();
+  EXPECT_EQ(0u, headers.size());
+  EXPECT_TRUE(headers.empty());
+}
+
+
 TEST_P(HTTPTest, CaseInsensitiveHeaders)
 {
   http::Request request;
@@ -1469,6 +1521,72 @@ TEST_P(HTTPTest, CaseInsensitiveHeaders)
 }
 
 
+TEST_P(HTTPTest, WWWAuthenticateHeader)
+{
+  http::Headers headers;
+  headers["Www-Authenticate"] = "Basic realm=\"basic-realm\"";
+
+  Result<http::header::WWWAuthenticate> header =
+    headers.get<http::header::WWWAuthenticate>();
+
+  ASSERT_SOME(header);
+
+  EXPECT_EQ("Basic", header->authScheme());
+  EXPECT_EQ(1u, header->authParam().size());
+  EXPECT_EQ("basic-realm", header->authParam()["realm"]);
+
+  headers.clear();
+  header = headers.get<http::header::WWWAuthenticate>();
+
+  EXPECT_NONE(header);
+
+  headers["Www-Authenticate"] =
+    "Bearer realm=\"https://auth.docker.io/token\","
+    "service=\"registry.docker.io\","
+    "scope=\"repository:gilbertsong/inky:pull\"";
+
+  header = headers.get<http::header::WWWAuthenticate>();
+
+  ASSERT_SOME(header);
+
+  EXPECT_EQ("Bearer", header->authScheme());
+  EXPECT_EQ(3u, header->authParam().size());
+  EXPECT_EQ("https://auth.docker.io/token", header->authParam()["realm"]);
+  EXPECT_EQ("registry.docker.io", header->authParam()["service"]);
+  EXPECT_EQ("repository:gilbertsong/inky:pull", header->authParam()["scope"]);
+
+  headers["Www-Authenticate"] = "";
+  header = headers.get<http::header::WWWAuthenticate>();
+
+  EXPECT_ERROR(header);
+
+  headers["Www-Authenticate"] = " ";
+  header = headers.get<http::header::WWWAuthenticate>();
+
+  EXPECT_ERROR(header);
+
+  headers["Www-Authenticate"] = "Digest";
+  header = headers.get<http::header::WWWAuthenticate>();
+
+  EXPECT_ERROR(header);
+
+  headers["Www-Authenticate"] = "Digest =";
+  header = headers.get<http::header::WWWAuthenticate>();
+
+  EXPECT_ERROR(header);
+
+  headers["Www-Authenticate"] = "Digest ,,";
+  header = headers.get<http::header::WWWAuthenticate>();
+
+  EXPECT_ERROR(header);
+
+  headers["Www-Authenticate"] = "Digest uri=\"/dir/index.html\",qop=auth";
+  header = headers.get<http::header::WWWAuthenticate>();
+
+  EXPECT_ERROR(header);
+}
+
+
 TEST_P(HTTPTest, Accepts)
 {
   // Create requests that do not accept the 'text/*' media type.