/tests.py

https://github.com/ypodim/brin.gy · Python · 278 lines · 170 code · 100 blank · 8 comment · 13 complexity · 70acfe745178da6aa2f6f26d8f28e12e MD5 · raw file

  1. # -*- coding: utf-8 -*-
  2. import redis
  3. import time
  4. import sys
  5. import random
  6. import unittest
  7. import httplib2
  8. import urllib
  9. import json
  10. h = httplib2.Http()
  11. def post(dic, path='', method='POST', url='http://localhost:10007'):
  12. headers = {'Content-Type': 'application/x-www-form-urlencoded'}
  13. body = urllib.urlencode(dic)
  14. uri = '%s%s'%(url,path)
  15. resp, content = h.request(uri, method, headers=headers, body=body)
  16. return json.loads(content)
  17. r = redis.Redis(host='localhost', port=6379, db=0)
  18. r.flushall()
  19. class TestSequenceFunctions(unittest.TestCase):
  20. def setUp(self):
  21. self.seq = range(10)
  22. self.u = 'tester'
  23. self.p = dict(key='name', val='pol')
  24. lat = 10.01
  25. lon = 20.02
  26. self.l = dict(key='current location', val=dict(lat=lat,lon=lon))
  27. self.bs = dict(key='', val=dict(action='buy',price=300,product='ipad'))
  28. def test_create_user(self):
  29. res = post(dict(username=self.u))
  30. self.assertTrue(res['created'])
  31. self.assertTrue(r.sismember('users', self.u))
  32. def test_post_profile(self):
  33. params = [[self.p['key'],self.p['val']]]
  34. body = dict(data=json.dumps(params))
  35. res = post(body, path='/%s/profile'%self.u)
  36. self.assertTrue(res['result']=='')
  37. keys = r.smembers('%s:profile:keys' % self.u)
  38. self.assertTrue(list(keys)==[self.p['key']])
  39. vals = r.smembers('%s:profile:key:%s' % (self.u, self.p['key']))
  40. self.assertTrue(list(vals)==[self.p['val']])
  41. agents = r.smembers('profile:key:%s' % self.p['key'])
  42. self.assertTrue(list(agents)==[self.u])
  43. agents = r.smembers('profile:key:%s:val:%s' % (self.p['key'],self.p['val']))
  44. self.assertTrue(list(agents)==[self.u])
  45. keys = r.zrevrangebyscore('profile:keyscores', '+inf', '-inf')
  46. self.assertTrue(list(keys)==[self.p['key']])
  47. score = r.zscore('profile:keyscores', self.p['key'])
  48. self.assertTrue(score==1)
  49. keys = r.zrevrangebyscore('profile:keyvalscores:%s' % self.p['key'], '+inf', '-inf')
  50. self.assertTrue((list(keys)==[self.p['val']]))
  51. score = r.zscore('profile:keyvalscores:%s' % self.p['key'], self.p['val'])
  52. self.assertTrue(score==1)
  53. def test_post_location(self):
  54. params = [[self.l['key'],self.l['val']]]
  55. body = dict(data=json.dumps(params))
  56. res = post(body, path='/%s/location'%self.u)
  57. self.assertTrue(res['result']=='')
  58. keys = r.smembers('%s:location:keys' % self.u)
  59. self.assertTrue(list(keys)==[self.l['key']])
  60. lat = r.get('%s:location:%s:lat' % (self.u, self.l['key']))
  61. self.assertTrue(float(lat)==self.l['val']['lat'])
  62. lon = r.get('%s:location:%s:lon' % (self.u, self.l['key']))
  63. self.assertTrue(float(lon)==self.l['val']['lon'])
  64. buckets = r.smembers('location:%s:buckets' % self.l['key'])
  65. match = '%s %s' % (self.l['val']['lat'], self.l['val']['lon'])
  66. self.assertTrue(list(buckets)==[match])
  67. agents = r.smembers('location:%s:latlon:%s' % (self.l['key'], match))
  68. self.assertTrue(list(agents)==[self.u])
  69. def test_post_buysell(self):
  70. params = [[self.bs['key'],json.dumps(self.bs['val'])]]
  71. body = dict(data=json.dumps(params))
  72. res = post(body, path='/%s/buysell'%self.u)
  73. pid = res['result']['key']
  74. self.assertTrue(pid==1)
  75. pids = r.smembers('%s:buysell:pids' % self.u)
  76. self.assertTrue(list(pids)==[str(pid)])
  77. action = r.get('%s:buysell:pid:%s:action' % (self.u, pid))
  78. self.assertTrue(action==self.bs['val']['action'])
  79. price = r.get('%s:buysell:pid:%s:price' % (self.u, pid))
  80. self.assertTrue(int(price)==self.bs['val']['price'])
  81. product = r.get('%s:buysell:pid:%s:product' % (self.u, pid))
  82. self.assertTrue(product==self.bs['val']['product'])
  83. products = r.smembers('buysell:product')
  84. self.assertTrue(list(products)==[self.bs['val']['product']])
  85. agents = r.smembers('buysell:product:%s:action:%s' % (product, action))
  86. self.assertTrue(list(agents)==[self.u])
  87. def test_delete_user(self):
  88. res = post({}, path='/%s'%self.u, method='DELETE')
  89. self.assertTrue(res['deleted'])
  90. self.assertTrue(r.smembers('users')==set([]))
  91. def test_post_profile(self):
  92. params = [[self.p['key'],self.p['val']]]
  93. keys = r.smembers('%s:profile:keys' % self.u)
  94. self.assertTrue(list(keys)==[])
  95. vals = r.smembers('%s:profile:key:%s' % (self.u, self.p['key']))
  96. self.assertTrue(list(vals)==[])
  97. agents = r.smembers('profile:key:%s' % self.p['key'])
  98. self.assertTrue(list(agents)==[])
  99. agents = r.smembers('profile:key:%s:val:%s' % (self.p['key'],self.p['val']))
  100. self.assertTrue(list(agents)==[])
  101. keys = r.zrevrangebyscore('profile:keyscores', '+inf', '-inf')
  102. self.assertTrue(list(keys)==[])
  103. score = r.zscore('profile:keyscores', self.p['key'])
  104. self.assertTrue(score==None)
  105. keys = r.zrevrangebyscore('profile:keyvalscores:%s' % self.p['key'], '+inf', '-inf')
  106. self.assertTrue((list(keys)==[]))
  107. score = r.zscore('profile:keyvalscores:%s' % self.p['key'], self.p['val'])
  108. self.assertTrue(score==None)
  109. def test_deleted_location(self):
  110. keys = r.smembers('%s:location:keys' % self.u)
  111. self.assertTrue(list(keys)==[])
  112. lat = r.get('%s:location:%s:lat' % (self.u, self.l['key']))
  113. self.assertTrue(lat==None)
  114. lon = r.get('%s:location:%s:lon' % (self.u, self.l['key']))
  115. self.assertTrue(lon==None)
  116. buckets = r.smembers('location:%s:buckets' % self.l['key'])
  117. self.assertTrue(list(buckets)==[])
  118. match = '%s %s' % (self.l['val']['lat'], self.l['val']['lon'])
  119. agents = r.smembers('location:%s:latlon:%s' % (self.l['key'], match))
  120. self.assertTrue(list(agents)==[])
  121. def test_deleted_buysell(self):
  122. pids = r.smembers('%s:buysell:pids' % self.u)
  123. self.assertTrue(list(pids)==[])
  124. pid = 1
  125. action = r.get('%s:buysell:pid:%s:action' % (self.u, pid))
  126. self.assertTrue(action==None)
  127. price = r.get('%s:buysell:pid:%s:price' % (self.u, pid))
  128. self.assertTrue(price==None)
  129. product = r.get('%s:buysell:pid:%s:product' % (self.u, pid))
  130. self.assertTrue(product==None)
  131. products = r.smembers('buysell:product')
  132. self.assertTrue(list(products)==[])
  133. agents = r.smembers('buysell:product:%s:action:%s' % (product, self.bs['val']['action']))
  134. self.assertTrue(list(agents)==[])
  135. if __name__ == '__main__':
  136. unittest.main()
  137. sys.exit()
  138. #r.hset('monitor', 'agent2', 'red')
  139. #a= r.hgetall('monitor')
  140. #print a, type(a)
  141. #sys.exit()
  142. #if len(sys.argv) > 1:
  143. #r.flushall()
  144. #sys.exit()
  145. print 'keyvalstore entries:'
  146. for m in r.smembers('keyvalstore'):
  147. print m
  148. print 'users:'
  149. for u in r.smembers('users'):
  150. if u.startswith('agent'):
  151. continue
  152. print '===\nuser', u
  153. print 'profile:'
  154. for k in r.smembers('%s:profile:keys' % u):
  155. print '\tkey/val:', k,
  156. for v in r.smembers('%s:profile:key:%s' % (u, k)):
  157. print v,
  158. print
  159. print 'location:'
  160. for k in r.smembers('%s:location:keys' % u):
  161. print '\t', k, r.get('%s:location:%s:lat' % (u, k)), r.get('%s:location:%s:lon' % (u, k))
  162. print 'buysell:'
  163. for pid in r.smembers('%s:buysell:pids' % u):
  164. action = r.get('%s:buysell:pid:%s:action' % (u, pid))
  165. product = r.get('%s:buysell:pid:%s:descr' % (u, pid))
  166. price = r.get('%s:buysell:pid:%s:price' % (u, pid))
  167. print '\tpid:%s action:%s product:%s price:%s' % (pid, action, product, price)
  168. print
  169. sys.exit()
  170. lat = float(r.get('asdf:location:current location:lat'))
  171. lon = float(r.get('asdf:location:current location:lon'))
  172. for u in r.smembers('users'):
  173. if u != 'asdf':
  174. testlat = float(r.get('%s:location:current location:lat' % u))
  175. testlon = float(r.get('%s:location:current location:lon' % u))
  176. latdiff = abs(lat-testlat)
  177. londiff = abs(lon-testlon)
  178. print (latdiff<=0.0002 and londiff<=0.0002), u, latdiff, londiff