Search in sources :

Example 1 with RelatesTo

use of org.matrix.androidsdk.rest.model.message.RelatesTo in project matrix-android-sdk by matrix-org.

the class CryptoTest method test29_testAliceAndBobInAEncryptedRoomWithReplyTo.

/**
 * We want to test that the relates_to data are well copied from e2e event to clear event
 *
 * @throws Exception
 */
@Test
public void test29_testAliceAndBobInAEncryptedRoomWithReplyTo() throws Exception {
    Log.e(LOG_TAG, "test08_testAliceAndBobInAEncryptedRoom2");
    Context context = InstrumentationRegistry.getContext();
    CryptoTestData cryptoTestData = mCryptoTestHelper.doE2ETestWithAliceAndBobInARoom(true);
    final MXSession aliceSession = cryptoTestData.getFirstSession();
    final String aliceRoomId = cryptoTestData.getRoomId();
    final MXSession bobSession = cryptoTestData.getSecondSession();
    bobSession.getCrypto().setWarnOnUnknownDevices(false);
    aliceSession.getCrypto().setWarnOnUnknownDevices(false);
    final Room roomFromBobPOV = bobSession.getDataHandler().getRoom(aliceRoomId);
    final Room roomFromAlicePOV = aliceSession.getDataHandler().getRoom(aliceRoomId);
    Assert.assertTrue(roomFromBobPOV.isEncrypted());
    Assert.assertTrue(roomFromAlicePOV.isEncrypted());
    final List<Event> bobReceivedEvents = new ArrayList<>();
    final List<Event> aliceReceivedEvents = new ArrayList<>();
    final int[] nbReceivedMessagesFromAlice = { 0 };
    final int[] nbReceivedMessagesFromBob = { 0 };
    final List<CountDownLatch> list = new ArrayList<>();
    MXEventListener bobEventListener = new MXEventListener() {

        @Override
        public void onLiveEvent(Event event, RoomState roomState) {
            if (TextUtils.equals(event.getType(), Event.EVENT_TYPE_MESSAGE) && !TextUtils.equals(event.getSender(), bobSession.getMyUserId())) {
                bobReceivedEvents.add(event);
                mCryptoTestHelper.checkEncryptedEvent(event, aliceRoomId, mCryptoTestHelper.getMessagesFromAlice().get(nbReceivedMessagesFromAlice[0]), aliceSession);
                nbReceivedMessagesFromAlice[0]++;
                list.get(list.size() - 1).countDown();
            }
        }
    };
    MXEventListener aliceEventListener = new MXEventListener() {

        @Override
        public void onLiveEvent(Event event, RoomState roomState) {
            if (TextUtils.equals(event.getType(), Event.EVENT_TYPE_MESSAGE) && !TextUtils.equals(event.getSender(), aliceSession.getMyUserId())) {
                aliceReceivedEvents.add(event);
                try {
                    // "In reply to" format for body
                    String expectedMessage = "> <" + aliceSession.getMyUserId() + "> " + mCryptoTestHelper.getMessagesFromAlice().get(nbReceivedMessagesFromAlice[0] - 1) + "\n\n" + mCryptoTestHelper.getMessagesFromBob().get(nbReceivedMessagesFromBob[0]);
                    mCryptoTestHelper.checkEncryptedEvent(event, aliceRoomId, expectedMessage, bobSession);
                    nbReceivedMessagesFromBob[0]++;
                    list.get(list.size() - 1).countDown();
                } catch (Exception e) {
                }
            }
        }
    };
    ApiCallback<Void> callback = new SimpleApiCallback<Void>() {

        @Override
        public void onSuccess(Void info) {
        // Ignore
        }
    };
    roomFromBobPOV.addEventListener(bobEventListener);
    roomFromAlicePOV.addEventListener(aliceEventListener);
    list.add(new CountDownLatch(2));
    final Map<String, Object> results = new HashMap<>();
    bobSession.getDataHandler().addListener(new MXEventListener() {

        @Override
        public void onToDeviceEvent(Event event) {
            results.put("onToDeviceEvent", event);
            list.get(0).countDown();
        }
    });
    // Alice sends a first event
    roomFromAlicePOV.sendEvent(mCryptoTestHelper.buildTextEvent(mCryptoTestHelper.getMessagesFromAlice().get(nbReceivedMessagesFromAlice[0]), aliceSession, aliceRoomId), callback);
    mTestHelper.await(list.get(list.size() - 1));
    Assert.assertTrue(results.containsKey("onToDeviceEvent"));
    Assert.assertEquals(1, nbReceivedMessagesFromAlice[0]);
    // Bob reply to Alice event
    Assert.assertTrue(roomFromBobPOV.canReplyTo(bobReceivedEvents.get(0)));
    list.add(new CountDownLatch(1));
    roomFromBobPOV.sendTextMessage(mCryptoTestHelper.getMessagesFromBob().get(nbReceivedMessagesFromBob[0]), null, Message.MSGTYPE_TEXT, bobReceivedEvents.get(0), null);
    mTestHelper.await(list.get(list.size() - 1));
    Assert.assertEquals(1, nbReceivedMessagesFromBob[0]);
    Event event = aliceReceivedEvents.get(0);
    JsonObject json = event.getContentAsJsonObject();
    Assert.assertNotNull(json);
    // Check that the received event contains a formatted body
    Assert.assertTrue(json.has("formatted_body"));
    // Check that the received event contains the relates to field
    Assert.assertTrue(json.has("m.relates_to"));
    RelatesTo relatesTo = (RelatesTo) JsonUtils.toClass(json.get("m.relates_to"), RelatesTo.class);
    Assert.assertNotNull(relatesTo);
    // Check that the event id matches
    Assert.assertEquals(bobReceivedEvents.get(0).eventId, relatesTo.dict.get("event_id"));
    cryptoTestData.clear(context);
}
Also used : Context(android.content.Context) HashMap(java.util.HashMap) CryptoTestData(org.matrix.androidsdk.common.CryptoTestData) ArrayList(java.util.ArrayList) JsonObject(com.google.gson.JsonObject) CountDownLatch(java.util.concurrent.CountDownLatch) MXSession(org.matrix.androidsdk.MXSession) RelatesTo(org.matrix.androidsdk.rest.model.message.RelatesTo) MXEventListener(org.matrix.androidsdk.listeners.MXEventListener) Event(org.matrix.androidsdk.rest.model.Event) JsonObject(com.google.gson.JsonObject) Room(org.matrix.androidsdk.data.Room) SimpleApiCallback(org.matrix.androidsdk.core.callback.SimpleApiCallback) RoomState(org.matrix.androidsdk.data.RoomState) Test(org.junit.Test)

Aggregations

Context (android.content.Context)1 JsonObject (com.google.gson.JsonObject)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 CountDownLatch (java.util.concurrent.CountDownLatch)1 Test (org.junit.Test)1 MXSession (org.matrix.androidsdk.MXSession)1 CryptoTestData (org.matrix.androidsdk.common.CryptoTestData)1 SimpleApiCallback (org.matrix.androidsdk.core.callback.SimpleApiCallback)1 Room (org.matrix.androidsdk.data.Room)1 RoomState (org.matrix.androidsdk.data.RoomState)1 MXEventListener (org.matrix.androidsdk.listeners.MXEventListener)1 Event (org.matrix.androidsdk.rest.model.Event)1 RelatesTo (org.matrix.androidsdk.rest.model.message.RelatesTo)1