Skip to content

Commit 91bbf78

Browse files
committed
Add even more tests surrounding named send/receive
1 parent d97f4d8 commit 91bbf78

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

test/gleam/erlang/process_test.gleam

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)