92 lines
3.1 KiB
Python
92 lines
3.1 KiB
Python
import pytest
|
|
|
|
from Worker import WorkerTaskManager
|
|
from . import Spy
|
|
|
|
|
|
class TestUiWebsocket:
|
|
def checkSort(self, tasks): # Check if it has the same order as a list sorted separately
|
|
tasks_list = list(tasks)
|
|
tasks_list.sort(key=lambda task: task["id"])
|
|
assert tasks_list != list(tasks)
|
|
tasks_list.sort(key=lambda task: (0 - (task["priority"] - task["workers_num"] * 10), task["id"]))
|
|
assert tasks_list == list(tasks)
|
|
|
|
def testAppendSimple(self):
|
|
tasks = WorkerTaskManager.WorkerTaskManager()
|
|
tasks.append({"id": 1, "priority": 15, "workers_num": 1, "inner_path": "file1.json"})
|
|
tasks.append({"id": 2, "priority": 1, "workers_num": 0, "inner_path": "file2.json"})
|
|
tasks.append({"id": 3, "priority": 8, "workers_num": 0, "inner_path": "file3.json"})
|
|
assert [task["inner_path"] for task in tasks] == ["file3.json", "file1.json", "file2.json"]
|
|
|
|
self.checkSort(tasks)
|
|
|
|
def testAppendMany(self):
|
|
tasks = WorkerTaskManager.WorkerTaskManager()
|
|
for i in range(1000):
|
|
tasks.append({"id": i, "priority": i % 20, "workers_num": i % 3, "inner_path": "file%s.json" % i})
|
|
assert tasks[0]["inner_path"] == "file39.json"
|
|
assert tasks[-1]["inner_path"] == "file980.json"
|
|
|
|
self.checkSort(tasks)
|
|
|
|
def testRemove(self):
|
|
tasks = WorkerTaskManager.WorkerTaskManager()
|
|
for i in range(1000):
|
|
tasks.append({"id": i, "priority": i % 20, "workers_num": i % 3, "inner_path": "file%s.json" % i})
|
|
|
|
i = 333
|
|
task = {"id": i, "priority": i % 20, "workers_num": i % 3, "inner_path": "file%s.json" % i}
|
|
assert task in tasks
|
|
|
|
tasks.remove(task)
|
|
|
|
assert task not in tasks
|
|
|
|
self.checkSort(tasks)
|
|
|
|
def testModify(self):
|
|
tasks = WorkerTaskManager.WorkerTaskManager()
|
|
for i in range(1000):
|
|
tasks.append({"id": i, "priority": i % 20, "workers_num": i % 3, "inner_path": "file%s.json" % i})
|
|
|
|
task = tasks[333]
|
|
task["priority"] += 10
|
|
|
|
with pytest.raises(AssertionError):
|
|
self.checkSort(tasks)
|
|
|
|
with Spy.Spy(tasks, "indexSlow") as calls:
|
|
tasks.updateItem(task)
|
|
assert len(calls) == 1
|
|
|
|
assert task in tasks
|
|
|
|
self.checkSort(tasks)
|
|
|
|
# Check reorder optimization
|
|
|
|
with Spy.Spy(tasks, "indexSlow") as calls:
|
|
tasks.updateItem(task, "priority", task["priority"] + 10)
|
|
assert len(calls) == 0
|
|
|
|
self.checkSort(tasks)
|
|
|
|
def testIn(self):
|
|
tasks = WorkerTaskManager.WorkerTaskManager()
|
|
|
|
i = 1
|
|
task = {"id": i, "priority": i % 20, "workers_num": i % 3, "inner_path": "file%s.json" % i}
|
|
|
|
assert task not in tasks
|
|
|
|
|
|
def testFindTask(self):
|
|
tasks = WorkerTaskManager.WorkerTaskManager()
|
|
for i in range(1000):
|
|
tasks.append({"id": i, "priority": i % 20, "workers_num": i % 3, "inner_path": "file%s.json" % i})
|
|
|
|
assert tasks.findTask("file999.json")
|
|
assert not tasks.findTask("file-unknown.json")
|
|
tasks.remove(tasks.findTask("file999.json"))
|
|
assert not tasks.findTask("file999.json")
|