-
Notifications
You must be signed in to change notification settings - Fork 115
Expand file tree
/
Copy pathtest_general.py
More file actions
146 lines (102 loc) · 4.26 KB
/
Copy pathtest_general.py
File metadata and controls
146 lines (102 loc) · 4.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
from bson import ObjectId
import urllib2
import json
import time
def test_general_simple_task_one(worker):
result = worker.send_task(
"tests.tasks.general.Add", {"a": 41, "b": 1, "sleep": 1})
assert result == 42
time.sleep(0.1)
db_workers = list(worker.mongodb_jobs.mrq_workers.find())
assert len(db_workers) == 1
assert db_workers[0]["status"] in ["full", "wait"]
# Test the HTTP admin API
admin_worker = json.load(urllib2.urlopen("http://localhost:20020"))
assert admin_worker["_id"] == str(db_workers[0]["_id"])
assert admin_worker["status"] == "wait"
# Stop the worker gracefully
worker.stop(deps=False)
db_jobs = list(worker.mongodb_jobs.mrq_jobs.find())
assert len(db_jobs) == 1
assert db_jobs[0]["result"] == 42
assert db_jobs[0]["status"] == "success"
assert db_jobs[0]["queue"] == "default"
assert db_jobs[0]["worker"]
assert db_jobs[0]["datestarted"]
assert db_jobs[0]["dateupdated"]
assert db_jobs[0]["totaltime"] > 1
assert db_jobs[0]["_id"]
assert db_jobs[0]["params"] == {"a": 41, "b": 1, "sleep": 1}
assert db_jobs[0]["path"] == "tests.tasks.general.Add"
assert db_jobs[0]["time"] < 0.1
assert db_jobs[0]["switches"] >= 1
from mrq.job import get_job_result
assert get_job_result(db_jobs[0]["_id"]) == {"result": 42, "status": "success"}
db_workers = list(worker.mongodb_jobs.mrq_workers.find())
assert len(db_workers) == 1
assert db_workers[0]["_id"] == db_jobs[0]["worker"]
assert db_workers[0]["status"] == "stop"
assert db_workers[0]["jobs"] == []
assert db_workers[0]["done_jobs"] == 1
assert db_workers[0]["config"]
assert db_workers[0]["_id"]
# Job logs
db_logs = list(
worker.mongodb_logs.mrq_logs.find({"job": db_jobs[0]["_id"]}))
assert len(db_logs) == 1
assert "adding" in db_logs[0]["logs"]
# Worker logs
db_logs = list(
worker.mongodb_logs.mrq_logs.find({"worker": db_workers[0]["_id"]}))
assert len(db_logs) >= 1
worker.stop_deps()
def test_general_nologs(worker):
worker.start(flags="--mongodb_logs=0")
assert worker.send_task(
"tests.tasks.general.Add", {"a": 41, "b": 1, "sleep": 1}
) == 42
db_workers = list(worker.mongodb_jobs.mrq_workers.find())
assert len(db_workers) == 1
# Worker logs
db_logs = list(
worker.mongodb_logs.mrq_logs.find({"worker": db_workers[0]["_id"]}))
assert len(db_logs) == 0
def test_general_simple_no_trace(worker):
worker.start(trace=False)
result = worker.send_task("tests.tasks.general.Add", {"a": 41, "b": 1})
assert result == 42
def test_general_simple_task_multiple(worker):
result = worker.send_tasks("tests.tasks.general.Add", [
{"a": 41, "b": 1, "sleep": 1},
{"a": 41, "b": 1, "sleep": 1},
{"a": 40, "b": 1, "sleep": 1}
])
assert result == [42, 42, 41]
assert [x["result"] for x in worker.mongodb_jobs.mrq_jobs.find().sort(
[["dateupdated", 1]])] == [42, 42, 41]
def test_general_simple_task_reverse(worker):
worker.start(queues="default_reverse xtest test_timed_set", flags="--config tests/fixtures/config-raw1.py")
result = worker.send_tasks("tests.tasks.general.Add", [
{"a": 41, "b": 1, "sleep": 1},
{"a": 41, "b": 1, "sleep": 1},
{"a": 40, "b": 1, "sleep": 1}
])
assert result == [42, 42, 41]
assert [x["result"] for x in worker.mongodb_jobs.mrq_jobs.find().sort(
[["dateupdated", 1]])] == [41, 42, 42]
# Test known queues
from mrq.queue import Queue, send_task
assert Queue.redis_known_queues() == set(["default", "xtest", "test_timed_set"])
# Try queueing a task
send_task("tests.tasks.general.Add", {"a": 41, "b": 1, "sleep": 1}, queue="x")
time.sleep(1)
assert Queue.redis_known_queues() == set(["x", "default", "xtest", "test_timed_set"])
def test_general_exception_status(worker):
worker.send_task("tests.tasks.general.RaiseException", {
"message": "xyz"}, block=True, accept_statuses=["failed"])
job1 = worker.mongodb_jobs.mrq_jobs.find_one()
assert job1
assert job1["exceptiontype"] == "Exception"
assert job1["status"] == "failed"
assert "raise" in job1["traceback"]
assert "xyz" in job1["traceback"]