summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTarun Gupta <tarun1995gupta@gmail.com>2015-06-09 10:08:25 (GMT)
committerTarun Gupta <tarun1995gupta@gmail.com>2015-06-14 13:30:22 (GMT)
commit2180f81bd45045021d98c3a2e0649f10680596f9 (patch)
tree872db3fdeb890a232b5a1dc3b823a1e6692b5aa0 /test/com/isode/stroke/avatars/AvatarManagerImplTest.java
parent9518f8b9d6924e95e4ad839f40866560bd7a7878 (diff)
downloadstroke-2180f81bd45045021d98c3a2e0649f10680596f9.zip
stroke-2180f81bd45045021d98c3a2e0649f10680596f9.tar.bz2
Add Avatar Functionality.
Adds AvatarManager, AvatarManagerImpl, AvatarStorage and different AvatarProviders including DummyAvatarProvider, NullAvatarProvider and OfflineAvatarProvider. Also adds VCardAvatarManager and VCardUpdateAvatarManager. Updates VCard Element, so that it does not return null on calling getPhoto() and thereby produce Null Pointer Exceptions. License: This patch is BSD-licensed, see Documentation/Licenses/BSD-simplified.txt for details. Test-Information: Tests are added for AvatarManagerImpl, VCardAvatarManager and VCardUpdateAvatarManager, which passes. Tests for CombinedAvatarProvider will be added soon. Change-Id: Ia6c0f82ae496427dc0cd11841487f6c53fd0fe1c
Diffstat (limited to 'test/com/isode/stroke/avatars/AvatarManagerImplTest.java')
-rw-r--r--test/com/isode/stroke/avatars/AvatarManagerImplTest.java148
1 files changed, 148 insertions, 0 deletions
diff --git a/test/com/isode/stroke/avatars/AvatarManagerImplTest.java b/test/com/isode/stroke/avatars/AvatarManagerImplTest.java
new file mode 100644
index 0000000..7ee10fd
--- /dev/null
+++ b/test/com/isode/stroke/avatars/AvatarManagerImplTest.java
@@ -0,0 +1,148 @@
+/*
+ * Copyright (c) 2014 Isode Limited.
+ * All rights reserved.
+ * See the COPYING file for more information.
+ */
+/*
+ * Copyright (c) 2015 Tarun Gupta.
+ * Licensed under the simplified BSD license.
+ * See Documentation/Licenses/BSD-simplified.txt for more information.
+ */
+
+package com.isode.stroke.avatars;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertEquals;
+import org.junit.Before;
+import org.junit.Test;
+import java.util.Vector;
+import com.isode.stroke.elements.VCardUpdate;
+import com.isode.stroke.elements.Presence;
+import com.isode.stroke.elements.IQ;
+import com.isode.stroke.elements.VCard;
+import com.isode.stroke.avatars.VCardUpdateAvatarManager;
+import com.isode.stroke.avatars.VCardAvatarManager;
+import com.isode.stroke.avatars.AvatarMemoryStorage;
+import com.isode.stroke.vcards.VCardMemoryStorage;
+import com.isode.stroke.vcards.VCardManager;
+import com.isode.stroke.muc.MUCRegistry;
+import com.isode.stroke.queries.IQRouter;
+import com.isode.stroke.client.DummyStanzaChannel;
+import com.isode.stroke.crypto.JavaCryptoProvider;
+import com.isode.stroke.crypto.CryptoProvider;
+import com.isode.stroke.stringcodecs.Hexify;
+import com.isode.stroke.jid.JID;
+import com.isode.stroke.base.ByteArray;
+import com.isode.stroke.signals.SignalConnection;
+import com.isode.stroke.signals.Slot1;
+
+public class AvatarManagerImplTest {
+
+ private JID ownerJID;
+ private DummyStanzaChannel stanzaChannel;
+ private IQRouter iqRouter;
+ private CryptoProvider crypto;
+ private VCardMemoryStorage vcardStorage;
+ private VCardManager vcardManager;
+ private AvatarMemoryStorage avatarStorage;
+ private DummyMUCRegistry mucRegistry;
+ private AvatarManagerImpl avatarManager;
+
+ public class DummyMUCRegistry extends MUCRegistry {
+
+ public boolean isMUC(JID jid) {
+ return mucs_.contains(jid);
+ }
+
+ public Vector<JID> mucs_ = new Vector<JID>();
+ }
+
+ @Before
+ public void setUp() {
+ ownerJID = new JID("owner@domain.com/theowner");
+ stanzaChannel = new DummyStanzaChannel();
+ iqRouter = new IQRouter(stanzaChannel);
+ crypto = new JavaCryptoProvider();
+ vcardStorage = new VCardMemoryStorage(crypto);
+ vcardManager = new VCardManager(ownerJID, iqRouter, vcardStorage);
+ avatarStorage = new AvatarMemoryStorage();
+ mucRegistry = new DummyMUCRegistry();
+ avatarManager = new AvatarManagerImpl(vcardManager, stanzaChannel, avatarStorage, crypto, mucRegistry);
+ }
+
+ @Test
+ public void testGetSetAvatar() {
+ /* initially we have no knowledge of the user or their avatar */
+ JID personJID = new JID("person@domain.com/theperson");
+ ByteArray avatar = avatarManager.getAvatar(personJID.toBare());
+ assertTrue(avatar.getSize() == 0);
+
+ /* notify the 'owner' JID that our avatar has changed */
+
+ ByteArray fullAvatar = new ByteArray("abcdefg");
+ VCardUpdate vcardUpdate = new VCardUpdate();
+ vcardUpdate.setPhotoHash(Hexify.hexify(crypto.getSHA1Hash(fullAvatar)));
+ Presence presence = new Presence();
+ presence.setTo(ownerJID);
+ presence.setFrom(personJID);
+ presence.setType(Presence.Type.Available);
+ presence.addPayload(vcardUpdate);
+ stanzaChannel.onPresenceReceived.emit(presence);
+
+ /* reply to the avatar request with our new avatar */
+
+ assertEquals(1, stanzaChannel.sentStanzas.size());
+ IQ request = (IQ)(stanzaChannel.sentStanzas.get(0));
+ stanzaChannel.sentStanzas.remove(stanzaChannel.sentStanzas.lastElement());
+ assertNotNull(request);
+ VCard vcard = request.getPayload(new VCard());
+ assertNotNull(vcard);
+
+ IQ reply = new IQ(IQ.Type.Result);
+ reply.setTo(request.getFrom());
+ reply.setFrom(request.getTo());
+ reply.setID(request.getID());
+ vcard.setPhoto(fullAvatar);
+ reply.addPayload(vcard);
+ stanzaChannel.onIQReceived.emit(reply);
+
+ /* check hash through avatarManager that it received the correct photo */
+
+ ByteArray reportedAvatar = avatarManager.getAvatar(personJID.toBare());
+ assertEquals(fullAvatar.toString(), reportedAvatar.toString());
+
+ /* send new presence to notify of blank avatar */
+
+ vcardUpdate = new VCardUpdate();
+ presence = new Presence();
+ presence.setTo(ownerJID);
+ presence.setFrom(personJID);
+ presence.setType(Presence.Type.Available);
+ presence.addPayload(vcardUpdate);
+ stanzaChannel.onPresenceReceived.emit(presence);
+
+ /* reply to the avatar request with our EMPTY avatar */
+
+ assertEquals(1, stanzaChannel.sentStanzas.size());
+ request = (IQ)(stanzaChannel.sentStanzas.get(0));
+ stanzaChannel.sentStanzas.remove(stanzaChannel.sentStanzas.lastElement());
+ assertNotNull(request);
+ vcard = request.getPayload(new VCard());
+ assertNotNull(vcard);
+
+ ByteArray blankAvatar = new ByteArray("");
+ reply = new IQ(IQ.Type.Result);
+ reply.setTo(request.getFrom());
+ reply.setFrom(request.getTo());
+ reply.setID(request.getID());
+ vcard.setPhoto(blankAvatar);
+ reply.addPayload(vcard);
+ stanzaChannel.onIQReceived.emit(reply);
+
+ /* check hash through avatarManager that it received the correct photo */
+
+ reportedAvatar = avatarManager.getAvatar(personJID.toBare());
+ assertEquals(blankAvatar.toString(), reportedAvatar.toString());
+ }
+} \ No newline at end of file