11package main
22
33import (
4- "bytes"
5- "fmt"
4+ "io"
65 "net"
76 "strconv"
8- "time"
97)
108
119// Test golang network package integration for tinygo.
1210// This test is not exhaustive and only tests the basic functionality of the package.
1311
14- const (
15- TEST_PORT = 9000
16- )
17-
1812var (
1913 testsPassed uint
14+ lnPort int
2015 err error
21- sendBuf = & bytes.Buffer {}
22- recvBuf = & bytes.Buffer {}
16+ recvBuf []byte
2317)
2418
2519var (
@@ -28,55 +22,52 @@ var (
2822
2923func TestDialListen () {
3024 // listen thread
25+ listenReady := make (chan bool , 1 )
3126 go func () {
32- ln , err := net .Listen ("tcp " , ":" + strconv . FormatInt ( TEST_PORT , 10 ) )
27+ ln , err := net .Listen ("tcp4 " , ":0" )
3328 if err != nil {
34- fmt . Printf ("error listening: %v \n " , err )
29+ println ("error listening: " , err )
3530 return
3631 }
32+ lnPort = ln .Addr ().(* net.TCPAddr ).Port
3733
34+ listenReady <- true
3835 conn , err := ln .Accept ()
3936 if err != nil {
40- fmt . Printf ("error accepting: %v \n " , err )
37+ println ("error accepting:" , err )
4138 return
4239 }
4340
44- recvBuf .Reset ()
45- _ , err = conn .Read (recvBuf .Bytes ())
46- if err != nil {
47- fmt .Printf ("error reading: %v\n " , err )
41+ recvBuf = make ([]byte , len (testDialListenData ))
42+ if _ , err := io .ReadFull (conn , recvBuf ); err != nil {
43+ println ("error reading: " , err )
4844 return
4945 }
5046
51- // TODO: this is racy
52- if recvBuf .String () != string (testDialListenData ) {
53- fmt .Printf ("error: received data does not match sent data: '%s' != '%s'\n " , recvBuf .String (), string (testDialListenData ))
47+ if string (recvBuf ) != string (testDialListenData ) {
48+ println ("error: received data does not match sent data" , string (recvBuf ), " != " , string (testDialListenData ))
5449 return
5550 }
5651 conn .Close ()
5752
5853 return
5954 }()
6055
61- // hacky way to wait for the listener to start
62- time .Sleep (1 * time .Second )
63-
64- sendBuf .Reset ()
65- fmt .Fprint (sendBuf , testDialListenData )
66- conn , err := net .Dial ("tcp4" , "127.0.0.1:" + strconv .FormatInt (TEST_PORT , 10 ))
56+ <- listenReady
57+ conn , err := net .Dial ("tcp4" , "127.0.0.1:" + strconv .FormatInt (int64 (lnPort ), 10 ))
6758 if err != nil {
68- fmt . Printf ("error dialing: %v \n " , err )
59+ println ("error dialing: " , err )
6960 return
7061 }
7162
72- if _ , err = conn .Write (sendBuf . Bytes () ); err != nil {
73- fmt . Printf ("error writing: %v \n " , err )
63+ if _ , err = conn .Write (testDialListenData ); err != nil {
64+ println ("error writing: " , err )
7465 return
7566 }
7667}
7768
7869func main () {
79- fmt . Printf ("test: net start\n " )
70+ println ("test: net start" )
8071 TestDialListen ()
81- fmt . Printf ("test: net end\n " )
72+ println ("test: net end" )
8273}
0 commit comments