From 68bda55b34f06254201a1b7bfa6a70c194f193f5 Mon Sep 17 00:00:00 2001
From: Martin Blanchard <martin.blanchard@codethink.co.uk>
Date: Fri, 14 Sep 2018 16:55:17 +0100
Subject: [PATCH] tests/utils/cas.py: Extend CAS server helper

https://gitlab.com/BuildGrid/buildgrid/issues/79
---
 tests/utils/cas.py | 42 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)

diff --git a/tests/utils/cas.py b/tests/utils/cas.py
index f4caf99cc..83968cb0a 100644
--- a/tests/utils/cas.py
+++ b/tests/utils/cas.py
@@ -30,6 +30,7 @@ from buildgrid.server.cas.service import ContentAddressableStorageService
 from buildgrid.server.cas.instance import ByteStreamInstance
 from buildgrid.server.cas.instance import ContentAddressableStorageInstance
 from buildgrid.server.cas.storage.disk import DiskStorage
+from buildgrid.utils import create_digest, merkle_tree_maker
 
 
 @contextmanager
@@ -124,6 +125,15 @@ class Server:
     def get(self, digest):
         return self.__storage.get_blob(digest).read()
 
+    def store_blob(self, blob):
+        digest = create_digest(blob)
+        write_buffer = self.__storage.begin_write(digest)
+        write_buffer.write(blob)
+
+        self.__storage.commit_write(digest, write_buffer)
+
+        return digest
+
     def compare_blobs(self, digest, blob):
         if not self.__storage.has_blob(digest):
             return False
@@ -133,6 +143,16 @@ class Server:
 
         return blob == stored_blob
 
+    def store_message(self, message):
+        message_blob = message.SerializeToString()
+        message_digest = create_digest(message_blob)
+        write_buffer = self.__storage.begin_write(message_digest)
+        write_buffer.write(message_blob)
+
+        self.__storage.commit_write(message_digest, write_buffer)
+
+        return message_digest
+
     def compare_messages(self, digest, message):
         if not self.__storage.has_blob(digest):
             return False
@@ -144,6 +164,17 @@ class Server:
 
         return message_blob == stored_blob
 
+    def store_file(self, file_path):
+        with open(file_path, 'rb') as file_bytes:
+            file_blob = file_bytes.read()
+        file_digest = create_digest(file_blob)
+        write_buffer = self.__storage.begin_write(file_digest)
+        write_buffer.write(file_blob)
+
+        self.__storage.commit_write(file_digest, write_buffer)
+
+        return file_digest
+
     def compare_files(self, digest, file_path):
         if not self.__storage.has_blob(digest):
             return False
@@ -156,6 +187,17 @@ class Server:
 
         return file_blob == stored_blob
 
+    def store_folder(self, folder_path):
+        last_digest = None
+        for node, blob, _ in merkle_tree_maker(folder_path):
+            write_buffer = self.__storage.begin_write(node.digest)
+            write_buffer.write(blob)
+
+            self.__storage.commit_write(node.digest, write_buffer)
+            last_digest = node.digest
+
+        return last_digest
+
     def compare_directories(self, digest, directory_path):
         if not self.__storage.has_blob(digest):
             return False
-- 
GitLab