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); }
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); }
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); }
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); }
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")); }
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); }
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); }
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); }
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); }
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); }
/// <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)); }