| // Copyright 2021 The Chromium OS 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 "federated/mock_example_database.h" |
| |
| #include <cinttypes> |
| #include <utility> |
| |
| #include <base/check_op.h> |
| #include <base/strings/stringprintf.h> |
| |
| #include "federated/test_utils.h" |
| |
| namespace federated { |
| |
| namespace { |
| constexpr char kCreateTableSql[] = |
| "CREATE TABLE fake_client (" |
| " id INTEGER PRIMARY KEY AUTOINCREMENT" |
| " NOT NULL," |
| " example BLOB NOT NULL," |
| " timestamp INTEGER NOT NULL" |
| ")"; |
| } // namespace |
| |
| std::tuple<std::unique_ptr<sqlite3, decltype(&sqlite3_close)>, |
| ExampleDatabase::Iterator> |
| MockExampleDatabase::FakeIterator(const int n) { |
| // Create in-memory database. |
| sqlite3* db; |
| const int result = sqlite3_open(":memory:", &db); |
| auto db_ptr = |
| std::unique_ptr<sqlite3, decltype(&sqlite3_close)>(db, &sqlite3_close); |
| CHECK_EQ(result, SQLITE_OK); |
| |
| // Create fake client table. |
| CHECK_EQ(sqlite3_exec(db, kCreateTableSql, nullptr, nullptr, nullptr), |
| SQLITE_OK); |
| |
| // Insert the specified examples. |
| for (int i = 1; i <= n; ++i) { |
| const std::string sql_code = base::StringPrintf( |
| "INSERT INTO fake_client (example, timestamp) VALUES " |
| "('example_%d', %" PRId64 ")", |
| i, SecondsAfterEpoch(i).ToJavaTime()); |
| |
| CHECK_EQ(sqlite3_exec(db, sql_code.c_str(), nullptr, nullptr, nullptr), |
| SQLITE_OK); |
| } |
| |
| return std::make_tuple(std::move(db_ptr), Iterator(db, "fake_client")); |
| } |
| |
| } // namespace federated |