def testStatExtAttrUnicode(self): with temp.AutoTempFilePath() as temp_filepath: name_0 = "user.żółć".encode("utf-8") value_0 = "jaźń".encode("utf-8") filesystem_test_lib.SetExtAttr(temp_filepath, name=name_0, value=value_0) name_1 = "user.rtęć".encode("utf-8") value_1 = "kość".encode("utf-8") filesystem_test_lib.SetExtAttr(temp_filepath, name=name_1, value=value_1) action = rdf_file_finder.FileFinderAction.Stat( collect_ext_attrs=True) results = self._RunFileFinder([temp_filepath], action) self.assertLen(results, 1) ext_attrs = results[0].stat_entry.ext_attrs self.assertLen(ext_attrs, 2) self.assertEqual(ext_attrs[0].name, name_0) self.assertEqual(ext_attrs[0].value, value_0) self.assertEqual(ext_attrs[1].name, name_1) self.assertEqual(ext_attrs[1].value, value_1)
def testExtAttrsCollection(self): with temp.AutoTempDirPath(remove_non_empty=True) as temp_dirpath: foo_filepath = temp.TempFilePath(dir=temp_dirpath) filesystem_test_lib.SetExtAttr(foo_filepath, name="user.quux", value="foo") bar_filepath = temp.TempFilePath(dir=temp_dirpath) filesystem_test_lib.SetExtAttr(bar_filepath, name="user.quux", value="bar") baz_filepath = temp.TempFilePath(dir=temp_dirpath) filesystem_test_lib.SetExtAttr(baz_filepath, name="user.quux", value="baz") request = rdf_client_fs.FindSpec(pathspec=rdf_paths.PathSpec( path=temp_dirpath, pathtype=rdf_paths.PathSpec.PathType.OS), path_glob="*", collect_ext_attrs=True) hits = self.RunAction(searching.Find, request) self.assertLen(hits, 3) values = [] for hit in hits: self.assertLen(hit.ext_attrs, 1) values.append(hit.ext_attrs[0].value) self.assertCountEqual(values, [b"foo", b"bar", b"baz"])
def testStatExtAttrs(self): with temp.AutoTempFilePath() as temp_filepath: filesystem_test_lib.SetExtAttr(temp_filepath, name=b"user.foo", value=b"norf") filesystem_test_lib.SetExtAttr(temp_filepath, name=b"user.bar", value=b"quux") action = rdf_file_finder.FileFinderAction.Stat( collect_ext_attrs=True) results = self._RunFileFinder([temp_filepath], action) self.assertLen(results, 1) ext_attrs = results[0].stat_entry.ext_attrs self.assertEqual(ext_attrs[0].name, b"user.foo") self.assertEqual(ext_attrs[0].value, b"norf") self.assertEqual(ext_attrs[1].name, b"user.bar") self.assertEqual(ext_attrs[1].value, b"quux") action = rdf_file_finder.FileFinderAction.Stat( collect_ext_attrs=False) results = self._RunFileFinder([temp_filepath], action) self.assertLen(results, 1) ext_attrs = results[0].stat_entry.ext_attrs self.assertFalse(ext_attrs)
def testMany(self): with temp.AutoTempFilePath() as temp_filepath: filesystem_test_lib.SetExtAttr( temp_filepath, name=b"user.foo", value=b"bar") filesystem_test_lib.SetExtAttr( temp_filepath, name=b"user.quux", value=b"norf") attrs = list(client_utils_linux.GetExtAttrs(temp_filepath)) self.assertLen(attrs, 2) self.assertEqual(attrs[0].name, b"user.foo") self.assertEqual(attrs[0].value, b"bar") self.assertEqual(attrs[1].name, b"user.quux") self.assertEqual(attrs[1].value, b"norf")
def testFileFinderStatExtAttrs(self): with temp.AutoTempFilePath() as temp_filepath: filesystem_test_lib.SetExtAttr( temp_filepath, name=b"user.bar", value=b"quux") filesystem_test_lib.SetExtAttr( temp_filepath, name=b"user.baz", value=b"norf") action = rdf_file_finder.FileFinderAction.Stat(collect_ext_attrs=True) results = self.RunFlow(action=action, paths=[temp_filepath]) self.assertLen(results, 1) stat_entry = results[0].stat_entry self.assertCountEqual(stat_entry.ext_attrs, [ rdf_client_fs.ExtAttr(name=b"user.bar", value=b"quux"), rdf_client_fs.ExtAttr(name=b"user.baz", value=b"norf"), ])
def testStatExtAttrBytesName(self): with temp.AutoTempFilePath() as temp_filepath: name = b"user.\xDE\xAD\xBE\xEF" value = b"bar" filesystem_test_lib.SetExtAttr(temp_filepath, name=name, value=value) # This should not explode (`xattr` does not handle non-unicode names). action = rdf_file_finder.FileFinderAction.Stat(collect_ext_attrs=True) results = self._RunFileFinder([temp_filepath], action) self.assertLen(results, 1)
def testAttrChangeAfterListing(self, listxattr): with temp.AutoTempFilePath() as temp_filepath: filesystem_test_lib.SetExtAttr( temp_filepath, name=b"user.bar", value=b"baz") attrs = list(client_utils_linux.GetExtAttrs(temp_filepath)) self.assertTrue(listxattr.called) self.assertLen(attrs, 1) self.assertEqual(attrs[0].name, b"user.bar") self.assertEqual(attrs[0].value, b"baz")
def testStatExtAttrsDisabled(self): with temp.AutoTempFilePath() as temp_filepath: filesystem_test_lib.SetExtAttr( temp_filepath, name="user.foo", value="bar") pathspec = rdf_paths.PathSpec( path=temp_filepath, pathtype=rdf_paths.PathSpec.PathType.OS) request = rdf_client_action.GetFileStatRequest( pathspec=pathspec, collect_ext_attrs=False) results = self.RunAction(standard.GetFileStat, request) self.assertLen(results, 1) self.assertEmpty(results[0].ext_attrs)
def testStatExtAttrBytesValue(self): with temp.AutoTempFilePath() as temp_filepath: name = b"user.foo" value = b"\xDE\xAD\xBE\xEF" filesystem_test_lib.SetExtAttr(temp_filepath, name=name, value=value) action = rdf_file_finder.FileFinderAction.Stat(collect_ext_attrs=True) results = self._RunFileFinder([temp_filepath], action) self.assertLen(results, 1) ext_attrs = results[0].stat_entry.ext_attrs self.assertLen(ext_attrs, 1) self.assertEqual(ext_attrs[0].name, name) self.assertEqual(ext_attrs[0].value, value)