github.com/jmigpin/editor@v1.6.0/core/godebug/debug/server_test.go (about) 1 package debug 2 3 import ( 4 "errors" 5 "fmt" 6 "io" 7 "net" 8 "sync" 9 "testing" 10 "time" 11 ) 12 13 func init() { 14 //logger = log.New(os.Stdout, "debug: ", 0) 15 hasGenConfig = true 16 ServerNetwork = "tcp" 17 ServerAddress = "127.0.0.1:10002" 18 acceptOnlyFirstClient = true 19 20 // manually register to run tests 21 RegisterStructsForEncodeDecode(encoderId) 22 } 23 24 func TestServer1(t *testing.T) { 25 clientWait := &sync.WaitGroup{} 26 clientWait.Add(1) 27 go func() { 28 defer clientWait.Done() 29 30 time.Sleep(500 * time.Millisecond) 31 c, err := newTestClient() 32 if err != nil { 33 t.Fatal(err) 34 } 35 36 msg := &ReqStartMsg{} 37 b, err := EncodeMessage(msg) 38 if err != nil { 39 t.Fatal(err) 40 } 41 c.conn.Write(b) 42 43 c.receiveLoop() 44 //go c.receiveLoop() 45 //c.conn.Close() 46 }() 47 48 srv, err := NewServer() 49 if err != nil { 50 t.Fatal(err) 51 } 52 53 srv.Close() 54 55 clientWait.Wait() 56 } 57 58 //---------- 59 60 type testClient struct { 61 conn net.Conn 62 } 63 64 func newTestClient() (*testClient, error) { 65 dialer := &net.Dialer{} 66 conn, err := dialer.Dial(ServerNetwork, ServerAddress) 67 if err != nil { 68 return nil, err 69 } 70 c := &testClient{conn: conn} 71 return c, nil 72 } 73 func (c *testClient) receiveLoop() { 74 for { 75 msg, err := DecodeMessage(c.conn) 76 if err != nil { 77 if !errors.Is(err, io.EOF) { 78 fmt.Printf("decode error: %v\n", err) 79 } 80 return 81 } 82 fmt.Printf("msg: %#v\n", msg) 83 } 84 }