| Index: content/common/origin_trials/trial_token_unittest.cc
|
| diff --git a/content/common/origin_trials/trial_token_unittest.cc b/content/common/origin_trials/trial_token_unittest.cc
|
| index ebb5b05a4cf55084d2fccfb2bfe71c1773c3d5be..b3be991c75483690cd312296f8f6286fef05eecd 100644
|
| --- a/content/common/origin_trials/trial_token_unittest.cc
|
| +++ b/content/common/origin_trials/trial_token_unittest.cc
|
| @@ -12,6 +12,7 @@
|
| #include "base/test/simple_test_clock.h"
|
| #include "base/time/time.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| +#include "third_party/WebKit/public/platform/WebOriginTrialTokenStatus.h"
|
| #include "url/gurl.h"
|
|
|
| namespace content {
|
| @@ -75,10 +76,10 @@ double kInvalidTimestamp = 1458766278.0;
|
|
|
| // Well-formed trial token with an invalid signature.
|
| const char* kInvalidSignatureToken =
|
| - "AYeNXSDktgG9p4ns5B1WKsLq2TytMxfR4whfbi+oyT0rXyzh+qXYfxbDMGmyjU2Z"
|
| - "lEJ16vQObMXJoOaYUqd8xwkAAABZeyJvcmlnaW4iOiAiaHR0cHM6Ly92YWxpZC5l"
|
| - "eGFtcGxlLmNvbTo0NDMiLCAiZmVhdHVyZSI6ICJGcm9idWxhdGUiLCAiZXhwaXJ5"
|
| - "IjogMTQ1ODc2NjI3N30=";
|
| + "Ap+Q/Qm0ELadZql+dlEGSwnAVsFZKgCEtUZg8idQC3uekkIeSZIY1tftoYdrwhqj"
|
| + "7FO5L22sNvkZZnacLvmfNwsAAABaeyJvcmlnaW4iOiAiaHR0cHM6Ly92YWxpZC5l"
|
| + "eGFtcGxlLmNvbTo0NDMiLCAiZmVhdHVyZSI6ICJGcm9idWxhdGV4IiwgImV4cGly"
|
| + "eSI6IDE0NTg3NjYyNzd9";
|
|
|
| // Trial token truncated in the middle of the length field; too short to
|
| // possibly be valid.
|
| @@ -153,10 +154,19 @@ class TrialTokenTest : public testing::TestWithParam<const char*> {
|
| arraysize(kTestPublicKey2))) {}
|
|
|
| protected:
|
| - std::unique_ptr<std::string> Extract(const std::string& token_text,
|
| - base::StringPiece public_key) {
|
| - return TrialToken::Extract(token_text, public_key);
|
| + blink::WebOriginTrialTokenStatus Extract(const std::string& token_text,
|
| + base::StringPiece public_key,
|
| + std::string* token_payload) {
|
| + return TrialToken::Extract(token_text, public_key, token_payload);
|
| }
|
| +
|
| + blink::WebOriginTrialTokenStatus ExtractIgnorePayload(
|
| + const std::string& token_text,
|
| + base::StringPiece public_key) {
|
| + std::string token_payload;
|
| + return Extract(token_text, public_key, &token_payload);
|
| + }
|
| +
|
| std::unique_ptr<TrialToken> Parse(const std::string& token_payload) {
|
| return TrialToken::Parse(token_payload);
|
| }
|
| @@ -196,46 +206,47 @@ class TrialTokenTest : public testing::TestWithParam<const char*> {
|
| // Test verification of signature and extraction of token JSON from signed
|
| // token.
|
| TEST_F(TrialTokenTest, ValidateValidSignature) {
|
| - std::unique_ptr<std::string> token_payload =
|
| - Extract(kSampleToken, correct_public_key());
|
| - ASSERT_TRUE(token_payload);
|
| - EXPECT_STREQ(kSampleTokenJSON, token_payload.get()->c_str());
|
| + std::string token_payload;
|
| + blink::WebOriginTrialTokenStatus status =
|
| + Extract(kSampleToken, correct_public_key(), &token_payload);
|
| + ASSERT_EQ(blink::WebOriginTrialTokenStatus::Success, status);
|
| + EXPECT_STREQ(kSampleTokenJSON, token_payload.c_str());
|
| }
|
|
|
| TEST_F(TrialTokenTest, ValidateInvalidSignature) {
|
| - std::unique_ptr<std::string> token_payload =
|
| - Extract(kInvalidSignatureToken, correct_public_key());
|
| - ASSERT_FALSE(token_payload);
|
| + blink::WebOriginTrialTokenStatus status =
|
| + ExtractIgnorePayload(kInvalidSignatureToken, correct_public_key());
|
| + EXPECT_EQ(blink::WebOriginTrialTokenStatus::InvalidSignature, status);
|
| }
|
|
|
| TEST_F(TrialTokenTest, ValidateSignatureWithIncorrectKey) {
|
| - std::unique_ptr<std::string> token_payload =
|
| - Extract(kSampleToken, incorrect_public_key());
|
| - ASSERT_FALSE(token_payload);
|
| + blink::WebOriginTrialTokenStatus status =
|
| + ExtractIgnorePayload(kSampleToken, incorrect_public_key());
|
| + EXPECT_EQ(blink::WebOriginTrialTokenStatus::InvalidSignature, status);
|
| }
|
|
|
| TEST_F(TrialTokenTest, ValidateEmptyToken) {
|
| - std::unique_ptr<std::string> token_payload =
|
| - Extract("", correct_public_key());
|
| - ASSERT_FALSE(token_payload);
|
| + blink::WebOriginTrialTokenStatus status =
|
| + ExtractIgnorePayload("", correct_public_key());
|
| + EXPECT_EQ(blink::WebOriginTrialTokenStatus::Malformed, status);
|
| }
|
|
|
| TEST_F(TrialTokenTest, ValidateShortToken) {
|
| - std::unique_ptr<std::string> token_payload =
|
| - Extract(kTruncatedToken, correct_public_key());
|
| - ASSERT_FALSE(token_payload);
|
| + blink::WebOriginTrialTokenStatus status =
|
| + ExtractIgnorePayload(kTruncatedToken, correct_public_key());
|
| + EXPECT_EQ(blink::WebOriginTrialTokenStatus::Malformed, status);
|
| }
|
|
|
| TEST_F(TrialTokenTest, ValidateUnsupportedVersion) {
|
| - std::unique_ptr<std::string> token_payload =
|
| - Extract(kIncorrectVersionToken, correct_public_key());
|
| - ASSERT_FALSE(token_payload);
|
| + blink::WebOriginTrialTokenStatus status =
|
| + ExtractIgnorePayload(kIncorrectVersionToken, correct_public_key());
|
| + EXPECT_EQ(blink::WebOriginTrialTokenStatus::WrongVersion, status);
|
| }
|
|
|
| TEST_F(TrialTokenTest, ValidateSignatureWithIncorrectLength) {
|
| - std::unique_ptr<std::string> token_payload =
|
| - Extract(kIncorrectLengthToken, correct_public_key());
|
| - ASSERT_FALSE(token_payload);
|
| + blink::WebOriginTrialTokenStatus status =
|
| + ExtractIgnorePayload(kIncorrectLengthToken, correct_public_key());
|
| + EXPECT_EQ(blink::WebOriginTrialTokenStatus::Malformed, status);
|
| }
|
|
|
| // Test parsing of fields from JSON token.
|
| @@ -279,22 +290,54 @@ TEST_F(TrialTokenTest, ValidateValidToken) {
|
| TEST_F(TrialTokenTest, TokenIsValidForFeature) {
|
| std::unique_ptr<TrialToken> token = Parse(kSampleTokenJSON);
|
| ASSERT_TRUE(token);
|
| - EXPECT_TRUE(token->IsValidForFeature(expected_origin_, kExpectedFeatureName,
|
| - valid_timestamp_));
|
| - EXPECT_FALSE(token->IsValidForFeature(
|
| - expected_origin_, base::ToUpperASCII(kExpectedFeatureName),
|
| - valid_timestamp_));
|
| - EXPECT_FALSE(token->IsValidForFeature(
|
| - expected_origin_, base::ToLowerASCII(kExpectedFeatureName),
|
| - valid_timestamp_));
|
| - EXPECT_FALSE(token->IsValidForFeature(invalid_origin_, kExpectedFeatureName,
|
| - valid_timestamp_));
|
| - EXPECT_FALSE(token->IsValidForFeature(insecure_origin_, kExpectedFeatureName,
|
| - valid_timestamp_));
|
| - EXPECT_FALSE(token->IsValidForFeature(expected_origin_, kInvalidFeatureName,
|
| - valid_timestamp_));
|
| - EXPECT_FALSE(token->IsValidForFeature(expected_origin_, kExpectedFeatureName,
|
| - invalid_timestamp_));
|
| + EXPECT_EQ(blink::WebOriginTrialTokenStatus::Success,
|
| + token->IsValidForFeature(expected_origin_, kExpectedFeatureName,
|
| + valid_timestamp_));
|
| + EXPECT_EQ(blink::WebOriginTrialTokenStatus::WrongFeature,
|
| + token->IsValidForFeature(expected_origin_,
|
| + base::ToUpperASCII(kExpectedFeatureName),
|
| + valid_timestamp_));
|
| + EXPECT_EQ(blink::WebOriginTrialTokenStatus::WrongFeature,
|
| + token->IsValidForFeature(expected_origin_,
|
| + base::ToLowerASCII(kExpectedFeatureName),
|
| + valid_timestamp_));
|
| + EXPECT_EQ(blink::WebOriginTrialTokenStatus::WrongOrigin,
|
| + token->IsValidForFeature(invalid_origin_, kExpectedFeatureName,
|
| + valid_timestamp_));
|
| + EXPECT_EQ(blink::WebOriginTrialTokenStatus::WrongOrigin,
|
| + token->IsValidForFeature(insecure_origin_, kExpectedFeatureName,
|
| + valid_timestamp_));
|
| + EXPECT_EQ(blink::WebOriginTrialTokenStatus::WrongFeature,
|
| + token->IsValidForFeature(expected_origin_, kInvalidFeatureName,
|
| + valid_timestamp_));
|
| + EXPECT_EQ(blink::WebOriginTrialTokenStatus::Expired,
|
| + token->IsValidForFeature(expected_origin_, kExpectedFeatureName,
|
| + invalid_timestamp_));
|
| +}
|
| +
|
| +// Test overall extraction, to ensure output status matches returned token
|
| +TEST_F(TrialTokenTest, ExtractValidToken) {
|
| + blink::WebOriginTrialTokenStatus status;
|
| + std::unique_ptr<TrialToken> token =
|
| + TrialToken::From(kSampleToken, correct_public_key(), &status);
|
| + EXPECT_TRUE(token);
|
| + EXPECT_EQ(blink::WebOriginTrialTokenStatus::Success, status);
|
| +}
|
| +
|
| +TEST_F(TrialTokenTest, ExtractInvalidSignature) {
|
| + blink::WebOriginTrialTokenStatus status;
|
| + std::unique_ptr<TrialToken> token =
|
| + TrialToken::From(kSampleToken, incorrect_public_key(), &status);
|
| + EXPECT_FALSE(token);
|
| + EXPECT_EQ(blink::WebOriginTrialTokenStatus::InvalidSignature, status);
|
| +}
|
| +
|
| +TEST_F(TrialTokenTest, ExtractMalformedToken) {
|
| + blink::WebOriginTrialTokenStatus status;
|
| + std::unique_ptr<TrialToken> token =
|
| + TrialToken::From(kIncorrectLengthToken, correct_public_key(), &status);
|
| + EXPECT_FALSE(token);
|
| + EXPECT_EQ(blink::WebOriginTrialTokenStatus::Malformed, status);
|
| }
|
|
|
| } // namespace content
|
|
|