mirror of
https://github.com/cedar2025/hysteria.git
synced 2025-06-08 05:19:56 +00:00
83 lines
1.6 KiB
Go
83 lines
1.6 KiB
Go
package integration_tests
|
|
|
|
import (
|
|
"crypto/tls"
|
|
"io"
|
|
"net"
|
|
|
|
"github.com/apernet/hysteria/core/v2/server"
|
|
)
|
|
|
|
// This file provides utilities for the integration tests.
|
|
|
|
const (
|
|
testCertFile = "test.crt"
|
|
testKeyFile = "test.key"
|
|
)
|
|
|
|
func serverTLSConfig() server.TLSConfig {
|
|
cert, err := tls.LoadX509KeyPair(testCertFile, testKeyFile)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return server.TLSConfig{
|
|
Certificates: []tls.Certificate{cert},
|
|
}
|
|
}
|
|
|
|
func serverConn() (net.PacketConn, net.Addr, error) {
|
|
udpAddr := &net.UDPAddr{IP: net.IPv4(127, 0, 0, 1), Port: 14514}
|
|
udpConn, err := net.ListenUDP("udp", udpAddr)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
return udpConn, udpAddr, nil
|
|
}
|
|
|
|
// tcpEchoServer is a TCP server that echoes what it reads from the connection.
|
|
// It will never actively close the connection.
|
|
type tcpEchoServer struct {
|
|
Listener net.Listener
|
|
}
|
|
|
|
func (s *tcpEchoServer) Serve() error {
|
|
for {
|
|
conn, err := s.Listener.Accept()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
go func() {
|
|
_, _ = io.Copy(conn, conn)
|
|
_ = conn.Close()
|
|
}()
|
|
}
|
|
}
|
|
|
|
func (s *tcpEchoServer) Close() error {
|
|
return s.Listener.Close()
|
|
}
|
|
|
|
// udpEchoServer is a UDP server that echoes what it reads from the connection.
|
|
// It will never actively close the connection.
|
|
type udpEchoServer struct {
|
|
Conn net.PacketConn
|
|
}
|
|
|
|
func (s *udpEchoServer) Serve() error {
|
|
buf := make([]byte, 65536)
|
|
for {
|
|
n, addr, err := s.Conn.ReadFrom(buf)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
_, err = s.Conn.WriteTo(buf[:n], addr)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
|
|
func (s *udpEchoServer) Close() error {
|
|
return s.Conn.Close()
|
|
}
|