Skip to content

Commit

Permalink
Add unit test for rpc over unix socket
Browse files Browse the repository at this point in the history
  • Loading branch information
gammazero committed Aug 20, 2024
1 parent 23ca62a commit 893a948
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 0 deletions.
11 changes: 11 additions & 0 deletions test/cli/harness/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,17 @@ func (n *Node) checkAPI(authorization string) bool {
log.Debugf("node %d API addr not available yet: %s", n.ID, err.Error())
return false
}

if unixAddr, err := apiAddr.ValueForProtocol(multiaddr.P_UNIX); err == nil {
parts := strings.SplitN(unixAddr, "/", 2)
if len(parts) < 1 {
panic("malformed unix socket address")
}
fileName := "/" + parts[1]
_, err := os.Stat(fileName)
return !errors.Is(err, fs.ErrNotExist)
}

ip, err := apiAddr.ValueForProtocol(multiaddr.P_IP4)
if err != nil {
panic(err)
Expand Down
55 changes: 55 additions & 0 deletions test/cli/rpc_unixsocket_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package cli

import (
"context"
//"net"
//"net/http"
"path"
"testing"

rpcapi "github.com/ipfs/kubo/client/rpc"
///"github.com/ipfs/kubo/client/rpc/auth"
"github.com/ipfs/kubo/config"
"github.com/ipfs/kubo/test/cli/harness"
"github.com/multiformats/go-multiaddr"
//manet "github.com/multiformats/go-multiaddr/net"
"github.com/stretchr/testify/require"
)

func TestRPCUnixSocket(t *testing.T) {
node := harness.NewT(t).NewNode().Init()

sockDir := node.Dir
sockAddr := path.Join("/unix", sockDir, "sock")

node.UpdateConfig(func(cfg *config.Config) {
//cfg.Addresses.API = append(cfg.Addresses.API, sockPath)
cfg.Addresses.API = []string{sockAddr}
})
t.Log("Starting daemon with unix socket:", sockAddr)
node.StartDaemon()

unixMaddr, err := multiaddr.NewMultiaddr(sockAddr)
require.NoError(t, err)

apiClient, err := rpcapi.NewApi(unixMaddr)
require.NoError(t, err)

var ver struct {
Version string
}
err = apiClient.Request("version").Exec(context.Background(), &ver)
require.NoError(t, err)
require.NotEmpty(t, ver)
t.Log("Got version:", ver.Version)

var res struct {
ID string
}
err = apiClient.Request("id").Exec(context.Background(), &res)
require.NoError(t, err)
require.NotEmpty(t, res)
t.Log("Got ID:", res.ID)

node.StopDaemon()
}

0 comments on commit 893a948

Please sign in to comment.