Example #1
0
        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);
        }
Example #2
0
        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)));
        }