Index: google_apis/gcm/engine/unregistration_request_unittest.cc |
diff --git a/google_apis/gcm/engine/unregistration_request_unittest.cc b/google_apis/gcm/engine/unregistration_request_unittest.cc |
index af5b1c953780234331a29c733667ab46e25dbfde..c6f1f5402f1a52ac6479680cde6f43c6edd2e63e 100644 |
--- a/google_apis/gcm/engine/unregistration_request_unittest.cc |
+++ b/google_apis/gcm/engine/unregistration_request_unittest.cc |
@@ -25,6 +25,7 @@ const char kLoginHeader[] = "AidLogin"; |
const char kAppId[] = "TestAppId"; |
const char kDeletedAppId[] = "deleted=TestAppId"; |
const char kDeletedToken[] = "token=SomeToken"; |
+const char kCategoryForSubtypes[] = "com.chrome.stable.macosx"; |
const char kRegistrationURL[] = "http://foo.bar/register"; |
const uint64_t kSecurityToken = 77UL; |
const int kGCMVersion = 40; |
@@ -92,7 +93,8 @@ GCMUnregistrationRequestTest::~GCMUnregistrationRequestTest() { |
void GCMUnregistrationRequestTest::CreateRequest() { |
UnregistrationRequest::RequestInfo request_info( |
- kAndroidId, kSecurityToken, kAppId); |
+ kAndroidId, kSecurityToken, kAppId, false /* use_subtype */, |
+ kCategoryForSubtypes); |
std::unique_ptr<GCMUnregistrationRequestHandler> request_handler( |
new GCMUnregistrationRequestHandler(kAppId)); |
request_.reset(new UnregistrationRequest( |
@@ -130,9 +132,6 @@ TEST_F(GCMUnregistrationRequestTest, RequestDataPassedToFetcher) { |
EXPECT_EQ(base::Uint64ToString(kAndroidId), auth_tokenizer.token()); |
ASSERT_TRUE(auth_tokenizer.GetNext()); |
EXPECT_EQ(base::Uint64ToString(kSecurityToken), auth_tokenizer.token()); |
- std::string app_id_header; |
- headers.GetHeader("app", &app_id_header); |
- EXPECT_EQ(kAppId, app_id_header); |
std::map<std::string, std::string> expected_pairs; |
expected_pairs["app"] = kAppId; |
@@ -140,20 +139,7 @@ TEST_F(GCMUnregistrationRequestTest, RequestDataPassedToFetcher) { |
expected_pairs["delete"] = "true"; |
expected_pairs["gcm_unreg_caller"] = "false"; |
- // Verify data was formatted properly. |
- std::string upload_data = fetcher->upload_data(); |
- base::StringTokenizer data_tokenizer(upload_data, "&="); |
- while (data_tokenizer.GetNext()) { |
- std::map<std::string, std::string>::iterator iter = |
- expected_pairs.find(data_tokenizer.token()); |
- ASSERT_TRUE(iter != expected_pairs.end()) << data_tokenizer.token(); |
- ASSERT_TRUE(data_tokenizer.GetNext()) << data_tokenizer.token(); |
- EXPECT_EQ(iter->second, data_tokenizer.token()); |
- // Ensure that none of the keys appears twice. |
- expected_pairs.erase(iter); |
- } |
- |
- EXPECT_EQ(0UL, expected_pairs.size()); |
+ ASSERT_NO_FATAL_FAILURE(VerifyFetcherUploadData(&expected_pairs)); |
} |
TEST_F(GCMUnregistrationRequestTest, SuccessfulUnregistration) { |
@@ -324,7 +310,8 @@ class InstaceIDDeleteTokenRequestTest : public UnregistrationRequestTest { |
InstaceIDDeleteTokenRequestTest(); |
~InstaceIDDeleteTokenRequestTest() override; |
- void CreateRequest(const std::string& instance_id, |
+ void CreateRequest(bool use_subtype, |
+ const std::string& instance_id, |
const std::string& authorized_entity, |
const std::string& scope); |
}; |
@@ -336,11 +323,12 @@ InstaceIDDeleteTokenRequestTest::~InstaceIDDeleteTokenRequestTest() { |
} |
void InstaceIDDeleteTokenRequestTest::CreateRequest( |
+ bool use_subtype, |
const std::string& instance_id, |
const std::string& authorized_entity, |
const std::string& scope) { |
UnregistrationRequest::RequestInfo request_info( |
- kAndroidId, kSecurityToken, kAppId); |
+ kAndroidId, kSecurityToken, kAppId, use_subtype, kCategoryForSubtypes); |
std::unique_ptr<InstanceIDDeleteTokenRequestHandler> request_handler( |
new InstanceIDDeleteTokenRequestHandler(instance_id, authorized_entity, |
scope, kGCMVersion)); |
@@ -354,7 +342,7 @@ void InstaceIDDeleteTokenRequestTest::CreateRequest( |
} |
TEST_F(InstaceIDDeleteTokenRequestTest, RequestDataPassedToFetcher) { |
- CreateRequest(kInstanceId, kDeveloperId, kScope); |
+ CreateRequest(false /* use_subtype */, kInstanceId, kDeveloperId, kScope); |
request_->Start(); |
// Get data sent by request. |
@@ -375,9 +363,6 @@ TEST_F(InstaceIDDeleteTokenRequestTest, RequestDataPassedToFetcher) { |
EXPECT_EQ(base::Uint64ToString(kAndroidId), auth_tokenizer.token()); |
ASSERT_TRUE(auth_tokenizer.GetNext()); |
EXPECT_EQ(base::Uint64ToString(kSecurityToken), auth_tokenizer.token()); |
- std::string app_id_header; |
- headers.GetHeader("app", &app_id_header); |
- EXPECT_EQ(kAppId, app_id_header); |
std::map<std::string, std::string> expected_pairs; |
expected_pairs["gmsv"] = base::IntToString(kGCMVersion); |
@@ -386,28 +371,37 @@ TEST_F(InstaceIDDeleteTokenRequestTest, RequestDataPassedToFetcher) { |
expected_pairs["delete"] = "true"; |
expected_pairs["appid"] = kInstanceId; |
expected_pairs["sender"] = kDeveloperId; |
- expected_pairs["X-subtype"] = kDeveloperId; |
expected_pairs["scope"] = kScope; |
expected_pairs["X-scope"] = kScope; |
- // Verify data was formatted properly. |
- std::string upload_data = fetcher->upload_data(); |
- base::StringTokenizer data_tokenizer(upload_data, "&="); |
- while (data_tokenizer.GetNext()) { |
- std::map<std::string, std::string>::iterator iter = |
- expected_pairs.find(data_tokenizer.token()); |
- ASSERT_TRUE(iter != expected_pairs.end()) << data_tokenizer.token(); |
- ASSERT_TRUE(data_tokenizer.GetNext()) << data_tokenizer.token(); |
- EXPECT_EQ(iter->second, data_tokenizer.token()); |
- // Ensure that none of the keys appears twice. |
- expected_pairs.erase(iter); |
- } |
+ ASSERT_NO_FATAL_FAILURE(VerifyFetcherUploadData(&expected_pairs)); |
+} |
+ |
+TEST_F(InstaceIDDeleteTokenRequestTest, RequestDataWithSubtype) { |
+ CreateRequest(true /* use_subtype */, kInstanceId, kDeveloperId, kScope); |
+ request_->Start(); |
+ |
+ // Get data sent by request. |
+ net::TestURLFetcher* fetcher = GetFetcher(); |
+ ASSERT_TRUE(fetcher); |
+ |
+ // Same as RequestDataPassedToFetcher except "app" and "X-subtype". |
+ std::map<std::string, std::string> expected_pairs; |
+ expected_pairs["gmsv"] = base::IntToString(kGCMVersion); |
+ expected_pairs["app"] = kCategoryForSubtypes; |
+ expected_pairs["X-subtype"] = kAppId; |
+ expected_pairs["device"] = base::Uint64ToString(kAndroidId); |
+ expected_pairs["delete"] = "true"; |
+ expected_pairs["appid"] = kInstanceId; |
+ expected_pairs["sender"] = kDeveloperId; |
+ expected_pairs["scope"] = kScope; |
+ expected_pairs["X-scope"] = kScope; |
- EXPECT_EQ(0UL, expected_pairs.size()); |
+ ASSERT_NO_FATAL_FAILURE(VerifyFetcherUploadData(&expected_pairs)); |
} |
TEST_F(InstaceIDDeleteTokenRequestTest, SuccessfulUnregistration) { |
- CreateRequest(kInstanceId, kDeveloperId, kScope); |
+ CreateRequest(false /* use_subtype */, kInstanceId, kDeveloperId, kScope); |
request_->Start(); |
SetResponse(net::HTTP_OK, kDeletedToken); |
@@ -418,7 +412,7 @@ TEST_F(InstaceIDDeleteTokenRequestTest, SuccessfulUnregistration) { |
} |
TEST_F(InstaceIDDeleteTokenRequestTest, ResponseHttpStatusNotOK) { |
- CreateRequest(kInstanceId, kDeveloperId, kScope); |
+ CreateRequest(false /* use_subtype */, kInstanceId, kDeveloperId, kScope); |
request_->Start(); |
SetResponse(net::HTTP_UNAUTHORIZED, ""); |
@@ -434,7 +428,7 @@ TEST_F(InstaceIDDeleteTokenRequestTest, ResponseHttpStatusNotOK) { |
} |
TEST_F(InstaceIDDeleteTokenRequestTest, InvalidParametersError) { |
- CreateRequest(kInstanceId, kDeveloperId, kScope); |
+ CreateRequest(false /* use_subtype */, kInstanceId, kDeveloperId, kScope); |
request_->Start(); |
SetResponse(net::HTTP_OK, "Error=INVALID_PARAMETERS"); |
@@ -445,7 +439,7 @@ TEST_F(InstaceIDDeleteTokenRequestTest, InvalidParametersError) { |
} |
TEST_F(InstaceIDDeleteTokenRequestTest, UnkwnownError) { |
- CreateRequest(kInstanceId, kDeveloperId, kScope); |
+ CreateRequest(false /* use_subtype */, kInstanceId, kDeveloperId, kScope); |
request_->Start(); |
SetResponse(net::HTTP_OK, "Error=XXX"); |