mirror of https://github.com/celery/kombu.git
89 lines
2.3 KiB
Python
89 lines
2.3 KiB
Python
from __future__ import annotations
|
|
|
|
import pickle
|
|
from heapq import heappush
|
|
from time import time
|
|
from unittest.mock import Mock
|
|
|
|
from kombu.clocks import LamportClock, timetuple
|
|
|
|
|
|
class test_LamportClock:
|
|
|
|
def test_clocks(self) -> None:
|
|
c1 = LamportClock()
|
|
c2 = LamportClock()
|
|
|
|
c1.forward()
|
|
c2.forward()
|
|
c1.forward()
|
|
c1.forward()
|
|
c2.adjust(c1.value)
|
|
assert c2.value == c1.value + 1
|
|
assert repr(c1)
|
|
|
|
c2_val = c2.value
|
|
c2.forward()
|
|
c2.forward()
|
|
c2.adjust(c1.value)
|
|
assert c2.value == c2_val + 2 + 1
|
|
|
|
c1.adjust(c2.value)
|
|
assert c1.value == c2.value + 1
|
|
|
|
def test_sort(self) -> None:
|
|
c = LamportClock()
|
|
pid1 = 'a.example.com:312'
|
|
pid2 = 'b.example.com:311'
|
|
|
|
events: list[tuple[int, str]] = []
|
|
|
|
m1 = (c.forward(), pid1)
|
|
heappush(events, m1)
|
|
m2 = (c.forward(), pid2)
|
|
heappush(events, m2)
|
|
m3 = (c.forward(), pid1)
|
|
heappush(events, m3)
|
|
m4 = (30, pid1)
|
|
heappush(events, m4)
|
|
m5 = (30, pid2)
|
|
heappush(events, m5)
|
|
|
|
assert str(c) == str(c.value)
|
|
|
|
assert c.sort_heap(events) == m1
|
|
assert c.sort_heap([m4, m5]) == m4
|
|
assert c.sort_heap([m4, m5, m1]) == m4
|
|
|
|
|
|
class test_timetuple:
|
|
|
|
def test_repr(self) -> None:
|
|
x = timetuple(133, time(), 'id', Mock())
|
|
assert repr(x)
|
|
|
|
def test_pickleable(self) -> None:
|
|
x = timetuple(133, time(), 'id', 'obj')
|
|
assert pickle.loads(pickle.dumps(x)) == tuple(x)
|
|
|
|
def test_order(self) -> None:
|
|
t1 = time()
|
|
t2 = time() + 300 # windows clock not reliable
|
|
a = timetuple(133, t1, 'A', 'obj')
|
|
b = timetuple(140, t1, 'A', 'obj')
|
|
assert a.__getnewargs__()
|
|
assert a.clock == 133
|
|
assert a.timestamp == t1
|
|
assert a.id == 'A'
|
|
assert a.obj == 'obj'
|
|
assert a <= b
|
|
assert b >= a
|
|
|
|
assert (timetuple(134, time(), 'A', 'obj').__lt__(tuple()) is
|
|
NotImplemented)
|
|
assert timetuple(134, t2, 'A', 'obj') > timetuple(133, t1, 'A', 'obj')
|
|
assert timetuple(134, t1, 'B', 'obj') > timetuple(134, t1, 'A', 'obj')
|
|
assert (
|
|
timetuple(None, t2, 'B', 'obj') > timetuple(None, t1, 'A', 'obj')
|
|
)
|