Search in sources :

Example 86 with Request

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 ****");
}
Also used : Message(android.os.Message) ArrayList(java.util.ArrayList) Handler(android.os.Handler) ServiceUiRequest(com.vodafone360.people.service.ServiceUiRequest) Looper(android.os.Looper) MessageQueue(android.os.MessageQueue) DatabaseHelper(com.vodafone360.people.database.DatabaseHelper) ProcessorFactory(com.vodafone360.people.engine.contactsync.ProcessorFactory) IContactSyncCallback(com.vodafone360.people.engine.contactsync.IContactSyncCallback) IEngineEventCallback(com.vodafone360.people.engine.IEngineEventCallback) Suppress(android.test.suitebuilder.annotation.Suppress)

Example 87 with Request

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 ****");
}
Also used : DatabaseHelper(com.vodafone360.people.database.DatabaseHelper) ServiceUiRequest(com.vodafone360.people.service.ServiceUiRequest) ProcessorFactory(com.vodafone360.people.engine.contactsync.ProcessorFactory) IContactSyncCallback(com.vodafone360.people.engine.contactsync.IContactSyncCallback) IEngineEventCallback(com.vodafone360.people.engine.IEngineEventCallback) Suppress(android.test.suitebuilder.annotation.Suppress)

Example 88 with Request

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 ****");
}
Also used : ArrayList(java.util.ArrayList) ServiceUiRequest(com.vodafone360.people.service.ServiceUiRequest) DatabaseHelper(com.vodafone360.people.database.DatabaseHelper) ProcessorFactory(com.vodafone360.people.engine.contactsync.ProcessorFactory) IContactSyncCallback(com.vodafone360.people.engine.contactsync.IContactSyncCallback) IEngineEventCallback(com.vodafone360.people.engine.IEngineEventCallback) Suppress(android.test.suitebuilder.annotation.Suppress)

Example 89 with Request

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");
    }
}
Also used : ResponseQueue(com.vodafone360.people.service.io.ResponseQueue)

Example 90 with Request

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);
}
Also used : ServiceStatus(com.vodafone360.people.service.ServiceStatus) ArrayList(java.util.ArrayList) BaseDataType(com.vodafone360.people.datatypes.BaseDataType) ActivityItem(com.vodafone360.people.datatypes.ActivityItem)

Aggregations

Request (com.vodafone360.people.service.io.Request)43 QueueManager (com.vodafone360.people.service.io.QueueManager)27 ServiceStatus (com.vodafone360.people.service.ServiceStatus)16 ArrayList (java.util.ArrayList)16 BaseDataType (com.vodafone360.people.datatypes.BaseDataType)12 ServiceUiRequest (com.vodafone360.people.service.ServiceUiRequest)12 DecodedResponse (com.vodafone360.people.service.io.ResponseQueue.DecodedResponse)11 Suppress (android.test.suitebuilder.annotation.Suppress)10 DatabaseHelper (com.vodafone360.people.database.DatabaseHelper)9 IEngineEventCallback (com.vodafone360.people.engine.IEngineEventCallback)9 IContactSyncCallback (com.vodafone360.people.engine.contactsync.IContactSyncCallback)9 ProcessorFactory (com.vodafone360.people.engine.contactsync.ProcessorFactory)9 ServerError (com.vodafone360.people.datatypes.ServerError)6 IOException (java.io.IOException)6 Identity (com.vodafone360.people.datatypes.Identity)5 ByteArrayInputStream (java.io.ByteArrayInputStream)5 Bundle (android.os.Bundle)4 AuthSessionHolder (com.vodafone360.people.datatypes.AuthSessionHolder)4 ContactChanges (com.vodafone360.people.datatypes.ContactChanges)4 ResponseQueue (com.vodafone360.people.service.io.ResponseQueue)4