@@ -2,7 +2,10 @@ package cli
22
33import (
44 "context"
5+ "net/url"
56 "path"
7+ "path/filepath"
8+ "strings"
69 "testing"
710
811 rpcapi "github.com/ipfs/kubo/client/rpc"
@@ -13,39 +16,72 @@ import (
1316)
1417
1518func TestRPCUnixSocket (t * testing.T ) {
16- node := harness . NewT ( t ). NewNode (). Init ()
19+ t . Parallel ()
1720
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+ }
2049
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 ()
2761
28- unixMaddr , err := multiaddr .NewMultiaddr (sockAddr )
29- require .NoError (t , err )
62+ unixMaddr , err := multiaddr .NewMultiaddr (sockAddr )
63+ require .NoError (t , err )
3064
31- apiClient , err := rpcapi .NewApi (unixMaddr )
32- require .NoError (t , err )
65+ apiClient , err := rpcapi .NewApi (unixMaddr )
66+ require .NoError (t , err )
3367
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 )
4175
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 )
4983
50- node .StopDaemon ()
84+ node .StopDaemon ()
85+ })
86+ }
5187}
0 commit comments