def test_shared(self): m = Metrics() m2 = Metrics(shared=m.share()) m3 = Metrics(shared=m.share()) m2.add('key', SumMetric(1)) m3.add('key', SumMetric(2)) m.add('key', SumMetric(3)) assert m.report()['key'] == 6
def test_largebuffer(self): # legacy test. left as just another test m = Metrics() m2 = Metrics(shared=m.share()) # intentionally just over the int overflow for _ in range(32768 + 1): m2.add('key', SumMetric(1)) assert m.report()['key'] == 32768 + 1
def test_multithreaded(self): # legacy test, but left because it's just another test m = Metrics() m2 = Metrics(shared=m.share()) m3 = Metrics(shared=m.share()) m2.add('key', SumMetric(1)) m3.add('key', SumMetric(2)) m.add('key', SumMetric(3)) assert m.report()['key'] == 6
def test_multithreaded(self): m = Metrics(threadsafe=True) m2 = Metrics(threadsafe=True, shared=m.share()) m3 = Metrics(threadsafe=True, shared=m.share()) m2.add('key', SumMetric(1)) m2.flush() m3.add('key', SumMetric(2)) m3.flush() m.add('key', SumMetric(3)) m.flush() m.report()['key'] == 6
def test_verymultithreaded(self): # legacy test, but useful all the same, for ensuring # metrics doesn't care about the order things are done m = Metrics() nt = 128 ms = [Metrics(shared=m.share()) for _ in range(nt)] # intentionally just over the int overflow for _ in range(32768 + 1): ms[random.randint(0, nt - 1)].add('key', SumMetric(1)) thread_ids = list(range(nt)) random.shuffle(thread_ids) assert m.report()['key'] == 32768 + 1
def test_verymultithreaded(self): m = Metrics(threadsafe=True) nt = 128 ms = [Metrics(threadsafe=True, shared=m.share()) for _ in range(nt)] # intentionally just over the int overflow for _ in range(32768 + 1): ms[random.randint(0, nt - 1)].add('key', SumMetric(1)) thread_ids = list(range(nt)) random.shuffle(thread_ids) for tid in thread_ids: ms[tid].flush() assert m.report()['key'] == 32768 + 1
def test_shared(self): m = Metrics(threadsafe=False) m2 = Metrics(threadsafe=False, shared=m.share()) m3 = Metrics(threadsafe=False, shared=m.share()) m2.add('key', SumMetric(1)) m3.add('key', SumMetric(2)) m2.flush() # just make sure this doesn't throw exception, it's a no-op m.add('key', SumMetric(3)) assert m.report()['key'] == 6 # shouldn't throw exception m.flush() m2.flush() m3.flush()