blob: e23c58d96c8cd526e1e6c9a584f1a237fb69577d [file] [log] [blame]
// Copyright 2018 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 "peridot/bin/ledger/storage/fake/fake_db_factory.h"
#include <lib/fxl/files/directory.h>
#include "peridot/bin/ledger/storage/fake/fake_db.h"
namespace storage {
namespace fake {
void FakeDbFactory::GetOrCreateDb(
ledger::DetachedPath db_path, DbFactory::OnDbNotFound on_db_not_found,
fit::function<void(Status, std::unique_ptr<Db>)> callback) {
if (!files::IsDirectoryAt(db_path.root_fd(), db_path.path())) {
if (on_db_not_found == DbFactory::OnDbNotFound::RETURN) {
callback(Status::NOT_FOUND, nullptr);
return;
}
// Create the path to fake the creation of the Db at the expected
// destination.
if (!files::CreateDirectoryAt(db_path.root_fd(), db_path.path())) {
FXL_LOG(ERROR) << "Failed to create the storage directory in "
<< db_path.path();
callback(Status::INTERNAL_IO_ERROR, nullptr);
return;
}
}
callback(Status::OK, std::make_unique<FakeDb>(dispatcher_));
}
} // namespace fake
} // namespace storage