def testIsDirectoryFlag(self): # Set up a directory. dir_path = "fs/os/Random/Directory" path_type, components = rdf_objects.ParseCategorizedPath(dir_path) client_path = db.ClientPath(self.client_id, path_type, components) vfs_test_lib.CreateDirectory(client_path) args = vfs_plugin.ApiGetFileDetailsArgs( client_id=self.client_id, file_path=self.file_path) result = self.handler.Handle(args, context=self.context) self.assertFalse(result.file.is_directory) args = vfs_plugin.ApiGetFileDetailsArgs( client_id=self.client_id, file_path=dir_path) result = self.handler.Handle(args, context=self.context) self.assertTrue(result.file.is_directory)
def testIsDirectoryFlag(self): # Set up a directory. dir_path = "fs/os/Random/Directory" path_type, components = rdf_objects.ParseCategorizedPath(dir_path) client_path = db.ClientPath(self.client_id.Basename(), path_type, components) token = access_control.ACLToken(username="******") vfs_test_lib.CreateDirectory(client_path, token=token) args = vfs_plugin.ApiGetFileDetailsArgs( client_id=self.client_id, file_path=self.file_path) result = self.handler.Handle(args, token=self.token) self.assertFalse(result.file.is_directory) args = vfs_plugin.ApiGetFileDetailsArgs( client_id=self.client_id, file_path=dir_path) result = self.handler.Handle(args, token=self.token) self.assertTrue(result.file.is_directory)
def testVfsMethodsAreAccessChecked(self): args = api_vfs.ApiListFilesArgs(client_id=self.client_id) self.CheckMethodIsAccessChecked(self.router.ListFiles, "CheckClientAccess", args=args) args = api_vfs.ApiGetVfsFilesArchiveArgs(client_id=self.client_id) self.CheckMethodIsAccessChecked(self.router.GetVfsFilesArchive, "CheckClientAccess", args=args) args = api_vfs.ApiGetFileDetailsArgs(client_id=self.client_id) self.CheckMethodIsAccessChecked(self.router.GetFileDetails, "CheckClientAccess", args=args) args = api_vfs.ApiGetFileTextArgs(client_id=self.client_id) self.CheckMethodIsAccessChecked(self.router.GetFileText, "CheckClientAccess", args=args) args = api_vfs.ApiGetFileBlobArgs(client_id=self.client_id) self.CheckMethodIsAccessChecked(self.router.GetFileBlob, "CheckClientAccess", args=args) args = api_vfs.ApiGetFileVersionTimesArgs(client_id=self.client_id) self.CheckMethodIsAccessChecked(self.router.GetFileVersionTimes, "CheckClientAccess", args=args) args = api_vfs.ApiGetFileDownloadCommandArgs(client_id=self.client_id) self.CheckMethodIsAccessChecked(self.router.GetFileDownloadCommand, "CheckClientAccess", args=args) args = api_vfs.ApiCreateVfsRefreshOperationArgs( client_id=self.client_id) self.CheckMethodIsAccessChecked(self.router.CreateVfsRefreshOperation, "CheckClientAccess", args=args) args = api_vfs.ApiGetVfsTimelineArgs(client_id=self.client_id) self.CheckMethodIsAccessChecked(self.router.GetVfsTimeline, "CheckClientAccess", args=args) args = api_vfs.ApiGetVfsTimelineAsCsvArgs(client_id=self.client_id) self.CheckMethodIsAccessChecked(self.router.GetVfsTimelineAsCsv, "CheckClientAccess", args=args) args = api_vfs.ApiUpdateVfsFileContentArgs(client_id=self.client_id) self.CheckMethodIsAccessChecked(self.router.UpdateVfsFileContent, "CheckClientAccess", args=args)
def testHandlerReturnsNewestVersionByDefault(self): # Get file version without specifying a timestamp. args = vfs_plugin.ApiGetFileDetailsArgs( client_id=self.client_id, file_path=self.file_path) result = self.handler.Handle(args, token=self.token) # Should return the newest version. self.assertEqual(result.file.path, self.file_path) self.assertAlmostEqual( result.file.age, self.time_2, delta=rdfvalue.Duration("1s"))
def testHandlerReturnsClosestSpecificVersion(self): # Get specific version. args = vfs_plugin.ApiGetFileDetailsArgs( client_id=self.client_id, file_path=self.file_path, timestamp=self.time_1) result = self.handler.Handle(args, token=self.token) # The age of the returned version might have a slight deviation. self.assertEqual(result.file.path, self.file_path) self.assertAlmostEqual( result.file.age, self.time_1, delta=rdfvalue.Duration("1s"))
def testResultIncludesDetails(self): """Checks if the details include certain attributes. Instead of using a (fragile) regression test, we enumerate important attributes here and make sure they are returned. """ args = vfs_plugin.ApiGetFileDetailsArgs( client_id=self.client_id, file_path=self.file_path) result = self.handler.Handle(args, context=self.context) attributes_by_type = {} attributes_by_type["VFSFile"] = ["STAT"] attributes_by_type["AFF4Stream"] = ["HASH", "SIZE"] attributes_by_type["AFF4Object"] = ["TYPE"] details = result.file.details for type_name, attrs in attributes_by_type.items(): type_obj = next(t for t in details.types if t.name == type_name) all_attrs = set([a.name for a in type_obj.attributes]) self.assertContainsSubset(attrs, all_attrs)
def testResultIncludesDetails(self): """Checks if the details include certain attributes. Instead of using a (fragile) regression test, we enumerate important attributes here and make sure they are returned. """ args = vfs_plugin.ApiGetFileDetailsArgs( client_id=self.client_id, file_path=self.file_path) result = self.handler.Handle(args, token=self.token) attributes_by_type = {} attributes_by_type["AFF4MemoryStream"] = ["CONTENT"] attributes_by_type["AFF4MemoryStreamBase"] = ["SIZE"] attributes_by_type["AFF4Object"] = ["LAST", "SUBJECT", "TYPE"] details = result.file.details for type_name, attrs in iteritems(attributes_by_type): type_obj = next(t for t in details.types if t.name == type_name) all_attrs = set([a.name for a in type_obj.attributes]) self.assertTrue(set(attrs).issubset(all_attrs))
def testRaisesOnRootPath(self): args = vfs_plugin.ApiGetFileDetailsArgs( client_id=self.client_id, file_path="/") with self.assertRaises(ValueError): self.handler.Handle(args, context=self.context)
def testRaisesOnNonexistentPath(self): args = vfs_plugin.ApiGetFileDetailsArgs( client_id=self.client_id, file_path="/fs/os/foo/bar") with self.assertRaises(vfs_plugin.FileNotFoundError): self.handler.Handle(args, context=self.context)
def testRaisesIfFirstComponentNotInAllowlist(self): args = vfs_plugin.ApiGetFileDetailsArgs( client_id=self.client_id, file_path="/analysis") with self.assertRaises(ValueError): self.handler.Handle(args, context=self.context)
def testRaisesOnEmptyPath(self): args = vfs_plugin.ApiGetFileDetailsArgs( client_id=self.client_id, file_path="") with self.assertRaises(ValueError): self.handler.Handle(args, token=self.token)