Imported Upstream version 4.8.1
[platform/upstream/gcc48.git] / libgo / go / net / udp_test.go
index f80d3b5..220422e 100644 (file)
@@ -5,15 +5,45 @@
 package net
 
 import (
+       "reflect"
        "runtime"
        "testing"
 )
 
+var resolveUDPAddrTests = []struct {
+       net     string
+       litAddr string
+       addr    *UDPAddr
+       err     error
+}{
+       {"udp", "127.0.0.1:0", &UDPAddr{IP: IPv4(127, 0, 0, 1), Port: 0}, nil},
+       {"udp4", "127.0.0.1:65535", &UDPAddr{IP: IPv4(127, 0, 0, 1), Port: 65535}, nil},
+
+       {"udp", "[::1]:1", &UDPAddr{IP: ParseIP("::1"), Port: 1}, nil},
+       {"udp6", "[::1]:65534", &UDPAddr{IP: ParseIP("::1"), Port: 65534}, nil},
+
+       {"", "127.0.0.1:0", &UDPAddr{IP: IPv4(127, 0, 0, 1), Port: 0}, nil}, // Go 1.0 behavior
+       {"", "[::1]:0", &UDPAddr{IP: ParseIP("::1"), Port: 0}, nil},         // Go 1.0 behavior
+
+       {"sip", "127.0.0.1:0", nil, UnknownNetworkError("sip")},
+}
+
+func TestResolveUDPAddr(t *testing.T) {
+       for _, tt := range resolveUDPAddrTests {
+               addr, err := ResolveUDPAddr(tt.net, tt.litAddr)
+               if err != tt.err {
+                       t.Fatalf("ResolveUDPAddr(%v, %v) failed: %v", tt.net, tt.litAddr, err)
+               }
+               if !reflect.DeepEqual(addr, tt.addr) {
+                       t.Fatalf("got %#v; expected %#v", addr, tt.addr)
+               }
+       }
+}
+
 func TestWriteToUDP(t *testing.T) {
        switch runtime.GOOS {
        case "plan9":
-               t.Logf("skipping test on %q", runtime.GOOS)
-               return
+               t.Skipf("skipping test on %q", runtime.GOOS)
        }
 
        l, err := ListenPacket("udp", "127.0.0.1:0")
@@ -87,3 +117,32 @@ func testWriteToPacketConn(t *testing.T, raddr string) {
                t.Fatal("Write should fail")
        }
 }
+
+var udpConnLocalNameTests = []struct {
+       net   string
+       laddr *UDPAddr
+}{
+       {"udp4", &UDPAddr{IP: IPv4(127, 0, 0, 1)}},
+       {"udp4", &UDPAddr{}},
+       {"udp4", nil},
+}
+
+func TestUDPConnLocalName(t *testing.T) {
+       if testing.Short() || !*testExternal {
+               t.Skip("skipping test to avoid external network")
+       }
+
+       for _, tt := range udpConnLocalNameTests {
+               c, err := ListenUDP(tt.net, tt.laddr)
+               if err != nil {
+                       t.Errorf("ListenUDP failed: %v", err)
+                       return
+               }
+               defer c.Close()
+               la := c.LocalAddr()
+               if a, ok := la.(*UDPAddr); !ok || a.Port == 0 {
+                       t.Errorf("got %v; expected a proper address with non-zero port number", la)
+                       return
+               }
+       }
+}