package org.societies.css.mgmt;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import org.osgi.framework.BundleContext;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.societies.api.identity.IIdentity;
import org.societies.api.identity.IIdentityManager;
import org.societies.api.identity.INetworkNode;
import org.societies.api.identity.RequestorService;
import org.societies.api.internal.context.broker.ICtxBroker;
import org.societies.api.internal.css.management.ICSSRemoteManager;
import org.societies.api.osgi.event.IEventMgr;
import org.societies.api.schema.css.directory.CssAdvertisementRecord;
import org.societies.api.schema.cssmanagement.CssInterfaceResult;
import org.societies.api.schema.cssmanagement.CssNode;
import org.societies.api.schema.cssmanagement.CssRecord;
import org.societies.api.schema.cssmanagement.CssRequest;
import org.societies.api.schema.cssmanagement.CssRequestOrigin;
import org.societies.api.schema.cssmanagement.CssRequestStatusType;
import org.societies.api.internal.css.cssRegistry.ICssRegistry;
import org.societies.api.internal.css.cssRegistry.exception.CssRegistrationException;
import org.societies.api.internal.servicelifecycle.IServiceDiscovery;
import org.societies.api.activity.IActivityFeed;
import org.societies.api.activity.IActivityFeedManager;
import org.societies.api.comm.xmpp.interfaces.ICommManager;
import org.societies.api.comm.xmpp.pubsub.PubsubClient;
import org.societies.api.context.model.CtxEntityIdentifier;
import org.societies.api.context.model.IndividualCtxEntity;
import org.societies.api.css.FriendFilter;
import org.societies.api.css.directory.ICssDirectoryCallback;
import org.societies.api.css.directory.ICssDirectoryRemote;
import org.societies.api.activity.IActivityFeedManager;
public class TestCSSManager {
public static final String TEST_IDENTITY_1 = "node11";
public static final String TEST_IDENTITY_2 = "node22";
public static final String TEST_IDENTITY = "CSSProfile1";
public static final String TEST_INACTIVE_DATE = "20121029";
public static final String TEST_REGISTERED_DATE = "2012-02-23";
public static final int TEST_UPTIME = 7799;
public static final String TEST_EMAIL = "somebody@tssg.org";
public static final String TEST_FORENAME = "4Name";
public static final String TEST_HOME_LOCATION = "The Hearth";
public static final String TEST_IDENTITY_NAME = "Id Name";
public static final String TEST_IM_ID = "somebody.tssg.org";
public static final String TEST_NAME = "TestCSS";
public static final String TEST_PASSWORD = "P455W0RD";
public static final String TEST_SOCIAL_URI = "sombody@fb.com";
private ICssRegistry mockcssRegistry;
// private ICommManager CommManagerMock;
private BundleContext context;
private ICommManager commManagerMock;
private IIdentityManager identityManagerMock;
private INetworkNode iNetworkNodeMock;
private PubsubClient pubSubManagerMock;
private IActivityFeed activityFeedMock;
private IActivityFeedManager mockActivityFeedManager;
private IEventMgr EventMgrMock;
private ICssDirectoryCallback CssDirectoryCallbackMock;
private CssDirectoryRemoteClient CssDirectoryRemoteClientMock;
private ICssDirectoryRemote mockCssDirectoryRemote;
private ICSSRemoteManager mockcssManagerRemote;
private IServiceDiscovery mockserviceDiscovery;
private CtxEntityIdentifier mockCtxEntityIdentifier;
private ICtxBroker mockctxBroker;
private static IIdentity mockIIdentity;
private RequestorService RequestorServiceMock;
private static Future<IndividualCtxEntity> mockFutureIndividualEntity = mock(Future.class);
@Before
public void setUp() throws Exception {
//Create mocks
context = mock(BundleContext.class);
commManagerMock = mock(ICommManager.class);
identityManagerMock = mock(IIdentityManager.class);
pubSubManagerMock = mock(PubsubClient.class);
activityFeedMock = mock(IActivityFeed.class);
mockActivityFeedManager = mock(IActivityFeedManager.class);
mockcssRegistry = mock(ICssRegistry.class);
mockCssDirectoryRemote = mock (ICssDirectoryRemote.class);
mockcssManagerRemote = mock(ICSSRemoteManager.class);
mockserviceDiscovery = mock(IServiceDiscovery.class);
mockCtxEntityIdentifier = mock(CtxEntityIdentifier.class);
//private static CtxEntityIdentifier mockEntityID = mock(CtxEntityIdentifier.class);
mockctxBroker = mock(ICtxBroker.class);
mockIIdentity = mock(IIdentity.class);
EventMgrMock = mock(IEventMgr.class);
CssDirectoryCallbackMock = mock(ICssDirectoryCallback.class);
CssDirectoryRemoteClientMock = mock(CssDirectoryRemoteClient.class);
RequestorServiceMock = mock(RequestorService.class);
//Create a stub to simulate getIdManager method call by returning identityManagerMock
when(commManagerMock.getIdManager()).thenReturn(identityManagerMock);
when(identityManagerMock.fromJid(TEST_IDENTITY)).thenReturn(iNetworkNodeMock);
//Create a stub to simulate getThisNetworkNode method call by returning iNetworkNodeMock
when(identityManagerMock.getThisNetworkNode()).thenReturn(iNetworkNodeMock);
//Create a stub to simulate getting CloudNodeId
//when(identityManagerMock.getCloudNode().getJid()).thenReturn("liam.societies.local");
when(commManagerMock.getIdManager()).thenReturn(identityManagerMock);
when(identityManagerMock.getThisNetworkNode()).thenReturn(iNetworkNodeMock);
when(mockActivityFeedManager.getOrCreateFeed(eq(TEST_IDENTITY_1), eq(TEST_IDENTITY_1), eq(true))).thenReturn(activityFeedMock);
when(identityManagerMock.fromJid(null)).thenReturn(mockIIdentity);
//when(mockctxBroker.retrieveIndividualEntity(liam.sociesties.local).get().getId()).thenReturn(mockCtxEntityIdentifier);
when(mockcssRegistry.cssRecordExists()).thenReturn(true);
CssRequest request = new CssRequest();
request.setCssIdentity(TEST_IDENTITY);
request.setRequestStatus(CssRequestStatusType.PENDING);
request.setOrigin(CssRequestOrigin.REMOTE);
CssRequest request1 = new CssRequest();
request1.setCssIdentity(TEST_IDENTITY_1);
request1.setRequestStatus(CssRequestStatusType.ACCEPTED);
request1.setOrigin(CssRequestOrigin.LOCAL);
List<CssRequest > pendinglist = new ArrayList<CssRequest >();
pendinglist.add(request);
pendinglist.add(request1);
try {
when(mockcssRegistry.getCssRequests()).thenReturn(pendinglist);
} catch (CssRegistrationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
CssNode cssnode = new CssNode();
cssnode.setIdentity(TEST_IDENTITY);
cssnode.setCssNodeMAC("aa:bb:cc:dd:ee");
cssnode.setInteractable("true");
cssnode.setType(0);
cssnode.setStatus(0);
List<CssNode> cssNodes = new ArrayList<CssNode>();
cssNodes.add(cssnode);
CssRecord value = new CssRecord();
value.setCssIdentity(TEST_IDENTITY);
value.setEmailID(TEST_EMAIL);
value.setForeName(TEST_FORENAME);
value.setHomeLocation(TEST_HOME_LOCATION);
value.setCssNodes(cssNodes);
when(mockcssRegistry.getCssRecord()).thenReturn(value);
}
@After
public void tearDown() throws Exception {
}
@Test
public void testConstructor() {
CSSManager manager = new CSSManager();
assertNotNull(manager);
}
@Ignore
public void testInitManager() {
CSSManager manager = new CSSManager();
assertNotNull(manager);
boolean retValue = false;
when(commManagerMock.getIdManager()).thenReturn(identityManagerMock);
when(commManagerMock.getIdManager().getThisNetworkNode()).thenReturn(iNetworkNodeMock);
when(identityManagerMock.getThisNetworkNode()).thenReturn(iNetworkNodeMock);
when(mockActivityFeedManager.getOrCreateFeed(eq(TEST_IDENTITY_1), eq(TEST_IDENTITY_1), eq(true))).thenReturn(activityFeedMock);
//identityManagerMock.getCloudNode().getJid();
manager.setCommManager(commManagerMock);
//when(identityManagerMock.getCloudNode().getJid()).thenReturn("liam.societies.local");
//manager.set
manager.setiActivityFeedManager(mockActivityFeedManager);
manager.setPubSubManager(pubSubManagerMock);
manager.cssManagerInit();
}
@Test
public void testXMPPRegistration() {
CssRecord profile = new CssRecord();
boolean retValue = false;
profile.setCssIdentity(TEST_IDENTITY);
profile.setEmailID(TEST_EMAIL);
profile.setForeName(TEST_FORENAME);
profile.setHomeLocation(TEST_HOME_LOCATION);
assertEquals(TEST_IDENTITY, profile.getCssIdentity());
assertEquals(TEST_EMAIL, profile.getEmailID());
assertEquals(TEST_FORENAME, profile.getForeName());
assertEquals(TEST_HOME_LOCATION, profile.getHomeLocation());
CSSManager manager = new CSSManager();
manager.setCtxBroker(mockctxBroker);
// cssRegistry registry = cssRegistry.getInstance();
manager.setCssRegistry(mockcssRegistry);
//manager.getCssRecord();
Future<CssInterfaceResult> result = manager.registerXMPPServer(profile);
assertNotNull(result);
try {
CssInterfaceResult res = result.get();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (ExecutionException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
/*
try {
interfaceResult = result.get();
//assertTrue(interfaceResult.isResultStatus());
assertNotNull(interfaceResult);
assertEquals(TEST_IDENTITY, interfaceResult.getProfile().getCssIdentity());
assertEquals(TEST_EMAIL, interfaceResult.getProfile().getEmailID());
assertEquals(TEST_FORENAME, interfaceResult.getProfile().getForeName());
assertEquals(TEST_HOME_LOCATION, interfaceResult.getProfile().getHomeLocation());
assertEquals(TEST_NAME, interfaceResult.getProfile().getName());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
*/
result = manager.unregisterXMPPServer(profile);
assertNotNull(result);
}
@Test
public void testgetcssrecord() {
CssRecord profile = new CssRecord();
boolean retValue = false;
CssNode cssnode = new CssNode();
cssnode.setIdentity(TEST_IDENTITY);
cssnode.setCssNodeMAC("aa:bb:cc:dd:ee");
cssnode.setInteractable("true");
cssnode.setType(0);
cssnode.setStatus(0);
List<CssNode> cssNodes = new ArrayList<CssNode>();
cssNodes.add(cssnode);
profile.setCssIdentity(TEST_IDENTITY);
profile.setEmailID(TEST_EMAIL);
profile.setForeName(TEST_FORENAME);
profile.setHomeLocation(TEST_HOME_LOCATION);
profile.setCssNodes(cssNodes);
assertEquals(TEST_IDENTITY, profile.getCssIdentity());
assertEquals(TEST_EMAIL, profile.getEmailID());
assertEquals(TEST_FORENAME, profile.getForeName());
assertEquals(TEST_HOME_LOCATION, profile.getHomeLocation());
CSSManager manager = new CSSManager();
manager.setCssRegistry(mockcssRegistry);
manager.getCssRecord();
manager.setPubSubManager(pubSubManagerMock);
Future<CssInterfaceResult> result = manager.getCssRecord();
assertNotNull(result);
manager.setCssRegistry(mockcssRegistry);
try {
mockcssRegistry.registerCss(profile);
} catch (CssRegistrationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
when(mockcssRegistry.cssRecordExists()).thenReturn(true);
} catch (CssRegistrationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
result = manager.getCssRecord();
assertNotNull(result);
manager.loginCSS(profile);
manager.logoutCSS(profile);
}
@Test
public void testupdatefriendreq() {
CssRecord profile = new CssRecord();
boolean retValue = false;
CssRequest request = new CssRequest();
request.setCssIdentity(TEST_IDENTITY);
request.setRequestStatus(CssRequestStatusType.PENDING);
request.setOrigin(CssRequestOrigin.REMOTE);
CssRequest request1 = new CssRequest();
request1.setCssIdentity(TEST_IDENTITY_1);
request1.setRequestStatus(CssRequestStatusType.ACCEPTED);
request1.setOrigin(CssRequestOrigin.LOCAL);
CSSManager manager = new CSSManager();
manager.setCssDirectoryRemote(mockCssDirectoryRemote);
manager.setCssRegistry(mockcssRegistry);
manager.updateCssFriendRequest(request);
request.setRequestStatus(CssRequestStatusType.DELETEFRIEND);
manager.updateCssFriendRequest(request);
request.setRequestStatus(CssRequestStatusType.CANCELLED);
manager.updateCssFriendRequest(request);
manager.setCssManagerRemote(mockcssManagerRemote);
manager.sendCssFriendRequest(TEST_IDENTITY_1);
List<String> friendslist = new ArrayList<String>();
friendslist.add(TEST_IDENTITY_1);
friendslist.add(TEST_IDENTITY_2);
try {
when(mockcssRegistry.getCssFriends()).thenReturn(friendslist);
} catch (CssRegistrationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
manager.getCssFriends();
manager.findAllCssRequests();
manager.findAllCssFriendRequests();
manager.updateCssRequest(request);
manager.updateCssRequest(request1);
}
@Test
public void testnodestuff() {
CssRecord profile = new CssRecord();
profile.setCssIdentity(TEST_IDENTITY);
profile.setEmailID(TEST_EMAIL);
profile.setForeName(TEST_FORENAME);
profile.setHomeLocation(TEST_HOME_LOCATION);
boolean retValue = false;
CssRequest request = new CssRequest();
request.setCssIdentity(TEST_IDENTITY);
request.setRequestStatus(CssRequestStatusType.PENDING);
request.setOrigin(CssRequestOrigin.REMOTE);
CSSManager manager = new CSSManager();
manager.setCssRegistry(mockcssRegistry);
try {
mockcssRegistry.registerCss(profile);
} catch (CssRegistrationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
manager.setNodeType(profile, TEST_IDENTITY_1, 0, 0, TEST_IDENTITY_NAME, "true");
manager.getthisNodeType(TEST_IDENTITY_1);
manager.removeNode(profile, TEST_IDENTITY);
manager.setPubSubManager(pubSubManagerMock);
manager.getPubSubManager();
}
@Test
public void testmodifyrecord() {
CssRecord profile = new CssRecord();
CssNode cssnode = new CssNode();
cssnode.setIdentity(TEST_IDENTITY);
cssnode.setCssNodeMAC("aa:bb:cc:dd:ee");
cssnode.setInteractable("true");
cssnode.setType(0);
cssnode.setStatus(0);
List<CssNode> cssNodes = new ArrayList<CssNode>();
cssNodes.add(cssnode);
profile.setCssIdentity(TEST_IDENTITY);
profile.setEmailID(TEST_EMAIL);
profile.setForeName(TEST_FORENAME);
profile.setHomeLocation(TEST_HOME_LOCATION);
profile.setCssNodes(cssNodes);
CssAdvertisementRecord cssad = new CssAdvertisementRecord();
cssad.setId(TEST_IDENTITY);
cssad.setName(TEST_NAME);
cssad.setUri(TEST_SOCIAL_URI);
CssAdvertisementRecord cssad2 = new CssAdvertisementRecord();
cssad.setId(TEST_IDENTITY_1);
cssad.setName(TEST_IDENTITY_NAME);
cssad.setUri(TEST_SOCIAL_URI);
boolean retValue = false;
CSSManager manager = new CSSManager();
manager.setCssRegistry(mockcssRegistry);
manager.modifyCssRecord(profile);
manager.setCssDirectoryRemote(mockCssDirectoryRemote);
manager.addAdvertisementRecord(cssad);
manager.deleteAdvertisementRecord(cssad);
manager.addAdvertisementRecord(cssad);
manager.updateAdvertisementRecord(cssad, cssad2);
manager.addAdvertisementRecord(cssad2);
manager.findAllCssAdvertisementRecords();
List<CssAdvertisementRecord> listCssAds = new ArrayList<CssAdvertisementRecord>();
listCssAds.add(cssad);
manager.setServiceDiscovery(mockserviceDiscovery);
//manager.findAllCssServiceDetails(listCssAds);
manager.getCssDirectoryRemote().addCssAdvertisementRecord(cssad);
manager.getCssDirectoryRemote().addCssAdvertisementRecord(cssad2);
//manager.getCssAdvertisementRecordsFull();
manager.registerCSS(profile);
manager.registerCSSNode(profile);
manager.synchProfile(profile);
manager.unregisterCSS(profile);
manager.unregisterCSSNode(profile);
}
@Test
public void testfriendstuff() {
CssRecord profile = new CssRecord();
profile.setCssIdentity(TEST_IDENTITY);
profile.setEmailID(TEST_EMAIL);
profile.setForeName(TEST_FORENAME);
profile.setHomeLocation(TEST_HOME_LOCATION);
CssRequest request = new CssRequest();
request.setCssIdentity(TEST_IDENTITY);
request.setRequestStatus(CssRequestStatusType.PENDING);
request.setOrigin(CssRequestOrigin.LOCAL);
CssAdvertisementRecord cssad = new CssAdvertisementRecord();
cssad.setId(TEST_IDENTITY);
cssad.setName(TEST_NAME);
cssad.setUri(TEST_SOCIAL_URI);
CssAdvertisementRecord cssad2 = new CssAdvertisementRecord();
cssad.setId(TEST_IDENTITY_1);
cssad.setName(TEST_IDENTITY_NAME);
cssad.setUri(TEST_SOCIAL_URI);
List<CssAdvertisementRecord> recordList = new ArrayList<CssAdvertisementRecord>();
recordList.add(cssad);
recordList.add(cssad2);
boolean retValue = false;
CSSManager manager = new CSSManager();
manager.setCssRegistry(mockcssRegistry);
manager.modifyCssRecord(profile);
manager.setCssDirectoryRemote(mockCssDirectoryRemote);
manager.setCssManagerRemote(mockcssManagerRemote);
manager.setCommManager(commManagerMock);
//manager.setEventMgr(EventMgrMock);
manager.getFriendRequests();
manager.acceptCssFriendRequest(request);
manager.declineCssFriendRequest(request);
FriendFilter filter = new FriendFilter();
int filterFlag = 0x0000000000;
filter.setFilterFlag(filterFlag );
//when(mockCssDirectoryRemote.findAllCssAdvertisementRecords(CssDirectoryCallbackMock)).
when(CssDirectoryRemoteClientMock.getResultList()).thenReturn(recordList);
assertTrue(recordList.size()== 2);
//manager.getSuggestedFriends(filter);
manager.pushtoContext(profile);
}
@Test
public void testsendfriendrequest() {
CssRecord profile = new CssRecord();
profile.setCssIdentity(TEST_IDENTITY);
profile.setEmailID(TEST_EMAIL);
profile.setForeName(TEST_FORENAME);
profile.setHomeLocation(TEST_HOME_LOCATION);
CssRequest request = new CssRequest();
request.setCssIdentity(TEST_IDENTITY);
request.setRequestStatus(CssRequestStatusType.PENDING);
request.setOrigin(CssRequestOrigin.LOCAL);
CssAdvertisementRecord cssad = new CssAdvertisementRecord();
cssad.setId(TEST_IDENTITY);
cssad.setName(TEST_NAME);
cssad.setUri(TEST_SOCIAL_URI);
CssAdvertisementRecord cssad2 = new CssAdvertisementRecord();
cssad.setId(TEST_IDENTITY_1);
cssad.setName(TEST_IDENTITY_NAME);
cssad.setUri(TEST_SOCIAL_URI);
List<CssAdvertisementRecord> recordList = new ArrayList<CssAdvertisementRecord>();
recordList.add(cssad);
recordList.add(cssad2);
boolean retValue = false;
CSSManager manager = new CSSManager();
manager.setCssRegistry(mockcssRegistry);
manager.modifyCssRecord(profile);
manager.setCssDirectoryRemote(mockCssDirectoryRemote);
manager.setCssManagerRemote(mockcssManagerRemote);
manager.setCommManager(commManagerMock);
when(RequestorServiceMock.getRequestorId()).thenReturn(mockIIdentity);
manager.sendCSSFriendRequest(mockIIdentity, RequestorServiceMock);
manager.handleExternalFriendRequest(mockIIdentity, CssRequestStatusType.ACCEPTED);
manager.handleInternalFriendRequest(mockIIdentity, CssRequestStatusType.ACCEPTED);
manager.handleExternalUpdateRequest(mockIIdentity, CssRequestStatusType.ACCEPTED);
}
}