summaryrefslogtreecommitdiff
path: root/test/buildtool/file_system/object_cas.test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/buildtool/file_system/object_cas.test.cpp')
-rw-r--r--test/buildtool/file_system/object_cas.test.cpp104
1 files changed, 104 insertions, 0 deletions
diff --git a/test/buildtool/file_system/object_cas.test.cpp b/test/buildtool/file_system/object_cas.test.cpp
new file mode 100644
index 00000000..bf20a287
--- /dev/null
+++ b/test/buildtool/file_system/object_cas.test.cpp
@@ -0,0 +1,104 @@
+// Copyright 2022 Huawei Cloud Computing Technology Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include <string>
+
+#include "catch2/catch.hpp"
+#include "src/buildtool/crypto/hash_function.hpp"
+#include "src/buildtool/file_system/file_system_manager.hpp"
+#include "src/buildtool/file_system/object_cas.hpp"
+#include "test/utils/hermeticity/local.hpp"
+
+TEST_CASE_METHOD(HermeticLocalTestFixture, "ObjectCAS", "[file_system]") {
+ std::string test_content{"test"};
+ auto test_digest = ArtifactDigest::Create<ObjectType::File>(test_content);
+
+ SECTION("CAS for files") {
+ ObjectCAS<ObjectType::File> cas{StorageConfig::GenerationCacheDir(0) /
+ "casf"};
+ CHECK(not cas.BlobPath(test_digest));
+
+ SECTION("Add blob from bytes and verify") {
+ // add blob
+ auto cas_digest = cas.StoreBlobFromBytes(test_content);
+ CHECK(cas_digest);
+ CHECK(std::equal_to<bazel_re::Digest>{}(*cas_digest, test_digest));
+
+ // verify blob
+ auto blob_path = cas.BlobPath(*cas_digest);
+ REQUIRE(blob_path);
+ auto const cas_content = FileSystemManager::ReadFile(*blob_path);
+ CHECK(cas_content.has_value());
+ CHECK(cas_content == test_content);
+ CHECK(not FileSystemManager::IsExecutable(*blob_path));
+ }
+
+ SECTION("Add blob from file") {
+ CHECK(FileSystemManager::CreateDirectory("tmp"));
+ CHECK(FileSystemManager::WriteFile(test_content, "tmp/test"));
+
+ // add blob
+ auto cas_digest = cas.StoreBlobFromFile("tmp/test");
+ CHECK(cas_digest);
+ CHECK(std::equal_to<bazel_re::Digest>{}(*cas_digest, test_digest));
+
+ // verify blob
+ auto blob_path = cas.BlobPath(*cas_digest);
+ REQUIRE(blob_path);
+ auto const cas_content = FileSystemManager::ReadFile(*blob_path);
+ CHECK(cas_content.has_value());
+ CHECK(cas_content == test_content);
+ CHECK(not FileSystemManager::IsExecutable(*blob_path));
+ }
+ }
+
+ SECTION("CAS for executables") {
+ ObjectCAS<ObjectType::Executable> cas{
+ StorageConfig::GenerationCacheDir(0) / "casx"};
+ CHECK(not cas.BlobPath(test_digest));
+
+ SECTION("Add blob from bytes and verify") {
+ // add blob
+ auto cas_digest = cas.StoreBlobFromBytes(test_content);
+ CHECK(cas_digest);
+ CHECK(std::equal_to<bazel_re::Digest>{}(*cas_digest, test_digest));
+
+ // verify blob
+ auto blob_path = cas.BlobPath(*cas_digest);
+ REQUIRE(blob_path);
+ auto const cas_content = FileSystemManager::ReadFile(*blob_path);
+ CHECK(cas_content.has_value());
+ CHECK(cas_content == test_content);
+ CHECK(FileSystemManager::IsExecutable(*blob_path));
+ }
+
+ SECTION("Add blob from file") {
+ CHECK(FileSystemManager::CreateDirectory("tmp"));
+ CHECK(FileSystemManager::WriteFile(test_content, "tmp/test"));
+
+ // add blob
+ auto cas_digest = cas.StoreBlobFromFile("tmp/test");
+ CHECK(cas_digest);
+ CHECK(std::equal_to<bazel_re::Digest>{}(*cas_digest, test_digest));
+
+ // verify blob
+ auto blob_path = cas.BlobPath(*cas_digest);
+ REQUIRE(blob_path);
+ auto const cas_content = FileSystemManager::ReadFile(*blob_path);
+ CHECK(cas_content.has_value());
+ CHECK(cas_content == test_content);
+ CHECK(FileSystemManager::IsExecutable(*blob_path));
+ }
+ }
+}