/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
package org.mozilla.android.sync.stage.test;
import java.io.IOException;
import java.net.URI;
import org.json.simple.parser.ParseException;
import org.mozilla.android.sync.test.AndroidSyncTestCase;
import org.mozilla.android.sync.test.helpers.RealPrefsMockGlobalSession;
import org.mozilla.gecko.sync.AlreadySyncingException;
import org.mozilla.gecko.sync.GlobalSession;
import org.mozilla.gecko.sync.NonObjectJSONException;
import org.mozilla.gecko.sync.SyncConfigurationException;
import org.mozilla.gecko.sync.crypto.CryptoException;
import org.mozilla.gecko.sync.crypto.KeyBundle;
import org.mozilla.gecko.sync.delegates.GlobalSessionCallback;
import org.mozilla.gecko.sync.net.BaseResource;
import org.mozilla.gecko.sync.stage.GlobalSyncStage.Stage;
import android.content.Context;
public class TestGlobalSession extends AndroidSyncTestCase {
public void testStageAdvance() {
assertEquals(GlobalSession.nextStage(Stage.idle), Stage.checkPreconditions);
assertEquals(GlobalSession.nextStage(Stage.completed), Stage.idle);
}
protected class HappyCallback implements GlobalSessionCallback {
int stageCounter = Stage.values().length - 1; // Exclude starting state.
public boolean calledSuccess = false;
public void handleError(GlobalSession globalSession, Exception ex) {
ex.printStackTrace();
fail("No error should occur.");
}
public void handleSuccess(GlobalSession globalSession) {
assertEquals(0, stageCounter);
calledSuccess = true;
}
public void handleStageCompleted(Stage currentState,
GlobalSession globalSession) {
stageCounter--;
}
@Override
public void requestBackoff(long backoff) {
fail("No requestBackoff.");
}
@Override
public void informNodeAuthenticationFailed(GlobalSession session, URI clusterURL) {
fail("Not expecting informNodeAuthenticationFailed.");
}
@Override
public void informNodeAssigned(GlobalSession session, URI oldClusterURL, URI newClusterURL) {
fail("Not expecting informNodeReassigned.");
}
@Override
public void informUnauthorizedResponse(GlobalSession session, URI clusterURL) {
fail("Not expecting informUnauthorizedResponse.");
}
@Override
public void informUpgradeRequiredResponse(GlobalSession session) {
fail("Not expecting informUnauthorizedResponse.");
}
@Override
public void handleAborted(GlobalSession globalSession, String reason) {
fail("Not expecting abort.");
}
@Override
public boolean shouldBackOff() {
return false;
}
@Override
public boolean wantNodeAssignment() {
return false;
}
}
public void testCallbacks() throws CryptoException, SyncConfigurationException, IllegalArgumentException, NonObjectJSONException, IOException, ParseException, AlreadySyncingException {
BaseResource.rewriteLocalhost = false;
String clusterURL = "http://localhost:8080/";
String username = "johndoe";
String password = "password";
String syncKey = "abcdeabcdeabcdeabcdeabcdea";
KeyBundle syncKeyBundle = new KeyBundle(username, syncKey);
HappyCallback callback = new HappyCallback();
Context context = getApplicationContext();
GlobalSession session = new RealPrefsMockGlobalSession(clusterURL, username, password, syncKeyBundle, callback, context);
session.start();
assertTrue(callback.calledSuccess);
}
}