def test_cant_reprocess(self): task = Task() invalid_status = ( TASK_COMPLETED, TASK_FAILED_ANALYSIS, TASK_DISTRIBUTED_COMPLETED, TASK_BANNED, TASK_PENDING, TASK_RUNNING, TASK_DISTRIBUTED, ) patch_target = "lib.cuckoo.core.database.Database.view_task" with patch(patch_target, return_value=task): for status in invalid_status: expected_response = { "error": True, "error_value": f"Task ID 1 cannot be reprocessed in status {status}" } with self.subTest(status): task.status = status response = self.client.get("/apiv2/tasks/reprocess/1/") assert response.status_code == 200 assert response.headers[ "content-type"] == "application/json" assert response.json() == expected_response
def run(self): """Run information gathering. @return: information dict. """ self.key = "info" db = Database() dbtask = db.view_task(self.task["id"], details=True) if dbtask: task = dbtask.to_dict() else: # task is gone from the database if os.path.isfile(self.taskinfo_path): # we've got task.json, so grab info from there task = json_decode(open(self.taskinfo_path).read()) else: # we don't have any info on the task :( emptytask = Task() emptytask.id = self.task["id"] task = emptytask.to_dict() filepath = os.path.join(CUCKOO_ROOT, ".git", "refs", "heads", "master") if os.path.exists(filepath) and os.access(filepath, os.R_OK): git_head = open(filepath, "rb").read().strip() else: git_head = None filepath = os.path.join(CUCKOO_ROOT, ".git", "FETCH_HEAD") if os.path.exists(filepath) and os.access(filepath, os.R_OK): git_fetch_head = open(filepath, "rb").read().strip() # Only obtain the hash. if git_fetch_head: git_fetch_head = git_fetch_head.split()[0] else: git_fetch_head = None return dict( version=CUCKOO_VERSION, git={ "head": git_head, "fetch_head": git_fetch_head, }, started=task["started_on"], ended=task.get("completed_on", "none"), duration=task.get("duration", -1), id=int(task["id"]), category=task["category"], custom=task["custom"], owner=task["owner"], machine=task["guest"], package=task["package"], platform=task["platform"], options=emit_options(task["options"]), route=task["route"], )
def test_can_reprocess(self): task = Task() valid_status = (TASK_REPORTED, TASK_RECOVERED, TASK_FAILED_PROCESSING, TASK_FAILED_REPORTING) patch_target = "lib.cuckoo.core.database.Database.view_task" with patch(patch_target, return_value=task): for status in valid_status: expected_response = { "error": False, "data": f"Task ID 1 with status {status} marked for reprocessing" } with self.subTest(status): task.status = status response = self.client.get("/apiv2/tasks/reprocess/1/") assert response.status_code == 200 assert response.headers[ "content-type"] == "application/json" assert response.json() == expected_response
def run(self): """Run information gathering. @return: information dict. """ self.key = "info" db = Database() dbtask = db.view_task(self.task["id"], details=True) if dbtask: task = dbtask.to_dict() else: # task is gone from the database if os.path.isfile(self.taskinfo_path): # we've got task.json, so grab info from there task = json_decode(open(self.taskinfo_path).read()) else: # we don't have any info on the task :( emptytask = Task() emptytask.id = self.task["id"] task = emptytask.to_dict() return dict( version=CUCKOO_VERSION, started=task["started_on"], ended=task.get("completed_on", "none"), duration=task.get("duration", -1), id=int(task["id"]), category=task["category"], custom=task["custom"], owner=task["owner"], machine=task["guest"], package=task["package"], platform=task["platform"], options=task["options"], route=task["route"], )
def run(self): """Run information gathering. @return: information dict. """ self.key = "info" db = Database() dbtask = db.view_task(self.task["id"], details=True) if dbtask: task = dbtask.to_dict() else: # task is gone from the database if os.path.isfile(self.taskinfo_path): # we've got task.json, so grab info from there task = json_decode(open(self.taskinfo_path).read()) else: # we don't have any info on the task :( emptytask = Task() emptytask.id = self.task["id"] task = emptytask.to_dict() filepath = os.path.join( CUCKOO_ROOT, ".git", "refs", "heads", "master" ) if os.path.exists(filepath) and os.access(filepath, os.R_OK): git_head = open(filepath, "rb").read().strip() else: git_head = None filepath = os.path.join(CUCKOO_ROOT, ".git", "FETCH_HEAD") if os.path.exists(filepath) and os.access(filepath, os.R_OK): git_fetch_head = open(filepath, "rb").read().strip() # Only obtain the hash. if git_fetch_head: git_fetch_head = git_fetch_head.split()[0] else: git_fetch_head = None monitor = os.path.join( CUCKOO_ROOT, "data", "monitor", task["options"].get("monitor", "latest") ) if os.path.islink(monitor): monitor = os.readlink(monitor) elif os.path.isfile(monitor): monitor = open(monitor, "rb").read().strip() elif os.path.isdir(monitor): monitor = os.path.basename(monitor) else: monitor = None return dict( version=CUCKOO_VERSION, git={ "head": git_head, "fetch_head": git_fetch_head, }, monitor=monitor, started=task["started_on"], ended=task.get("completed_on", "none"), duration=task.get("duration", -1), id=int(task["id"]), category=task["category"], custom=task["custom"], owner=task["owner"], machine=task["guest"], package=task["package"], platform=task["platform"], options=emit_options(task["options"]), route=task["route"], )