package org.limewire.core.impl.friend;
import java.util.HashSet;
import java.util.Set;
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.jmock.lib.legacy.ClassImposteriser;
import org.limewire.friend.impl.address.FriendAddress;
import org.limewire.friend.impl.address.FriendAddressResolver;
import org.limewire.io.Address;
import org.limewire.net.address.AddressFactory;
import org.limewire.net.address.FirewalledAddress;
import org.limewire.security.SecureMessage.Status;
import org.limewire.util.BaseTestCase;
import org.limewire.core.impl.friend.FriendRemoteFileDescCreator;
import com.limegroup.gnutella.Constants;
import com.limegroup.gnutella.RemoteFileDesc;
import com.limegroup.gnutella.URN;
import com.limegroup.gnutella.downloader.RemoteFileDescFactory;
import com.limegroup.gnutella.xml.LimeXMLDocument;
/**
* A series of tests for XMPPRemoteFileDescCreator.
*/
public class FriendRemoteFileDescCreatorTest extends BaseTestCase {
public FriendRemoteFileDescCreatorTest(String name) {
super(name);
}
/**
* Test the register method and ensure the factory will actually be registered with this class.
*/
public void testRegister() {
Mockery context = new Mockery();
final RemoteFileDescFactory remoteFileDescFactory = context.mock(RemoteFileDescFactory.class);
final FriendRemoteFileDescCreator creator = new FriendRemoteFileDescCreator(null, null);
context.checking(new Expectations() {{
exactly(1).of(remoteFileDescFactory).register(creator);
}});
creator.register(remoteFileDescFactory);
context.assertIsSatisfied();
}
/**
* Passes a variety of Address types and ensures only a XMPPAddress will return true.
*/
public void testCanCreateFor() {
Mockery context = new Mockery() {{
setImposteriser(ClassImposteriser.INSTANCE);
}};
final Address plainAddress = context.mock(Address.class);
final Address xmppAddress = context.mock(FriendAddress.class);
final Address otherAddress = context.mock(FirewalledAddress.class);
final Address xmppExtAddress = new FriendAddress("asda") {
@Override
public String getId() {
return "hello";
}
};
final FriendRemoteFileDescCreator creator = new FriendRemoteFileDescCreator(null, null);
context.checking(new Expectations() {{
// None
}});
assertFalse(creator.canCreateFor(plainAddress));
assertFalse(creator.canCreateFor(otherAddress));
assertTrue(creator.canCreateFor(xmppAddress));
assertTrue(creator.canCreateFor(xmppExtAddress));
context.assertIsSatisfied();
}
/**
* Simple creation test. Ensures all the values are picked up and the AddressResolver is correctly
* passed on. See XMPPRemoteFireDescDeserialiser for more tests if more concrete verification is
* needed.
*/
public void testCreateWithAddressResolver() {
Mockery context = new Mockery() {
{ setImposteriser(ClassImposteriser.INSTANCE);
}
};
final AddressFactory addressFactory = context.mock(AddressFactory.class);
final FriendAddressResolver addressResolver = context.mock(FriendAddressResolver.class);
final FriendRemoteFileDescCreator creator
= new FriendRemoteFileDescCreator(addressFactory, addressResolver);
final FriendAddress address = context.mock(FriendAddress.class);
context.checking(new Expectations() {
{ // Ensure address resolver is active
exactly(1).of(addressResolver).getPresence(address);
will(returnValue(null));
}});
final long index = -10;
final String fileName = "Aaaaaaaaasdasfffffffffffffffffffffffffffoiwequrfweiorwe";
final long size = Constants.MAX_FILE_SIZE;
final byte[] clientGUID = new byte[] {};
final int speed = Integer.MAX_VALUE;
final int quality = Integer.MIN_VALUE;
final LimeXMLDocument xmlDoc = null;
final Set<URN> urns = new HashSet<URN>();
final String vendor = null;
final long createTime = Long.MIN_VALUE;
final boolean http11 = true;
final boolean browseHost = false;
final boolean replyToMulticast = true;
RemoteFileDesc rfdNew = creator.create(address, index, fileName, size, clientGUID,
speed, quality, browseHost, xmlDoc, urns, replyToMulticast, vendor, createTime, http11);
assertEquals(address, rfdNew.getAddress());
assertEquals(index, rfdNew.getIndex());
assertEquals(fileName, rfdNew.getFileName());
assertEquals(size, rfdNew.getSize());
assertEquals(clientGUID, rfdNew.getClientGUID());
assertEquals(speed, rfdNew.getSpeed());
assertEquals(quality, rfdNew.getQuality());;
assertTrue(rfdNew.isBrowseHostEnabled());
assertEquals(xmlDoc, rfdNew.getXMLDocument());
assertFalse(rfdNew.isReplyToMulticast());
assertEquals(urns, rfdNew.getUrns());
assertEquals(vendor, rfdNew.getVendor());
assertEquals(createTime, rfdNew.getCreationTime());
assertEquals(http11, rfdNew.isHTTP11());
assertFalse(rfdNew.isFromAlternateLocation());
assertFalse(rfdNew.isAltLocCapable());
assertFalse(rfdNew.isSpam());
assertEquals(0.0f, rfdNew.getSpamRating());
assertEquals(Status.INSECURE, rfdNew.getSecureStatus());
assertNotNull(rfdNew.toString());
assertNotEquals(rfdNew.toString(), "");
// Invoke a method that uses addressResolver
rfdNew.getCredentials();
context.assertIsSatisfied();
}
}