@@ -33,6 +33,9 @@ public function testJobMessageSerialize()
3333 );
3434
3535 $ serialized = $ message ->__serialize ();
36+
37+ $ this ->assertEquals ($ serialized [0 ], $ serialized ['job ' ]);
38+ $ this ->assertEquals ($ serialized [1 ], $ serialized ['attempts ' ]);
3639 $ this ->assertArrayHasKey ('job ' , $ serialized );
3740 $ this ->assertArrayHasKey ('attempts ' , $ serialized );
3841
@@ -52,6 +55,17 @@ public function testJobMessageSerializeCompatible()
5255
5356 $ serialized = $ message ->__serialize ();
5457
58+ $ this ->assertEquals ($ serialized [0 ], $ serialized ['job ' ]);
59+ $ this ->assertEquals ($ serialized [1 ], $ serialized ['attempts ' ]);
60+
61+ $ message = unserialize (serialize ($ message ));
62+ $ this ->assertInstanceOf (MessageInterface::class, $ message );
63+ $ this ->assertInstanceOf (JobInterface::class, $ message ->job ());
64+ $ this ->assertInstanceOf (JobInterface::class, $ message ->job ());
65+ $ this ->assertInstanceOf (DemoJob::class, $ message ->job ());
66+ $ this ->assertSame ($ id , $ message ->job ()->id );
67+ $ this ->assertSame (0 , $ message ->getAttempts ());
68+
5569 $ serialized = [
5670 'job ' => $ serialized ['job ' ] ?? $ serialized [0 ],
5771 'attempts ' => 3 ,
@@ -75,4 +89,27 @@ public function testJobMessageSerializeCompatible()
7589 $ this ->assertSame ($ id , $ message ->job ()->id );
7690 $ this ->assertSame (5 , $ message ->getAttempts ());
7791 }
92+
93+ public function testUnserializeAsOldJobMessage ()
94+ {
95+ $ id = rand (0 , 9999 );
96+ $ message = new JobMessage (
97+ new DemoJob ($ id )
98+ );
99+
100+ $ serialized = serialize ($ message );
101+ $ serialized = str_replace (
102+ sprintf ('O:%d:"%s ' , strlen (\Hyperf \AsyncQueue \JobMessage::class), \Hyperf \AsyncQueue \JobMessage::class),
103+ sprintf ('O:%d:"%s ' , strlen (\HyperfTest \AsyncQueue \Stub \OldJobMessage::class), \HyperfTest \AsyncQueue \Stub \OldJobMessage::class),
104+ $ serialized
105+ );
106+ $ message = unserialize ($ serialized );
107+
108+ $ this ->assertInstanceOf (MessageInterface::class, $ message );
109+ $ this ->assertInstanceOf (JobInterface::class, $ message ->job ());
110+ $ this ->assertInstanceOf (JobInterface::class, $ message ->job ());
111+ $ this ->assertInstanceOf (DemoJob::class, $ message ->job ());
112+ $ this ->assertSame ($ id , $ message ->job ()->id );
113+ $ this ->assertSame (0 , $ message ->getAttempts ());
114+ }
78115}
0 commit comments