| 94 | } |
| 95 | |
| 96 | func TestCreateUDPStream(t *testing.T) { |
| 97 | expectedRequest := "test udp request data\n" |
| 98 | expectedResponse := "test udp response data\n" |
| 99 | |
| 100 | // Start target udp server |
| 101 | // We want to listen on the gateway IP so the proxy container can access it. |
| 102 | conn, err := net.ListenUDP("udp", &net.UDPAddr{IP: net.ParseIP(containerGateway)}) |
| 103 | require.NoError(t, err, "net.ListenUDP") |
| 104 | |
| 105 | go func() { |
| 106 | var buf [512]byte |
| 107 | n, addr, err := conn.ReadFromUDP(buf[0:]) |
| 108 | require.NoError(t, err, "ReadFromUDP") |
| 109 | assert.Equal(t, expectedRequest, string(buf[0:n]), "Should receive correct UDP request") |
| 110 | |
| 111 | logger.Info("ReadFromUDP", "buf", buf, "addr", addr) |
| 112 | |
| 113 | // Write back the message over UPD |
| 114 | _, err = conn.WriteToUDP([]byte(expectedResponse), addr) |
| 115 | require.NoError(t, err, "conn.WriteToUDP") |
| 116 | }() |
| 117 | |
| 118 | udpListenAddr := conn.LocalAddr() |
| 119 | |
| 120 | urlSplit := strings.Split(udpListenAddr.String(), ":") |
| 121 | udpListenPort := urlSplit[len(urlSplit)-1] |
| 122 | |
| 123 | // Now configure and start the MASQUE client |
| 124 | certDataFile := fmt.Sprintf("%s/testdata/h2o/server.crt", testutils.RootDir()) |
| 125 | certData, err := os.ReadFile(certDataFile) |
| 126 | require.NoError(t, err, "Reading certData") |
| 127 | |
| 128 | config := ClientConfig{ |
| 129 | ProxyAddr: "localhost:8444", |
| 130 | // The h2o server we're using doesn't require an actual token so this can be anything |
| 131 | AuthToken: "fake-token", |
| 132 | Logger: logger, |
| 133 | CertData: certData, |
| 134 | Insecure: true, |
| 135 | } |
| 136 | |
| 137 | c, err := NewClient(config) |
| 138 | defer func() { |
| 139 | if err := c.Close(); err != nil { |
| 140 | logger.Warn("Error closing", "err", err) |
| 141 | } |
| 142 | }() |
| 143 | require.NoError(t, err, "NewClient") |
| 144 | |
| 145 | dockerHostURL := fmt.Sprintf("%v:%v", containerGateway, udpListenPort) |
| 146 | |
| 147 | udpConn, err := c.CreateUDPStream(dockerHostURL) |
| 148 | require.NoError(t, err, "CreateUDPStream") |
| 149 | defer func() { |
| 150 | require.NoError(t, udpConn.Close(), "udpConn.Close()") |
| 151 | }() |
| 152 | |
| 153 | _, err = udpConn.Write([]byte(expectedRequest)) |