mirror of
https://github.com/mRemoteNG/mRemoteNG.git
synced 2026-02-17 22:11:48 +08:00
90 lines
3.4 KiB
C#
90 lines
3.4 KiB
C#
using mRemoteNG.Config.Serializers;
|
|
using mRemoteNG.Config.Serializers.CredentialSerializer;
|
|
using mRemoteNG.Credential;
|
|
using mRemoteNG.Security;
|
|
using mRemoteNG.Security.Factories;
|
|
using NSubstitute;
|
|
using NUnit.Framework;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Security;
|
|
|
|
namespace mRemoteNGTests.IntegrationTests
|
|
{
|
|
public class XmlCredentialSerializerLifeCycleTests
|
|
{
|
|
private ISecureSerializer<IEnumerable<ICredentialRecord>, string> _serializer;
|
|
private ISecureDeserializer<string, IEnumerable<ICredentialRecord>> _deserializer;
|
|
private readonly Guid _id = Guid.NewGuid();
|
|
private const string Title = "mycredential1";
|
|
private const string Username = "user1";
|
|
private const string Domain = "domain1";
|
|
private readonly SecureString _key = "myPassword1!".ConvertToSecureString();
|
|
|
|
[SetUp]
|
|
public void Setup()
|
|
{
|
|
var keyProvider = Substitute.For<IKeyProvider>();
|
|
keyProvider.GetKey().Returns(_key);
|
|
var cryptoProvider = new CryptoProviderFactory(BlockCipherEngines.AES, BlockCipherModes.CCM).Build();
|
|
_serializer = new XmlCredentialPasswordEncryptorDecorator(cryptoProvider, new XmlCredentialRecordSerializer());
|
|
_deserializer = new XmlCredentialPasswordDecryptorDecorator(new XmlCredentialRecordDeserializer());
|
|
}
|
|
|
|
[Test]
|
|
public void WeCanSerializeAndDeserializeXmlCredentials()
|
|
{
|
|
var credentials = new[] { new CredentialRecord(), new CredentialRecord() };
|
|
var serializedCredentials = _serializer.Serialize(credentials, _key);
|
|
var deserializedCredentials = _deserializer.Deserialize(serializedCredentials, _key);
|
|
Assert.That(deserializedCredentials.Count(), Is.EqualTo(2));
|
|
}
|
|
|
|
[Test]
|
|
public void IdConsistentAfterSerialization()
|
|
{
|
|
var sut = SerializeThenDeserializeCredential();
|
|
Assert.That(sut.Id, Is.EqualTo(_id));
|
|
}
|
|
|
|
[Test]
|
|
public void TitleConsistentAfterSerialization()
|
|
{
|
|
var sut = SerializeThenDeserializeCredential();
|
|
Assert.That(sut.Title, Is.EqualTo(Title));
|
|
}
|
|
|
|
[Test]
|
|
public void UsernameConsistentAfterSerialization()
|
|
{
|
|
var sut = SerializeThenDeserializeCredential();
|
|
Assert.That(sut.Username, Is.EqualTo(Username));
|
|
}
|
|
|
|
[Test]
|
|
public void DomainConsistentAfterSerialization()
|
|
{
|
|
var sut = SerializeThenDeserializeCredential();
|
|
Assert.That(sut.Domain, Is.EqualTo(Domain));
|
|
}
|
|
|
|
[Test]
|
|
public void PasswordConsistentAfterSerialization()
|
|
{
|
|
var sut = SerializeThenDeserializeCredential();
|
|
Assert.That(sut.Password.ConvertToUnsecureString(), Is.EqualTo(_key.ConvertToUnsecureString()));
|
|
}
|
|
|
|
private ICredentialRecord SerializeThenDeserializeCredential()
|
|
{
|
|
var credentials = new[]
|
|
{
|
|
new CredentialRecord(_id) {Title = Title, Username = Username, Domain = Domain, Password = _key}
|
|
};
|
|
var serializedCredentials = _serializer.Serialize(credentials, _key);
|
|
var deserializedCredentials = _deserializer.Deserialize(serializedCredentials, _key);
|
|
return deserializedCredentials.First();
|
|
}
|
|
}
|
|
} |