/*
* Copyright (c) 2015-present, Parse, LLC.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
package com.parse;
import org.junit.Test;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
public class ParseCountingByteArrayHttpBodyTest {
@Test
public void testWriteTo() throws IOException, InterruptedException {
byte[] content = getData();
String contentType = "application/json";
final Semaphore didReportIntermediateProgress = new Semaphore(0);
final Semaphore finish = new Semaphore(0);
ParseCountingByteArrayHttpBody body = new ParseCountingByteArrayHttpBody(
content, contentType, new ProgressCallback() {
Integer maxProgressSoFar = 0;
@Override
public void done(Integer percentDone) {
if (percentDone > maxProgressSoFar) {
maxProgressSoFar = percentDone;
assertTrue(percentDone >= 0 && percentDone <= 100);
if (percentDone < 100 && percentDone > 0) {
didReportIntermediateProgress.release();
} else if (percentDone == 100) {
finish.release();
} else if (percentDone == 0) {
// do nothing
} else {
fail("percentDone should be within 0 - 100");
}
}
}
});
ByteArrayOutputStream output = new ByteArrayOutputStream();
body.writeTo(output);
// Check content
assertTrue(Arrays.equals(content, output.toByteArray()));
// Check progress callback
assertTrue(didReportIntermediateProgress.tryAcquire(5, TimeUnit.SECONDS));
assertTrue(finish.tryAcquire(5, TimeUnit.SECONDS));
}
private static byte[] getData() {
char[] chars = new char[64 << 14]; // 1MB
Arrays.fill(chars, '1');
return new String(chars).getBytes();
}
}