using FrostFS.Netmap; using FrostFS.SDK.Client; using Google.Protobuf; namespace FrostFS.SDK.Tests.Unit; public class NodeInfoTests : NetworkTestsBase { [Theory] [InlineData(false)] [InlineData(true)] public async void NodeInfoTest(bool useContext) { var body = new LocalNodeInfoResponse.Types.Body { NodeInfo = new NodeInfo() { State = NodeInfo.Types.State.Online, PublicKey = ByteString.CopyFrom([1, 2, 3]) }, Version = new Refs.Version { Major = 2, Minor = 12 } }; body.NodeInfo.Addresses.Add("address1"); body.NodeInfo.Addresses.Add("address2"); body.NodeInfo.Attributes.Add(new NodeInfo.Types.Attribute { Key = "key1", Value = "value1" }); body.NodeInfo.Attributes.Add(new NodeInfo.Types.Attribute { Key = "key2", Value = "value2" }); Mocker.NodeInfoResponse = new LocalNodeInfoResponse { Body = body }; var ctx = useContext ? new CallContext(TimeSpan.FromSeconds(20), Mocker.CancellationTokenSource.Token) : default; var validTimeoutFrom = DateTime.UtcNow.AddSeconds(20); var result = await GetClient(DefaultSettings).GetNodeInfoAsync(ctx); var validTimeoutTo = DateTime.UtcNow.AddSeconds(20); Assert.NotNull(result); Assert.Equal(NodeState.Online, result.State); Assert.Equal(2, result.Addresses.Count); Assert.Equal("address1", result.Addresses.ElementAt(0)); Assert.Equal("address2", result.Addresses.ElementAt(1)); Assert.Equal(2, result.Attributes.Count); Assert.Equal("value1", result.Attributes["key1"]); Assert.Equal("value2", result.Attributes["key2"]); Assert.NotNull(Mocker.LocalNodeInfoRequest); if (useContext) { Assert.Empty(Mocker.LocalNodeInfoRequest.MetaHeader.XHeaders); Assert.Equal(Mocker.CancellationTokenSource.Token, Mocker.CancellationToken); Assert.NotNull(Mocker.DateTime); Assert.True(Mocker.DateTime.Value >= validTimeoutFrom); Assert.True(Mocker.DateTime.Value <= validTimeoutTo); } else { Assert.Empty(Mocker.LocalNodeInfoRequest.MetaHeader.XHeaders); Assert.Null(Mocker.DateTime); } } }