コード例 #1
0
        public async Task TestValidMessageCanBeParsedCorrectly()
        {
            Assert.Inconclusive("TODO: Encryption Stub");
            var messenger             = new InMemoryMessenger();
            var sendMessageInteractor = new SendMessageInteractor(messenger, new EncryptionStub(), new EncryptionStub());
            await sendMessageInteractor.ExecuteAsync(
                new SendMessageRequest
            {
                ChatAddress          = new Address(Hash.Empty.Value),
                ChatKeyPair          = InMemoryContactRepository.NtruKeyPair,
                Message              = "Hallo",
                UserPublicKeyAddress = new Address(Hash.Empty.Value)
            });

            var interactor = new GetMessagesInteractor(messenger, new EncryptionStub(), new EncryptionStub());
            var result     = await interactor.ExecuteAsync(
                new GetMessagesRequest
            {
                ChatAddress = new Address(Hash.Empty.Value),
                ChatKeyPair = InMemoryContactRepository.NtruKeyPair
            });

            Assert.AreEqual(ResponseCode.Success, result.Code);
            Assert.AreEqual(1, result.Messages.Count);
            Assert.AreEqual("Hallo", result.Messages[0].Message);
        }
コード例 #2
0
        public async Task TestNoContactInformationCanBeFoundShouldReturnErrorCode()
        {
            var contactRepositoryMock = new Mock <IContactRepository>();

            contactRepositoryMock.Setup(c => c.LoadContactInformationByAddressAsync(It.IsAny <Address>()))
            .Throws(new MessengerException(ResponseCode.NoContactInformationPresent));

            var messenger      = new InMemoryMessenger();
            var respository    = new InMemoryContactRepository();
            var interactor     = new AddContactInteractor(contactRepositoryMock.Object, messenger);
            var contactAddress = new Address("GUEOJUOWOWYEXYLZXNQUYMLMETF9OOGASSKUZZWUJNMSHLFLYIDIVKXKLTLZPMNNJCYVSRZABFKCAVVIW");
            var request        = new AddContactRequest
            {
                ContactAddress   = contactAddress,
                RequestAddress   = new Address(Seed.Random().Value),
                ImagePath        = "kjasdjkahsda89dafhfafa",
                Name             = "Chiota User",
                PublicKeyAddress = new Address(Seed.Random().Value),
                UserPublicKey    = InMemoryContactRepository.NtruKeyPair.PublicKey
            };

            var response = await interactor.ExecuteAsync(request);

            Assert.AreEqual(ResponseCode.NoContactInformationPresent, response.Code);
        }
コード例 #3
0
        public async Task TestContactsAreCachedAndOnTangleShouldExcludeRejectedContactsAndSetCache()
        {
            var pubKeyAddress          = Seed.Random().Value;
            var contactRequestAddress  = new Address(Seed.Random().Value);
            var rejectedContactAddress = Seed.Random().Value;
            var storedContactAddress   = Seed.Random().Value;
            var keyPair = InMemoryContactRepository.NtruKeyPair;

            var contactRepository = new InMemoryContactRepository();
            await contactRepository.AddContactAsync(storedContactAddress, true, pubKeyAddress);

            await contactRepository.AddContactAsync(rejectedContactAddress, false, pubKeyAddress);

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

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

            var requestBundle = CreateBundle(
                contactRequestAddress,
                ContactExchange.Create(
                    new Contact {
                ChatAddress = storedContactAddress, PublicKeyAddress = storedContactAddress, Request = true, Name = "Requester"
            },
                    keyPair.PublicKey,
                    keyPair.PublicKey).Payload);

            var messenger = new InMemoryMessenger();

            messenger.SentMessages.Add(new Message(rejectedContactBundle.Transactions.Aggregate(new TryteString(), (current, transaction) => current.Concat(transaction.Fragment)), contactRequestAddress));
            messenger.SentMessages.Add(new Message(approvedContactBundle.Transactions.Aggregate(new TryteString(), (current, transaction) => current.Concat(transaction.Fragment)), contactRequestAddress));
            messenger.SentMessages.Add(new Message(requestBundle.Transactions.Aggregate(new TryteString(), (current, transaction) => current.Concat(transaction.Fragment)), contactRequestAddress));

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

            Assert.AreEqual(ResponseCode.Success, response.Code);
            Assert.AreEqual(1, response.ApprovedContacts.Count);
            Assert.AreEqual(1, response.PendingContactRequests.Count);
        }
コード例 #4
0
        public async Task TestInvalidMessagesShouldBeIgnored()
        {
            var messenger = new InMemoryMessenger();

            messenger.SentMessages.Add(new Message(new TryteString("GHAFSGHAFSGHFASAAS"), new Address(Hash.Empty.Value)));

            var interactor = new GetMessagesInteractor(messenger, new EncryptionStub(), new EncryptionStub());
            var result     = await interactor.ExecuteAsync(
                new GetMessagesRequest
            {
                ChatAddress = new Address(Hash.Empty.Value),
                ChatKeyPair = InMemoryContactRepository.NtruKeyPair
            });

            Assert.AreEqual(ResponseCode.Success, result.Code);
        }
コード例 #5
0
        public async Task TestCreatedUserDataIsSentSignedAndReturned()
        {
            var seed = Seed.Random();
            var inMemoryMessenger = new InMemoryMessenger();
            var interactor        = new CreateUserInteractor(
                inMemoryMessenger,
                new InMemoryAddressGenerator(),
                new EncryptionStub(),
                new SignatureGeneratorStub());
            var response = await interactor.ExecuteAsync(new CreateUserRequest { Seed = seed });

            Assert.AreEqual(ResponseCode.Success, response.Code);
            Assert.AreEqual(seed.Value, response.PublicKeyAddress.Value);
            Assert.IsNotNull(response.RequestAddress);
            Assert.IsNotNull(response.NtruKeyPair);
            Assert.IsTrue(inMemoryMessenger.SentMessages[0].Payload.Value.Contains("STUBFRAGMENTSIGNATURE"));
        }
コード例 #6
0
        public IMessenger CreateMessenger(StorageConnectionString connectionString)
        {
            if (connectionString.Prefix == "inmemory")
            {
                connectionString.GetRequired("name", true, out string name);

                return(InMemoryMessenger.CreateOrGet(name));
            }

            if (connectionString.Prefix == "disk")
            {
                connectionString.GetRequired("path", true, out string path);

                return(new LocalDiskMessenger(path));
            }

            return(null);
        }
コード例 #7
0
        public async Task TestChatPasKeyIsSentViaMessenger()
        {
            var messenger      = new InMemoryMessenger();
            var respository    = new InMemoryContactRepository();
            var interactor     = new AddContactInteractor(respository, messenger);
            var contactAddress = new Address("GUEOJUOWOWYEXYLZXNQUYMLMETF9OOGASSKUZZWUJNMSHLFLYIDIVKXKLTLZPMNNJCYVSRZABFKCAVVIW");
            var request        = new AddContactRequest
            {
                ContactAddress   = contactAddress,
                RequestAddress   = new Address(Seed.Random().Value),
                ImageHash        = "kjasdjkahsda89dafhfafa",
                Name             = "Chiota User",
                PublicKeyAddress = new Address(Seed.Random().Value)
            };

            var response = await interactor.ExecuteAsync(request);

            Assert.AreEqual(2, messenger.SentMessages.Count);
            Assert.AreEqual(ResponseCode.Success, response.Code);
        }
コード例 #8
0
        public async Task TestContactInformationDoesNotExistAnymoreShouldResend()
        {
            var messenger  = new InMemoryMessenger();
            var interactor = new CheckUserInteractor(
                new ExceptionContactRepository(new MessengerException(ResponseCode.NoContactInformationPresent)),
                messenger,
                new InMemoryAddressGenerator(),
                new SignatureGeneratorStub());

            var response = await interactor.ExecuteAsync(
                new CheckUserRequest
            {
                PublicKey        = InMemoryContactRepository.NtruKeyPair.PublicKey,
                PublicKeyAddress = new Address(Hash.Empty.Value),
                RequestAddress   = new Address(Hash.Empty.Value),
                Seed             = Seed.Random()
            });

            Assert.AreEqual(ResponseCode.Success, response.Code);
            Assert.AreEqual(1, messenger.SentMessages.Count);
        }
コード例 #9
0
        public async Task TestChatPasCanBeCreatedShouldPersistContactAndSendInformation()
        {
            Assert.Inconclusive("TODO: To be tested the crypto module needs to be separated from interactor.");
            var inMemoryMessenger = new InMemoryMessenger();

            inMemoryMessenger.SentMessages.Add(new Message(new TryteString(""), new Address(Hash.Empty.Value)));

            var interactor = new AcceptContactInteractor(new InMemoryContactRepository(), inMemoryMessenger, new EncryptionStub());
            var response   = await interactor.ExecuteAsync(new AcceptContactRequest
            {
                ChatKeyAddress          = new Address(Hash.Empty.Value),
                ChatAddress             = new Address(Hash.Empty.Value),
                ContactPublicKeyAddress = new Address(Hash.Empty.Value),
                ContactAddress          = new Address(Hash.Empty.Value),
                UserImagePath           = string.Empty,
                UserPublicKeyAddress    = new Address(Hash.Empty.Value),
                UserName    = string.Empty,
                UserKeyPair = InMemoryContactRepository.NtruKeyPair
            });

            Assert.AreEqual(ResponseCode.Success, response.Code);
        }
コード例 #10
0
        public async Task TestMessengerGetsCalledWithAddContactRequestAndContactJsonPayload()
        {
            var messenger        = new InMemoryMessenger();
            var respository      = new InMemoryContactRepository();
            var interactor       = new AddContactInteractor(respository, messenger);
            var contactAddress   = new Address("GUEOJUOWOWYEXYLZXNQUYMLMETF9OOGASSKUZZWUJNMSHLFLYIDIVKXKLTLZPMNNJCYVSRZABFKCAVVIW");
            var requestAddress   = Seed.Random().Value;
            var publicKeyAddress = Seed.Random().Value;

            var request = new AddContactRequest
            {
                ContactAddress   = contactAddress,
                RequestAddress   = new Address(requestAddress),
                ImagePath        = "kjasdjkahsda89dafhfafa",
                Name             = "Chiota User",
                PublicKeyAddress = new Address(publicKeyAddress),
                UserPublicKey    = InMemoryContactRepository.NtruKeyPair.PublicKey
            };

            await interactor.ExecuteAsync(request);

            Assert.AreEqual(2, messenger.SentMessages.Count);

            var sentMessage = messenger.SentMessages[0];

            Assert.AreEqual(contactAddress.Value, sentMessage.Receiver.Value);

            var decryptedPayload = NtruEncryption.Key.Decrypt(InMemoryContactRepository.NtruKeyPair, sentMessage.Payload.ToBytes());
            var sentPayload      = JsonConvert.DeserializeObject <Contact>(Encoding.UTF8.GetString(decryptedPayload));

            Assert.AreEqual("kjasdjkahsda89dafhfafa", sentPayload.ImagePath);
            Assert.AreEqual("Chiota User", sentPayload.Name);
            Assert.AreEqual(publicKeyAddress, sentPayload.PublicKeyAddress);
            Assert.AreEqual(requestAddress, sentPayload.ContactAddress);
            Assert.IsTrue(InputValidator.IsAddress(sentPayload.ChatAddress));
            Assert.IsTrue(InputValidator.IsAddress(sentPayload.ChatKeyAddress));
            Assert.IsTrue(sentPayload.Request);
            Assert.IsFalse(sentPayload.Rejected);
        }
コード例 #11
0
 /// <summary>
 /// Creates a message publisher which holds messages in memory.
 /// </summary>
 /// <param name="factory"></param>
 /// <param name="name">Memory buffer name. Publishers with the same name will contain identical messages. Querying a publisher again
 /// with the same name returns an identical publisher. To create a receiver for this memory bufffer use the same name.</param>
 public static IMessenger InMemory(this IMessagingFactory factory, string name)
 {
     return(InMemoryMessenger.CreateOrGet(name));
 }