sapling/eden/fs/cli/test/util_test.py
Ratnadeep Joshi 6447950e1a Move cli/ directory from eden/ to eden/fs (Without changing namespace)
Summary:
[edenfs] Move cli/ directory from eden/ to eden/fs (Without changing
namespace)

Reviewed By: simpkins

Differential Revision: D20505093

fbshipit-source-id: 1975afac2ca1cd70ca407dde485c97254f4cc1e9
2020-03-25 11:18:30 -07:00

181 lines
5.5 KiB
Python

#!/usr/bin/env python3
# Copyright (c) Facebook, Inc. and its affiliates.
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2.
import stat
import unittest
from facebook.eden.ttypes import TreeInodeDebugInfo, TreeInodeEntryDebugInfo
from .. import util
class UtilTest(unittest.TestCase):
def test_is_valid_sha1(self) -> None:
def is_valid(sha1: str) -> bool:
return util.is_valid_sha1(sha1)
self.assertTrue(is_valid("0123456789abcabcabcd0123456789abcabcabcd"))
self.assertTrue(is_valid("0" * 40))
self.assertFalse(is_valid("0123456789abcabcabcd0123456789abcabcabc"))
self.assertFalse(is_valid("z123456789abcabcabcd0123456789abcabcabcd"))
self.assertFalse(is_valid(""))
self.assertFalse(is_valid("abc"))
self.assertFalse(is_valid("z" * 40))
INODE_RESULTS_0 = [
TreeInodeDebugInfo(
inodeNumber=1,
path=b"some_path/d1",
materialized=True,
treeHash=b"abc",
entries=[
TreeInodeEntryDebugInfo(
name=b"read_file",
inodeNumber=2,
mode=stat.S_IFREG,
loaded=True,
materialized=False,
hash=b"1abc",
fileSize=300,
),
TreeInodeEntryDebugInfo(
name=b"written_file",
inodeNumber=3,
mode=stat.S_IFREG,
loaded=True,
materialized=True,
fileSize=400,
),
],
refcount=0,
)
]
def test_read_write_separation(self) -> None:
read_files, written_files = util.split_inodes_by_operation_type(
self.INODE_RESULTS_0
)
self.assertListEqual(read_files, [("some_path/d1/read_file", 300)])
self.assertListEqual(written_files, [("some_path/d1/written_file", 400)])
INODE_RESULTS_1 = [
TreeInodeDebugInfo(
inodeNumber=1,
path=b"some_path/d1",
materialized=True,
treeHash=b"abc",
entries=[
TreeInodeEntryDebugInfo(
name=b"read_file",
inodeNumber=2,
mode=stat.S_IFLNK,
loaded=True,
materialized=False,
hash=b"1abc",
fileSize=300,
),
TreeInodeEntryDebugInfo(
name=b"written_file",
inodeNumber=3,
mode=stat.S_IFDIR,
loaded=True,
materialized=True,
fileSize=400,
),
],
refcount=0,
)
]
def test_ignore_symlinks_and_directories(self) -> None:
read_files, written_files = util.split_inodes_by_operation_type(
self.INODE_RESULTS_1
)
self.assertListEqual(read_files, [])
self.assertListEqual(written_files, [])
INODE_RESULTS_2 = [
TreeInodeDebugInfo(
inodeNumber=1,
path=b"some_path/d1",
materialized=True,
treeHash=b"abc",
entries=[
TreeInodeEntryDebugInfo(
name=b"read_file",
inodeNumber=2,
mode=stat.S_IFREG,
loaded=True,
materialized=False,
hash=b"1abc",
fileSize=300,
)
],
refcount=0,
),
TreeInodeDebugInfo(
inodeNumber=3,
path=b"some_path/d1",
materialized=True,
treeHash=b"abc",
entries=[
TreeInodeEntryDebugInfo(
name=b"written_file",
inodeNumber=4,
mode=stat.S_IFREG,
loaded=True,
materialized=True,
fileSize=400,
)
],
refcount=0,
),
]
def test_multiple_trees(self) -> None:
read_files, written_files = util.split_inodes_by_operation_type(
self.INODE_RESULTS_2
)
self.assertListEqual(read_files, [("some_path/d1/read_file", 300)])
self.assertListEqual(written_files, [("some_path/d1/written_file", 400)])
INODE_RESULTS_3 = [
TreeInodeDebugInfo(
inodeNumber=1,
path=b"some_path/d1",
materialized=True,
treeHash=b"abc",
entries=[
TreeInodeEntryDebugInfo(
name=b"read_file",
inodeNumber=2,
mode=stat.S_IFREG,
loaded=False,
materialized=False,
hash=b"1abc",
fileSize=300,
),
TreeInodeEntryDebugInfo(
name=b"written_file",
inodeNumber=3,
mode=stat.S_IFREG,
loaded=False,
materialized=True,
fileSize=400,
),
],
refcount=0,
)
]
def test_ignore_unloaded(self) -> None:
read_files, written_files = util.split_inodes_by_operation_type(
self.INODE_RESULTS_3
)
self.assertListEqual(read_files, [])
self.assertListEqual(written_files, [])