/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
package org.mozilla.android.sync.net.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.IOException;
import java.io.PrintStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import org.junit.Test;
import org.mozilla.android.sync.test.helpers.HTTPServerTestHelper;
import org.mozilla.android.sync.test.helpers.MockServer;
import org.mozilla.gecko.sync.Logger;
import org.mozilla.gecko.sync.net.BaseResource;
import org.mozilla.gecko.sync.net.SyncStorageCollectionRequest;
import org.mozilla.gecko.sync.net.SyncStorageCollectionRequestDelegate;
import org.mozilla.gecko.sync.net.SyncStorageResponse;
import org.simpleframework.http.Request;
import org.simpleframework.http.Response;
public class TestLineByLineHandling {
private static final int TEST_PORT = HTTPServerTestHelper.getTestPort();
private static final String TEST_SERVER = "http://localhost:" + TEST_PORT;
private static final String LOG_TAG = "TestLineByLineHandling";
static String STORAGE_URL = TEST_SERVER + "/1.1/c6o7dvmr2c4ud2fyv6woz2u4zi22bcyd/storage/lines";
private HTTPServerTestHelper data = new HTTPServerTestHelper();
public ArrayList<String> lines = new ArrayList<String>();
public class LineByLineMockServer extends MockServer {
public void handle(Request request, Response response) {
try {
System.out.println("Handling line-by-line request...");
PrintStream bodyStream = this.handleBasicHeaders(request, response, 200, "application/newlines");
bodyStream.print("First line.\n");
bodyStream.print("Second line.\n");
bodyStream.print("Third line.\n");
bodyStream.print("Fourth line.\n");
bodyStream.close();
} catch (IOException e) {
System.err.println("Oops.");
}
}
}
public class BaseLineByLineDelegate extends
SyncStorageCollectionRequestDelegate {
@Override
public void handleRequestProgress(String progress) {
lines.add(progress);
}
@Override
public String credentials() {
return null;
}
@Override
public String ifUnmodifiedSince() {
return null;
}
@Override
public void handleRequestSuccess(SyncStorageResponse res) {
Logger.info(LOG_TAG, "Request success.");
assertTrue(res.wasSuccessful());
assertTrue(res.httpResponse().containsHeader("X-Weave-Timestamp"));
assertEquals(lines.size(), 4);
assertEquals(lines.get(0), "First line.");
assertEquals(lines.get(1), "Second line.");
assertEquals(lines.get(2), "Third line.");
assertEquals(lines.get(3), "Fourth line.");
data.stopHTTPServer();
}
@Override
public void handleRequestFailure(SyncStorageResponse response) {
Logger.info(LOG_TAG, "Got request failure: " + response);
BaseResource.consumeEntity(response);
fail("Should not be called.");
}
@Override
public void handleRequestError(Exception ex) {
Logger.error(LOG_TAG, "Got request error: ", ex);
fail("Should not be called.");
}
}
@Test
public void testLineByLine() throws URISyntaxException {
BaseResource.rewriteLocalhost = false;
data.startHTTPServer(new LineByLineMockServer());
Logger.info(LOG_TAG, "Server started.");
SyncStorageCollectionRequest r = new SyncStorageCollectionRequest(new URI(STORAGE_URL));
SyncStorageCollectionRequestDelegate delegate = new BaseLineByLineDelegate();
r.delegate = delegate;
r.get();
// Server is stopped in the callback.
}
}