// Copyright (c) 2011 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 "base/file_util.h"
#include "base/path_service.h"
#include "base/string_number_conversions.h"
#include "base/time.h"
#include "chrome/browser/webdata/web_database.h"
#include "chrome/common/chrome_paths.h"
#include "testing/gtest/include/gtest/gtest.h"
using base::Time;
class TokenServiceTableTest : public testing::Test {
public:
TokenServiceTableTest() {}
virtual ~TokenServiceTableTest() {}
protected:
virtual void SetUp() {
PathService::Get(chrome::DIR_TEST_DATA, &file_);
const std::string test_db = "TestWebDatabase" +
base::Int64ToString(Time::Now().ToTimeT()) +
".db";
file_ = file_.AppendASCII(test_db);
file_util::Delete(file_, false);
}
virtual void TearDown() {
file_util::Delete(file_, false);
}
FilePath file_;
private:
DISALLOW_COPY_AND_ASSIGN(TokenServiceTableTest);
};
TEST_F(TokenServiceTableTest, TokenServiceGetAllRemoveAll) {
WebDatabase db;
ASSERT_EQ(sql::INIT_OK, db.Init(file_));
std::map<std::string, std::string> out_map;
std::string service;
std::string service2;
service = "testservice";
service2 = "othertestservice";
EXPECT_TRUE(db.GetTokenServiceTable()->GetAllTokens(&out_map));
EXPECT_TRUE(out_map.empty());
// Check that get all tokens works
EXPECT_TRUE(db.GetTokenServiceTable()->SetTokenForService(service,
"pepperoni"));
EXPECT_TRUE(db.GetTokenServiceTable()->SetTokenForService(service2, "steak"));
EXPECT_TRUE(db.GetTokenServiceTable()->GetAllTokens(&out_map));
EXPECT_EQ(out_map.find(service)->second, "pepperoni");
EXPECT_EQ(out_map.find(service2)->second, "steak");
out_map.clear();
// Purge
EXPECT_TRUE(db.GetTokenServiceTable()->RemoveAllTokens());
EXPECT_TRUE(db.GetTokenServiceTable()->GetAllTokens(&out_map));
EXPECT_TRUE(out_map.empty());
// Check that you can still add it back in
EXPECT_TRUE(db.GetTokenServiceTable()->SetTokenForService(service, "cheese"));
EXPECT_TRUE(db.GetTokenServiceTable()->GetAllTokens(&out_map));
EXPECT_EQ(out_map.find(service)->second, "cheese");
}
TEST_F(TokenServiceTableTest, TokenServiceGetSet) {
WebDatabase db;
ASSERT_EQ(sql::INIT_OK, db.Init(file_));
std::map<std::string, std::string> out_map;
std::string service;
service = "testservice";
EXPECT_TRUE(db.GetTokenServiceTable()->GetAllTokens(&out_map));
EXPECT_TRUE(out_map.empty());
EXPECT_TRUE(db.GetTokenServiceTable()->SetTokenForService(service,
"pepperoni"));
EXPECT_TRUE(db.GetTokenServiceTable()->GetAllTokens(&out_map));
EXPECT_EQ(out_map.find(service)->second, "pepperoni");
out_map.clear();
// try blanking it - won't remove it from the db though!
EXPECT_TRUE(db.GetTokenServiceTable()->SetTokenForService(service, ""));
EXPECT_TRUE(db.GetTokenServiceTable()->GetAllTokens(&out_map));
EXPECT_EQ(out_map.find(service)->second, "");
out_map.clear();
// try mutating it
EXPECT_TRUE(db.GetTokenServiceTable()->SetTokenForService(service, "ham"));
EXPECT_TRUE(db.GetTokenServiceTable()->GetAllTokens(&out_map));
EXPECT_EQ(out_map.find(service)->second, "ham");
}