use of com.vodafone360.people.service.io.Request in project 360-Engine-for-Android by 360.
the class ContactSyncEngineTest method testAllSyncs.
/**
* Checks different sync request that come from: -first time sync -fake
* database change event -full sync -server sync
*/
@Suppress
public // Breaks tests.
void testAllSyncs() {
Log.i(LOG_TAG, "**** testAllSyncs() begin ****");
final ArrayList<ProcessorLog> processorLogs = new ArrayList<ProcessorLog>();
final UiEventCall uiEventCall = new UiEventCall();
final IEngineEventCallback engineEventCallback = new HelperClasses.EngineCallbackBase() {
@Override
public void onUiEvent(ServiceUiRequest event, int request, int status, Object data) {
Log.i(LOG_TAG, "onUiEvent: " + event + ", " + request + ", " + status + ", " + data);
uiEventCall.event = event.ordinal();
uiEventCall.request = request;
uiEventCall.status = status;
uiEventCall.data = data;
}
};
final ProcessorFactory factory = new ProcessorFactory() {
@Override
public BaseSyncProcessor create(int type, IContactSyncCallback callback, DatabaseHelper dbHelper) {
Log.i(LOG_TAG, "create(), type=" + type);
ProcessorLog log = new ProcessorLog();
log.type = type;
log.time = System.currentTimeMillis();
processorLogs.add(log);
return new DummySyncProcessor(mContactSyncEngine, null);
}
};
minimalEngineSetup(engineEventCallback, factory);
// set the connection to be fine
NetworkAgent.setAgentState(NetworkAgent.AgentState.CONNECTED);
long nextRuntime = mContactSyncEngine.getNextRunTime();
// should be equal to -1 because first time sync has not been yet
// started
assertEquals(-1, mContactSyncEngine.getNextRunTime());
// force a first time sync
mContactSyncEngine.addUiStartFullSync();
nextRuntime = mContactSyncEngine.getNextRunTime();
// next runtime should be now
assertEquals(0, nextRuntime);
// perform the first time sync
mContactSyncEngine.run();
// check that first time sync is completed
assertEquals(ServiceUiRequest.UI_REQUEST_COMPLETE.ordinal(), uiEventCall.event);
assertEquals(uiEventCall.status, ServiceStatus.SUCCESS.ordinal());
// check that a thumbnail sync is scheduled for now
nextRuntime = mContactSyncEngine.getNextRunTime();
assertEquals(0, nextRuntime);
// reset the processor logs
processorLogs.clear();
// get the thumbnail sync to be run
mContactSyncEngine.run();
// check processor calls
ProcessorLog log;
assertEquals(2, processorLogs.size());
log = processorLogs.get(0);
assertEquals(ProcessorFactory.DOWNLOAD_SERVER_THUMBNAILS, log.type);
log = processorLogs.get(1);
assertEquals(ProcessorFactory.UPLOAD_SERVER_THUMBNAILS, log.type);
// check that native sync is scheduled for now
nextRuntime = mContactSyncEngine.getNextRunTime();
assertEquals(0, nextRuntime);
// reset the processor logs
processorLogs.clear();
// get the native sync to be run
mContactSyncEngine.run();
// check processor calls
assertEquals(1, processorLogs.size());
log = processorLogs.get(0);
assertEquals(ProcessorFactory.UPDATE_NATIVE_CONTACTS, log.type);
// reset the processor logs
processorLogs.clear();
// request a full sync
mContactSyncEngine.addUiStartFullSync();
nextRuntime = mContactSyncEngine.getNextRunTime();
// next runtime should be now
assertEquals(0, nextRuntime);
// perform the full sync
mContactSyncEngine.run();
// check that first time sync is completed
assertEquals(ServiceUiRequest.UI_REQUEST_COMPLETE.ordinal(), uiEventCall.event);
assertEquals(uiEventCall.status, ServiceStatus.SUCCESS.ordinal());
// get the thumbnail sync to be run
mContactSyncEngine.run();
// get the native sync to be run
mContactSyncEngine.run();
// get the thumbnail sync to be run
mContactSyncEngine.run();
// check nothing to be done
nextRuntime = mContactSyncEngine.getNextRunTime();
assertEquals(-1, nextRuntime);
// fake a database change notification
Handler handler = getContactSyncEngineHandler(mContactSyncEngine);
Message msg = new Message();
msg.what = ServiceUiRequest.DATABASE_CHANGED_EVENT.ordinal();
msg.arg1 = DatabaseHelper.DatabaseChangeType.CONTACTS.ordinal();
msg.arg2 = 0;
handler.sendMessage(msg);
final Looper looper = Looper.myLooper();
final MessageQueue queue = Looper.myQueue();
queue.addIdleHandler(new MessageQueue.IdleHandler() {
@Override
public boolean queueIdle() {
// message has been processed and the looper is now in idle
// state
// quit the loop() otherwise we would not be able to carry on
looper.quit();
return false;
}
});
// get the message processed by the thread event loop
Looper.loop();
// check sync is scheduled within 30 seconds
nextRuntime = mContactSyncEngine.getNextRunTime();
assertTrue(isValueInsideErrorMargin(30000, nextRuntime - System.currentTimeMillis(), 5));
final long timeBeforeWait = System.currentTimeMillis();
// reset the processor logs
processorLogs.clear();
// call run() and check that nothing is performed
mContactSyncEngine.run();
assertEquals(0, processorLogs.size());
// wait until we get the nextRuntime to now
boolean isNextRuntimeNow = false;
while (!isNextRuntimeNow) {
try {
long timeToWait = mContactSyncEngine.getNextRunTime();
timeToWait = (timeToWait <= 0) ? 0 : timeToWait - System.currentTimeMillis();
if (timeToWait > 0) {
synchronized (this) {
Log.i(LOG_TAG, "timeToWait=" + timeToWait);
wait(timeToWait);
}
}
if (mContactSyncEngine.getNextRunTime() < System.currentTimeMillis()) {
isNextRuntimeNow = true;
}
} catch (Exception e) {
Log.e(LOG_TAG, "testAllSyncs(): error while waiting for the runtime now");
}
}
long timeAfterWait = System.currentTimeMillis();
// check that we have waited about 30 seconds
assertTrue(isValueInsideErrorMargin(timeAfterWait - timeBeforeWait, 30000, 5));
// call run() until the sync is performed
final long startTime = System.currentTimeMillis();
while (processorLogs.size() < 7) {
if (System.currentTimeMillis() - startTime > TEST_TIMEOUT) {
fail("It seems that the engine is stuck, the processor logs should contain 7 objects by now!");
}
mContactSyncEngine.run();
}
// check processor calls
assertEquals(6, processorLogs.size());
log = processorLogs.get(0);
assertEquals(ProcessorFactory.DOWNLOAD_SERVER_CONTACTS, log.type);
log = processorLogs.get(1);
assertEquals(ProcessorFactory.UPLOAD_SERVER_CONTACTS, log.type);
log = processorLogs.get(2);
assertEquals(ProcessorFactory.DOWNLOAD_SERVER_THUMBNAILS, log.type);
log = processorLogs.get(3);
assertEquals(ProcessorFactory.UPLOAD_SERVER_THUMBNAILS, log.type);
log = processorLogs.get(4);
assertEquals(ProcessorFactory.SYNC_ME_PROFILE, log.type);
log = processorLogs.get(5);
assertEquals(ProcessorFactory.UPDATE_NATIVE_CONTACTS, log.type);
Log.i(LOG_TAG, "**** testAllSyncs() end ****");
}
use of com.vodafone360.people.service.io.Request in project 360-Engine-for-Android by 360.
the class ContactSyncEngineTest method testIsFirstTimeSyncComplete.
/**
* Checks the the method isFirstTimeSyncComplete() returns the correct
* values.
*/
@Suppress
public // Breaks tests.
void testIsFirstTimeSyncComplete() {
Log.i(LOG_TAG, "**** testIsFirstTimeSyncComplete() begin ****");
final UiEventCall uiEventCall = new UiEventCall();
final IEngineEventCallback engineEventCallback = new HelperClasses.EngineCallbackBase() {
@Override
public void onUiEvent(ServiceUiRequest event, int request, int status, Object data) {
Log.i(LOG_TAG, "onUiEvent: " + event + ", " + request + ", " + status + ", " + data);
uiEventCall.event = event.ordinal();
uiEventCall.request = request;
uiEventCall.status = status;
uiEventCall.data = data;
}
};
final ProcessorFactory factory = new ProcessorFactory() {
@Override
public BaseSyncProcessor create(int type, IContactSyncCallback callback, DatabaseHelper dbHelper) {
Log.i(LOG_TAG, "create(), type=" + type);
return new DummySyncProcessor(mContactSyncEngine, null);
}
};
minimalEngineSetup(engineEventCallback, factory);
NetworkAgent.setAgentState(NetworkAgent.AgentState.CONNECTED);
long nextRuntime = mContactSyncEngine.getNextRunTime();
// should be equal to -1 because first time sync has not been yet
// started
assertEquals(-1, nextRuntime);
// set the connection to be fine
NetworkAgent.setAgentState(AgentState.CONNECTED);
// first time sync has not been done yet
assertEquals(false, mContactSyncEngine.isFirstTimeSyncComplete());
// ask for a full sync
mContactSyncEngine.addUiStartFullSync();
nextRuntime = mContactSyncEngine.getNextRunTime();
assertEquals(0, nextRuntime);
// first time sync has still not been done yet
assertEquals(false, mContactSyncEngine.isFirstTimeSyncComplete());
mContactSyncEngine.run();
// check that first time sync is completed
assertEquals(ServiceUiRequest.UI_REQUEST_COMPLETE.ordinal(), uiEventCall.event);
assertEquals(uiEventCall.status, ServiceStatus.SUCCESS.ordinal());
// first time sync has been done
assertEquals(true, mContactSyncEngine.isFirstTimeSyncComplete());
Log.i(LOG_TAG, "**** testIsFirstTimeSyncComplete() end ****");
}
use of com.vodafone360.people.service.io.Request in project 360-Engine-for-Android by 360.
the class ContactSyncEngineTest method testNativeSync_newEngineInstantiation.
/**
* Tests that the native sync is scheduled and performed after a first time
* sync then a re-instantiation of the ContactSyncEngine.
*/
@Suppress
public // Breaks tests.
void testNativeSync_newEngineInstantiation() {
Log.i(LOG_TAG, "**** testNativeSync_newEngineInstantiation() begin ****");
final ArrayList<ProcessorLog> processorLogs = new ArrayList<ProcessorLog>();
final UiEventCall uiEventCall = new UiEventCall();
final IEngineEventCallback engineEventCallback = new HelperClasses.EngineCallbackBase() {
@Override
public void onUiEvent(ServiceUiRequest event, int request, int status, Object data) {
Log.i(LOG_TAG, "onUiEvent: " + event + ", " + request + ", " + status + ", " + data);
uiEventCall.event = event.ordinal();
uiEventCall.request = request;
uiEventCall.status = status;
uiEventCall.data = data;
}
};
final ProcessorFactory factory = new ProcessorFactory() {
@Override
public BaseSyncProcessor create(int type, IContactSyncCallback callback, DatabaseHelper dbHelper) {
Log.i(LOG_TAG, "create(), type=" + type);
ProcessorLog log = new ProcessorLog();
log.type = type;
log.time = System.currentTimeMillis();
processorLogs.add(log);
return new DummySyncProcessor(mContactSyncEngine, null);
}
};
minimalEngineSetup(engineEventCallback, factory);
// set the connection to be fine
NetworkAgent.setAgentState(NetworkAgent.AgentState.CONNECTED);
long nextRuntime = mContactSyncEngine.getNextRunTime();
// should be equal to -1 because first time sync has not been yet
// started
assertEquals(-1, mContactSyncEngine.getNextRunTime());
// force a first time sync
mContactSyncEngine.addUiStartFullSync();
nextRuntime = mContactSyncEngine.getNextRunTime();
// next runtime should be now
assertEquals(0, nextRuntime);
// perform the first time sync
mContactSyncEngine.run();
// check that first time sync is completed
assertEquals(ServiceUiRequest.UI_REQUEST_COMPLETE.ordinal(), uiEventCall.event);
assertEquals(uiEventCall.status, ServiceStatus.SUCCESS.ordinal());
// destroy the engine
mContactSyncEngine.onDestroy();
mContactSyncEngine = null;
// create a new ContactSyncEngine
minimalEngineSetup(engineEventCallback, factory);
processorLogs.clear();
// check sync is scheduled within 30 seconds
nextRuntime = mContactSyncEngine.getNextRunTime();
assertTrue(isValueInsideErrorMargin(30000, nextRuntime - System.currentTimeMillis(), 5));
final long timeBeforeWait = System.currentTimeMillis();
// call run() and check that nothing is performed
mContactSyncEngine.run();
assertEquals(0, processorLogs.size());
// wait until we get the nextRuntime to now
boolean isNextRuntimeNow = false;
while (!isNextRuntimeNow) {
try {
long timeToWait = mContactSyncEngine.getNextRunTime();
timeToWait = (timeToWait <= 0) ? 0 : timeToWait - System.currentTimeMillis();
if (timeToWait > 0) {
synchronized (this) {
Log.i(LOG_TAG, "timeToWait=" + timeToWait);
wait(timeToWait);
}
}
if (mContactSyncEngine.getNextRunTime() < System.currentTimeMillis()) {
isNextRuntimeNow = true;
}
} catch (Exception e) {
Log.e(LOG_TAG, "testAllSyncsAfterFirstTimeSync(): error while waiting for the runtime now");
}
}
long timeAfterWait = System.currentTimeMillis();
// check that we have waited about 30 seconds
assertTrue(isValueInsideErrorMargin(timeAfterWait - timeBeforeWait, 30000, 5));
// call run() until the sync is performed
final long startTime = System.currentTimeMillis();
while (processorLogs.size() < 3) {
if (System.currentTimeMillis() - startTime > TEST_TIMEOUT) {
fail("It seems that the engine is stuck, the processor logs should contain 3 objects by now!");
}
mContactSyncEngine.run();
}
// check processor calls
ProcessorLog log;
assertEquals(3, processorLogs.size());
log = processorLogs.get(0);
assertEquals(ProcessorFactory.FETCH_NATIVE_CONTACTS, log.type);
log = processorLogs.get(1);
assertEquals(ProcessorFactory.UPLOAD_SERVER_CONTACTS, log.type);
log = processorLogs.get(2);
assertEquals(ProcessorFactory.UPDATE_NATIVE_CONTACTS, log.type);
Log.i(LOG_TAG, "**** testNativeSync_newEngineInstantiation() end ****");
}
use of com.vodafone360.people.service.io.Request in project 360-Engine-for-Android by 360.
the class BaseEngine method processCommsInQueue.
/**
* Should be called by the run() function to process the comms in queue.
* Calling this function will result in the processCommsResponse function
* being called once. The derived engine implementation should do its
* processing of each response in that function. If the engine set the
* request ID using the setReqId function then messages which don't match
* will be taken off the queue and deleted.
*
* @return true if a response was taken from the queue and processed.
*/
protected boolean processCommsInQueue() {
final ResponseQueue queue = ResponseQueue.getInstance();
if (queue != null) {
final ResponseQueue.DecodedResponse resp = queue.getNextResponse(mEngineId);
if (resp == null) {
mCommsResponseOutstanding = false;
return false;
}
boolean processResponse = false;
if (resp.mReqId == null || mActiveRequestId == null) {
processResponse = true;
} else if (mActiveRequestId.equals(resp.mReqId)) {
mActiveRequestId = null;
processResponse = true;
}
if (processResponse) {
processCommsResponse(resp);
}
return processResponse;
} else {
throw new RuntimeException("BaseEngine.processCommsInQueue - ResponseQueue cannot be null");
}
}
use of com.vodafone360.people.service.io.Request in project 360-Engine-for-Android by 360.
the class ActivitiesEngine method handleGetActivitiesResponse.
/**
* Handle GetActivities response message received from Server
*
* @param reqId Request ID contained in response. This should match an ID of
* a request we have issued to the Server.
* @param data List array of ActivityItem items returned from Server.
*/
private void handleGetActivitiesResponse(List<BaseDataType> data) {
/**
* Array of Activities retrieved from Server.
*/
ArrayList<ActivityItem> activityList = new ArrayList<ActivityItem>();
ServiceStatus errorStatus = getResponseStatus(BaseDataType.ACTIVITY_ITEM_DATA_TYPE, data);
LogUtils.logE("ActivityEngine.handleGetActivitiesResponse status from generic = " + errorStatus);
if (ServiceStatus.SUCCESS == errorStatus) {
for (BaseDataType item : data) {
if (item.getType() == BaseDataType.ACTIVITY_ITEM_DATA_TYPE) {
activityList.add((ActivityItem) item);
} else {
LogUtils.logE("ActivityEngine.handleGetActivitiesResponse will not handle strange type = " + item.getType());
}
}
errorStatus = updateDatabase(activityList);
// we set timeout for the next execution
}
// this method will then call completeUiRequest(status, null);
onSyncHelperComplete(errorStatus);
}
Aggregations