| 194 | } |
| 195 | |
| 196 | func TestCreateUDPStream(t *testing.T) { |
| 197 | expectedRequest := "test udp request data\n" |
| 198 | expectedResponse := "test udp response data\n" |
| 199 | |
| 200 | // Start target udp server |
| 201 | // We want to listen on the gateway IP so the proxy container can access it. |
| 202 | conn, err := net.ListenUDP("udp", &net.UDPAddr{IP: net.ParseIP(containerGateway)}) |
| 203 | require.NoError(t, err, "net.ListenUDP") |
| 204 | |
| 205 | go func() { |
| 206 | var buf [512]byte |
| 207 | n, addr, err := conn.ReadFromUDP(buf[0:]) |
| 208 | require.NoError(t, err, "ReadFromUDP") |
| 209 | assert.Equal(t, expectedRequest, string(buf[0:n]), "Should receive correct UDP request") |
| 210 | |
| 211 | logger.Info("ReadFromUDP", "buf", buf, "addr", addr) |
| 212 | |
| 213 | // Write back the message over UPD |
| 214 | _, err = conn.WriteToUDP([]byte(expectedResponse), addr) |
| 215 | require.NoError(t, err, "conn.WriteToUDP") |
| 216 | }() |
| 217 | |
| 218 | udpListenAddr := conn.LocalAddr() |
| 219 | |
| 220 | urlSplit := strings.Split(udpListenAddr.String(), ":") |
| 221 | udpListenPort := urlSplit[len(urlSplit)-1] |
| 222 | |
| 223 | // Now configure and start the MASQUE client |
| 224 | certDataFile := fmt.Sprintf("%s/testdata/h2o/server.crt", testutils.RootDir()) |
| 225 | certData, err := os.ReadFile(certDataFile) |
| 226 | require.NoError(t, err, "Reading certData") |
| 227 | |
| 228 | config := ClientConfig{ |
| 229 | ProxyAddr: "localhost:8444", |
| 230 | // The h2o server we're using doesn't require an actual token so this can be anything |
| 231 | AuthToken: "fake-token", |
| 232 | Logger: logger, |
| 233 | CertData: certData, |
| 234 | } |
| 235 | |
| 236 | c := NewClient(config) |
| 237 | |
| 238 | dockerHostURL := fmt.Sprintf("%v:%v", containerGateway, udpListenPort) |
| 239 | |
| 240 | udpConn, err := c.CreateUDPStream(dockerHostURL) |
| 241 | require.NoError(t, err, "CreateUDPStream") |
| 242 | defer func() { |
| 243 | require.NoError(t, udpConn.Close(), "udpConn.Close()") |
| 244 | }() |
| 245 | |
| 246 | _, err = udpConn.Write([]byte(expectedRequest)) |
| 247 | require.NoError(t, err, "udpConn.Write") |
| 248 | |
| 249 | var buf [512]byte |
| 250 | n, err := udpConn.Read(buf[0:]) |
| 251 | require.NoError(t, err, "udpConn.Read") |
| 252 | |
| 253 | assert.Equal(t, expectedResponse, string(buf[0:n]), "Should receive correct UDP response") |