@@ -686,3 +686,58 @@ pub fn name_other_test() {
686686 == "Cannot receive with a subject owned by another process"
687687 process.unregister(name)
688688}
689+
690+ // tests that sending/receiving on names fail if the name gets unregistered
691+ pub fn unregister_receive_test() {
692+ let name = process.new_name("name")
693+ let assert Ok(_) = process.register(process.self(), name)
694+ let subject = process.named_subject(name)
695+
696+ process.send(subject, "Hello")
697+ let assert Ok("Hello") = process.receive(subject, 0)
698+
699+ let assert Ok(_) = process.unregister(name)
700+
701+ assert assert_panic(fn() { process.send(subject, "Hello") })
702+ == "Sending to unregistered name"
703+ assert assert_panic(fn() { process.receive(subject, 0) })
704+ == "Cannot receive with a subject owned by another process"
705+ // this error message could be better
706+ }
707+
708+ // tests that receiving on names fail if the registration gets moved during execution
709+ pub fn name_other_switchover_test() {
710+ let name = process.new_name("name")
711+ let self = process.self()
712+ let assert Ok(_) = process.register(self, name)
713+ let subject = process.named_subject(name)
714+
715+ assert Ok(self) == process.subject_owner(subject)
716+
717+ process.send(subject, "Hello")
718+ let assert Ok("Hello") = process.receive(subject, 0)
719+
720+ let pid =
721+ process.spawn(fn() {
722+ process.sleep(10)
723+ let assert Ok(_) = process.unregister(name)
724+ // "undesirable behaviour"
725+ let assert Ok(_) = process.register(process.self(), name)
726+
727+ process.sleep(20)
728+ let assert Ok("Peace") = process.receive(subject, 0)
729+ })
730+
731+ assert Ok(self) == process.subject_owner(subject)
732+
733+ process.send(subject, "World")
734+ let assert Ok("World") = process.receive(subject, 0)
735+
736+ assert Ok(self) == process.subject_owner(subject)
737+ process.sleep(12)
738+ assert Ok(pid) == process.subject_owner(subject)
739+
740+ process.send(subject, "Peace")
741+ assert assert_panic(fn() { process.receive(subject, 0) })
742+ == "Cannot receive with a subject owned by another process"
743+ }
0 commit comments