using System; using System.IO; using System.Threading.Tasks; using ModernKeePassLib.Keys; using ModernKeePassLib.Utility; using Windows.Storage; using Xunit; namespace ModernKeePassLib.Test.Keys { public class KcpKeyFileTests { private const string TestCreateFile = "TestCreate.xml"; private const string TestKey = "0123456789"; private const string ExpectedFileStart = "\r\n" + "\r\n" + "\t\r\n" + "\t\t1.00\r\n" + "\t\r\n" + "\t\r\n" + "\t\t"; private const string ExpectedFileEnd = "\r\n\t\r\n"; [Fact] public async Task TestConstruct() { var expectedKeyData = new byte[] { 0x95, 0x94, 0xdc, 0xb9, 0x91, 0xc6, 0x65, 0xa0, 0x81, 0xf6, 0x6f, 0xca, 0x07, 0x1a, 0x30, 0xd1, 0x1d, 0x65, 0xcf, 0x8d, 0x9c, 0x60, 0xfb, 0xe6, 0x45, 0xfc, 0xc8, 0x92, 0xbd, 0xeb, 0xaf, 0xc3 }; var folder = await StorageFolder.GetFolderFromPathAsync(Path.GetTempPath()); var file = await folder.CreateFileAsync(TestCreateFile, CreationCollisionOption.ReplaceExisting); await using (var fs = await file.OpenStreamForWriteAsync()) { await using var sw = new StreamWriter(fs); sw.Write(ExpectedFileStart); sw.Write(TestKey); sw.Write(ExpectedFileEnd); } try { var keyFile = new KcpKeyFile(file); var keyData = keyFile.KeyData.ReadData(); Assert.True(MemUtil.ArraysEqual(keyData, expectedKeyData)); } finally { await file.DeleteAsync(); } } [Fact] public async Task TestCreate() { var folder = await StorageFolder.GetFolderFromPathAsync(Path.GetTempPath()); var file = await folder.CreateFileAsync(TestCreateFile, CreationCollisionOption.ReplaceExisting); KcpKeyFile.Create(file, null); try { var fileContents = await FileIO.ReadTextAsync(file); Assert.Equal(185, fileContents.Length); Assert.StartsWith(ExpectedFileStart, fileContents); Assert.EndsWith(ExpectedFileEnd, fileContents); } finally { await file.DeleteAsync(); } } } }