connector_settings_unittest.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/service/cloud_print/connector_settings.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/file_util.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/message_loop.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/message_loop_proxy.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/scoped_temp_dir.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/service/cloud_print/cloud_print_consts.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/service/service_process_prefs.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kServiceStateContent[] =
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "{"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "   'cloud_print': {"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "      'auth_token': 'token',"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "      'email': 'user@gmail.com',"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "      'enabled': true,"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "      'proxy_id': 'PROXY',"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "      'robot_email': '123@cloudprint.googleusercontent.com',"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "      'robot_refresh_token': '123',"
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "      'service_url': 'http://cp.google.com',"
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "      'xmpp_auth_token': 'xmp token',"
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "      'connect_new_printers': false,"
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "      'xmpp_ping_enabled': true,"
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "      'xmpp_ping_timeout_sec': 256,"
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "      'printer_blacklist': ["
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "         'prn1',"
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "         'prn2'"
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "       ],"
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "      'print_system_settings': {"
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "         'delete_on_enum_fail' : true"
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "       }"
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "   }"
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "}";
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ConnectorSettingsTest : public testing::Test {
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetUp() OVERRIDE {
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    message_loop_proxy_ = base::MessageLoopProxy::current();
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ServiceProcessPrefs* CreateTestFile(const char* json) {
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FilePath file_name = temp_dir_.path().AppendASCII("file.txt");
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    file_util::Delete(file_name, false);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (json) {
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      std::string content = json;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      std::replace(content.begin(), content.end(), '\'', '"');
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      file_util::WriteFile(file_name, content.c_str(), content.size());
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ServiceProcessPrefs* prefs =
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new ServiceProcessPrefs(file_name, message_loop_proxy_);
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    prefs->ReadPrefs();
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return prefs;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ScopedTempDir temp_dir_;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MessageLoop message_loop_;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<base::MessageLoopProxy> message_loop_proxy_;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ConnectorSettingsTest, InitFromEmpty) {
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char* const kEmptyJSons[] = {
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NULL,
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "{}",
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "{'foo': []}",
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "{'foo',,}",
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < arraysize(kEmptyJSons); ++i) {
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<ServiceProcessPrefs> prefs(CreateTestFile(kEmptyJSons[i]));
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ConnectorSettings settings;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    settings.InitFrom(prefs.get());
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ("https://www.google.com/cloudprint",
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              settings.server_url().spec());
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(settings.proxy_id().empty());
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(settings.delete_on_enum_fail());
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(NULL, settings.print_system_settings());
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(settings.connect_new_printers());
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(settings.xmpp_ping_enabled());
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(settings.IsPrinterBlacklisted("prn1"));
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ConnectorSettingsTest, InitFromFile) {
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<ServiceProcessPrefs> prefs(CreateTestFile(kServiceStateContent));
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ConnectorSettings settings;
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  settings.InitFrom(prefs.get());
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("http://cp.google.com/", settings.server_url().spec());
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("PROXY", settings.proxy_id());
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(settings.proxy_id().empty());
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(settings.delete_on_enum_fail());
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(settings.print_system_settings());
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(settings.connect_new_printers());
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(settings.xmpp_ping_enabled());
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(settings.xmpp_ping_timeout_sec(), 256);
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(settings.IsPrinterBlacklisted("prn0"));
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(settings.IsPrinterBlacklisted("prn1"));
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ConnectorSettingsTest, CopyFrom) {
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<ServiceProcessPrefs> prefs(CreateTestFile(kServiceStateContent));
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ConnectorSettings settings1;
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  settings1.InitFrom(prefs.get());
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ConnectorSettings settings2;
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  settings2.CopyFrom(settings1);
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(settings1.server_url(), settings2.server_url());
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(settings1.proxy_id(), settings2.proxy_id());
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(settings1.delete_on_enum_fail(), settings2.delete_on_enum_fail());
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(settings1.print_system_settings()->size(),
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            settings2.print_system_settings()->size());
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(settings1.connect_new_printers(), settings2.connect_new_printers());
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(settings1.xmpp_ping_enabled(), settings2.xmpp_ping_enabled());
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(settings1.xmpp_ping_timeout_sec(),
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            settings2.xmpp_ping_timeout_sec());
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(settings2.IsPrinterBlacklisted("prn1"));
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ConnectorSettingsTest, SettersTest) {
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<ServiceProcessPrefs> prefs(CreateTestFile("{}"));
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ConnectorSettings settings;
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  settings.InitFrom(prefs.get());
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(settings.xmpp_ping_enabled());
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set and check valid settings.
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  settings.set_xmpp_ping_enabled(true);
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  settings.SetXmppPingTimeoutSec(256);
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(settings.xmpp_ping_enabled());
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(settings.xmpp_ping_timeout_sec(), 256);
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set invalid settings, and check correct defaults.
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  settings.SetXmppPingTimeoutSec(1);
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(settings.xmpp_ping_timeout_sec(), kMinimumXmppPingTimeoutSecs);
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
146