| 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");
|
|
|