From 7b073fd1caaa45ea77d2e75e00418222b56d704f Mon Sep 17 00:00:00 2001 From: Marco Munizaga Date: Wed, 1 Mar 2023 09:01:48 -0800 Subject: [PATCH] Quick fix for #2155 --- p2p/host/resource-manager/extapi.go | 18 ++++++++++++++++ p2p/host/resource-manager/extapi_test.go | 26 ++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 p2p/host/resource-manager/extapi_test.go diff --git a/p2p/host/resource-manager/extapi.go b/p2p/host/resource-manager/extapi.go index 03edcd79ea..1c12e5972d 100644 --- a/p2p/host/resource-manager/extapi.go +++ b/p2p/host/resource-manager/extapi.go @@ -2,6 +2,7 @@ package rcmgr import ( "bytes" + "encoding/json" "sort" "strings" @@ -35,6 +36,23 @@ type ResourceManagerStat struct { Peers map[peer.ID]network.ScopeStat } +func (s ResourceManagerStat) MarshalJSON() ([]byte, error) { + // we want to marshal the encoded peer id + encodedPeerMap := make(map[string]network.ScopeStat, len(s.Peers)) + for p, v := range s.Peers { + encodedPeerMap[p.String()] = v + } + + type Alias ResourceManagerStat + return json.Marshal(&struct { + *Alias + Peers map[string]network.ScopeStat `json:",omitempty"` + }{ + Alias: (*Alias)(&s), + Peers: encodedPeerMap, + }) +} + var _ ResourceManagerState = (*resourceManager)(nil) func (s *resourceScope) Limit() Limit { diff --git a/p2p/host/resource-manager/extapi_test.go b/p2p/host/resource-manager/extapi_test.go new file mode 100644 index 0000000000..19c51458ad --- /dev/null +++ b/p2p/host/resource-manager/extapi_test.go @@ -0,0 +1,26 @@ +package rcmgr + +import ( + "encoding/json" + "testing" + + "github.com/libp2p/go-libp2p/core/network" + "github.com/libp2p/go-libp2p/core/peer" + "github.com/stretchr/testify/require" +) + +func TestResourceManagerStatRoundTrip(t *testing.T) { + validPeerID, err := peer.Decode("QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN") + require.NoError(t, err) + + n := ResourceManagerStat{ + Peers: map[peer.ID]network.ScopeStat{validPeerID: {}}, + } + b, err := json.Marshal(n) + require.NoError(t, err) + + rt := ResourceManagerStat{} + require.NoError(t, json.Unmarshal(b, &rt)) + + require.Equal(t, n, rt) +}