// Copyright 2019 The Fuchsia 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 "src/ledger/bin/storage/impl/leveldb.h"

#include <memory>

#include "src/ledger/bin/storage/public/db_unittest.h"
#include "src/ledger/lib/files/detached_path.h"

namespace storage {
namespace {

class LevelDbTestFactory : public DbTestFactory {
 public:
  LevelDbTestFactory() = default;

  std::unique_ptr<Db> GetDb(ledger::Environment* environment,
                            ledger::ScopedTmpLocation* tmp_location) override {
    ledger::DetachedPath db_path = tmp_location->path().SubPath("db");
    auto db =
        std::make_unique<LevelDb>(environment->file_system(), environment->dispatcher(), db_path);
    Status status = db->Init();
    if (status != Status::OK)
      return nullptr;
    return std::move(db);
  }
};

INSTANTIATE_TEST_SUITE_P(LevelDbTest, DbTest,
                         testing::Values([] { return std::make_unique<LevelDbTestFactory>(); }));
}  // namespace
}  // namespace storage
