(t *testing.T)
| 106 | } |
| 107 | |
| 108 | func TestMultiplex_TCP_Echo(t *testing.T) { |
| 109 | table := sudokuobfs.NewTable("seed", "prefer_ascii") |
| 110 | key := "test-key-mux" |
| 111 | target := "example.com:80" |
| 112 | |
| 113 | serverCfg := DefaultConfig() |
| 114 | serverCfg.Key = key |
| 115 | serverCfg.AEADMethod = "chacha20-poly1305" |
| 116 | serverCfg.Table = table |
| 117 | serverCfg.PaddingMin = 0 |
| 118 | serverCfg.PaddingMax = 0 |
| 119 | serverCfg.EnablePureDownlink = true |
| 120 | serverCfg.HandshakeTimeoutSeconds = 5 |
| 121 | serverCfg.DisableHTTPMask = true |
| 122 | |
| 123 | ln, err := net.Listen("tcp", "127.0.0.1:0") |
| 124 | if err != nil { |
| 125 | t.Fatalf("listen: %v", err) |
| 126 | } |
| 127 | t.Cleanup(func() { _ = ln.Close() }) |
| 128 | |
| 129 | var handshakes int64 |
| 130 | var streams int64 |
| 131 | done := make(chan struct{}) |
| 132 | |
| 133 | go func() { |
| 134 | defer close(done) |
| 135 | raw, err := ln.Accept() |
| 136 | if err != nil { |
| 137 | return |
| 138 | } |
| 139 | defer raw.Close() |
| 140 | |
| 141 | c, meta, err := ServerHandshake(raw, serverCfg) |
| 142 | if err != nil { |
| 143 | return |
| 144 | } |
| 145 | atomic.AddInt64(&handshakes, 1) |
| 146 | |
| 147 | session, err := ReadServerSession(c, meta) |
| 148 | if err != nil { |
| 149 | return |
| 150 | } |
| 151 | if session.Type != SessionTypeMultiplex { |
| 152 | _ = c.Close() |
| 153 | return |
| 154 | } |
| 155 | |
| 156 | mux, err := AcceptMultiplexServer(c) |
| 157 | if err != nil { |
| 158 | return |
| 159 | } |
| 160 | defer mux.Close() |
| 161 | |
| 162 | for { |
| 163 | stream, dst, err := mux.AcceptTCP() |
| 164 | if err != nil { |
| 165 | return |
nothing calls this directly
no test coverage detected