@@ -2,7 +2,10 @@ package cli
2
2
3
3
import (
4
4
"context"
5
+ "net/url"
5
6
"path"
7
+ "path/filepath"
8
+ "strings"
6
9
"testing"
7
10
8
11
rpcapi "github.com/ipfs/kubo/client/rpc"
@@ -13,39 +16,72 @@ import (
13
16
)
14
17
15
18
func TestRPCUnixSocket (t * testing.T ) {
16
- node := harness . NewT ( t ). NewNode (). Init ()
19
+ t . Parallel ()
17
20
18
- sockDir := node .Dir
19
- sockAddr := path .Join ("/unix" , sockDir , "sock" )
21
+ testCases := []struct {
22
+ name string
23
+ getSockMultiaddr func (sockPath string ) (unixMultiaddr string )
24
+ }{
25
+ {
26
+ name : "Legacy /unix: unescaped socket path" ,
27
+ getSockMultiaddr : func (sockDir string ) string {
28
+ return path .Join ("/unix" , sockDir , "sock" )
29
+ },
30
+ },
31
+ {
32
+ name : "Spec-compliant /unix: percent-encoded socket path without leading slash" ,
33
+ getSockMultiaddr : func (sockDir string ) string {
34
+ sockPath := path .Join (sockDir , "sock" )
35
+ pathWithoutLeadingSlash := strings .TrimPrefix (sockPath , string (filepath .Separator ))
36
+ escapedPath := url .PathEscape (pathWithoutLeadingSlash )
37
+ return path .Join ("/unix" , escapedPath )
38
+ },
39
+ },
40
+ {
41
+ name : "Spec-compliant /unix: percent-encoded socket path with leading slash" ,
42
+ getSockMultiaddr : func (sockDir string ) string {
43
+ sockPath := path .Join (sockDir , "sock" )
44
+ escapedPath := url .PathEscape (sockPath )
45
+ return path .Join ("/unix" , escapedPath )
46
+ },
47
+ },
48
+ }
20
49
21
- node .UpdateConfig (func (cfg * config.Config ) {
22
- //cfg.Addresses.API = append(cfg.Addresses.API, sockPath)
23
- cfg .Addresses .API = []string {sockAddr }
24
- })
25
- t .Log ("Starting daemon with unix socket:" , sockAddr )
26
- node .StartDaemon ()
50
+ for _ , tc := range testCases {
51
+ t .Run (tc .name , func (t * testing.T ) {
52
+ node := harness .NewT (t ).NewNode ().Init ()
53
+ sockDir := node .Dir
54
+ sockAddr := tc .getSockMultiaddr (sockDir )
55
+ node .UpdateConfig (func (cfg * config.Config ) {
56
+ //cfg.Addresses.API = append(cfg.Addresses.API, sockPath)
57
+ cfg .Addresses .API = []string {sockAddr }
58
+ })
59
+ t .Log ("Starting daemon with unix socket:" , sockAddr )
60
+ node .StartDaemon ()
27
61
28
- unixMaddr , err := multiaddr .NewMultiaddr (sockAddr )
29
- require .NoError (t , err )
62
+ unixMaddr , err := multiaddr .NewMultiaddr (sockAddr )
63
+ require .NoError (t , err )
30
64
31
- apiClient , err := rpcapi .NewApi (unixMaddr )
32
- require .NoError (t , err )
65
+ apiClient , err := rpcapi .NewApi (unixMaddr )
66
+ require .NoError (t , err )
33
67
34
- var ver struct {
35
- Version string
36
- }
37
- err = apiClient .Request ("version" ).Exec (context .Background (), & ver )
38
- require .NoError (t , err )
39
- require .NotEmpty (t , ver )
40
- t .Log ("Got version:" , ver .Version )
68
+ var ver struct {
69
+ Version string
70
+ }
71
+ err = apiClient .Request ("version" ).Exec (context .Background (), & ver )
72
+ require .NoError (t , err )
73
+ require .NotEmpty (t , ver )
74
+ t .Log ("Got version:" , ver .Version )
41
75
42
- var res struct {
43
- ID string
44
- }
45
- err = apiClient .Request ("id" ).Exec (context .Background (), & res )
46
- require .NoError (t , err )
47
- require .NotEmpty (t , res )
48
- t .Log ("Got ID:" , res .ID )
76
+ var res struct {
77
+ ID string
78
+ }
79
+ err = apiClient .Request ("id" ).Exec (context .Background (), & res )
80
+ require .NoError (t , err )
81
+ require .NotEmpty (t , res )
82
+ t .Log ("Got ID:" , res .ID )
49
83
50
- node .StopDaemon ()
84
+ node .StopDaemon ()
85
+ })
86
+ }
51
87
}
0 commit comments