forked from 3rdparty/wrf-python
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.5 KiB
68 lines
1.5 KiB
from __future__ import (absolute_import, division, print_function, |
|
unicode_literals) |
|
|
|
from threading import Thread |
|
try: |
|
from Queue import Queue |
|
except ImportError: |
|
from queue import Queue |
|
from collections import OrderedDict |
|
|
|
import unittest as ut |
|
import numpy.testing as nt |
|
|
|
from wrf.cache import cache_item, get_cached_item, _get_cache |
|
from wrf.config import get_cache_size |
|
|
|
|
|
class TestThread(Thread): |
|
def __init__(self, num, q): |
|
self.num = num |
|
self.q = q |
|
super(TestThread, self).__init__() |
|
|
|
def run(self): |
|
for i in range(get_cache_size() + 10): |
|
key = "A" + str(i) |
|
cache_item(key, "test", i * self.num) |
|
|
|
item = get_cached_item(key, "test") |
|
|
|
if item != i * self.num: |
|
raise RuntimeError("cache is bogus") |
|
|
|
cache = OrderedDict(_get_cache()) |
|
|
|
self.q.put(cache) |
|
|
|
|
|
class CacheTest(ut.TestCase): |
|
longMessage = True |
|
|
|
def test_thread_local(self): |
|
q1 = Queue() |
|
q2 = Queue() |
|
thread1 = TestThread(2, q1) |
|
thread2 = TestThread(40, q2) |
|
|
|
thread1.start() |
|
thread2.start() |
|
|
|
result1 = q1.get(True, 1) |
|
result2 = q2.get(True, 1) |
|
|
|
thread1.join() |
|
thread2.join() |
|
|
|
print(result1) |
|
print(result2) |
|
|
|
# Result 1 and 2 shoudl be different |
|
self.assertNotEqual(result1, result2) |
|
|
|
# This thread should have no cache |
|
self.assertIsNone(_get_cache()) |
|
|
|
|
|
if __name__ == "__main__": |
|
ut.main()
|
|
|