public async Task KeyRepositoryTest() { using var tester = DBTrieRepositoryTester.Create(nameof(KeyRepositoryTest)); Assert.Throws <FormatException>(() => tester.KeysRepository.InitializeFromSeed("bogus seed")); Assert.Throws <ArgumentOutOfRangeException>(() => tester.KeysRepository.InitializeFromSeed("deadbeef")); var seed = _keys[0].ToBytes(); var pin = "my pin code"; await tester.KeysRepository.EncryptSeedAndSaveToFile(seed, pin); // case 1: can decrypt seed with the same pin. var encryptedSeed = await tester.Config.TryGetEncryptedSeed(); Assert.NotNull(encryptedSeed); var seed2 = tester.KeysRepository.DecryptEncryptedSeed(_hex.DecodeData(encryptedSeed), pin); Assert.Equal(Hex.Encode(seed), Hex.Encode(seed2)); // case 2: can not with different pin var e = Assert.Throws <NRustLightningException>(() => tester.KeysRepository.DecryptEncryptedSeed(_hex.DecodeData(encryptedSeed), "bogus pin code")); Assert.Contains("Pin code mismatch", e.Message); }
public async Task RepositoryTest() { using var tester = DBTrieRepositoryTester.Create(); // 1. Check invoice Equality var networkProvider = new NRustLightningNetworkProvider(NetworkType.Regtest); var network = networkProvider.GetByCryptoCode("BTC"); var nodeSecret = new Key(); var nodeId = Primitives.NodeId.NewNodeId(nodeSecret.PubKey); Primitives.PaymentPreimage paymentPreimage = Primitives.PaymentPreimage.Create(RandomUtils.GetBytes(32)); var taggedFields = new List <TaggedField> { TaggedField.NewPaymentHashTaggedField(paymentPreimage.Hash), TaggedField.NewNodeIdTaggedField((nodeId)), TaggedField.NewDescriptionTaggedField("Test invoice") }; var t = new TaggedFields(taggedFields.ToFSharpList()); var invoiceR = PaymentRequest.TryCreate(network.BOLT11InvoicePrefix, FSharpOption <LNMoney> .None, DateTimeOffset.UtcNow, nodeId, t, nodeSecret); if (invoiceR.IsError) { throw new Exception(invoiceR.ErrorValue); } var invoice = invoiceR.ResultValue; await tester.Repository.SetInvoice(invoice); var invoice2 = await tester.Repository.GetInvoice(paymentPreimage.Hash); Assert.Equal(invoice.ToString(), invoice2.ToString()); // 2. preimage await tester.Repository.SetPreimage(paymentPreimage); var preimage2 = await tester.Repository.GetPreimage(paymentPreimage.Hash); Assert.Equal(paymentPreimage, preimage2); // 3. remote endpoint var ipEndpoint = IPEndPoint.Parse("192.168.0.1:9735"); var dnsEndPointA = NBitcoin.Utils.ParseEndpoint("lightningd-a:9735", 9735); var dnsEndPointB = NBitcoin.Utils.ParseEndpoint("lightningd-b:8888", 9735); await tester.Repository.SetRemoteEndPoint(ipEndpoint); await tester.Repository.SetRemoteEndPoint(dnsEndPointA); await tester.Repository.SetRemoteEndPoint(dnsEndPointB); var endpoints = await tester.Repository.GetAllRemoteEndPoint().ToListAsync(); Assert.Contains(ipEndpoint, endpoints); Assert.Contains(dnsEndPointA, endpoints); Assert.Contains(dnsEndPointB, endpoints); var(chanMan, readArgs, chanMon, monitorReadArgs) = GetTestChannelManager(); // 4. channel manager await tester.Repository.SetChannelManager(chanMan, CancellationToken.None); var items = await tester.Repository.GetChannelManager(readArgs); Assert.True(items.HasValue); var(_, chanMan2) = items.Value; Assert.True(chanMan.Serialize(_pool).SequenceEqual(chanMan2.Serialize(_pool))); // 5. channel monitor await tester.Repository.SetManyChannelMonitor(chanMon); var items2 = await tester.Repository.GetManyChannelMonitor(monitorReadArgs); Assert.True(items2.HasValue); var(chanMon2, _) = items2.Value; Assert.True(chanMon.Serialize(_pool).SequenceEqual(chanMon2.Serialize(_pool))); }