forked from TrueCloudLab/frostfs-api-go
[#189] sdk/netmap: Implement NodeInfo type
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
parent
6347f846eb
commit
8367b498d9
2 changed files with 142 additions and 0 deletions
|
@ -29,6 +29,9 @@ type NodeState uint32
|
||||||
// NodeAttribute represents v2 compatible attribute of the NeoFS Storage Node.
|
// NodeAttribute represents v2 compatible attribute of the NeoFS Storage Node.
|
||||||
type NodeAttribute netmap.Attribute
|
type NodeAttribute netmap.Attribute
|
||||||
|
|
||||||
|
// NodeInfo represents v2 compatible descriptor of the NeoFS node.
|
||||||
|
type NodeInfo netmap.NodeInfo
|
||||||
|
|
||||||
const (
|
const (
|
||||||
_ NodeState = iota
|
_ NodeState = iota
|
||||||
|
|
||||||
|
@ -200,3 +203,82 @@ func (a *NodeAttribute) SetParentKeys(keys ...string) {
|
||||||
(*netmap.Attribute)(a).
|
(*netmap.Attribute)(a).
|
||||||
SetParents(keys)
|
SetParents(keys)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewNodeInfo creates and returns new NodeInfo instance.
|
||||||
|
func NewNodeInfo() *NodeInfo {
|
||||||
|
return NewNodeInfoFromV2(new(netmap.NodeInfo))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewNodeInfoFromV2 converts v2 NodeInfo to NodeInfo.
|
||||||
|
func NewNodeInfoFromV2(i *netmap.NodeInfo) *NodeInfo {
|
||||||
|
return (*NodeInfo)(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ToV2 converts NodeInfo to v2 NodeInfo.
|
||||||
|
func (i *NodeInfo) ToV2() *netmap.NodeInfo {
|
||||||
|
return (*netmap.NodeInfo)(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
// PublicKey returns public key of the node in a binary format.
|
||||||
|
func (i *NodeInfo) PublicKey() []byte {
|
||||||
|
return (*netmap.NodeInfo)(i).
|
||||||
|
GetPublicKey()
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetPublicKey sets public key of the node in a binary format.
|
||||||
|
func (i *NodeInfo) SetPublicKey(key []byte) {
|
||||||
|
(*netmap.NodeInfo)(i).
|
||||||
|
SetPublicKey(key)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Address returns network endpoint address of the node.
|
||||||
|
func (i *NodeInfo) Address() string {
|
||||||
|
return (*netmap.NodeInfo)(i).
|
||||||
|
GetAddress()
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetAddress sets network endpoint address of the node.
|
||||||
|
func (i *NodeInfo) SetAddress(addr string) {
|
||||||
|
(*netmap.NodeInfo)(i).
|
||||||
|
SetAddress(addr)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Attributes returns list of the node attributes.
|
||||||
|
func (i *NodeInfo) Attributes() []*NodeAttribute {
|
||||||
|
as := (*netmap.NodeInfo)(i).
|
||||||
|
GetAttributes()
|
||||||
|
|
||||||
|
res := make([]*NodeAttribute, 0, len(as))
|
||||||
|
|
||||||
|
for i := range as {
|
||||||
|
res = append(res, NewNodeAttributeFromV2(as[i]))
|
||||||
|
}
|
||||||
|
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetAttributes sets list of the node attributes.
|
||||||
|
func (i *NodeInfo) SetAttributes(as ...*NodeAttribute) {
|
||||||
|
asV2 := make([]*netmap.Attribute, 0, len(as))
|
||||||
|
|
||||||
|
for i := range as {
|
||||||
|
asV2 = append(asV2, as[i].ToV2())
|
||||||
|
}
|
||||||
|
|
||||||
|
(*netmap.NodeInfo)(i).
|
||||||
|
SetAttributes(asV2)
|
||||||
|
}
|
||||||
|
|
||||||
|
// State returns node state.
|
||||||
|
func (i *NodeInfo) State() NodeState {
|
||||||
|
return NodeStateFromV2(
|
||||||
|
(*netmap.NodeInfo)(i).
|
||||||
|
GetState(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetState sets node state.
|
||||||
|
func (i *NodeInfo) SetState(s NodeState) {
|
||||||
|
(*netmap.NodeInfo)(i).
|
||||||
|
SetState(s.ToV2())
|
||||||
|
}
|
||||||
|
|
|
@ -80,3 +80,63 @@ func TestNodeAttribute_ParentKeys(t *testing.T) {
|
||||||
|
|
||||||
require.Equal(t, keys, a.ParentKeys())
|
require.Equal(t, keys, a.ParentKeys())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testNodeAttribute() *NodeAttribute {
|
||||||
|
a := new(NodeAttribute)
|
||||||
|
a.SetKey("key")
|
||||||
|
a.SetValue("value")
|
||||||
|
a.SetParentKeys("par1", "par2")
|
||||||
|
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNodeInfoFromV2(t *testing.T) {
|
||||||
|
iV2 := new(netmap.NodeInfo)
|
||||||
|
iV2.SetPublicKey([]byte{1, 2, 3})
|
||||||
|
iV2.SetAddress("456")
|
||||||
|
iV2.SetState(netmap.Online)
|
||||||
|
iV2.SetAttributes([]*netmap.Attribute{
|
||||||
|
testNodeAttribute().ToV2(),
|
||||||
|
testNodeAttribute().ToV2(),
|
||||||
|
})
|
||||||
|
|
||||||
|
i := NewNodeInfoFromV2(iV2)
|
||||||
|
|
||||||
|
require.Equal(t, iV2, i.ToV2())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNodeInfo_PublicKey(t *testing.T) {
|
||||||
|
i := new(NodeInfo)
|
||||||
|
key := []byte{1, 2, 3}
|
||||||
|
|
||||||
|
i.SetPublicKey(key)
|
||||||
|
|
||||||
|
require.Equal(t, key, i.PublicKey())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNodeInfo_Address(t *testing.T) {
|
||||||
|
i := new(NodeInfo)
|
||||||
|
a := "127.0.0.1:8080"
|
||||||
|
|
||||||
|
i.SetAddress(a)
|
||||||
|
|
||||||
|
require.Equal(t, a, i.Address())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNodeInfo_State(t *testing.T) {
|
||||||
|
i := new(NodeInfo)
|
||||||
|
s := NodeStateOnline
|
||||||
|
|
||||||
|
i.SetState(s)
|
||||||
|
|
||||||
|
require.Equal(t, s, i.State())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNodeInfo_Attributes(t *testing.T) {
|
||||||
|
i := new(NodeInfo)
|
||||||
|
as := []*NodeAttribute{testNodeAttribute(), testNodeAttribute()}
|
||||||
|
|
||||||
|
i.SetAttributes(as...)
|
||||||
|
|
||||||
|
require.Equal(t, as, i.Attributes())
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue