Imported Upstream version 4.7.2
[platform/upstream/gcc48.git] / libgo / go / net / udp_test.go
1 // Copyright 2012 The Go Authors.  All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 package net
6
7 import (
8         "runtime"
9         "testing"
10 )
11
12 func TestWriteToUDP(t *testing.T) {
13         switch runtime.GOOS {
14         case "plan9":
15                 t.Logf("skipping test on %q", runtime.GOOS)
16                 return
17         }
18
19         l, err := ListenPacket("udp", "127.0.0.1:0")
20         if err != nil {
21                 t.Fatalf("Listen failed: %v", err)
22         }
23         defer l.Close()
24
25         testWriteToConn(t, l.LocalAddr().String())
26         testWriteToPacketConn(t, l.LocalAddr().String())
27 }
28
29 func testWriteToConn(t *testing.T, raddr string) {
30         c, err := Dial("udp", raddr)
31         if err != nil {
32                 t.Fatalf("Dial failed: %v", err)
33         }
34         defer c.Close()
35
36         ra, err := ResolveUDPAddr("udp", raddr)
37         if err != nil {
38                 t.Fatalf("ResolveUDPAddr failed: %v", err)
39         }
40
41         _, err = c.(*UDPConn).WriteToUDP([]byte("Connection-oriented mode socket"), ra)
42         if err == nil {
43                 t.Fatal("WriteToUDP should fail")
44         }
45         if err != nil && err.(*OpError).Err != ErrWriteToConnected {
46                 t.Fatalf("WriteToUDP should fail as ErrWriteToConnected: %v", err)
47         }
48
49         _, err = c.(*UDPConn).WriteTo([]byte("Connection-oriented mode socket"), ra)
50         if err == nil {
51                 t.Fatal("WriteTo should fail")
52         }
53         if err != nil && err.(*OpError).Err != ErrWriteToConnected {
54                 t.Fatalf("WriteTo should fail as ErrWriteToConnected: %v", err)
55         }
56
57         _, err = c.Write([]byte("Connection-oriented mode socket"))
58         if err != nil {
59                 t.Fatalf("Write failed: %v", err)
60         }
61 }
62
63 func testWriteToPacketConn(t *testing.T, raddr string) {
64         c, err := ListenPacket("udp", "127.0.0.1:0")
65         if err != nil {
66                 t.Fatalf("ListenPacket failed: %v", err)
67         }
68         defer c.Close()
69
70         ra, err := ResolveUDPAddr("udp", raddr)
71         if err != nil {
72                 t.Fatalf("ResolveUDPAddr failed: %v", err)
73         }
74
75         _, err = c.(*UDPConn).WriteToUDP([]byte("Connection-less mode socket"), ra)
76         if err != nil {
77                 t.Fatalf("WriteToUDP failed: %v", err)
78         }
79
80         _, err = c.WriteTo([]byte("Connection-less mode socket"), ra)
81         if err != nil {
82                 t.Fatalf("WriteTo failed: %v", err)
83         }
84
85         _, err = c.(*UDPConn).Write([]byte("Connection-less mode socket"))
86         if err == nil {
87                 t.Fatal("Write should fail")
88         }
89 }