[#25] Client: Implement Patch and Range methods
All checks were successful
DCO / DCO (pull_request) Successful in 47s
All checks were successful
DCO / DCO (pull_request) Successful in 47s
Signed-off-by: Pavel Gross <p.gross@yadro.com>
This commit is contained in:
parent
bff8d67867
commit
003b7fdfdd
51 changed files with 1338 additions and 137 deletions
|
@ -5,6 +5,7 @@ using FrostFS.Object;
|
|||
using FrostFS.SDK.ClientV2;
|
||||
using FrostFS.SDK.ClientV2.Mappers.GRPC;
|
||||
using FrostFS.SDK.Cryptography;
|
||||
using FrostFS.Session;
|
||||
|
||||
using Google.Protobuf;
|
||||
|
||||
|
@ -16,6 +17,32 @@ namespace FrostFS.SDK.Tests;
|
|||
|
||||
public class ObjectMocker(string key) : ObjectServiceBase(key)
|
||||
{
|
||||
public FrostFsObjectId? ObjectId { get; set; }
|
||||
|
||||
public FrostFsObjectHeader? ObjectHeader { get; set; }
|
||||
|
||||
public Header? HeadResponse { get; set; }
|
||||
|
||||
public Collection<byte[]>? ResultObjectIds { get; } = [];
|
||||
|
||||
public ClientStreamWriter? ClientStreamWriter { get; } = new();
|
||||
|
||||
public PatchStreamWriter? PatchStreamWriter { get; } = new();
|
||||
|
||||
public Collection<PutSingleRequest> PutSingleRequests { get; } = [];
|
||||
|
||||
public Collection<DeleteRequest> DeleteRequests { get; } = [];
|
||||
|
||||
public Collection<HeadRequest> HeadRequests { get; } = [];
|
||||
|
||||
public byte[] RangeResponse { get; set; } = [];
|
||||
|
||||
public GetRangeRequest? GetRangeRequest { get; set; }
|
||||
|
||||
public GetRangeHashRequest? GetRangeHashRequest { get; set; }
|
||||
|
||||
public Collection<ByteString> RangeHashResponses { get; } = [];
|
||||
|
||||
public override Mock<ObjectService.ObjectServiceClient> GetMock()
|
||||
{
|
||||
var mock = new Mock<ObjectService.ObjectServiceClient>();
|
||||
|
@ -189,23 +216,88 @@ public class ObjectMocker(string key) : ObjectServiceBase(key)
|
|||
});
|
||||
}
|
||||
|
||||
mock.Setup(x => x.GetRange(
|
||||
It.IsAny<GetRangeRequest>(),
|
||||
It.IsAny<Metadata>(),
|
||||
It.IsAny<DateTime?>(),
|
||||
It.IsAny<CancellationToken>()))
|
||||
.Returns((GetRangeRequest r, Metadata m, DateTime? dt, CancellationToken ct) =>
|
||||
{
|
||||
Verifier.CheckRequest(r);
|
||||
|
||||
GetRangeRequest = r;
|
||||
|
||||
return new AsyncServerStreamingCall<GetRangeResponse>(
|
||||
new AsyncStreamRangeReaderMock(StringKey, RangeResponse),
|
||||
Task.FromResult(ResponseMetaData),
|
||||
() => new Grpc.Core.Status(StatusCode.OK, string.Empty),
|
||||
() => ResponseMetaData,
|
||||
() => { });
|
||||
});
|
||||
|
||||
mock.Setup(x => x.GetRangeHashAsync(
|
||||
It.IsAny<GetRangeHashRequest>(),
|
||||
It.IsAny<Metadata>(),
|
||||
It.IsAny<DateTime?>(),
|
||||
It.IsAny<CancellationToken>()))
|
||||
.Returns((GetRangeHashRequest r, Metadata m, DateTime? dt, CancellationToken ct) =>
|
||||
{
|
||||
Verifier.CheckRequest(r);
|
||||
|
||||
GetRangeHashRequest = r;
|
||||
|
||||
var response = new GetRangeHashResponse
|
||||
{
|
||||
Body = new GetRangeHashResponse.Types.Body(),
|
||||
MetaHeader = ResponseMetaHeader
|
||||
};
|
||||
|
||||
if (RangeHashResponses != null)
|
||||
{
|
||||
foreach (var hash in RangeHashResponses)
|
||||
{
|
||||
response.Body.HashList.Add(hash);
|
||||
}
|
||||
}
|
||||
|
||||
response.VerifyHeader = GetResponseVerificationHeader(response);
|
||||
|
||||
return new AsyncUnaryCall<GetRangeHashResponse>(
|
||||
Task.FromResult(response),
|
||||
Task.FromResult(ResponseMetaData),
|
||||
() => new Grpc.Core.Status(StatusCode.OK, string.Empty),
|
||||
() => ResponseMetaData,
|
||||
() => { });
|
||||
});
|
||||
|
||||
|
||||
mock.Setup(x => x.Patch(
|
||||
It.IsAny<Metadata>(),
|
||||
It.IsAny<DateTime?>(),
|
||||
It.IsAny<CancellationToken>()))
|
||||
.Returns((Metadata m, DateTime? dt, CancellationToken ct) =>
|
||||
{
|
||||
var patchResponse = new PatchResponse
|
||||
{
|
||||
Body = new PatchResponse.Types.Body
|
||||
{
|
||||
ObjectId = new Refs.ObjectID { Value = ByteString.CopyFrom(SHA256.HashData([1,2,3])) },
|
||||
},
|
||||
MetaHeader = ResponseMetaHeader
|
||||
};
|
||||
|
||||
patchResponse.VerifyHeader = GetResponseVerificationHeader(patchResponse);
|
||||
|
||||
return new AsyncClientStreamingCall<PatchRequest, PatchResponse>(
|
||||
PatchStreamWriter!,
|
||||
Task.FromResult(patchResponse),
|
||||
Task.FromResult(ResponseMetaData),
|
||||
() => new Grpc.Core.Status(StatusCode.OK, string.Empty),
|
||||
() => ResponseMetaData,
|
||||
() => { });
|
||||
});
|
||||
|
||||
return mock;
|
||||
}
|
||||
|
||||
public FrostFsObjectId? ObjectId { get; set; }
|
||||
|
||||
public FrostFsObjectHeader? ObjectHeader { get; set; }
|
||||
|
||||
public Header? HeadResponse { get; set; }
|
||||
|
||||
public Collection<byte[]>? ResultObjectIds { get; } = [];
|
||||
|
||||
public ClientStreamWriter? ClientStreamWriter { get; private set; } = new();
|
||||
|
||||
public Collection<PutSingleRequest> PutSingleRequests { get; private set; } = [];
|
||||
|
||||
public Collection<DeleteRequest> DeleteRequests { get; private set; } = [];
|
||||
|
||||
public Collection<HeadRequest> HeadRequests { get; private set; } = [];
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue