Skip to content

Commit b922133

Browse files
always test TCP implementation
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
1 parent 1a69730 commit b922133

4 files changed

Lines changed: 65 additions & 17 deletions

File tree

v2/cli_flags.go

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package plugin
33
import (
44
"flag"
55
"os"
6+
"strconv"
7+
"strings"
68
)
79

810
type PluginCliFlags struct {
@@ -17,16 +19,40 @@ func ParsePluginCLIFlags(args []string) (*PluginCliFlags, error) {
1719
var kexReqFileName string
1820
var kexRespFileName string
1921
var debug bool
20-
flagSet.StringVar(&kexReqFileName, "kex-req-file", "", "File name for the key exchange for Transport Auth.")
21-
flagSet.StringVar(&kexRespFileName, "kex-resp-file", "", "File name for the key exchange for Transport Auth.")
22+
flagSet.StringVar(&kexReqFileName, "kex-req-file", "", "File name for the key exchange for Transport Auth. /proc/self/fd/* can be used to open a file descriptor cross platform.")
23+
flagSet.StringVar(&kexRespFileName, "kex-resp-file", "", "File name for the key exchange for Transport Auth. /proc/self/fd/* can be used to open a file descriptor cross platform.")
2224
flagSet.BoolVar(&debug, "debug", false, "Enable debug mode.")
2325
flagSet.Parse(args)
2426

25-
kexReqFile, err := os.OpenFile(kexReqFileName, os.O_WRONLY, 0)
26-
if err != nil {
27-
return nil, err
27+
var kexReqFile *os.File
28+
var kexRespFile *os.File
29+
var err error
30+
31+
if fdNumber, found := strings.CutPrefix(kexReqFileName, "/proc/self/fd/"); found {
32+
fdNumber, err := strconv.ParseUint(fdNumber, 10, 64)
33+
kexReqFile = os.NewFile(uintptr(fdNumber), kexReqFileName)
34+
if err != nil {
35+
return nil, err
36+
}
37+
} else {
38+
kexReqFile, err = os.OpenFile(kexReqFileName, os.O_WRONLY, 0)
39+
if err != nil {
40+
return nil, err
41+
}
2842
}
29-
kexRespFile, err := os.OpenFile(kexRespFileName, os.O_RDONLY, 0)
43+
if fdNumber, found := strings.CutPrefix(kexRespFileName, "/proc/self/fd/"); found {
44+
fdNumber, err := strconv.ParseUint(fdNumber, 10, 64)
45+
kexRespFile = os.NewFile(uintptr(fdNumber), kexRespFileName)
46+
if err != nil {
47+
return nil, err
48+
}
49+
} else {
50+
kexRespFile, err = os.OpenFile(kexRespFileName, os.O_RDONLY, 0)
51+
if err != nil {
52+
return nil, err
53+
}
54+
}
55+
3056
if err != nil {
3157
return nil, err
3258
}

v2/examples_v1/minimal/minimal_test.go

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"fmt"
66
"io"
7+
"net"
78
"os"
89
"testing"
910

@@ -15,7 +16,7 @@ import (
1516
"google.golang.org/protobuf/types/known/emptypb"
1617
)
1718

18-
func TestEcho(t *testing.T) {
19+
func testEchoImpl(t *testing.T, listener net.Listener, addr string) {
1920
pluginInfo := GetGotifyPluginInfo()
2021

2122
client, err := plugin.NewEphemeralTLSClient()
@@ -50,10 +51,6 @@ func TestEcho(t *testing.T) {
5051
t.Fatal(err)
5152
}
5253

53-
listener, addr, err := plugin.NewListener()
54-
if err != nil {
55-
t.Fatal(err)
56-
}
5754
go func() {
5855
compatV1.ServeTLS(listener, "", "")
5956
}()
@@ -110,3 +107,19 @@ func TestEcho(t *testing.T) {
110107
}
111108
}
112109
}
110+
111+
func TestEcho(t *testing.T) {
112+
listener, addr, err := plugin.NewListener()
113+
if err != nil {
114+
t.Fatal(err)
115+
}
116+
testEchoImpl(t, listener, addr)
117+
}
118+
119+
func TestEchoTCP(t *testing.T) {
120+
listener, addr, err := plugin.NewTCPListener()
121+
if err != nil {
122+
t.Fatal(err)
123+
}
124+
testEchoImpl(t, listener, addr)
125+
}

v2/pipe_not_unix.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,9 @@
33
package plugin
44

55
import (
6-
"fmt"
76
"net"
87
)
98

109
func NewListener() (net.Listener, string, error) {
11-
listener, err := net.Listen("tcp", "[::1]:0")
12-
if err != nil {
13-
return nil, "", err
14-
}
15-
return listener, fmt.Sprintf("dns://%s", listener.Addr().String()), nil
10+
return NewTCPListener()
1611
}

v2/pipe_tcp.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package plugin
2+
3+
import (
4+
"fmt"
5+
"net"
6+
)
7+
8+
func NewTCPListener() (net.Listener, string, error) {
9+
listener, err := net.Listen("tcp", "[::1]:0")
10+
if err != nil {
11+
return nil, "", err
12+
}
13+
return listener, fmt.Sprintf("dns:///%s", listener.Addr().String()), nil
14+
}

0 commit comments

Comments
 (0)