package org.societies.security.policynegotiator.provider;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.societies.api.comm.xmpp.datatypes.Stanza;
import org.societies.api.comm.xmpp.datatypes.XMPPNode;
import org.societies.api.comm.xmpp.exceptions.CommunicationException;
import org.societies.api.comm.xmpp.interfaces.ICommCallback;
import org.societies.api.comm.xmpp.interfaces.ICommManager;
import org.societies.api.comm.xmpp.interfaces.IFeatureServer;
import org.societies.api.identity.IIdentity;
import org.societies.api.identity.IIdentityManager;
import org.societies.api.internal.domainauthority.IClientJarServerRemote;
import org.societies.api.internal.security.policynegotiator.INegotiationProviderSLMCallback;
import org.societies.api.internal.security.policynegotiator.NegotiationException;
import org.societies.api.schema.servicelifecycle.model.ServiceResourceIdentifier;
import org.societies.api.security.digsig.ISignatureMgr;
import org.societies.security.comms.policynegotiator.CommsClient;
public class ProviderServiceMgrTest {
private static final long TIME_TO_WAIT_IN_MS = 200;
private ProviderServiceMgr classUnderTest;
private IClientJarServerRemote clientJarServer;
private ISignatureMgr signatureMgr;
private CommsClient groupMgr;
private ServiceResourceIdentifier serviceId;
private static final String slaXml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\" ?><a>abc</a>";
private URI fileServer;
NegotiationProviderSLMCallback callback;
private class NegotiationProviderSLMCallback implements INegotiationProviderSLMCallback {
public boolean success = false;
public boolean error = false;
public String msg = null;
@Override
public void notifySuccess() {
this.success = true;
}
@Override
public void notifyError(String msg, Throwable e) {
this.error = true;
this.msg = msg;
}
}
private class CommMgrMock implements ICommManager {
private IIdentityManager idMgr = mock(IIdentityManager.class);
@Override
public boolean isConnected() {
return false;
}
@Override
public void register(IFeatureServer featureServer)
throws CommunicationException {
}
@Override
public void register(ICommCallback messageCallback)
throws CommunicationException {
}
@Override
public void sendIQGet(Stanza stanza, Object payload,
ICommCallback callback) throws CommunicationException {
}
@Override
public void sendIQSet(Stanza stanza, Object payload,
ICommCallback callback) throws CommunicationException {
}
@Override
public void sendMessage(Stanza stanza, String type, Object payload)
throws CommunicationException {
}
@Override
public void sendMessage(Stanza stanza, Object payload)
throws CommunicationException {
}
@Override
public void addRootNode(XMPPNode newNode) {
}
@Override
public void removeRootNode(XMPPNode node) {
}
@Override
public String getInfo(IIdentity entity, String node,
ICommCallback callback) throws CommunicationException {
return null;
}
@Override
public String getItems(IIdentity entity, String node,
ICommCallback callback) throws CommunicationException {
return null;
}
@Override
public IIdentityManager getIdManager() {
return idMgr;
}
@Override
public boolean UnRegisterCommManager() {
return false;
}
}
@Before
public void setUp() throws Exception {
classUnderTest = new ProviderServiceMgr();
clientJarServer = mock(IClientJarServerRemote.class);
signatureMgr = mock(ISignatureMgr.class);
groupMgr = new CommsClient();
ICommManager commMgr = new CommMgrMock();
assertNotNull(commMgr.getIdManager());
groupMgr.setCommMgr(commMgr);
groupMgr.init();
assertNotNull(groupMgr.getCommMgr());
assertNotNull(groupMgr.getCommMgr().getIdManager());
classUnderTest.setClientJarServer(clientJarServer);
classUnderTest.setGroupMgr(groupMgr);
classUnderTest.setSignatureMgr(signatureMgr);
serviceId = new ServiceResourceIdentifier();
serviceId.setIdentifier(new URI("societies://aaa.bbb.ccc"));
serviceId.setServiceInstanceIdentifier("service-1");
fileServer = new URI("http://localhost/foo");
callback = new NegotiationProviderSLMCallback();
}
@After
public void tearDown() throws Exception {
classUnderTest = null;
}
@Test
public void testGettersAndSetters() {
assertSame(clientJarServer, classUnderTest.getClientJarServer());
assertSame(groupMgr, classUnderTest.getGroupMgr());
assertSame(signatureMgr, classUnderTest.getSignatureMgr());
}
@Test
public void testAddService_ListStrings_0() throws Exception {
List<String> files = new ArrayList<String>();
assertFalse(callback.success);
assertEquals(0, classUnderTest.getServices().size(), 0.0);
classUnderTest.addService(serviceId, slaXml, fileServer, files, callback);
assertEquals(1, classUnderTest.getServices().size(), 0.0);
Thread.sleep(TIME_TO_WAIT_IN_MS);
assertTrue(callback.success);
assertFalse(callback.error);
}
@Test
public void testAddService_ListStrings_1() throws Exception {
List<String> files = new ArrayList<String>();
files.add("foo.jar");
assertFalse(callback.success);
assertEquals(0, classUnderTest.getServices().size(), 0.0);
classUnderTest.addService(serviceId, slaXml, fileServer, files, callback);
assertEquals(1, classUnderTest.getServices().size(), 0.0);
}
@Test
public void testAddService_UrlArray_0() throws Exception {
URL[] fileUrls = new URL[] {};
assertFalse(callback.success);
assertEquals(0, classUnderTest.getServices().size(), 0.0);
classUnderTest.addService(serviceId, slaXml, fileServer, fileUrls, callback);
assertEquals(1, classUnderTest.getServices().size(), 0.0);
Thread.sleep(TIME_TO_WAIT_IN_MS);
assertTrue(callback.success);
assertFalse(callback.error);
}
@Test
public void testAddService_UrlArray_1() throws Exception {
URL[] fileUrls = new URL[] {new URL("http://localhost/foo")};
assertFalse(callback.success);
assertEquals(0, classUnderTest.getServices().size(), 0.0);
classUnderTest.addService(serviceId, slaXml, fileServer, fileUrls, callback);
assertEquals(1, classUnderTest.getServices().size(), 0.0);
}
@Test
public void testAddService_SingleFile() throws Exception {
String filePath = "foo.jar";
assertFalse(callback.success);
assertEquals(0, classUnderTest.getServices().size(), 0.0);
classUnderTest.addService(serviceId, slaXml, fileServer, filePath, callback);
assertEquals(1, classUnderTest.getServices().size(), 0.0);
}
@Test
public void testRemoveService() throws Exception {
testAddService_SingleFile();
assertEquals(1, classUnderTest.getServices().size(), 0.0);
classUnderTest.removeService(serviceId);
assertEquals(0, classUnderTest.getServices().size(), 0.0);
}
@Test
public void testGetService() throws Exception {
Service service;
service = classUnderTest.getService(serviceId.getIdentifier().toASCIIString());
assertNull(service);
testAddService_SingleFile();
service = classUnderTest.getService(serviceId.getIdentifier().toASCIIString());
assertNotNull(service);
}
@Test
public void testGetSignedUris() throws Exception {
List<URI> signedUris;
testAddService_UrlArray_1();
signedUris = classUnderTest.getSignedUris(serviceId.getIdentifier().toASCIIString());
assertEquals(1, signedUris.size(), 0.0);
}
}