1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// found in the LICENSE file. 4f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/safe_browsing/incident_reporting/incident_report_uploader_impl.h" 6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include <string> 8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/test/test_simple_task_runner.h" 10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/common/safe_browsing/csd.pb.h" 11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "net/base/load_flags.h" 12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "net/http/http_status_code.h" 13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "net/url_request/test_url_fetcher_factory.h" 14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "net/url_request/url_request_context_getter.h" 15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "net/url_request/url_request_status.h" 16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class IncidentReportUploaderImplTest : public testing::Test { 19f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public: 20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // safe_browsing::IncidentReportUploader::OnResultCallback implementation. 21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void OnReportUploadResult( 22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) safe_browsing::IncidentReportUploader::Result result, 23f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<safe_browsing::ClientIncidentResponse> response) { 24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) result_ = result; 25f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) response_ = response.Pass(); 26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) protected: 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) IncidentReportUploaderImplTest() 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) : task_runner_(new base::TestSimpleTaskRunner), 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) result_(safe_browsing::IncidentReportUploader::UPLOAD_REQUEST_FAILED) {} 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_refptr<base::TestSimpleTaskRunner> task_runner_; 34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) net::TestURLFetcherFactory url_fetcher_factory_; 35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) safe_browsing::IncidentReportUploader::Result result_; 36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<safe_browsing::ClientIncidentResponse> response_; 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}; 38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_F(IncidentReportUploaderImplTest, Success) { 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) safe_browsing::ClientIncidentReport report; 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<safe_browsing::IncidentReportUploader> instance( 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) safe_browsing::IncidentReportUploaderImpl::UploadReport( 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Bind(&IncidentReportUploaderImplTest::OnReportUploadResult, 44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Unretained(this)), 45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NULL, 46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) report)); 47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID( 49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) safe_browsing::IncidentReportUploaderImpl::kTestUrlFetcherId); 50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_NE(static_cast<net::TestURLFetcher*>(NULL), fetcher); 51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) safe_browsing::ClientIncidentReport uploaded_report; 53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(net::LOAD_DISABLE_CACHE, fetcher->GetLoadFlags()); 55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(uploaded_report.ParseFromString(fetcher->upload_data())); 56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::SUCCESS, 0)); 58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) fetcher->set_response_code(net::HTTP_OK); 59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string response; 60f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) safe_browsing::ClientIncidentResponse().SerializeToString(&response); 61f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) fetcher->SetResponseString(response); 62f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) fetcher->delegate()->OnURLFetchComplete(fetcher); 64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(safe_browsing::IncidentReportUploader::UPLOAD_SUCCESS, result_); 66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(response_); 67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 68f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// TODO(grt): 70f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// bad status/response code 71f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// confirm data in request is in upload test 72f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// confirm data in response is parsed 73