@@ -424,7 +424,7 @@ class HTTP2; end
424424
425425assert ( "LFU: eviction removes least frequently used" ) do
426426 # Wir erzeugen mehr Klassen als MAX_SIZE (128)
427- 150 . times do |i |
427+ 1500 . times do |i |
428428 Object . const_set ( "LFUTest#{ i } " , Class . new )
429429 assert_equal Object . const_get ( "LFUTest#{ i } " ) , "LFUTest#{ i } " . constantize
430430 end
@@ -434,11 +434,11 @@ class HTTP2; end
434434 class HotA ; end
435435 class HotB ; end
436436
437- 50 . times { assert_equal HotA , "HotA" . constantize }
438- 50 . times { assert_equal HotB , "HotB" . constantize }
437+ 500 . times { assert_equal HotA , "HotA" . constantize }
438+ 500 . times { assert_equal HotB , "HotB" . constantize }
439439
440440 # Jetzt Cache fluten
441- 200 . times do |i |
441+ 2000 . times do |i |
442442 Object . const_set ( "Cold#{ i } " , Class . new )
443443 assert_equal Object . const_get ( "Cold#{ i } " ) , "Cold#{ i } " . constantize
444444 end
@@ -459,7 +459,7 @@ class HotB; end
459459
460460assert ( "LFU: index overflow does not crash" ) do
461461 base = "AA"
462- 300 . times do |i |
462+ 3000 . times do |i |
463463 key = base + i . to_s
464464 Object . const_set ( key , Class . new )
465465 assert_equal Object . const_get ( key ) , key . constantize
@@ -469,7 +469,7 @@ class HotB; end
469469end
470470
471471assert ( "LFU: GC stress does not break cache" ) do
472- 200 . times do |i |
472+ 2000 . times do |i |
473473 key = "GCStress#{ i } "
474474 Object . const_set ( key , Class . new )
475475 assert_equal Object . const_get ( key ) , key . constantize
@@ -481,13 +481,13 @@ class HotB; end
481481
482482assert ( "LFU: entry slot reuse is safe" ) do
483483 # Fülle Cache
484- 128 . times do |i |
484+ 1280 . times do |i |
485485 Object . const_set ( "Reuse#{ i } " , Class . new )
486486 assert_equal Object . const_get ( "Reuse#{ i } " ) , "Reuse#{ i } " . constantize
487487 end
488488
489489 # Erzeuge Evictions
490- 50 . times do |i |
490+ 5000 . times do |i |
491491 Object . const_set ( "ReuseEvict#{ i } " , Class . new )
492492 assert_equal Object . const_get ( "ReuseEvict#{ i } " ) , "ReuseEvict#{ i } " . constantize
493493 end
@@ -499,7 +499,7 @@ class HotB; end
499499assert ( "LFU: constantize correctness under pressure" ) do
500500 module A ; module B ; class C ; end ; end ; end
501501
502- 200 . times do |i |
502+ 2000 . times do |i |
503503 Object . const_set ( "Spam#{ i } " , Class . new )
504504 assert_equal Object . const_get ( "Spam#{ i } " ) , "Spam#{ i } " . constantize
505505 end
@@ -511,10 +511,10 @@ module A; module B; class C; end; end; end
511511 class HotX ; end
512512 class HotY ; end
513513
514- 100 . times { assert_equal HotX , "HotX" . constantize }
515- 100 . times { assert_equal HotY , "HotY" . constantize }
514+ 1000 . times { assert_equal HotX , "HotX" . constantize }
515+ 1000 . times { assert_equal HotY , "HotY" . constantize }
516516
517- 200 . times do |i |
517+ 2000 . times do |i |
518518 if i % 5 == 0
519519 assert_raise ( NameError ) { "Miss#{ i } " . constantize }
520520 else
@@ -523,3 +523,81 @@ class HotY; end
523523 end
524524 end
525525end
526+
527+ assert ( "MessagePack: register_ext_type invalid callbacks" ) do
528+ # pack kein Proc
529+ assert_raise ( ArgumentError ) do
530+ MessagePack . register_ext_type ( 1 , String ,
531+ pack : 123 ,
532+ unpack : -> ( x ) { x }
533+ )
534+ end
535+
536+ # unpack kein Proc
537+ assert_raise ( ArgumentError ) do
538+ MessagePack . register_ext_type ( 1 , String ,
539+ pack : -> ( x ) { x } ,
540+ unpack : 123
541+ )
542+ end
543+ end
544+
545+ assert ( "MessagePack: unpack invalid bytes" ) do
546+ assert_raise ( MessagePack ::Error ) { MessagePack . unpack ( "\xA5 hel" ) }
547+ assert_raise ( MessagePack ::Error ) { MessagePack . unpack ( "\x92 \x01 " ) }
548+ assert_raise ( MessagePack ::Error ) { MessagePack . unpack ( "\x81 \xA1 a" ) }
549+ end
550+
551+
552+ assert ( "MessagePack: JSON Pointer syntax errors" ) do
553+ data = { "a" => 1 }
554+ lazy = MessagePack . unpack_lazy ( MessagePack . pack ( data ) )
555+
556+ assert_raise ( ArgumentError ) { lazy . at_pointer ( "a" ) }
557+
558+ assert_raise ( KeyError ) { lazy . at_pointer ( "//a" ) }
559+
560+ assert_raise ( KeyError ) { lazy . at_pointer ( "/~2" ) }
561+
562+ assert_raise ( KeyError ) { lazy . at_pointer ( "/~" ) }
563+ end
564+
565+
566+ assert ( "MessagePack: JSON Pointer extreme tokens" ) do
567+ data = { "a/b" => 1 , "~x" => 2 }
568+ lazy = MessagePack . unpack_lazy ( MessagePack . pack ( data ) )
569+
570+ assert_equal 1 , lazy . at_pointer ( "/a~1b" )
571+ assert_equal 2 , lazy . at_pointer ( "/~0x" )
572+
573+ long_key = "x" * 10_000
574+ lazy2 = MessagePack . unpack_lazy ( MessagePack . pack ( { long_key => 5 } ) )
575+
576+ assert_equal 5 , lazy2 . at_pointer ( "/" + long_key )
577+ end
578+
579+ assert ( "MessagePack: JSON Pointer semantic errors" ) do
580+ data = { "a" => [ 1 , 2 , 3 ] }
581+ lazy = MessagePack . unpack_lazy ( MessagePack . pack ( data ) )
582+
583+ assert_raise ( KeyError ) { lazy . at_pointer ( "/b" ) }
584+
585+ assert_raise ( IndexError ) { lazy . at_pointer ( "/a/foo" ) }
586+
587+ assert_raise ( IndexError ) { lazy . at_pointer ( "/a/-1" ) }
588+
589+ assert_raise ( IndexError ) { lazy . at_pointer ( "/a/999" ) }
590+ end
591+
592+ assert ( "MessagePack: unpack ext without unpacker" ) do
593+ class Foo2 ; end
594+
595+ MessagePack . register_pack_type ( 42 , Foo2 ) { "X" }
596+
597+ foo = Foo2 . new
598+ packed = foo . to_msgpack
599+
600+ assert_raise ( MessagePack ::Error ) do
601+ MessagePack . unpack ( packed )
602+ end
603+ end
0 commit comments