LCOV - code coverage report
Current view: top level - frontend/handlers - storage_read_test_fixture.h (source / functions) Coverage Total Hit
Test: _coverage_report.dat Lines: 100.0 % 53 53
Test Date: 2026-07-02 21:01:18 Functions: 100.0 % 5 5

            Line data    Source code
       1              : #ifndef BIGQUERY_EMULATOR_FRONTEND_HANDLERS_STORAGE_READ_TEST_FIXTURE_H_
       2              : #define BIGQUERY_EMULATOR_FRONTEND_HANDLERS_STORAGE_READ_TEST_FIXTURE_H_
       3              : 
       4              : #include <cstdint>
       5              : #include <cstdlib>
       6              : #include <filesystem>
       7              : #include <memory>
       8              : #include <random>
       9              : #include <string>
      10              : #include <system_error>
      11              : #include <utility>
      12              : #include <vector>
      13              : 
      14              : #include "absl/strings/str_cat.h"
      15              : #include "backend/schema/schema.h"
      16              : #include "backend/storage/duckdb/duckdb_storage.h"
      17              : #include "backend/storage/storage.h"
      18              : #include "frontend/handlers/storage_read.h"
      19              : #include "gtest/gtest.h"
      20              : #include "proto/storage_read.pb.h"
      21              : 
      22              : namespace bigquery_emulator {
      23              : namespace frontend {
      24              : 
      25              : namespace fs = std::filesystem;
      26              : 
      27           27 : inline fs::path MakeTempDataDir(absl::string_view prefix) {
      28           27 :   const char* tmpdir_env = std::getenv("TMPDIR");
      29           27 :   const std::string tmpdir = tmpdir_env != nullptr ? tmpdir_env : "/tmp";
      30           27 :   std::random_device rd;
      31           27 :   std::seed_seq seed{rd(), rd()};
      32           27 :   std::mt19937_64 rng(seed);
      33           27 :   fs::path out = fs::path(tmpdir) /
      34           27 :                  absl::StrCat("bqemu-", std::string(prefix), "-", rng());
      35           27 :   std::error_code ec;
      36           27 :   fs::remove_all(out, ec);
      37           27 :   return out;
      38           27 : }
      39              : 
      40              : class StorageReadServiceTest : public ::testing::Test {
      41              :  protected:
      42           17 :   void SetUp() override {
      43           17 :     data_dir_ = MakeTempDataDir("storage-read-test");
      44           17 :     auto opened =
      45           17 :         backend::storage::duckdb::DuckDBStorage::Open(data_dir_.string());
      46           34 :     ASSERT_TRUE(opened.ok()) << opened.status();
      47           17 :     storage_ = std::move(opened).value();
      48           17 :     service_ = std::make_unique<StorageReadService>(storage_.get());
      49           17 :   }
      50              : 
      51           17 :   void TearDown() override {
      52           17 :     service_.reset();
      53           17 :     storage_.reset();
      54           17 :     std::error_code ec;
      55           17 :     fs::remove_all(data_dir_, ec);
      56           17 :   }
      57              : 
      58           12 :   void CreatePeopleTable() {
      59           12 :     backend::schema::TableSchema schema;
      60           12 :     backend::schema::ColumnSchema id;
      61           12 :     id.name = "id";
      62           12 :     id.type = backend::schema::ColumnType::kInt64;
      63           12 :     id.mode = backend::schema::ColumnMode::kRequired;
      64           12 :     schema.columns.push_back(id);
      65           12 :     backend::schema::ColumnSchema name;
      66           12 :     name.name = "name";
      67           12 :     name.type = backend::schema::ColumnType::kString;
      68           12 :     name.mode = backend::schema::ColumnMode::kNullable;
      69           12 :     schema.columns.push_back(name);
      70           12 :     backend::schema::ColumnSchema tags;
      71           12 :     tags.name = "tags";
      72           12 :     tags.type = backend::schema::ColumnType::kString;
      73           12 :     tags.mode = backend::schema::ColumnMode::kRepeated;
      74           12 :     schema.columns.push_back(tags);
      75           12 :     ASSERT_TRUE(storage_->CreateDataset({"proj-test", "ds"}, "US").ok());
      76           12 :     ASSERT_TRUE(storage_->CreateTable({"proj-test", "ds", "t"}, schema).ok());
      77           12 :   }
      78              : 
      79           14 :   v1::CreateReadSessionRequest MakePeopleRequest() {
      80           14 :     v1::CreateReadSessionRequest req;
      81           14 :     req.set_parent("projects/proj-test");
      82           14 :     req.mutable_read_session()->set_table(
      83           14 :         "projects/proj-test/datasets/ds/tables/t");
      84           14 :     return req;
      85           14 :   }
      86              : 
      87              :   fs::path data_dir_{};
      88              :   std::unique_ptr<backend::storage::duckdb::DuckDBStorage> storage_{};
      89              :   std::unique_ptr<StorageReadService> service_{};
      90              : };
      91              : 
      92              : }  // namespace frontend
      93              : }  // namespace bigquery_emulator
      94              : 
      95              : #endif  // BIGQUERY_EMULATOR_FRONTEND_HANDLERS_STORAGE_READ_TEST_FIXTURE_H_
        

Generated by: LCOV version 2.0-1