Skip to content

Instantly share code, notes, and snippets.

@lucas-clemente
Forked from marten-seemann/udp_test.go
Last active July 25, 2017 17:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lucas-clemente/2bdf07249707f2b9beebc15dac20f38b to your computer and use it in GitHub Desktop.
Save lucas-clemente/2bdf07249707f2b9beebc15dac20f38b to your computer and use it in GitHub Desktop.
package udp_test
import (
"net"
"strconv"
"time"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
var _ = Describe("UDP", func() {
It("tests", func() {
dataChan := make(chan []byte)
laddr, err := net.ResolveUDPAddr("udp4", "0.0.0.0:0")
Expect(err).ToNot(HaveOccurred())
ln, err := net.ListenUDP("udp4", laddr)
Expect(err).ToNot(HaveOccurred())
defer ln.Close()
go func() {
defer GinkgoRecover()
data := make([]byte, 100)
n, _, err := ln.ReadFrom(data)
Expect(err).ToNot(HaveOccurred())
data = data[:n]
dataChan <- data
}()
addrString := "localhost:" + strconv.Itoa(ln.LocalAddr().(*net.UDPAddr).Port)
addr, err := net.ResolveUDPAddr("udp4", addrString)
Expect(err).NotTo(HaveOccurred())
Expect(addr.Port).To(Equal(ln.LocalAddr().(*net.UDPAddr).Port))
data := make([]byte, 77)
for i := 0; i < 10; i++ {
conn, err := net.DialUDP("udp4", nil, addr)
Expect(err).ToNot(HaveOccurred())
defer conn.Close()
_, err = conn.Write(data)
Expect(err).ToNot(HaveOccurred())
time.Sleep(time.Millisecond)
}
Eventually(dataChan).Should(Receive(Equal(data)))
})
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment