in foreign/csharp/Iggy_SDK_Tests/ContractTests/TcpContract.cs [341:435]
public void TcpContracts_CreateUser_WithPermission_HasCorrectBytes()
{
// Arrange
var request = new CreateUserRequest
{
Username = "testuser",
Password = "testpassword",
Status = UserStatus.Active,
Permissions = PermissionsFactory.CreatePermissions(),
};
// Act
var result = TcpContracts.CreateUser(request);
// Assert
int position = 0;
Assert.Equal((byte)request.Username.Length, result[position]);
position += 1;
var usernameBytes = result[position..(position + request.Username.Length)];
position += request.Username.Length;
var decodedUsername = Encoding.UTF8.GetString(usernameBytes);
Assert.Equal(request.Username, decodedUsername);
Assert.Equal((byte)request.Password.Length, result[position]);
position += 1;
var passwordBytes = result[position..(position + request.Password.Length)];
position += request.Password.Length;
var decodedPassword = Encoding.UTF8.GetString(passwordBytes);
Assert.Equal(request.Password, decodedPassword);
var expectedStatusByte = request.Status switch
{
UserStatus.Active => (byte)1,
UserStatus.Inactive => (byte)2,
_ => throw new ArgumentOutOfRangeException()
};
Assert.Equal(expectedStatusByte, result[position]);
position += 1;
var permissionsFlag = result[position];
position += 1;
if (permissionsFlag == 1)
{
var permissionsSize = BinaryPrimitives.ReadInt32LittleEndian(result[position..(position + 4)]);
position += 4;
var permissionsBytes = result[position..(position + permissionsSize)];
var mappedPermissions = PermissionsFactory.PermissionsFromBytes(permissionsBytes);
request.Permissions.Global.Should().BeEquivalentTo(mappedPermissions.Global);
if (request.Permissions.Streams != null)
{
Assert.NotNull(mappedPermissions.Streams);
foreach (var (streamId, stream) in request.Permissions.Streams)
{
Assert.True(mappedPermissions.Streams.ContainsKey(streamId));
var mappedStream = mappedPermissions.Streams[streamId];
Assert.Equal(stream.ManageStream, mappedStream.ManageStream);
Assert.Equal(stream.ReadStream, mappedStream.ReadStream);
Assert.Equal(stream.ManageTopics, mappedStream.ManageTopics);
Assert.Equal(stream.ReadTopics, mappedStream.ReadTopics);
Assert.Equal(stream.PollMessages, mappedStream.PollMessages);
Assert.Equal(stream.SendMessages, mappedStream.SendMessages);
if (stream.Topics != null)
{
Assert.NotNull(mappedStream.Topics);
foreach (var (topicId, topic) in stream.Topics)
{
Assert.True(mappedStream.Topics.ContainsKey(topicId));
var mappedTopic = mappedStream.Topics[topicId];
Assert.Equal(topic.ManageTopic, mappedTopic.ManageTopic);
Assert.Equal(topic.ReadTopic, mappedTopic.ReadTopic);
Assert.Equal(topic.PollMessages, mappedTopic.PollMessages);
Assert.Equal(topic.SendMessages, mappedTopic.SendMessages);
}
}
else
{
Assert.Null(mappedStream.Topics);
}
}
}
else
{
Assert.Null(request.Permissions);
}
}
}