def testNotificationIsSent(self): test_lib.ClientFixture(self.client_id, token=self.token) args = vfs_plugin.ApiCreateVfsRefreshOperationArgs( client_id=self.client_id, file_path=self.file_path, max_depth=0, notify_user=True) result = self.handler.Handle(args, token=self.token) # Finish flow and check if there are any new notifications. flow_urn = rdfvalue.RDFURN(result.operation_id) client_mock = action_mocks.ActionMock() for _ in test_lib.TestFlowHelper( flow_urn, client_mock, client_id=self.client_id, token=self.token, check_flow_errors=False): pass # Get pending notifications and check the newest one. user_record = aff4.FACTORY.Open( aff4.ROOT_URN.Add("users").Add(self.token.username), aff4_type=aff4_users.GRRUser, mode="r", token=self.token) pending_notifications = user_record.Get( user_record.Schema.PENDING_NOTIFICATIONS) self.assertIn("Recursive Directory Listing complete", pending_notifications[0].message) self.assertEqual(pending_notifications[0].source, str(flow_urn))
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 testHandlerRefreshStartsListDirectoryFlow(self): test_lib.ClientFixture(self.client_id, token=self.token) args = vfs_plugin.ApiCreateVfsRefreshOperationArgs( client_id=self.client_id, file_path=self.file_path, max_depth=1) result = self.handler.Handle(args, token=self.token) # Check returned operation_id to references a ListDirectory flow. flow_obj = aff4.FACTORY.Open(result.operation_id, token=self.token) self.assertEqual(flow_obj.Get(flow_obj.Schema.TYPE), "ListDirectory")
def Run(self): fixture_test_lib.ClientFixture(self.client_id, token=self.token) def ReplaceFlowId(): flows_dir_fd = aff4.FACTORY.Open(self.client_id.Add("flows"), token=self.token) flow_urn = list(flows_dir_fd.ListChildren())[0] return {flow_urn.Basename(): "W:ABCDEF"} with test_lib.FakeTime(42): self.Check("CreateVfsRefreshOperation", args=vfs_plugin.ApiCreateVfsRefreshOperationArgs( client_id=self.client_id.Basename(), file_path=self.file_path, max_depth=1), replace=ReplaceFlowId)
def testVfsMethodsAreAccessChecked(self): args = api_vfs.ApiGetFileDetailsArgs(client_id=self.client_id) self.CheckMethodIsAccessChecked(self.router.GetFileDetails, "CheckClientAccess", args=args) args = api_vfs.ApiGetFileListArgs(client_id=self.client_id) self.CheckMethodIsAccessChecked(self.router.GetFileList, "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)
def testRaisesIfFirstComponentNotInWhitelist(self): args = vfs_plugin.ApiCreateVfsRefreshOperationArgs( client_id=self.client_id, file_path="/analysis") with self.assertRaises(ValueError): self.handler.Handle(args, token=self.token)
def testRaisesOnRootPath(self): args = vfs_plugin.ApiCreateVfsRefreshOperationArgs( client_id=self.client_id, file_path="/") with self.assertRaises(ValueError): self.handler.Handle(args, token=self.token)