diff --git a/pkg/services/control/service_test.go b/pkg/services/control/service_test.go index 76933b4b2..b0c2ce1f2 100644 --- a/pkg/services/control/service_test.go +++ b/pkg/services/control/service_test.go @@ -1,6 +1,7 @@ package control_test import ( + "bytes" "testing" "github.com/nspcc-dev/neofs-node/pkg/services/control" @@ -79,3 +80,43 @@ func generateSetNetmapStatusRequestBody() *control.SetNetmapStatusRequest_Body { func equalSetnetmapStatusRequestBodies(b1, b2 *control.SetNetmapStatusRequest_Body) bool { return b1.GetStatus() == b2.GetStatus() } + +func TestListShardsResponse_Body_StableMarshal(t *testing.T) { + testStableMarshal(t, + generateListShardsResponseBody(), + new(control.ListShardsResponse_Body), + func(m1, m2 protoMessage) bool { + return equalListShardResponseBodies( + m1.(*control.ListShardsResponse_Body), + m2.(*control.ListShardsResponse_Body), + ) + }, + ) +} + +func equalListShardResponseBodies(b1, b2 *control.ListShardsResponse_Body) bool { + if len(b1.Shards) != len(b2.Shards) { + return false + } + + for i := range b1.Shards { + if b1.Shards[i].GetMetabasePath() != b2.Shards[i].GetMetabasePath() || + b1.Shards[i].GetBlobstorePath() != b2.Shards[i].GetBlobstorePath() || + b1.Shards[i].GetWritecachePath() != b2.Shards[i].GetWritecachePath() || + !bytes.Equal(b1.Shards[i].GetShard_ID(), b2.Shards[i].GetShard_ID()) { + return false + } + } + + return true +} + +func generateListShardsResponseBody() *control.ListShardsResponse_Body { + body := new(control.ListShardsResponse_Body) + body.SetShards([]*control.ShardInfo{ + generateShardInfo(), + generateShardInfo(), + }) + + return body +} diff --git a/pkg/services/control/types_test.go b/pkg/services/control/types_test.go index 64143975d..4f16f1b2e 100644 --- a/pkg/services/control/types_test.go +++ b/pkg/services/control/types_test.go @@ -4,6 +4,7 @@ import ( "bytes" "testing" + "github.com/google/uuid" "github.com/nspcc-dev/neofs-node/pkg/services/control" ) @@ -123,3 +124,20 @@ func equalNodeInfos(n1, n2 *control.NodeInfo) bool { return true } + +func generateShardInfo() *control.ShardInfo { + si := new(control.ShardInfo) + + path := "/nice/dir/awesome/files" + + uid, _ := uuid.NewRandom() + bin, _ := uid.MarshalBinary() + + si.SetID(bin) + si.SetMode(control.ShardMode_READ_WRITE) + si.SetMetabasePath(path) + si.SetBlobstorePath(path) + si.SetWriteCachePath(path) + + return si +}