[#28] Client: Apply code optimizations
Signed-off-by: Pavel Gross <p.gross@yadro.com>
This commit is contained in:
parent
766f61a5f7
commit
749000a090
57 changed files with 845 additions and 1116 deletions
|
@ -8,12 +8,12 @@ public abstract class ContainerTestsBase
|
|||
{
|
||||
internal readonly string key = "KwHDAJ66o8FoLBjVbjP2sWBmgBMGjt7Vv4boA7xQrBoAYBE397Aq";
|
||||
|
||||
protected IOptions<SingleOwnerClientSettings> Settings { get; set; }
|
||||
protected IOptions<ClientSettings> Settings { get; set; }
|
||||
protected ContainerMocker Mocker { get; set; }
|
||||
|
||||
protected ContainerTestsBase()
|
||||
{
|
||||
Settings = Options.Create(new SingleOwnerClientSettings
|
||||
Settings = Options.Create(new ClientSettings
|
||||
{
|
||||
Key = key,
|
||||
Host = "http://localhost:8080"
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
|
@ -10,15 +10,15 @@
|
|||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<EnableNETAnalyzers>true</EnableNETAnalyzers>
|
||||
<EnableNETAnalyzers>true</EnableNETAnalyzers>
|
||||
</PropertyGroup>
|
||||
|
||||
|
||||
<PropertyGroup>
|
||||
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
|
||||
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
|
||||
</PropertyGroup>
|
||||
|
||||
|
||||
<ItemGroup>
|
||||
<None Remove="TestData\cat.jpeg" />
|
||||
<None Remove="cat.jpeg" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
@ -38,7 +38,7 @@
|
|||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Update="TestData\cat.jpg">
|
||||
<None Update="cat.jpg">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
|
|
@ -1,9 +1,4 @@
|
|||
using System.Security.Cryptography;
|
||||
|
||||
using FrostFS.Object;
|
||||
using FrostFS.SDK.Client;
|
||||
using FrostFS.SDK.Client.Mappers.GRPC;
|
||||
using FrostFS.SDK.Cryptography;
|
||||
using FrostFS.Session;
|
||||
|
||||
using Google.Protobuf;
|
||||
|
|
|
@ -43,7 +43,7 @@ public class AsyncStreamReaderMock(string key, FrostFsObjectHeader objectHeader)
|
|||
Signature = new Refs.Signature
|
||||
{
|
||||
Key = ByteString.CopyFrom(Key.PublicKey()),
|
||||
Sign = ByteString.CopyFrom(Key.SignData(header.ToByteArray())),
|
||||
Sign = Key.SignData(header.ToByteArray()),
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
|
@ -46,19 +46,19 @@ public abstract class ServiceBase(string key)
|
|||
{
|
||||
Key = ByteString.CopyFrom(Key.PublicKey()),
|
||||
Scheme = Refs.SignatureScheme.EcdsaRfc6979Sha256,
|
||||
Sign = ByteString.CopyFrom(Key.SignData(response.MetaHeader.ToByteArray()))
|
||||
Sign = Key.SignData(response.MetaHeader.ToByteArray())
|
||||
},
|
||||
BodySignature = new Refs.Signature
|
||||
{
|
||||
Key = ByteString.CopyFrom(Key.PublicKey()),
|
||||
Scheme = Refs.SignatureScheme.EcdsaRfc6979Sha256,
|
||||
Sign = ByteString.CopyFrom(Key.SignData(response.GetBody().ToByteArray()))
|
||||
Sign = Key.SignData(response.GetBody().ToByteArray())
|
||||
},
|
||||
OriginSignature = new Refs.Signature
|
||||
{
|
||||
Key = ByteString.CopyFrom(Key.PublicKey()),
|
||||
Scheme = Refs.SignatureScheme.EcdsaRfc6979Sha256,
|
||||
Sign = ByteString.CopyFrom(Key.SignData([]))
|
||||
Sign = Key.SignData([])
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -5,7 +5,6 @@ using FrostFS.Object;
|
|||
using FrostFS.SDK.Client;
|
||||
using FrostFS.SDK.Client.Mappers.GRPC;
|
||||
using FrostFS.SDK.Cryptography;
|
||||
using FrostFS.Session;
|
||||
|
||||
using Google.Protobuf;
|
||||
|
||||
|
@ -41,7 +40,7 @@ public class ObjectMocker(string key) : ObjectServiceBase(key)
|
|||
|
||||
public GetRangeHashRequest? GetRangeHashRequest { get; set; }
|
||||
|
||||
public Collection<ByteString> RangeHashResponses { get; } = [];
|
||||
public Collection<ByteString> RangeHashResponses { get; } = [];
|
||||
|
||||
public override Mock<ObjectService.ObjectServiceClient> GetMock()
|
||||
{
|
||||
|
@ -94,7 +93,7 @@ public class ObjectMocker(string key) : ObjectServiceBase(key)
|
|||
headResponse.Body.Header.Signature = new Refs.Signature
|
||||
{
|
||||
Key = ByteString.CopyFrom(Key.PublicKey()),
|
||||
Sign = ByteString.CopyFrom(Key.SignData(headResponse.Body.Header.ToByteArray())),
|
||||
Sign = Key.SignData(headResponse.Body.Header.ToByteArray()),
|
||||
};
|
||||
|
||||
headResponse.VerifyHeader = GetResponseVerificationHeader(headResponse);
|
||||
|
@ -259,7 +258,7 @@ public class ObjectMocker(string key) : ObjectServiceBase(key)
|
|||
response.Body.HashList.Add(hash);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
response.VerifyHeader = GetResponseVerificationHeader(response);
|
||||
|
||||
return new AsyncUnaryCall<GetRangeHashResponse>(
|
||||
|
@ -281,7 +280,7 @@ public class ObjectMocker(string key) : ObjectServiceBase(key)
|
|||
{
|
||||
Body = new PatchResponse.Types.Body
|
||||
{
|
||||
ObjectId = new Refs.ObjectID { Value = ByteString.CopyFrom(SHA256.HashData([1,2,3])) },
|
||||
ObjectId = new Refs.ObjectID { Value = ByteString.CopyFrom(SHA256.HashData([1, 2, 3])) },
|
||||
},
|
||||
MetaHeader = ResponseMetaHeader
|
||||
};
|
||||
|
|
|
@ -31,7 +31,7 @@ public class SessionMocker(string key) : ServiceBase(key)
|
|||
|
||||
if (SessionKey == null)
|
||||
{
|
||||
SessionKey = new byte[32];
|
||||
SessionKey = new byte[33];
|
||||
rand.NextBytes(SessionKey);
|
||||
}
|
||||
|
||||
|
|
|
@ -32,16 +32,13 @@ public class NetworkTest : NetworkTestsBase
|
|||
new PrmNetworkSettings(new CallContext
|
||||
{
|
||||
CancellationToken = Mocker.CancellationTokenSource.Token,
|
||||
Timeout = TimeSpan.FromSeconds(20),
|
||||
OwnerId = OwnerId,
|
||||
Key = ECDsaKey,
|
||||
Version = Version
|
||||
Timeout = TimeSpan.FromSeconds(20)
|
||||
})
|
||||
: new PrmNetworkSettings();
|
||||
|
||||
var validTimeoutFrom = DateTime.UtcNow.AddSeconds(20);
|
||||
|
||||
var result = await GetClient().GetNetworkSettingsAsync(param);
|
||||
var result = await GetClient(DefaultSettings).GetNetworkSettingsAsync(param);
|
||||
|
||||
var validTimeoutTo = DateTime.UtcNow.AddSeconds(20);
|
||||
|
||||
|
@ -113,17 +110,14 @@ public class NetworkTest : NetworkTestsBase
|
|||
|
||||
Mocker.NetmapSnapshotResponse = new NetmapSnapshotResponse { Body = body };
|
||||
|
||||
PrmNetmapSnapshot param;
|
||||
PrmNetmapSnapshot param = new();
|
||||
|
||||
if (useContext)
|
||||
{
|
||||
var ctx = new CallContext
|
||||
{
|
||||
CancellationToken = Mocker.CancellationTokenSource.Token,
|
||||
Timeout = TimeSpan.FromSeconds(20),
|
||||
OwnerId = OwnerId,
|
||||
Key = ECDsaKey,
|
||||
Version = Version
|
||||
Timeout = TimeSpan.FromSeconds(20)
|
||||
};
|
||||
|
||||
param = new(ctx);
|
||||
|
@ -137,7 +131,7 @@ public class NetworkTest : NetworkTestsBase
|
|||
|
||||
var validTimeoutFrom = DateTime.UtcNow.AddSeconds(20);
|
||||
|
||||
var result = await GetClient().GetNetmapSnapshotAsync(param);
|
||||
var result = await GetClient(DefaultSettings).GetNetmapSnapshotAsync(param);
|
||||
|
||||
var validTimeoutTo = DateTime.UtcNow.AddSeconds(20);
|
||||
|
||||
|
@ -219,10 +213,7 @@ public class NetworkTest : NetworkTestsBase
|
|||
var ctx = new CallContext
|
||||
{
|
||||
CancellationToken = Mocker.CancellationTokenSource.Token,
|
||||
Timeout = TimeSpan.FromSeconds(20),
|
||||
OwnerId = OwnerId,
|
||||
Key = ECDsaKey,
|
||||
Version = Version
|
||||
Timeout = TimeSpan.FromSeconds(20)
|
||||
};
|
||||
|
||||
param = new(ctx);
|
||||
|
@ -236,7 +227,7 @@ public class NetworkTest : NetworkTestsBase
|
|||
|
||||
var validTimeoutFrom = DateTime.UtcNow.AddSeconds(20);
|
||||
|
||||
var result = await GetClient().GetNodeInfoAsync(param);
|
||||
var result = await GetClient(DefaultSettings).GetNodeInfoAsync(param);
|
||||
|
||||
var validTimeoutTo = DateTime.UtcNow.AddSeconds(20);
|
||||
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Security.Cryptography;
|
||||
|
||||
using FrostFS.SDK.Client.Interfaces;
|
||||
using FrostFS.SDK.Cryptography;
|
||||
|
||||
using Microsoft.Extensions.Options;
|
||||
|
||||
|
@ -13,32 +11,27 @@ public abstract class NetworkTestsBase
|
|||
{
|
||||
internal readonly string key = "KwHDAJ66o8FoLBjVbjP2sWBmgBMGjt7Vv4boA7xQrBoAYBE397Aq";
|
||||
|
||||
protected IOptions<SingleOwnerClientSettings> Settings { get; set; }
|
||||
// protected FrostFsVersion Version { get; set; } = new FrostFsVersion(2, 13);
|
||||
|
||||
protected FrostFsVersion Version { get; set; } = new FrostFsVersion(2, 13);
|
||||
|
||||
protected ECDsa ECDsaKey { get; set; }
|
||||
protected FrostFsOwner OwnerId { get; set; }
|
||||
protected NetworkMocker Mocker { get; set; }
|
||||
|
||||
protected ClientSettings DefaultSettings { get; }
|
||||
|
||||
protected NetworkTestsBase()
|
||||
{
|
||||
Settings = Options.Create(new SingleOwnerClientSettings
|
||||
DefaultSettings = new ClientSettings
|
||||
{
|
||||
Key = key,
|
||||
Host = "http://localhost:8080"
|
||||
});
|
||||
|
||||
ECDsaKey = key.LoadWif();
|
||||
OwnerId = FrostFsOwner.FromKey(ECDsaKey);
|
||||
Host = "http://localhost:8080",
|
||||
};
|
||||
|
||||
Mocker = new NetworkMocker(this.key);
|
||||
}
|
||||
|
||||
protected IFrostFSClient GetClient()
|
||||
protected IFrostFSClient GetClient(ClientSettings settings)
|
||||
{
|
||||
return Client.FrostFSClient.GetTestInstance(
|
||||
Settings,
|
||||
Options.Create(settings),
|
||||
null,
|
||||
Mocker.GetMock().Object,
|
||||
new SessionMocker(this.key).GetMock().Object,
|
||||
|
|
|
@ -6,12 +6,9 @@ using System.Text;
|
|||
using FrostFS.Refs;
|
||||
using FrostFS.SDK.Client;
|
||||
using FrostFS.SDK.Client.Mappers.GRPC;
|
||||
using FrostFS.SDK.Cryptography;
|
||||
|
||||
using Google.Protobuf;
|
||||
|
||||
using static FrostFS.Object.ECInfo.Types;
|
||||
|
||||
namespace FrostFS.SDK.Tests;
|
||||
|
||||
[SuppressMessage("Reliability", "CA2007:Consider calling ConfigureAwait on the awaited task", Justification = "Default Value is correct for tests")]
|
||||
|
@ -23,18 +20,9 @@ public class ObjectTest : ObjectTestsBase
|
|||
{
|
||||
var client = GetClient();
|
||||
|
||||
var ecdsaKey = key.LoadWif();
|
||||
var objectId = client.CalculateObjectId(Mocker.ObjectHeader!);
|
||||
|
||||
var ctx = new CallContext
|
||||
{
|
||||
Key = ecdsaKey,
|
||||
OwnerId = FrostFsOwner.FromKey(ecdsaKey),
|
||||
Version = new FrostFsVersion(2, 13)
|
||||
};
|
||||
|
||||
var objectId = client.CalculateObjectId(Mocker.ObjectHeader!, ctx);
|
||||
|
||||
var result = await client.GetObjectAsync(new PrmObjectGet(ContainerId, objectId, ctx));
|
||||
var result = await client.GetObjectAsync(new PrmObjectGet(ContainerId, objectId));
|
||||
|
||||
Assert.NotNull(result);
|
||||
|
||||
|
@ -90,7 +78,7 @@ public class ObjectTest : ObjectTestsBase
|
|||
NetworkMocker.Parameters.Add("MaxObjectSize", [0x0, 0xa]);
|
||||
|
||||
var blockSize = 2560;
|
||||
byte[] bytes = File.ReadAllBytes(@".\..\..\..\TestData\cat.jpg");
|
||||
byte[] bytes = File.ReadAllBytes(@".\..\..\..\cat.jpg");
|
||||
var fileLength = bytes.Length;
|
||||
|
||||
var param = new PrmObjectPut
|
||||
|
@ -295,7 +283,7 @@ public class ObjectTest : ObjectTestsBase
|
|||
|
||||
Assert.Equal(SHA256.HashData(hash), SHA256.HashData(result.First().ToArray()));
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public async void PatchTest()
|
||||
{
|
||||
|
@ -337,9 +325,9 @@ public class ObjectTest : ObjectTestsBase
|
|||
|
||||
Assert.Equal(address.ContainerId, body.Address.ContainerId);
|
||||
Assert.Equal(address.ObjectId, body.Address.ObjectId);
|
||||
|
||||
|
||||
Assert.Equal(32, body.Patch.Chunk.Length);
|
||||
|
||||
|
||||
Assert.Equal(SHA256.HashData(patch), SHA256.HashData(body.Patch.Chunk.ToArray()));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@ public abstract class ObjectTestsBase
|
|||
{
|
||||
protected static readonly string key = "KwHDAJ66o8FoLBjVbjP2sWBmgBMGjt7Vv4boA7xQrBoAYBE397Aq";
|
||||
|
||||
protected IOptions<SingleOwnerClientSettings> Settings { get; set; }
|
||||
protected IOptions<ClientSettings> Settings { get; set; }
|
||||
protected FrostFsContainerId ContainerId { get; set; }
|
||||
|
||||
protected NetworkMocker NetworkMocker { get; set; } = new NetworkMocker(key);
|
||||
|
@ -22,7 +22,7 @@ public abstract class ObjectTestsBase
|
|||
{
|
||||
var ecdsaKey = key.LoadWif();
|
||||
|
||||
Settings = Options.Create(new SingleOwnerClientSettings
|
||||
Settings = Options.Create(new ClientSettings
|
||||
{
|
||||
Key = key,
|
||||
Host = "http://localhost:8080"
|
||||
|
|
|
@ -6,8 +6,6 @@ using FrostFS.SDK.Cryptography;
|
|||
|
||||
using Microsoft.Extensions.Options;
|
||||
|
||||
using static FrostFS.Session.SessionToken.Types.Body;
|
||||
|
||||
namespace FrostFS.SDK.SmokeTests;
|
||||
|
||||
[SuppressMessage("Reliability", "CA2007:Consider calling ConfigureAwait on the awaited task", Justification = "Default Value is correct for tests")]
|
||||
|
@ -78,6 +76,8 @@ public class PoolSmokeTests : SmokeTestsBase
|
|||
[Fact]
|
||||
public async void NodeInfoStatisticsTwoNodesTest()
|
||||
{
|
||||
var callbackText = string.Empty;
|
||||
|
||||
var options = new InitParameters
|
||||
{
|
||||
Key = keyString.LoadWif(),
|
||||
|
@ -87,16 +87,14 @@ public class PoolSmokeTests : SmokeTestsBase
|
|||
],
|
||||
ClientBuilder = null,
|
||||
GracefulCloseOnSwitchTimeout = 30_000_000,
|
||||
Logger = null
|
||||
Logger = null,
|
||||
Callback = (cs) => callbackText = $"{cs.MethodName} took {cs.ElapsedMicroSeconds} microseconds"
|
||||
};
|
||||
|
||||
using var pool = new Pool(options);
|
||||
|
||||
var callbackText = string.Empty;
|
||||
|
||||
var ctx = new CallContext
|
||||
{
|
||||
Callback = (cs) => callbackText = $"{cs.MethodName} took {cs.ElapsedMicroSeconds} microseconds"
|
||||
};
|
||||
|
||||
var error = await pool.Dial(ctx).ConfigureAwait(true);
|
||||
|
@ -118,14 +116,12 @@ public class PoolSmokeTests : SmokeTestsBase
|
|||
{
|
||||
var options = GetDefaultParams();
|
||||
|
||||
var callbackText = string.Empty;
|
||||
options.Callback = (cs) => callbackText = $"{cs.MethodName} took {cs.ElapsedMicroSeconds} microseconds";
|
||||
|
||||
using var pool = new Pool(options);
|
||||
|
||||
var callbackText = string.Empty;
|
||||
|
||||
var ctx = new CallContext
|
||||
{
|
||||
Callback = (cs) => callbackText = $"{cs.MethodName} took {cs.ElapsedMicroSeconds} microseconds"
|
||||
};
|
||||
var ctx = new CallContext();
|
||||
|
||||
var error = await pool.Dial(ctx).ConfigureAwait(true);
|
||||
|
||||
|
@ -154,18 +150,11 @@ public class PoolSmokeTests : SmokeTestsBase
|
|||
|
||||
var token = await pool.CreateSessionAsync(prm).ConfigureAwait(true);
|
||||
|
||||
var session = new Session.SessionToken().Deserialize(token.Token);
|
||||
|
||||
var ownerHash = Base58.Decode(OwnerId!.Value);
|
||||
|
||||
Assert.NotNull(session);
|
||||
Assert.Null(session.Body.Container);
|
||||
Assert.Null(session.Body.Object);
|
||||
Assert.Equal(16, session.Body.Id.Length);
|
||||
Assert.Equal(100ul, session.Body.Lifetime.Exp);
|
||||
Assert.Equal(ownerHash, session.Body.OwnerId.Value);
|
||||
Assert.Equal(33, session.Body.SessionKey.Length);
|
||||
Assert.Equal(ContextOneofCase.None, session.Body.ContextCase);
|
||||
Assert.NotNull(token);
|
||||
Assert.NotEqual(Guid.Empty, token.Id);
|
||||
Assert.Equal(33, token.SessionKey.Length);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
@ -314,8 +303,16 @@ public class PoolSmokeTests : SmokeTestsBase
|
|||
[InlineData(6 * 1024 * 1024 + 100)]
|
||||
public async void SimpleScenarioTest(int objectSize)
|
||||
{
|
||||
bool callbackInvoked = false;
|
||||
|
||||
var options = GetDefaultParams();
|
||||
|
||||
options.Callback = new((CallStatistics cs) =>
|
||||
{
|
||||
callbackInvoked = true;
|
||||
Assert.True(cs.ElapsedMicroSeconds > 0);
|
||||
});
|
||||
|
||||
using var pool = new Pool(options);
|
||||
|
||||
var error = await pool.Dial(new CallContext()).ConfigureAwait(true);
|
||||
|
@ -324,16 +321,7 @@ public class PoolSmokeTests : SmokeTestsBase
|
|||
|
||||
await Cleanup(pool);
|
||||
|
||||
bool callbackInvoked = false;
|
||||
var ctx = new CallContext
|
||||
{
|
||||
// Timeout = TimeSpan.FromSeconds(20),
|
||||
Callback = new((CallStatistics cs) =>
|
||||
{
|
||||
callbackInvoked = true;
|
||||
Assert.True(cs.ElapsedMicroSeconds > 0);
|
||||
})
|
||||
};
|
||||
var ctx = new CallContext { };
|
||||
|
||||
var createContainerParam = new PrmContainerCreate(
|
||||
new FrostFsContainerInfo(new FrostFsPlacementPolicy(true, new FrostFsReplica(1)), [new("testKey", "testValue")]), ctx);
|
||||
|
@ -346,12 +334,7 @@ public class PoolSmokeTests : SmokeTestsBase
|
|||
|
||||
var bytes = GetRandomBytes(objectSize);
|
||||
|
||||
var ctx1 = new CallContext
|
||||
{
|
||||
Callback = new((CallStatistics cs) => Assert.True(cs.ElapsedMicroSeconds > 0))
|
||||
};
|
||||
|
||||
var param = new PrmObjectPut(ctx1)
|
||||
var param = new PrmObjectPut()
|
||||
{
|
||||
Header = new FrostFsObjectHeader(
|
||||
containerId: createdContainer,
|
||||
|
@ -410,6 +393,7 @@ public class PoolSmokeTests : SmokeTestsBase
|
|||
var options = GetDefaultParams();
|
||||
|
||||
using var pool = new Pool(options);
|
||||
options.Callback = new((CallStatistics cs) => Assert.True(cs.ElapsedMicroSeconds > 0));
|
||||
|
||||
var error = await pool.Dial(new CallContext()).ConfigureAwait(true);
|
||||
|
||||
|
@ -421,8 +405,7 @@ public class PoolSmokeTests : SmokeTestsBase
|
|||
|
||||
var ctx = new CallContext
|
||||
{
|
||||
Timeout = TimeSpan.FromSeconds(20),
|
||||
Callback = new((CallStatistics cs) => Assert.True(cs.ElapsedMicroSeconds > 0))
|
||||
Timeout = TimeSpan.FromSeconds(20)
|
||||
};
|
||||
|
||||
var createContainerParam = new PrmContainerCreate(
|
||||
|
@ -435,7 +418,7 @@ public class PoolSmokeTests : SmokeTestsBase
|
|||
|
||||
var bytes = GetRandomBytes(objectSize);
|
||||
|
||||
var param = new PrmObjectPut(new CallContext { Callback = new((CallStatistics cs) => Assert.True(cs.ElapsedMicroSeconds > 0)) })
|
||||
var param = new PrmObjectPut(new CallContext())
|
||||
{
|
||||
Header = new FrostFsObjectHeader(
|
||||
containerId: container,
|
||||
|
@ -517,7 +500,7 @@ public class PoolSmokeTests : SmokeTestsBase
|
|||
Timeout = TimeSpan.FromSeconds(10),
|
||||
};
|
||||
|
||||
ctx.Interceptors.Add(new CallbackInterceptor());
|
||||
// ctx.Interceptors.Add(new CallbackInterceptor());
|
||||
|
||||
var container = await pool.GetContainerAsync(new PrmContainerGet(containerId, ctx));
|
||||
|
||||
|
@ -585,9 +568,9 @@ public class PoolSmokeTests : SmokeTestsBase
|
|||
return bytes;
|
||||
}
|
||||
|
||||
private static IOptions<SingleOwnerClientSettings> GetSingleOwnerOptions(string key, string url)
|
||||
private static IOptions<ClientSettings> GetSingleOwnerOptions(string key, string url)
|
||||
{
|
||||
return Options.Create(new SingleOwnerClientSettings
|
||||
return Options.Create(new ClientSettings
|
||||
{
|
||||
Key = key,
|
||||
Host = url
|
||||
|
|
|
@ -2,6 +2,7 @@ using System.Diagnostics.CodeAnalysis;
|
|||
|
||||
using FrostFS.SDK.Client;
|
||||
using FrostFS.SDK.Client.Mappers.GRPC;
|
||||
using FrostFS.SDK.Cryptography;
|
||||
|
||||
namespace FrostFS.SDK.Tests;
|
||||
|
||||
|
@ -21,10 +22,7 @@ public class SessionTest : SessionTestsBase
|
|||
var ctx = new CallContext
|
||||
{
|
||||
CancellationToken = Mocker.CancellationTokenSource.Token,
|
||||
Timeout = TimeSpan.FromSeconds(20),
|
||||
OwnerId = OwnerId,
|
||||
Key = ECDsaKey,
|
||||
Version = Mocker.Version
|
||||
Timeout = TimeSpan.FromSeconds(20)
|
||||
};
|
||||
|
||||
param = new PrmSessionCreate(exp, ctx);
|
||||
|
@ -43,18 +41,16 @@ public class SessionTest : SessionTestsBase
|
|||
var validTimeoutTo = DateTime.UtcNow.AddSeconds(20);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.NotNull(result.Token);
|
||||
Assert.NotEqual(Guid.Empty, result.Id);
|
||||
|
||||
var session = new Session.SessionToken().Deserialize(result.Token);
|
||||
Assert.Equal(Mocker.SessionId, result.Id.ToBytes());
|
||||
Assert.Equal(Mocker.SessionKey, result.SessionKey.ToArray());
|
||||
|
||||
Assert.Equal(Mocker.SessionId, session.Body.Id);
|
||||
Assert.Equal(Mocker.SessionKey, session.Body.SessionKey);
|
||||
|
||||
Assert.Equal(OwnerId.ToMessage(), session.Body.OwnerId);
|
||||
Assert.Equal(exp, session.Body.Lifetime.Exp);
|
||||
Assert.Equal(exp, session.Body.Lifetime.Iat);
|
||||
Assert.Equal(exp, session.Body.Lifetime.Nbf);
|
||||
Assert.Null(session.Body.Container);
|
||||
//Assert.Equal(OwnerId.ToMessage(), result.Token.Body.OwnerId);
|
||||
//Assert.Equal(exp, result.Token.Body.Lifetime.Exp);
|
||||
//Assert.Equal(exp, result.Token.Body.Lifetime.Iat);
|
||||
//Assert.Equal(exp, result.Token.Body.Lifetime.Nbf);
|
||||
//Assert.Null(result.Token.Body.Container);
|
||||
|
||||
Assert.NotNull(Mocker.CreateSessionRequest);
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ public abstract class SessionTestsBase
|
|||
{
|
||||
internal readonly string key = "KwHDAJ66o8FoLBjVbjP2sWBmgBMGjt7Vv4boA7xQrBoAYBE397Aq";
|
||||
|
||||
protected IOptions<SingleOwnerClientSettings> Settings { get; set; }
|
||||
protected IOptions<ClientSettings> Settings { get; set; }
|
||||
|
||||
protected ECDsa ECDsaKey { get; set; }
|
||||
protected FrostFsOwner OwnerId { get; set; }
|
||||
|
@ -19,7 +19,7 @@ public abstract class SessionTestsBase
|
|||
|
||||
protected SessionTestsBase()
|
||||
{
|
||||
Settings = Options.Create(new SingleOwnerClientSettings
|
||||
Settings = Options.Create(new ClientSettings
|
||||
{
|
||||
Key = key,
|
||||
Host = "http://localhost:8080"
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Security.Cryptography;
|
||||
|
||||
using FrostFS.SDK.Client;
|
||||
|
@ -7,8 +7,6 @@ using FrostFS.SDK.Cryptography;
|
|||
|
||||
using Microsoft.Extensions.Options;
|
||||
|
||||
using static FrostFS.Session.SessionToken.Types.Body;
|
||||
|
||||
namespace FrostFS.SDK.SmokeTests;
|
||||
|
||||
[SuppressMessage("Reliability", "CA2007:Consider calling ConfigureAwait on the awaited task", Justification = "Default Value is correct for tests")]
|
||||
|
@ -17,29 +15,23 @@ public class SmokeClientTests : SmokeTestsBase
|
|||
{
|
||||
private static readonly PrmWait lightWait = new(100, 1);
|
||||
|
||||
[Theory]
|
||||
[InlineData(false)]
|
||||
[InlineData(true)]
|
||||
public async void AccountTest(bool isSingleOnwerClient)
|
||||
[Fact]
|
||||
public async void AccountTest()
|
||||
{
|
||||
using var client = isSingleOnwerClient
|
||||
? FrostFSClient.GetSingleOwnerInstance(GetSingleOwnerOptions(this.keyString, this.url))
|
||||
: FrostFSClient.GetInstance(GetOptions(this.url));
|
||||
using var client = FrostFSClient.GetSingleOwnerInstance(GetClientOptions(this.keyString, this.url));
|
||||
|
||||
PrmBalance? prm = isSingleOnwerClient ? default : new(Ctx);
|
||||
var result = await client.GetBalanceAsync();
|
||||
|
||||
var result = await client.GetBalanceAsync(prm);
|
||||
Assert.NotNull(result);
|
||||
Assert.True(result.Value == 0);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(false)]
|
||||
[InlineData(true)]
|
||||
public async void NetworkMapTest(bool isSingleOnwerClient)
|
||||
[Fact]
|
||||
public async void NetworkMapTest()
|
||||
{
|
||||
using var client = isSingleOnwerClient ? FrostFSClient.GetSingleOwnerInstance(GetSingleOwnerOptions(this.keyString, this.url)) : FrostFSClient.GetInstance(GetOptions(this.url));
|
||||
using var client = FrostFSClient.GetSingleOwnerInstance(GetClientOptions(this.keyString, this.url));
|
||||
|
||||
PrmNetmapSnapshot? prm = isSingleOnwerClient ? default : new(Ctx);
|
||||
var result = await client.GetNetmapSnapshotAsync(prm);
|
||||
var result = await client.GetNetmapSnapshotAsync();
|
||||
|
||||
Assert.True(result.Epoch > 0);
|
||||
Assert.Single(result.NodeInfoCollection);
|
||||
|
@ -54,18 +46,12 @@ public class SmokeClientTests : SmokeTestsBase
|
|||
}
|
||||
|
||||
|
||||
[Theory]
|
||||
[InlineData(false)]
|
||||
[InlineData(true)]
|
||||
public async void NodeInfoTest(bool isSingleOnwerClient)
|
||||
[Fact]
|
||||
public async void NodeInfoTest()
|
||||
{
|
||||
using var client = isSingleOnwerClient
|
||||
? FrostFSClient.GetSingleOwnerInstance(GetSingleOwnerOptions(this.keyString, this.url))
|
||||
: FrostFSClient.GetInstance(GetOptions(this.url));
|
||||
using var client = FrostFSClient.GetSingleOwnerInstance(GetClientOptions(this.keyString, this.url));
|
||||
|
||||
PrmNodeInfo? prm = isSingleOnwerClient ? default : new(Ctx);
|
||||
|
||||
var result = await client.GetNodeInfoAsync(prm);
|
||||
var result = await client.GetNodeInfoAsync();
|
||||
|
||||
Assert.Equal(2, result.Version.Major);
|
||||
Assert.Equal(13, result.Version.Minor);
|
||||
|
@ -78,45 +64,38 @@ public class SmokeClientTests : SmokeTestsBase
|
|||
[Fact]
|
||||
public async void NodeInfoStatisticsTest()
|
||||
{
|
||||
var ctx = new CallContext
|
||||
{
|
||||
Callback = (cs) => Console.WriteLine($"{cs.MethodName} took {cs.ElapsedMicroSeconds} microseconds")
|
||||
};
|
||||
var options = GetClientOptions(this.keyString, this.url);
|
||||
|
||||
using var client = FrostFSClient.GetSingleOwnerInstance(GetSingleOwnerOptions(this.keyString, this.url));
|
||||
var callbackContent = string.Empty;
|
||||
options.Value.Callback = (cs) => callbackContent = $"{cs.MethodName} took {cs.ElapsedMicroSeconds} microseconds";
|
||||
|
||||
using var client = FrostFSClient.GetSingleOwnerInstance(options);
|
||||
|
||||
var result = await client.GetNodeInfoAsync();
|
||||
|
||||
Assert.NotEmpty(callbackContent);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(false)]
|
||||
[InlineData(true)]
|
||||
public async void GetSessionTest(bool isSingleOnwerClient)
|
||||
[Fact]
|
||||
public async void GetSessionTest()
|
||||
{
|
||||
using var client = isSingleOnwerClient ? FrostFSClient.GetSingleOwnerInstance(GetSingleOwnerOptions(this.keyString, this.url)) : FrostFSClient.GetInstance(GetOptions(this.url));
|
||||
using var client = FrostFSClient.GetSingleOwnerInstance(GetClientOptions(this.keyString, this.url));
|
||||
|
||||
PrmSessionCreate? prm = isSingleOnwerClient ? new PrmSessionCreate(100) : new PrmSessionCreate(100, Ctx);
|
||||
PrmSessionCreate? prm = new(100);
|
||||
|
||||
var token = await client.CreateSessionAsync(prm);
|
||||
|
||||
var session = new Session.SessionToken().Deserialize(token.Token);
|
||||
|
||||
var ownerHash = Base58.Decode(OwnerId!.Value);
|
||||
|
||||
Assert.NotNull(session);
|
||||
Assert.Null(session.Body.Container);
|
||||
Assert.Null(session.Body.Object);
|
||||
Assert.Equal(16, session.Body.Id.Length);
|
||||
Assert.Equal(100ul, session.Body.Lifetime.Exp);
|
||||
Assert.Equal(ownerHash, session.Body.OwnerId.Value);
|
||||
Assert.Equal(33, session.Body.SessionKey.Length);
|
||||
Assert.Equal(ContextOneofCase.None, session.Body.ContextCase);
|
||||
Assert.NotNull(token);
|
||||
Assert.NotEqual(Guid.Empty, token.Id);
|
||||
Assert.Equal(33, token.SessionKey.Length);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async void CreateObjectWithSessionToken()
|
||||
{
|
||||
using var client = FrostFSClient.GetSingleOwnerInstance(GetSingleOwnerOptions(this.keyString, this.url));
|
||||
using var client = FrostFSClient.GetSingleOwnerInstance(GetClientOptions(this.keyString, this.url));
|
||||
|
||||
await Cleanup(client);
|
||||
|
||||
|
@ -164,7 +143,7 @@ public class SmokeClientTests : SmokeTestsBase
|
|||
[Fact]
|
||||
public async void FilterTest()
|
||||
{
|
||||
using var client = FrostFSClient.GetSingleOwnerInstance(GetSingleOwnerOptions(this.keyString, this.url));
|
||||
using var client = FrostFSClient.GetSingleOwnerInstance(GetClientOptions(this.keyString, this.url));
|
||||
|
||||
await Cleanup(client);
|
||||
|
||||
|
@ -248,89 +227,87 @@ public class SmokeClientTests : SmokeTestsBase
|
|||
[InlineData(6 * 1024 * 1024 + 100)]
|
||||
public async void SimpleScenarioTest(int objectSize)
|
||||
{
|
||||
using var client = FrostFSClient.GetSingleOwnerInstance(GetSingleOwnerOptions(this.keyString, this.url));
|
||||
bool callbackInvoked = false;
|
||||
|
||||
await Cleanup(client);
|
||||
var options = GetClientOptions(this.keyString, this.url);
|
||||
|
||||
bool callbackInvoked = false;
|
||||
var ctx = new CallContext
|
||||
{
|
||||
// Timeout = TimeSpan.FromSeconds(20),
|
||||
Callback = new((CallStatistics cs) =>
|
||||
{
|
||||
callbackInvoked = true;
|
||||
Assert.True(cs.ElapsedMicroSeconds > 0);
|
||||
})
|
||||
};
|
||||
options.Value.Callback = new((CallStatistics cs) =>
|
||||
{
|
||||
callbackInvoked = true;
|
||||
Assert.True(cs.ElapsedMicroSeconds > 0);
|
||||
});
|
||||
|
||||
var createContainerParam = new PrmContainerCreate(
|
||||
new FrostFsContainerInfo(new FrostFsPlacementPolicy(true, new FrostFsReplica(1)), [new("testKey", "testValue")]), ctx);
|
||||
using var client = FrostFSClient.GetSingleOwnerInstance(options);
|
||||
|
||||
var createdContainer = await client.CreateContainerAsync(createContainerParam);
|
||||
await Cleanup(client);
|
||||
|
||||
var container = await client.GetContainerAsync(new PrmContainerGet(createdContainer, ctx));
|
||||
Assert.NotNull(container);
|
||||
Assert.True(callbackInvoked);
|
||||
var ctx = new CallContext { Timeout = TimeSpan.FromSeconds(20) };
|
||||
|
||||
var bytes = GetRandomBytes(objectSize);
|
||||
var createContainerParam = new PrmContainerCreate(
|
||||
new FrostFsContainerInfo(new FrostFsPlacementPolicy(true, new FrostFsReplica(1)), [new("testKey", "testValue")]), ctx);
|
||||
|
||||
var param = new PrmObjectPut(new CallContext
|
||||
{
|
||||
Callback = new((CallStatistics cs) => Assert.True(cs.ElapsedMicroSeconds > 0))
|
||||
})
|
||||
{
|
||||
Header = new FrostFsObjectHeader(
|
||||
containerId: createdContainer,
|
||||
type: FrostFsObjectType.Regular,
|
||||
[new FrostFsAttributePair("fileName", "test")]),
|
||||
Payload = new MemoryStream(bytes),
|
||||
ClientCut = false
|
||||
};
|
||||
var createdContainer = await client.CreateContainerAsync(createContainerParam);
|
||||
|
||||
var objectId = await client.PutObjectAsync(param);
|
||||
var container = await client.GetContainerAsync(new PrmContainerGet(createdContainer));
|
||||
Assert.NotNull(container);
|
||||
Assert.True(callbackInvoked);
|
||||
|
||||
var filter = new FilterByAttributePair(FrostFsMatchType.Equals, "fileName", "test");
|
||||
var bytes = GetRandomBytes(objectSize);
|
||||
|
||||
bool hasObject = false;
|
||||
await foreach (var objId in client.SearchObjectsAsync(new PrmObjectSearch(createdContainer) { Filters = [filter] }))
|
||||
{
|
||||
hasObject = true;
|
||||
var param = new PrmObjectPut
|
||||
{
|
||||
Header = new FrostFsObjectHeader(
|
||||
containerId: createdContainer,
|
||||
type: FrostFsObjectType.Regular,
|
||||
[new FrostFsAttributePair("fileName", "test")]),
|
||||
Payload = new MemoryStream(bytes),
|
||||
ClientCut = false
|
||||
};
|
||||
|
||||
var objHeader = await client.GetObjectHeadAsync(new PrmObjectHeadGet(createdContainer, objectId));
|
||||
Assert.Equal((ulong)bytes.Length, objHeader.PayloadLength);
|
||||
Assert.NotNull(objHeader.Attributes);
|
||||
Assert.Single(objHeader.Attributes);
|
||||
Assert.Equal("fileName", objHeader.Attributes.First().Key);
|
||||
Assert.Equal("test", objHeader.Attributes.First().Value);
|
||||
}
|
||||
var objectId = await client.PutObjectAsync(param);
|
||||
|
||||
Assert.True(hasObject);
|
||||
var filter = new FilterByAttributePair(FrostFsMatchType.Equals, "fileName", "test");
|
||||
|
||||
var @object = await client.GetObjectAsync(new PrmObjectGet(createdContainer, objectId));
|
||||
bool hasObject = false;
|
||||
await foreach (var objId in client.SearchObjectsAsync(new PrmObjectSearch(createdContainer) { Filters = [filter] }))
|
||||
{
|
||||
hasObject = true;
|
||||
|
||||
var downloadedBytes = new byte[@object.Header.PayloadLength];
|
||||
MemoryStream ms = new(downloadedBytes);
|
||||
var objHeader = await client.GetObjectHeadAsync(new PrmObjectHeadGet(createdContainer, objectId));
|
||||
Assert.Equal((ulong)bytes.Length, objHeader.PayloadLength);
|
||||
Assert.NotNull(objHeader.Attributes);
|
||||
Assert.Single(objHeader.Attributes);
|
||||
Assert.Equal("fileName", objHeader.Attributes.First().Key);
|
||||
Assert.Equal("test", objHeader.Attributes.First().Value);
|
||||
}
|
||||
|
||||
ReadOnlyMemory<byte>? chunk = null;
|
||||
while ((chunk = await @object.ObjectReader!.ReadChunk()) != null)
|
||||
{
|
||||
ms.Write(chunk.Value.Span);
|
||||
}
|
||||
Assert.True(hasObject);
|
||||
|
||||
Assert.Equal(SHA256.HashData(bytes), SHA256.HashData(downloadedBytes));
|
||||
var @object = await client.GetObjectAsync(new PrmObjectGet(createdContainer, objectId));
|
||||
|
||||
await Cleanup(client);
|
||||
var downloadedBytes = new byte[@object.Header.PayloadLength];
|
||||
MemoryStream ms = new(downloadedBytes);
|
||||
|
||||
await foreach (var _ in client.ListContainersAsync())
|
||||
{
|
||||
Assert.Fail("Containers exist");
|
||||
}
|
||||
ReadOnlyMemory<byte>? chunk = null;
|
||||
while ((chunk = await @object.ObjectReader!.ReadChunk()) != null)
|
||||
{
|
||||
ms.Write(chunk.Value.Span);
|
||||
}
|
||||
|
||||
Assert.Equal(SHA256.HashData(bytes), SHA256.HashData(downloadedBytes));
|
||||
|
||||
await Cleanup(client);
|
||||
|
||||
await foreach (var _ in client.ListContainersAsync())
|
||||
{
|
||||
Assert.Fail("Containers exist");
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async void PatchTest()
|
||||
{
|
||||
using var client = FrostFSClient.GetSingleOwnerInstance(GetSingleOwnerOptions(this.keyString, this.url));
|
||||
using var client = FrostFSClient.GetSingleOwnerInstance(GetClientOptions(this.keyString, this.url));
|
||||
|
||||
await Cleanup(client);
|
||||
|
||||
|
@ -388,7 +365,7 @@ public class SmokeClientTests : SmokeTestsBase
|
|||
ms.Write(chunk.Value.Span);
|
||||
}
|
||||
|
||||
for(int i = 0; i < (int)range.Offset; i++)
|
||||
for (int i = 0; i < (int)range.Offset; i++)
|
||||
Assert.Equal(downloadedBytes[i], bytes[i]);
|
||||
|
||||
var rangeEnd = range.Offset + range.Length;
|
||||
|
@ -410,7 +387,7 @@ public class SmokeClientTests : SmokeTestsBase
|
|||
[Fact]
|
||||
public async void RangeTest()
|
||||
{
|
||||
using var client = FrostFSClient.GetSingleOwnerInstance(GetSingleOwnerOptions(this.keyString, this.url));
|
||||
using var client = FrostFSClient.GetSingleOwnerInstance(GetClientOptions(this.keyString, this.url));
|
||||
|
||||
await Cleanup(client);
|
||||
|
||||
|
@ -465,7 +442,7 @@ public class SmokeClientTests : SmokeTestsBase
|
|||
[Fact]
|
||||
public async void RangeHashTest()
|
||||
{
|
||||
using var client = FrostFSClient.GetSingleOwnerInstance(GetSingleOwnerOptions(this.keyString, this.url));
|
||||
using var client = FrostFSClient.GetSingleOwnerInstance(GetClientOptions(this.keyString, this.url));
|
||||
|
||||
await Cleanup(client);
|
||||
|
||||
|
@ -494,15 +471,15 @@ public class SmokeClientTests : SmokeTestsBase
|
|||
|
||||
var objectId = await client.PutObjectAsync(param);
|
||||
|
||||
var rangeParam = new PrmRangeHashGet(createdContainer, objectId, [ new FrostFsRange(100, 64)], bytes);
|
||||
var rangeParam = new PrmRangeHashGet(createdContainer, objectId, [new FrostFsRange(100, 64)], bytes);
|
||||
|
||||
var hashes = await client.GetRangeHashAsync(rangeParam);
|
||||
|
||||
foreach (var hash in hashes)
|
||||
{
|
||||
var x = hash.Slice(0, 32).ToArray();
|
||||
var x = hash[..32].ToArray();
|
||||
}
|
||||
|
||||
|
||||
await Cleanup(client);
|
||||
|
||||
await foreach (var _ in client.ListContainersAsync())
|
||||
|
@ -517,8 +494,8 @@ public class SmokeClientTests : SmokeTestsBase
|
|||
[InlineData(6 * 1024 * 1024 + 100)]
|
||||
public async void SimpleScenarioWithSessionTest(int objectSize)
|
||||
{
|
||||
using var client = FrostFSClient.GetSingleOwnerInstance(GetSingleOwnerOptions(this.keyString, this.url));
|
||||
|
||||
using var client = FrostFSClient.GetSingleOwnerInstance(GetClientOptions(this.keyString, this.url));
|
||||
//Callback = new((CallStatistics cs) => Assert.True(cs.ElapsedMicroSeconds > 0))
|
||||
var token = await client.CreateSessionAsync(new PrmSessionCreate(int.MaxValue));
|
||||
|
||||
await Cleanup(client);
|
||||
|
@ -526,7 +503,7 @@ public class SmokeClientTests : SmokeTestsBase
|
|||
var ctx = new CallContext
|
||||
{
|
||||
Timeout = TimeSpan.FromSeconds(20),
|
||||
Callback = new((CallStatistics cs) => Assert.True(cs.ElapsedMicroSeconds > 0))
|
||||
|
||||
};
|
||||
|
||||
var createContainerParam = new PrmContainerCreate(
|
||||
|
@ -539,10 +516,7 @@ public class SmokeClientTests : SmokeTestsBase
|
|||
|
||||
var bytes = GetRandomBytes(objectSize);
|
||||
|
||||
var param = new PrmObjectPut(new CallContext
|
||||
{
|
||||
Callback = new((CallStatistics cs) => Assert.True(cs.ElapsedMicroSeconds > 0))
|
||||
})
|
||||
var param = new PrmObjectPut
|
||||
{
|
||||
Header = new FrostFsObjectHeader(
|
||||
containerId: container,
|
||||
|
@ -602,7 +576,11 @@ public class SmokeClientTests : SmokeTestsBase
|
|||
[InlineData(200)]
|
||||
public async void ClientCutScenarioTest(int objectSize)
|
||||
{
|
||||
using var client = FrostFSClient.GetSingleOwnerInstance(GetSingleOwnerOptions(this.keyString, this.url));
|
||||
|
||||
var options = GetClientOptions(this.keyString, this.url);
|
||||
options.Value.Interceptors.Add(new CallbackInterceptor());
|
||||
|
||||
using var client = FrostFSClient.GetSingleOwnerInstance(GetClientOptions(this.keyString, this.url));
|
||||
|
||||
await Cleanup(client);
|
||||
|
||||
|
@ -613,12 +591,7 @@ public class SmokeClientTests : SmokeTestsBase
|
|||
|
||||
var containerId = await client.CreateContainerAsync(createContainerParam);
|
||||
|
||||
var ctx = new CallContext
|
||||
{
|
||||
Timeout = TimeSpan.FromSeconds(10)
|
||||
};
|
||||
|
||||
ctx.Interceptors.Add(new CallbackInterceptor());
|
||||
var ctx = new CallContext { Timeout = TimeSpan.FromSeconds(10) };
|
||||
|
||||
var container = await client.GetContainerAsync(new PrmContainerGet(containerId, ctx));
|
||||
|
||||
|
@ -692,23 +665,21 @@ public class SmokeClientTests : SmokeTestsBase
|
|||
[Fact]
|
||||
public async void NodeInfoCallbackAndInterceptorTest()
|
||||
{
|
||||
using var client = FrostFSClient.GetSingleOwnerInstance(GetSingleOwnerOptions(this.keyString, this.url));
|
||||
|
||||
bool callbackInvoked = false;
|
||||
bool intercepterInvoked = false;
|
||||
|
||||
var ctx = new CallContext
|
||||
var options = GetClientOptions(this.keyString, this.url);
|
||||
options.Value.Callback = (CallStatistics cs) =>
|
||||
{
|
||||
Callback = new((CallStatistics cs) =>
|
||||
{
|
||||
callbackInvoked = true;
|
||||
Assert.True(cs.ElapsedMicroSeconds > 0);
|
||||
})
|
||||
callbackInvoked = true;
|
||||
Assert.True(cs.ElapsedMicroSeconds > 0);
|
||||
};
|
||||
|
||||
ctx.Interceptors.Add(new CallbackInterceptor(s => intercepterInvoked = true));
|
||||
options.Value.Interceptors.Add(new CallbackInterceptor(s => intercepterInvoked = true));
|
||||
|
||||
var result = await client.GetNodeInfoAsync(new PrmNodeInfo(ctx));
|
||||
using var client = FrostFSClient.GetSingleOwnerInstance(options);
|
||||
|
||||
var result = await client.GetNodeInfoAsync(new PrmNodeInfo());
|
||||
|
||||
Assert.True(callbackInvoked);
|
||||
Assert.True(intercepterInvoked);
|
||||
|
@ -729,22 +700,15 @@ public class SmokeClientTests : SmokeTestsBase
|
|||
return bytes;
|
||||
}
|
||||
|
||||
private static IOptions<SingleOwnerClientSettings> GetSingleOwnerOptions(string key, string url)
|
||||
private static IOptions<ClientSettings> GetClientOptions(string key, string url)
|
||||
{
|
||||
return Options.Create(new SingleOwnerClientSettings
|
||||
return Options.Create(new ClientSettings
|
||||
{
|
||||
Key = key,
|
||||
Host = url
|
||||
});
|
||||
}
|
||||
|
||||
private static IOptions<ClientSettings> GetOptions(string url)
|
||||
{
|
||||
return Options.Create(new ClientSettings
|
||||
{
|
||||
Host = url
|
||||
});
|
||||
}
|
||||
|
||||
static async Task Cleanup(IFrostFSClient client)
|
||||
{
|
||||
|
|
|
@ -7,8 +7,6 @@ namespace FrostFS.SDK.SmokeTests;
|
|||
|
||||
public abstract class SmokeTestsBase
|
||||
{
|
||||
// internal readonly string keyString = "KzPXA6669m2pf18XmUdoR8MnP1pi1PMmefiFujStVFnv7WR5SRmK";
|
||||
|
||||
internal readonly string keyString = "KzPXA6669m2pf18XmUdoR8MnP1pi1PMmefiFujStVFnv7WR5SRmK";
|
||||
|
||||
internal readonly string url = "http://172.23.32.4:8080";
|
||||
|
@ -26,7 +24,5 @@ public abstract class SmokeTestsBase
|
|||
Key = keyString.LoadWif();
|
||||
OwnerId = FrostFsOwner.FromKey(Key);
|
||||
Version = new FrostFsVersion(2, 13);
|
||||
|
||||
Ctx = new CallContext { Key = Key, OwnerId = OwnerId, Version = Version };
|
||||
}
|
||||
}
|
||||
|
|
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 6.6 KiB |
Loading…
Add table
Add a link
Reference in a new issue