Commit 7118b9f7 authored by Janos Guljas's avatar Janos Guljas

add debug api peer disconnect handler

parent 8779acba
......@@ -5,9 +5,11 @@
package debugapi
import (
"errors"
"net/http"
"github.com/ethersphere/bee/pkg/jsonhttp"
"github.com/ethersphere/bee/pkg/p2p"
"github.com/gorilla/mux"
"github.com/multiformats/go-multiaddr"
)
......@@ -36,3 +38,20 @@ func (s *server) peerConnectHandler(w http.ResponseWriter, r *http.Request) {
Address: address,
})
}
func (s *server) peerDisconnectHandler(w http.ResponseWriter, r *http.Request) {
addr := mux.Vars(r)["address"]
if err := s.P2P.Disconnect(addr); err != nil {
s.Logger.Debugf("debug api: peer disconnect %s: %v", addr, err)
if errors.Is(err, p2p.ErrPeerNotFound) {
jsonhttp.BadRequest(w, "peer not found")
return
}
s.Logger.Errorf("unable to disconnect peer %s", addr)
jsonhttp.InternalServerError(w, err)
return
}
jsonhttp.OK(w, nil)
}
......@@ -13,6 +13,7 @@ import (
"github.com/ethersphere/bee/pkg/debugapi"
"github.com/ethersphere/bee/pkg/jsonhttp"
"github.com/ethersphere/bee/pkg/jsonhttp/jsonhttptest"
"github.com/ethersphere/bee/pkg/p2p"
"github.com/ethersphere/bee/pkg/p2p/mock"
ma "github.com/multiformats/go-multiaddr"
)
......@@ -53,3 +54,45 @@ func TestConnect(t *testing.T) {
})
})
}
func TestDisconnect(t *testing.T) {
address := "985732527402"
unknwonAdddress := "123456"
errorAddress := "33333333"
testErr := errors.New("test error")
client, cleanup := newTestServer(t, testServerOptions{
P2P: mock.New(mock.WithDisconnectFunc(func(addr string) error {
switch addr {
case address:
return nil
case errorAddress:
return testErr
default:
return p2p.ErrPeerNotFound
}
})),
})
defer cleanup()
t.Run("ok", func(t *testing.T) {
jsonhttptest.ResponseDirect(t, client, http.MethodDelete, "/peers/"+address, nil, http.StatusOK, jsonhttp.StatusResponse{
Code: http.StatusOK,
Message: http.StatusText(http.StatusOK),
})
})
t.Run("unknown", func(t *testing.T) {
jsonhttptest.ResponseDirect(t, client, http.MethodDelete, "/peers/"+unknwonAdddress, nil, http.StatusBadRequest, jsonhttp.StatusResponse{
Code: http.StatusBadRequest,
Message: "peer not found",
})
})
t.Run("error", func(t *testing.T) {
jsonhttptest.ResponseDirect(t, client, http.MethodDelete, "/peers/"+errorAddress, nil, http.StatusInternalServerError, jsonhttp.StatusResponse{
Code: http.StatusInternalServerError,
Message: testErr.Error(),
})
})
}
......@@ -49,6 +49,9 @@ func (s *server) setupRouting() {
internalRouter.Handle("/connect/{multi-address:.+}", jsonhttp.MethodHandler{
"POST": http.HandlerFunc(s.peerConnectHandler),
})
internalRouter.Handle("/peers/{address}", jsonhttp.MethodHandler{
"DELETE": http.HandlerFunc(s.peerDisconnectHandler),
})
s.Handler = internalBaseRouter
}
......@@ -334,7 +334,11 @@ func (s *Service) Disconnect(overlay string) error {
if !found {
return p2p.ErrPeerNotFound
}
return s.host.Network().ClosePeer(peerID)
if err := s.host.Network().ClosePeer(peerID); err != nil {
return err
}
s.peers.remove(peerID)
return nil
}
func (s *Service) NewStream(ctx context.Context, overlay, protocolName, streamName, version string) (p2p.Stream, error) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment