summaryrefslogtreecommitdiffstats
path: root/webkit/database/quota_table_unittest.cc
blob: 492c7b9757f3d1bf4202cf6ab82f05cbd7ae53c4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// 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/string_util.h"
#include "base/utf_string_conversions.h"
#include "sql/connection.h"
#include "sql/statement.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "webkit/database/quota_table.h"

namespace {

class TestErrorDelegate : public sql::ErrorDelegate {
 public:
  virtual ~TestErrorDelegate() { }
  virtual int OnError(
      int error, sql::Connection* connection, sql::Statement* stmt) {
    return error;
  }
};

}  // namespace

namespace webkit_database {

static bool QuotaTableIsEmpty(sql::Connection* db) {
  sql::Statement statement(db->GetCachedStatement(
      SQL_FROM_HERE, "SELECT COUNT(*) FROM Quota"));
  return (statement.is_valid() && statement.Step() && !statement.ColumnInt(0));
}

TEST(QuotaTableTest, TestIt) {
  // Initialize the 'Quota' table.
  sql::Connection db;

  // Set an error delegate that will make all operations return false on error.
  scoped_refptr<TestErrorDelegate> error_delegate(new TestErrorDelegate());
  db.set_error_delegate(error_delegate);

  // Initialize the temp dir and the 'Databases' table.
  EXPECT_TRUE(db.OpenInMemory());
  QuotaTable quota_table(&db);
  EXPECT_TRUE(quota_table.Init());

  // The 'Quota' table should be empty.
  EXPECT_TRUE(QuotaTableIsEmpty(&db));

  // Set and check the quota for a new origin.
  string16 origin = ASCIIToUTF16("origin");
  EXPECT_TRUE(quota_table.SetOriginQuota(origin, 1000));
  EXPECT_EQ(1000, quota_table.GetOriginQuota(origin));

  // Reset and check the quota for the same origin.
  EXPECT_TRUE(quota_table.SetOriginQuota(origin, 2000));
  EXPECT_EQ(2000, quota_table.GetOriginQuota(origin));

  // Clear the quota for an origin
  EXPECT_TRUE(quota_table.ClearOriginQuota(origin));
  EXPECT_TRUE(quota_table.GetOriginQuota(origin) < 0);

  // Check that there's no quota set for unknown origins.
  EXPECT_TRUE(quota_table.GetOriginQuota(ASCIIToUTF16("unknown_origin")) < 0);
}

}  // namespace webkit_database