mirror of
https://github.com/vanitasvitae/Smack.git
synced 2024-09-27 18:19:33 +02:00
08e897113d
And matching ImportOrder settings for Eclipse in resources/eclipse/smack.importorder
219 lines
10 KiB
Java
219 lines
10 KiB
Java
/**
|
|
*
|
|
* Copyright 2017 Paul Schaub
|
|
*
|
|
* This file is part of smack-omemo-signal.
|
|
*
|
|
* smack-omemo-signal is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
package org.jivesoftware.smack.omemo;
|
|
|
|
import static junit.framework.TestCase.assertEquals;
|
|
import static junit.framework.TestCase.assertFalse;
|
|
import static junit.framework.TestCase.assertNotNull;
|
|
import static junit.framework.TestCase.assertNull;
|
|
import static junit.framework.TestCase.assertTrue;
|
|
import static org.junit.Assert.assertArrayEquals;
|
|
import static org.powermock.api.mockito.PowerMockito.when;
|
|
|
|
import java.io.File;
|
|
import java.util.Date;
|
|
|
|
import org.jivesoftware.smackx.omemo.FileBasedOmemoStore;
|
|
import org.jivesoftware.smackx.omemo.OmemoConfiguration;
|
|
import org.jivesoftware.smackx.omemo.OmemoManager;
|
|
import org.jivesoftware.smackx.omemo.exceptions.CorruptedOmemoKeyException;
|
|
import org.jivesoftware.smackx.omemo.internal.CachedDeviceList;
|
|
import org.jivesoftware.smackx.omemo.internal.OmemoDevice;
|
|
import org.jivesoftware.smackx.omemo.signal.SignalFileBasedOmemoStore;
|
|
|
|
import org.junit.After;
|
|
import org.junit.Before;
|
|
import org.junit.BeforeClass;
|
|
import org.junit.Test;
|
|
import org.junit.runner.RunWith;
|
|
import org.jxmpp.jid.impl.JidCreate;
|
|
import org.jxmpp.stringprep.XmppStringprepException;
|
|
import org.powermock.api.mockito.PowerMockito;
|
|
import org.powermock.core.classloader.annotations.PrepareForTest;
|
|
import org.powermock.modules.junit4.PowerMockRunner;
|
|
import org.whispersystems.libsignal.IdentityKey;
|
|
import org.whispersystems.libsignal.IdentityKeyPair;
|
|
import org.whispersystems.libsignal.state.SignedPreKeyRecord;
|
|
|
|
/**
|
|
* Test the file-based signalOmemoStore.
|
|
*/
|
|
@RunWith(PowerMockRunner.class)
|
|
@PrepareForTest({OmemoManager.class})
|
|
public class SignalFileBasedOmemoStoreTest {
|
|
|
|
private static File storePath;
|
|
private static SignalFileBasedOmemoStore omemoStore;
|
|
private static OmemoManager omemoManager;
|
|
|
|
|
|
private void deleteStore() {
|
|
FileBasedOmemoStore.deleteDirectory(storePath);
|
|
}
|
|
|
|
@BeforeClass
|
|
public static void setup() throws XmppStringprepException {
|
|
String userHome = System.getProperty("user.home");
|
|
if (userHome != null) {
|
|
File f = new File(userHome);
|
|
storePath = new File(f, ".config/smack-integration-test/store");
|
|
} else {
|
|
storePath = new File("int_test_omemo_store");
|
|
}
|
|
|
|
OmemoConfiguration.setFileBasedOmemoStoreDefaultPath(storePath);
|
|
omemoStore = new SignalFileBasedOmemoStore();
|
|
|
|
OmemoDevice device = new OmemoDevice(JidCreate.bareFrom("storeTest@server.tld"), 55155);
|
|
omemoManager = PowerMockito.mock(OmemoManager.class);
|
|
when(omemoManager.getDeviceId()).thenReturn(device.getDeviceId());
|
|
when(omemoManager.getOwnJid()).thenReturn(device.getJid());
|
|
when(omemoManager.getOwnDevice()).thenReturn(device);
|
|
}
|
|
|
|
@Before
|
|
public void before() {
|
|
deleteStore();
|
|
}
|
|
|
|
@After
|
|
public void after() {
|
|
deleteStore();
|
|
}
|
|
|
|
@Test
|
|
public void isFreshInstallationTest() {
|
|
assertTrue(omemoStore.isFreshInstallation(omemoManager));
|
|
omemoStore.storeOmemoIdentityKeyPair(omemoManager, omemoStore.generateOmemoIdentityKeyPair());
|
|
assertFalse(omemoStore.isFreshInstallation(omemoManager));
|
|
omemoStore.purgeOwnDeviceKeys(omemoManager);
|
|
assertTrue(omemoStore.isFreshInstallation(omemoManager));
|
|
}
|
|
|
|
@Test
|
|
public void defaultDeviceIdTest() throws XmppStringprepException {
|
|
assertEquals(-1, omemoStore.getDefaultDeviceId(omemoManager.getOwnJid()));
|
|
omemoStore.setDefaultDeviceId(omemoManager.getOwnJid(), 55);
|
|
assertEquals(55, omemoStore.getDefaultDeviceId(omemoManager.getOwnJid()));
|
|
assertEquals(-1, omemoStore.getDefaultDeviceId(JidCreate.bareFrom("randomGuy@server.tld")));
|
|
}
|
|
|
|
@Test
|
|
public void cachedDeviceListTest() throws XmppStringprepException {
|
|
OmemoDevice bob = new OmemoDevice(JidCreate.bareFrom("bob@builder.tv"), 666);
|
|
OmemoDevice craig = new OmemoDevice(JidCreate.bareFrom("craig@southpark.tv"), 3333333);
|
|
|
|
CachedDeviceList bobsList = new CachedDeviceList();
|
|
assertEquals(0, bobsList.getAllDevices().size());
|
|
bobsList.getActiveDevices().add(bob.getDeviceId());
|
|
bobsList.getActiveDevices().add(777);
|
|
bobsList.getInactiveDevices().add(888);
|
|
|
|
CachedDeviceList craigsList = new CachedDeviceList();
|
|
craigsList.addDevice(craig.getDeviceId());
|
|
|
|
assertEquals(3, bobsList.getAllDevices().size());
|
|
assertEquals(2, bobsList.getActiveDevices().size());
|
|
assertTrue(bobsList.getInactiveDevices().contains(888));
|
|
assertTrue(bobsList.getActiveDevices().contains(777));
|
|
assertTrue(bobsList.getAllDevices().contains(888));
|
|
|
|
assertEquals(0, craigsList.getInactiveDevices().size());
|
|
assertEquals(1, craigsList.getActiveDevices().size());
|
|
assertEquals(1, craigsList.getAllDevices().size());
|
|
assertEquals(craig.getDeviceId(), craigsList.getActiveDevices().iterator().next().intValue());
|
|
}
|
|
|
|
@Test
|
|
public void omemoIdentityKeyPairTest() throws CorruptedOmemoKeyException {
|
|
assertNull(omemoStore.loadOmemoIdentityKeyPair(omemoManager));
|
|
omemoStore.storeOmemoIdentityKeyPair(omemoManager, omemoStore.generateOmemoIdentityKeyPair());
|
|
IdentityKeyPair ikp = omemoStore.loadOmemoIdentityKeyPair(omemoManager);
|
|
assertNotNull(ikp);
|
|
|
|
assertTrue(omemoStore.keyUtil().getFingerprint(ikp.getPublicKey()).equals(omemoStore.getFingerprint(omemoManager)));
|
|
}
|
|
|
|
@Test
|
|
public void signedPreKeyTest() throws CorruptedOmemoKeyException {
|
|
assertEquals(0, omemoStore.loadOmemoSignedPreKeys(omemoManager).size());
|
|
IdentityKeyPair ikp = omemoStore.generateOmemoIdentityKeyPair();
|
|
SignedPreKeyRecord spk = omemoStore.generateOmemoSignedPreKey(ikp, 14);
|
|
omemoStore.storeOmemoSignedPreKey(omemoManager, 14, spk);
|
|
assertEquals(1, omemoStore.loadOmemoSignedPreKeys(omemoManager).size());
|
|
assertNotNull(omemoStore.loadOmemoSignedPreKey(omemoManager, 14));
|
|
assertArrayEquals(spk.serialize(), omemoStore.loadOmemoSignedPreKey(omemoManager, 14).serialize());
|
|
assertNull(omemoStore.loadOmemoSignedPreKey(omemoManager, 13));
|
|
assertEquals(0, omemoStore.loadCurrentSignedPreKeyId(omemoManager));
|
|
omemoStore.storeCurrentSignedPreKeyId(omemoManager, 15);
|
|
assertEquals(15, omemoStore.loadCurrentSignedPreKeyId(omemoManager));
|
|
omemoStore.removeOmemoSignedPreKey(omemoManager, 14);
|
|
assertNull(omemoStore.loadOmemoSignedPreKey(omemoManager, 14));
|
|
|
|
assertNull(omemoStore.getDateOfLastSignedPreKeyRenewal(omemoManager));
|
|
Date now = new Date();
|
|
omemoStore.setDateOfLastSignedPreKeyRenewal(omemoManager, now);
|
|
assertEquals(now, omemoStore.getDateOfLastSignedPreKeyRenewal(omemoManager));
|
|
}
|
|
|
|
@Test
|
|
public void preKeyTest() {
|
|
assertEquals(0, omemoStore.loadOmemoPreKeys(omemoManager).size());
|
|
assertNull(omemoStore.loadOmemoPreKey(omemoManager, 12));
|
|
omemoStore.storeOmemoPreKeys(omemoManager,
|
|
omemoStore.generateOmemoPreKeys(1, 20));
|
|
assertNotNull(omemoStore.loadOmemoPreKey(omemoManager, 12));
|
|
assertEquals(20, omemoStore.loadOmemoPreKeys(omemoManager).size());
|
|
omemoStore.removeOmemoPreKey(omemoManager, 12);
|
|
assertNull(omemoStore.loadOmemoPreKey(omemoManager, 12));
|
|
assertEquals(19, omemoStore.loadOmemoPreKeys(omemoManager).size());
|
|
|
|
assertEquals(0, omemoStore.loadLastPreKeyId(omemoManager));
|
|
omemoStore.storeLastPreKeyId(omemoManager, 35);
|
|
assertEquals(35, omemoStore.loadLastPreKeyId(omemoManager));
|
|
}
|
|
|
|
@Test
|
|
public void trustingTest() throws XmppStringprepException, CorruptedOmemoKeyException {
|
|
OmemoDevice bob = new OmemoDevice(JidCreate.bareFrom("bob@builder.tv"), 555);
|
|
IdentityKey bobsKey = omemoStore.generateOmemoIdentityKeyPair().getPublicKey();
|
|
assertFalse(omemoStore.isDecidedOmemoIdentity(omemoManager, bob, bobsKey));
|
|
assertFalse(omemoStore.isTrustedOmemoIdentity(omemoManager, bob, bobsKey));
|
|
omemoStore.trustOmemoIdentity(omemoManager, bob, bobsKey);
|
|
assertTrue(omemoStore.isDecidedOmemoIdentity(omemoManager, bob, omemoStore.keyUtil().getFingerprint(bobsKey)));
|
|
assertTrue(omemoStore.isTrustedOmemoIdentity(omemoManager, bob, omemoStore.keyUtil().getFingerprint(bobsKey)));
|
|
assertNull(omemoStore.loadOmemoIdentityKey(omemoManager, bob));
|
|
omemoStore.storeOmemoIdentityKey(omemoManager, bob, bobsKey);
|
|
assertNotNull(omemoStore.loadOmemoIdentityKey(omemoManager, bob));
|
|
IdentityKey bobsOtherKey = omemoStore.generateOmemoIdentityKeyPair().getPublicKey();
|
|
assertFalse(omemoStore.isTrustedOmemoIdentity(omemoManager, bob, bobsOtherKey));
|
|
assertFalse(omemoStore.isDecidedOmemoIdentity(omemoManager, bob, bobsOtherKey));
|
|
omemoStore.distrustOmemoIdentity(omemoManager, bob, omemoStore.keyUtil().getFingerprint(bobsKey));
|
|
assertTrue(omemoStore.isDecidedOmemoIdentity(omemoManager, bob, bobsKey));
|
|
assertFalse(omemoStore.isTrustedOmemoIdentity(omemoManager, bob, bobsKey));
|
|
|
|
assertNull(omemoStore.getDateOfLastReceivedMessage(omemoManager, bob));
|
|
Date now = new Date();
|
|
omemoStore.setDateOfLastReceivedMessage(omemoManager, bob, now);
|
|
assertEquals(now, omemoStore.getDateOfLastReceivedMessage(omemoManager, bob));
|
|
}
|
|
}
|