def test_build_options(self): task = Task() id = task.add_path(__file__, options={"free": "yes"}) task.load_from_db(id) a = abstracts.AnalysisManager( FakeMachine(), mock.MagicMock(), mock.MagicMock() ) a.set_task(task) expected = { "clock": task.clock, "enforce_timeout": False, "id": task.id, "package": "", "target": None, "terminate_processes": False, "ip": "192.168.56.1", "port": 4242, "timeout": 120, "options": "free=yes" } assert a.options == {} a.build_options() assert a.options == expected a.build_options({ "file_name": "doge.py", "options": {"doges": "many"}, "category": "file" }) assert a.options["options"] == "doges=many,free=yes" assert a.options["file_name"] == "doge.py" assert a.options["category"] == "file"
def test_stop_and_wait_dump_mem(self, msas, mrs): self.create_cwd() task = Task() id = task.add_path(__file__, memory=True) task.load_from_db(id) # Mock resultserver obj so we can check if del_task was called resulserver_obj = mock.MagicMock() mrs.return_value = resulserver_obj manager = self.get_manager(task) manager.init(self.db) manager.machinery = mock.MagicMock() manager.route = mock.MagicMock() manager.aux = mock.MagicMock() manager.stop_and_wait() # Check if all required methods were called successfully msas.assert_called_once_with("stopping") manager.aux.stop.assert_called_once() manager.machinery.dump_memory.assert_called_once_with( "machine1", cwd("storage", "analyses", str(task.id), "memory.dmp")) manager.machinery.stop.assert_called_once_with("machine1") resulserver_obj.del_task.assert_called_once_with( task.db_task, manager.machine) manager.route.unroute_network.assert_called_once()
def test_set_target(self): self.create_cwd() task = Task() id = task.add_path(__file__) task.load_from_db(id) manager = self.get_manager() manager.set_target(task.targets) assert manager.target == task.targets[0]
def test_set_target(self): task = Task() id = task.add_path(__file__) task.load_from_db(id) a = abstracts.AnalysisManager( FakeMachine(), mock.MagicMock(), mock.MagicMock() ) with pytest.raises(NotImplementedError): a.set_target(task.targets)
def test_set_target_empty(self): self.create_cwd() task = Task() id = task.add_path(__file__) task.load_from_db(id) task.task_dict["targets"] = [] manager = self.get_manager() manager.set_target(task.targets) assert isinstance(manager.target, Target)
def test_process_task_range_multi_db(self, mt, mp): task1, task2 = Task(), Task() id1, id2 = task1.add_path(__file__), task2.add_path(__file__) process_task_range("%s,%s" % (id1, id2)) assert mp.call_count == 2 mt.assert_has_calls([ mock.call(), mock.call().set_task(mock.ANY), mock.call(), mock.call().set_task(mock.ANY) ])
def test_set_task(self): self.create_cwd() task = Task() id = task.add_path(__file__) task.load_from_db(id) manager = self.get_manager() manager.set_task(task) assert manager.task == task assert manager.analysis is not None assert manager.name == "task_%s_Regular" % task.id
def test_set_task(self): task = Task() id = task.add_path(__file__) task.load_from_db(id) a = abstracts.AnalysisManager( FakeMachine(), mock.MagicMock(), mock.MagicMock() ) a.set_task(task) assert a.task == task assert isinstance(a.analysis, Analysis) assert a.name == "task_%s_AnalysisManager" % task.id
def get_manager(self, task=None): if task is None: task = Task() fd, fpath = tempfile.mkstemp() os.write(fd, b"\x00" * 32) os.close(fd) newname = os.path.join(os.path.dirname(fpath), "testanalysis.exe") os.rename(fpath, newname) id = task.add_path(newname) task.load_from_db(id) manager = Regular(FakeMachine(), mock.MagicMock(), mock.MagicMock()) manager.set_task(task) manager.set_target(task.targets) return manager
def test_init_fail(self): self.create_cwd() task = Task() fd, tmpfile = tempfile.mkstemp() os.write(fd, os.urandom(64)) os.close(fd) id = task.add_path(tmpfile) task.load_from_db(id) manager = self.get_manager(task) copy_path = cwd("storage", "binaries", File(tmpfile).get_sha256()) # Remove both binaries to make init fail os.remove(copy_path) os.remove(tmpfile) result = manager.init(self.db) assert not result
def test_init_remov_original(self): self.create_cwd() task = Task() fd, tmpfile = tempfile.mkstemp() os.write(fd, os.urandom(64)) os.close(fd) id = task.add_path(tmpfile) task.load_from_db(id) tmpfile_obj = File(tmpfile) tmpfile_obj.calc_hashes() manager = self.get_manager(task) # Remove so init fails to find the original target os.remove(tmpfile) result = manager.init(self.db) assert result assert manager.options["target"] == tmpfile assert manager.options["file_name"] == tmpfile_obj.get_name() assert isinstance(manager.guest_manager, GuestManager) assert isinstance(manager.aux, RunAuxiliary) assert os.path.isfile(os.path.join(task.path, "task.json"))