| Index: chrome/browser/chromeos/contacts/gdata_contacts_service_unittest.cc
|
| diff --git a/chrome/browser/chromeos/contacts/gdata_contacts_service_unittest.cc b/chrome/browser/chromeos/contacts/gdata_contacts_service_unittest.cc
|
| deleted file mode 100644
|
| index c16704ecc6ffbcfd62a0b9e563a1719137dac115..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/chromeos/contacts/gdata_contacts_service_unittest.cc
|
| +++ /dev/null
|
| @@ -1,331 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chrome/browser/chromeos/contacts/gdata_contacts_service.h"
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/files/file_path.h"
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "base/strings/stringprintf.h"
|
| -#include "base/time/time.h"
|
| -#include "chrome/browser/chromeos/contacts/contact.pb.h"
|
| -#include "chrome/browser/chromeos/contacts/contact_test_util.h"
|
| -#include "chrome/browser/ui/browser.h"
|
| -#include "chrome/test/base/in_process_browser_test.h"
|
| -#include "content/public/browser/browser_thread.h"
|
| -#include "content/public/test/test_browser_thread.h"
|
| -#include "content/public/test/test_utils.h"
|
| -#include "google_apis/drive/dummy_auth_service.h"
|
| -#include "google_apis/drive/test_util.h"
|
| -#include "google_apis/drive/time_util.h"
|
| -#include "net/test/embedded_test_server/embedded_test_server.h"
|
| -#include "net/test/embedded_test_server/http_request.h"
|
| -#include "net/test/embedded_test_server/http_response.h"
|
| -#include "net/url_request/url_request_test_util.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -#include "ui/gfx/size.h"
|
| -
|
| -using content::BrowserThread;
|
| -
|
| -namespace contacts {
|
| -namespace {
|
| -
|
| -// Filename of JSON feed containing contact groups.
|
| -const char kGroupsFeedFilename[] = "/groups.json";
|
| -
|
| -// Width and height of /photo.png on the test server.
|
| -const int kPhotoSize = 48;
|
| -
|
| -// Initializes |contact| using the passed-in values.
|
| -void InitContact(const std::string& contact_id,
|
| - const std::string& rfc_3339_update_time,
|
| - bool deleted,
|
| - const std::string& full_name,
|
| - const std::string& given_name,
|
| - const std::string& additional_name,
|
| - const std::string& family_name,
|
| - const std::string& name_prefix,
|
| - const std::string& name_suffix,
|
| - contacts::Contact* contact) {
|
| - DCHECK(contact);
|
| - contact->set_contact_id(contact_id);
|
| - base::Time update_time;
|
| - CHECK(google_apis::util::GetTimeFromString(
|
| - rfc_3339_update_time, &update_time))
|
| - << "Unable to parse time \"" << rfc_3339_update_time << "\"";
|
| - contact->set_update_time(update_time.ToInternalValue());
|
| - contact->set_deleted(deleted);
|
| - contact->set_full_name(full_name);
|
| - contact->set_given_name(given_name);
|
| - contact->set_additional_name(additional_name);
|
| - contact->set_family_name(family_name);
|
| - contact->set_name_prefix(name_prefix);
|
| - contact->set_name_suffix(name_suffix);
|
| -}
|
| -
|
| -class GDataContactsServiceTest : public testing::Test {
|
| - public:
|
| - GDataContactsServiceTest()
|
| - : ui_thread_(content::BrowserThread::UI, &message_loop_),
|
| - io_thread_(content::BrowserThread::IO),
|
| - download_was_successful_(false) {
|
| - }
|
| -
|
| - virtual void SetUp() OVERRIDE {
|
| - io_thread_.StartIOThread();
|
| - request_context_getter_ = new net::TestURLRequestContextGetter(
|
| - content::BrowserThread::GetMessageLoopProxyForThread(
|
| - content::BrowserThread::IO));
|
| -
|
| - test_server_.reset(new net::test_server::EmbeddedTestServer);
|
| - ASSERT_TRUE(test_server_->InitializeAndWaitUntilReady());
|
| - test_server_->RegisterRequestHandler(
|
| - base::Bind(&GDataContactsServiceTest::HandleDownloadRequest,
|
| - base::Unretained(this)));
|
| - service_.reset(new GDataContactsService(request_context_getter_.get(),
|
| - new google_apis::DummyAuthService));
|
| - service_->set_rewrite_photo_url_callback_for_testing(
|
| - base::Bind(&GDataContactsServiceTest::RewritePhotoUrl,
|
| - base::Unretained(this)));
|
| - service_->set_groups_feed_url_for_testing(
|
| - test_server_->GetURL(kGroupsFeedFilename));
|
| - service_->set_photo_download_timer_interval_for_testing(
|
| - base::TimeDelta::FromMilliseconds(10));
|
| - }
|
| -
|
| - virtual void TearDown() OVERRIDE {
|
| - EXPECT_TRUE(test_server_->ShutdownAndWaitUntilComplete());
|
| - test_server_.reset();
|
| - request_context_getter_ = NULL;
|
| - service_.reset();
|
| - }
|
| -
|
| - protected:
|
| - // Downloads contacts from |feed_filename| (within the chromeos/gdata/contacts
|
| - // test data directory). |min_update_time| is appended to the URL and the
|
| - // resulting contacts are swapped into |contacts|. Returns false if the
|
| - // download failed.
|
| - bool Download(const std::string& feed_filename,
|
| - const base::Time& min_update_time,
|
| - scoped_ptr<ScopedVector<contacts::Contact> >* contacts) {
|
| - DCHECK(contacts);
|
| - service_->set_contacts_feed_url_for_testing(
|
| - test_server_->GetURL(feed_filename));
|
| - service_->DownloadContacts(
|
| - base::Bind(&GDataContactsServiceTest::OnSuccess,
|
| - base::Unretained(this)),
|
| - base::Bind(&GDataContactsServiceTest::OnFailure,
|
| - base::Unretained(this)),
|
| - min_update_time);
|
| - content::RunMessageLoop();
|
| - contacts->swap(downloaded_contacts_);
|
| - return download_was_successful_;
|
| - }
|
| -
|
| - scoped_ptr<GDataContactsService> service_;
|
| - scoped_ptr<net::test_server::EmbeddedTestServer> test_server_;
|
| -
|
| - private:
|
| - // Rewrites |original_url|, a photo URL from a contacts feed, to instead point
|
| - // at a file on |test_server_|.
|
| - std::string RewritePhotoUrl(const std::string& original_url) {
|
| - return test_server_->GetURL(GURL(original_url).path()).spec();
|
| - }
|
| -
|
| - // Handles success for Download().
|
| - void OnSuccess(scoped_ptr<ScopedVector<contacts::Contact> > contacts) {
|
| - CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - download_was_successful_ = true;
|
| - downloaded_contacts_.swap(contacts);
|
| - base::MessageLoop::current()->Quit();
|
| - }
|
| -
|
| - // Handles failure for Download().
|
| - void OnFailure() {
|
| - CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - download_was_successful_ = false;
|
| - downloaded_contacts_.reset(new ScopedVector<contacts::Contact>());
|
| - base::MessageLoop::current()->Quit();
|
| - }
|
| -
|
| - // Handles a request for downloading a file. Reads a requested file and
|
| - // returns the content.
|
| - scoped_ptr<net::test_server::HttpResponse> HandleDownloadRequest(
|
| - const net::test_server::HttpRequest& request) {
|
| - // Requested url must not contain a query string.
|
| - scoped_ptr<net::test_server::BasicHttpResponse> result =
|
| - google_apis::test_util::CreateHttpResponseFromFile(
|
| - google_apis::test_util::GetTestFilePath(
|
| - std::string("chromeos/gdata/contacts") + request.relative_url));
|
| - return result.PassAs<net::test_server::HttpResponse>();
|
| - }
|
| -
|
| - base::MessageLoopForUI message_loop_;
|
| - content::TestBrowserThread ui_thread_;
|
| - content::TestBrowserThread io_thread_;
|
| - scoped_refptr<net::TestURLRequestContextGetter> request_context_getter_;
|
| -
|
| - // Was the last download successful? Used to pass the result back from
|
| - // OnSuccess() and OnFailure() to Download().
|
| - bool download_was_successful_;
|
| -
|
| - // Used to pass downloaded contacts back to Download().
|
| - scoped_ptr<ScopedVector<contacts::Contact> > downloaded_contacts_;
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -// Test that we report failure for feeds that are broken in various ways.
|
| -TEST_F(GDataContactsServiceTest, BrokenFeeds) {
|
| - scoped_ptr<ScopedVector<contacts::Contact> > contacts;
|
| - EXPECT_FALSE(Download("/some_bogus_file", base::Time(), &contacts));
|
| - EXPECT_FALSE(Download("/empty.txt", base::Time(), &contacts));
|
| - EXPECT_FALSE(Download("/not_json.txt", base::Time(), &contacts));
|
| - EXPECT_FALSE(Download("/not_dictionary.json", base::Time(), &contacts));
|
| - EXPECT_FALSE(Download("/no_feed.json", base::Time(), &contacts));
|
| - EXPECT_FALSE(Download("/no_category.json", base::Time(), &contacts));
|
| - EXPECT_FALSE(Download("/wrong_category.json", base::Time(), &contacts));
|
| -
|
| - // Missing photos should be allowed, though (as this can occur in production).
|
| - EXPECT_TRUE(Download("/feed_photo_404.json", base::Time(), &contacts));
|
| - ASSERT_EQ(static_cast<size_t>(1), contacts->size());
|
| - EXPECT_FALSE((*contacts)[0]->has_raw_untrusted_photo());
|
| -
|
| - // We should report failure when we're unable to download the contact group
|
| - // feed.
|
| - service_->clear_cached_my_contacts_group_id_for_testing();
|
| - service_->set_groups_feed_url_for_testing(
|
| - test_server_->GetURL("/404"));
|
| - EXPECT_FALSE(Download("/feed.json", base::Time(), &contacts));
|
| - EXPECT_TRUE(service_->cached_my_contacts_group_id_for_testing().empty());
|
| -
|
| - // We should also fail when the "My Contacts" group isn't listed in the group
|
| - // feed.
|
| - service_->clear_cached_my_contacts_group_id_for_testing();
|
| - service_->set_groups_feed_url_for_testing(
|
| - test_server_->GetURL("/groups_no_my_contacts.json"));
|
| - EXPECT_FALSE(Download("/feed.json", base::Time(), &contacts));
|
| - EXPECT_TRUE(service_->cached_my_contacts_group_id_for_testing().empty());
|
| -}
|
| -
|
| -// Check that we're able to download an empty feed and a normal-looking feed
|
| -// with two regular contacts and one deleted one.
|
| -TEST_F(GDataContactsServiceTest, Download) {
|
| - scoped_ptr<ScopedVector<contacts::Contact> > contacts;
|
| - EXPECT_TRUE(Download("/no_entries.json", base::Time(), &contacts));
|
| - EXPECT_TRUE(contacts->empty());
|
| -
|
| - EXPECT_TRUE(Download("/feed.json", base::Time(), &contacts));
|
| -
|
| - // Check that we got the group ID for the "My Contacts" group that's hardcoded
|
| - // in the groups feed.
|
| - EXPECT_EQ(
|
| - "http://www.google.com/m8/feeds/groups/test.user%40gmail.com/base/6",
|
| - service_->cached_my_contacts_group_id_for_testing());
|
| -
|
| - // All of these expected values are hardcoded in the feed.
|
| - scoped_ptr<contacts::Contact> contact1(new contacts::Contact);
|
| - InitContact("http://example.com/1",
|
| - "2012-06-04T15:53:36.023Z",
|
| - false, "Joe Contact", "Joe", "", "Contact", "", "",
|
| - contact1.get());
|
| - contacts::test::SetPhoto(gfx::Size(kPhotoSize, kPhotoSize), contact1.get());
|
| - contacts::test::AddEmailAddress(
|
| - "joe.contact@gmail.com",
|
| - contacts::Contact_AddressType_Relation_OTHER, "", true, contact1.get());
|
| - contacts::test::AddPostalAddress(
|
| - "345 Spear St\nSan Francisco CA 94105",
|
| - contacts::Contact_AddressType_Relation_HOME, "", false, contact1.get());
|
| -
|
| - scoped_ptr<contacts::Contact> contact2(new contacts::Contact);
|
| - InitContact("http://example.com/2",
|
| - "2012-06-21T16:20:13.208Z",
|
| - false, "Dr. Jane Liz Doe Sr.", "Jane", "Liz", "Doe", "Dr.", "Sr.",
|
| - contact2.get());
|
| - contacts::test::AddEmailAddress(
|
| - "jane.doe@gmail.com",
|
| - contacts::Contact_AddressType_Relation_HOME, "", true, contact2.get());
|
| - contacts::test::AddEmailAddress(
|
| - "me@privacy.net",
|
| - contacts::Contact_AddressType_Relation_WORK, "", false, contact2.get());
|
| - contacts::test::AddEmailAddress(
|
| - "foo@example.org",
|
| - contacts::Contact_AddressType_Relation_OTHER, "Fake", false,
|
| - contact2.get());
|
| - contacts::test::AddPhoneNumber(
|
| - "123-456-7890",
|
| - contacts::Contact_AddressType_Relation_MOBILE, "", false,
|
| - contact2.get());
|
| - contacts::test::AddPhoneNumber(
|
| - "234-567-8901",
|
| - contacts::Contact_AddressType_Relation_OTHER, "grandcentral", false,
|
| - contact2.get());
|
| - contacts::test::AddPostalAddress(
|
| - "100 Elm St\nSan Francisco, CA 94110",
|
| - contacts::Contact_AddressType_Relation_HOME, "", false, contact2.get());
|
| - contacts::test::AddInstantMessagingAddress(
|
| - "foo@example.org",
|
| - contacts::Contact_InstantMessagingAddress_Protocol_GOOGLE_TALK,
|
| - contacts::Contact_AddressType_Relation_OTHER, "", false,
|
| - contact2.get());
|
| - contacts::test::AddInstantMessagingAddress(
|
| - "12345678",
|
| - contacts::Contact_InstantMessagingAddress_Protocol_ICQ,
|
| - contacts::Contact_AddressType_Relation_OTHER, "", false,
|
| - contact2.get());
|
| -
|
| - scoped_ptr<contacts::Contact> contact3(new contacts::Contact);
|
| - InitContact("http://example.com/3",
|
| - "2012-07-23T23:07:06.133Z",
|
| - true, "", "", "", "", "", "",
|
| - contact3.get());
|
| -
|
| - EXPECT_EQ(contacts::test::VarContactsToString(
|
| - 3, contact1.get(), contact2.get(), contact3.get()),
|
| - contacts::test::ContactsToString(*contacts));
|
| -}
|
| -
|
| -// Download a feed containing more photos than we're able to download in
|
| -// parallel to check that we still end up with all the photos.
|
| -TEST_F(GDataContactsServiceTest, ParallelPhotoDownload) {
|
| - // The feed used for this test contains 8 contacts.
|
| - const int kNumContacts = 8;
|
| - service_->set_max_photo_downloads_per_second_for_testing(6);
|
| - scoped_ptr<ScopedVector<contacts::Contact> > contacts;
|
| - EXPECT_TRUE(Download("/feed_multiple_photos.json", base::Time(), &contacts));
|
| - ASSERT_EQ(static_cast<size_t>(kNumContacts), contacts->size());
|
| -
|
| - ScopedVector<contacts::Contact> expected_contacts;
|
| - for (int i = 0; i < kNumContacts; ++i) {
|
| - contacts::Contact* contact = new contacts::Contact;
|
| - InitContact(base::StringPrintf("http://example.com/%d", i + 1),
|
| - "2012-06-04T15:53:36.023Z",
|
| - false, "", "", "", "", "", "", contact);
|
| - contacts::test::SetPhoto(gfx::Size(kPhotoSize, kPhotoSize), contact);
|
| - expected_contacts.push_back(contact);
|
| - }
|
| - EXPECT_EQ(contacts::test::ContactsToString(expected_contacts),
|
| - contacts::test::ContactsToString(*contacts));
|
| -}
|
| -
|
| -TEST_F(GDataContactsServiceTest, UnicodeStrings) {
|
| - scoped_ptr<ScopedVector<contacts::Contact> > contacts;
|
| - EXPECT_TRUE(Download("/feed_unicode.json", base::Time(), &contacts));
|
| -
|
| - // All of these expected values are hardcoded in the feed.
|
| - scoped_ptr<contacts::Contact> contact1(new contacts::Contact);
|
| - InitContact("http://example.com/1", "2012-06-04T15:53:36.023Z",
|
| - false, "\xE5\xAE\x89\xE8\x97\xA4\x20\xE5\xBF\xA0\xE9\x9B\x84",
|
| - "\xE5\xBF\xA0\xE9\x9B\x84", "", "\xE5\xAE\x89\xE8\x97\xA4",
|
| - "", "", contact1.get());
|
| - scoped_ptr<contacts::Contact> contact2(new contacts::Contact);
|
| - InitContact("http://example.com/2", "2012-06-21T16:20:13.208Z",
|
| - false, "Bob Smith", "Bob", "", "Smith", "", "",
|
| - contact2.get());
|
| - EXPECT_EQ(contacts::test::VarContactsToString(
|
| - 2, contact1.get(), contact2.get()),
|
| - contacts::test::ContactsToString(*contacts));
|
| -}
|
| -
|
| -} // namespace contacts
|
|
|