@@ -216,4 +216,86 @@ class AddressTest < ActiveSupport::TestCase
216216
217217 assert_equal [ ] , address . ckb_udt_transactions ( 123 )
218218 end
219+
220+ test "cached find cache key is lock_hash for short payload address" do
221+ redis_cache_store = ActiveSupport ::Cache . lookup_store ( :redis_cache_store )
222+ Rails . stubs ( :cache ) . returns ( redis_cache_store )
223+ Rails . cache . extend ( CacheRealizer )
224+ lock_script = CKB ::Types ::Script . new ( code_hash : "0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8" , hash_type : "type" , args : "0xdde7801c073dfb3464c7b1f05b806bb2bbb84e99" )
225+ addr = CKB ::Address . new ( lock_script ) . generate
226+ address = Address . find_or_create_address ( lock_script , Time . current . to_i )
227+ address = Address . cached_find ( addr )
228+ assert_equal address , Rails . cache . realize ( "Address/#{ lock_script . compute_hash } " )
229+ end
230+
231+ test "cached find cache key is lock_hash for full payload address" do
232+ redis_cache_store = ActiveSupport ::Cache . lookup_store ( :redis_cache_store )
233+ Rails . stubs ( :cache ) . returns ( redis_cache_store )
234+ Rails . cache . extend ( CacheRealizer )
235+ lock_script = CKB ::Types ::Script . new ( code_hash : "0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8" , hash_type : "type" , args : "0xdde7801c073dfb3464c7b1f05b806bb2bbb84e99" )
236+ addr = CKB ::Address . new ( lock_script ) . send ( :generate_full_payload_address )
237+ address = Address . find_or_create_address ( lock_script , Time . current . to_i )
238+ address = Address . cached_find ( addr )
239+ assert_equal address , Rails . cache . realize ( "Address/#{ lock_script . compute_hash } " )
240+ end
241+
242+ test "cached find returned address's query address should be short payload address when query key is short payload address" do
243+ redis_cache_store = ActiveSupport ::Cache . lookup_store ( :redis_cache_store )
244+ Rails . stubs ( :cache ) . returns ( redis_cache_store )
245+ Rails . cache . extend ( CacheRealizer )
246+ lock_script = CKB ::Types ::Script . new ( code_hash : "0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8" , hash_type : "type" , args : "0xdde7801c073dfb3464c7b1f05b806bb2bbb84e99" )
247+ addr = CKB ::Address . new ( lock_script ) . generate
248+ full_addr = CKB ::Address . new ( lock_script ) . send ( :generate_full_payload_address )
249+ Address . find_or_create_address ( lock_script , Time . current . to_i )
250+ Address . cached_find ( full_addr )
251+ address = Address . cached_find ( addr )
252+
253+ assert_equal addr , address . query_address
254+ end
255+
256+ test "cached find returned address's query address should be short payload address when query key is full payload address" do
257+ redis_cache_store = ActiveSupport ::Cache . lookup_store ( :redis_cache_store )
258+ Rails . stubs ( :cache ) . returns ( redis_cache_store )
259+ Rails . cache . extend ( CacheRealizer )
260+ lock_script = CKB ::Types ::Script . new ( code_hash : "0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8" , hash_type : "type" , args : "0xdde7801c073dfb3464c7b1f05b806bb2bbb84e99" )
261+ addr = CKB ::Address . new ( lock_script ) . generate
262+ full_addr = CKB ::Address . new ( lock_script ) . send ( :generate_full_payload_address )
263+ Address . find_or_create_address ( lock_script , Time . current . to_i )
264+ Address . cached_find ( addr )
265+ address = Address . cached_find ( full_addr )
266+
267+ assert_equal full_addr , address . query_address
268+ end
269+
270+ test "cached find should return nil when query key is a hex string and there is no matched record" do
271+ redis_cache_store = ActiveSupport ::Cache . lookup_store ( :redis_cache_store )
272+ Rails . stubs ( :cache ) . returns ( redis_cache_store )
273+ Rails . cache . extend ( CacheRealizer )
274+ address = Address . cached_find ( "0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8" )
275+
276+ assert_nil address
277+ end
278+
279+ test "cached find should return null address when there is no matched record" do
280+ redis_cache_store = ActiveSupport ::Cache . lookup_store ( :redis_cache_store )
281+ Rails . stubs ( :cache ) . returns ( redis_cache_store )
282+ Rails . cache . extend ( CacheRealizer )
283+ lock_script = CKB ::Types ::Script . new ( code_hash : "0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8" , hash_type : "type" , args : "0xdde7801c073dfb3464c7b1f05b806bb2bbb84e99" )
284+ addr = CKB ::Address . new ( lock_script ) . generate
285+ address = Address . cached_find ( addr )
286+ expected_address = NullAddress . new ( addr )
287+ assert_equal expected_address . query_address , address . query_address
288+ end
289+
290+ test "cached find should returned corresponding address when query key is hex string and there is a matched record" do
291+ redis_cache_store = ActiveSupport ::Cache . lookup_store ( :redis_cache_store )
292+ Rails . stubs ( :cache ) . returns ( redis_cache_store )
293+ Rails . cache . extend ( CacheRealizer )
294+ lock_script = CKB ::Types ::Script . new ( code_hash : "0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8" , hash_type : "type" , args : "0xdde7801c073dfb3464c7b1f05b806bb2bbb84e99" )
295+ full_addr = CKB ::Address . new ( lock_script ) . send ( :generate_full_payload_address )
296+ address = Address . find_or_create_address ( lock_script , Time . current . to_i )
297+ actual_address = Address . cached_find ( lock_script . compute_hash )
298+
299+ assert_equal address , actual_address
300+ end
219301end
0 commit comments