示例#1
0
        public async Task TestContactsAreContainedCachedAndApproved()
        {
            var pubKeyAddress         = Seed.Random().Value;
            var contactRequestAddress = new Address(Seed.Random().Value);
            var storedContactAddress  = Seed.Random().Value;
            var keyPair = InMemoryContactRepository.NtruKeyPair;

            var contactRepository = new InMemoryContactRepository();
            var transactionCache  = new MemoryTransactionCache();

            var bundle = CreateBundle(
                contactRequestAddress,
                ContactExchange.Create(new Contact {
                ChatAddress = storedContactAddress, Rejected = true
            }, keyPair.PublicKey, keyPair.PublicKey).Payload);

            bundle.Transactions.ForEach(async t => await transactionCache.SaveTransactionAsync(new TransactionCacheItem
            {
                Address           = contactRequestAddress,
                TransactionHash   = t.Hash,
                TransactionTrytes = t.ToTrytes()
            }));

            await contactRepository.AddContactAsync(storedContactAddress, true, pubKeyAddress);

            var iotaRepositoryMock = new Mock <IIotaRepository>();

            iotaRepositoryMock.Setup(i => i.FindTransactionsByAddressesAsync(It.IsAny <List <Address> >())).ReturnsAsync(
                new TransactionHashList {
                Hashes = new List <Hash>(bundle.Transactions.Select(t => t.Hash))
            });
            iotaRepositoryMock.Setup(i => i.GetTrytesAsync(It.IsAny <List <Hash> >())).ReturnsAsync(new List <TransactionTrytes>());

            var interactor = new GetContactsInteractor(contactRepository, new TangleMessenger(iotaRepositoryMock.Object, transactionCache), NtruEncryption.Key);
            var response   = await interactor.ExecuteAsync(
                new GetContactsRequest
            {
                PublicKeyAddress = new Address(pubKeyAddress),
                RequestAddress   = contactRequestAddress,
                KeyPair          = keyPair
            });

            Assert.AreEqual(1, response.ApprovedContacts.Count);
        }
示例#2
0
        public async Task TestTransactionIsCachedShouldMergeWithMessagesFromTangle()
        {
            var repository       = new InMemoryIotaRepository();
            var transactionCache = new MemoryTransactionCache();

            var messenger = new TangleMessenger(repository, transactionCache);

            var receiver = new Address("GUEOJUOWOWYEXYLZXNQUYMLMETF9OOGASSKUZZWUJNMSHLFLYIDIVKXKLTLZPMNNJCYVSRZABFKCAVVIW");
            var payload  = TryteString.FromUtf8String("Hi. I'm a test");

            var messageOne = new Message(payload, receiver);
            var bundle     = new Bundle();

            bundle.AddTransfer(
                new Transfer
            {
                Address = messageOne.Receiver, Message = messageOne.Payload, Tag = Constants.Tag, Timestamp = Timestamp.UnixSecondsTimestamp
            });

            bundle.Finalize();
            bundle.Sign();
            await repository.SendTrytesAsync(bundle.Transactions);

            await transactionCache.SaveTransactionAsync(
                new TransactionCacheItem
            {
                Address           = receiver,
                TransactionHash   = new Hash(Seed.Random().Value),
                TransactionTrytes = new TransactionTrytes(TryteString.FromUtf8String("Hi. I'm a test").Value)
            });

            var sentMessages = await messenger.GetMessagesByAddressAsync(receiver);

            Assert.AreEqual(2, sentMessages.Count);
            Assert.AreEqual("Hi. I'm a test", sentMessages[0].Payload.ToUtf8String());
            Assert.AreEqual("Hi. I'm a test", sentMessages[1].Payload.ToUtf8String());
        }