Index: src/pkg/netchan/netchan_test.go |
=================================================================== |
--- a/src/pkg/netchan/netchan_test.go |
+++ b/src/pkg/netchan/netchan_test.go |
@@ -230,12 +230,86 @@ |
<-done |
} |
+// Test hanging up the send side of an export. |
+// TODO: test hanging up the receive side of an export. |
+func TestExportHangup(t *testing.T) { |
+ exp, err := NewExporter("tcp", "127.0.0.1:0") |
+ if err != nil { |
+ t.Fatal("new exporter:", err) |
+ } |
+ imp, err := NewImporter("tcp", exp.Addr().String()) |
+ if err != nil { |
+ t.Fatal("new importer:", err) |
+ } |
+ ech := make(chan int) |
+ err = exp.Export("exportedSend", ech, Send) |
+ if err != nil { |
+ t.Fatal("export:", err) |
+ } |
+ // Prepare to receive two values. We'll actually deliver only one. |
+ ich := make(chan int) |
+ err = imp.ImportNValues("exportedSend", ich, Recv, 2) |
+ if err != nil { |
+ t.Fatal("import exportedSend:", err) |
+ } |
+ // Send one value, receive it. |
+ const Value = 1234 |
+ ech <- Value |
+ v := <-ich |
+ if v != Value { |
+ t.Fatal("expected", Value, "got", v) |
+ } |
+ // Now hang up the channel. Importer should see it close. |
+ exp.Hangup("exportedSend") |
+ v = <-ich |
+ if !closed(ich) { |
+ t.Fatal("expected channel to be closed; got value", v) |
+ } |
+} |
+ |
+// Test hanging up the send side of an import. |
+// TODO: test hanging up the receive side of an import. |
+func TestImportHangup(t *testing.T) { |
+ exp, err := NewExporter("tcp", "127.0.0.1:0") |
+ if err != nil { |
+ t.Fatal("new exporter:", err) |
+ } |
+ imp, err := NewImporter("tcp", exp.Addr().String()) |
+ if err != nil { |
+ t.Fatal("new importer:", err) |
+ } |
+ ech := make(chan int) |
+ err = exp.Export("exportedRecv", ech, Recv) |
+ if err != nil { |
+ t.Fatal("export:", err) |
+ } |
+ // Prepare to Send two values. We'll actually deliver only one. |
+ ich := make(chan int) |
+ err = imp.ImportNValues("exportedRecv", ich, Send, 2) |
+ if err != nil { |
+ t.Fatal("import exportedRecv:", err) |
+ } |
+ // Send one value, receive it. |
+ const Value = 1234 |
+ ich <- Value |
+ v := <-ech |
+ if v != Value { |
+ t.Fatal("expected", Value, "got", v) |
+ } |
+ // Now hang up the channel. Exporter should see it close. |
+ imp.Hangup("exportedRecv") |
+ v = <-ech |
+ if !closed(ech) { |
+ t.Fatal("expected channel to be closed; got value", v) |
+ } |
+} |
+ |
+// This test cross-connects a pair of exporter/importer pairs. |
type value struct { |
i int |
source string |
} |
-// This test cross-connects a pair of exporter/importer pairs. |
func TestCrossConnect(t *testing.T) { |
e1, err := NewExporter("tcp", "127.0.0.1:0") |
if err != nil { |