package com.samknows.tests;
// NOTE: This code is written as Pure Java.
// It is possible to modify it to have Android-specific calls.
// Look at the static methods at the top of the class, for the commented-out Android-specific
// code that can be re-enabled if required in HttpTest.java
import com.samknows.libcore.SKPorting;
import java.util.List;
import java.util.Random;
public abstract class UploadTest extends HttpTest {
//
// END: code that you can make behave differently if you so wish on Android...
//
protected double bitrateMpbs1024Based = -1.0; /* ???? Scale coefficient */
protected byte[] buff; /* buffer to send values */
protected UploadTest(List<Param> params) {
super(_UPSTREAM, params);
this.init();
}
public static UploadTest sCreateUploadTest(List<Param> params) {
UploadStrategy uploadStrategyServerBased = UploadStrategy.PASSIVE;
UploadTest result = null;
for (Param param : params) {
if (param.contains(TestFactory.UPLOADSTRATEGY)) {
uploadStrategyServerBased = UploadStrategy.ACTIVE;
break;
}
}
if (uploadStrategyServerBased == UploadStrategy.ACTIVE) {
result = ActiveServerUploadTest.sCreateActiveServerUploadTest(params);
} else {
result = PassiveServerUploadTest.sCreatePassiveServerUploadTest(params);
}
if (result != null) {
if (result.isReady()) {
return result;
} else {
SKPorting.sAssert(false);
return null;
}
} else {
SKPorting.sAssert(false);
}
return result;
}
private String[] formValuesArr() {
String[] values = new String[1];
values = new String[1];
values[0] = String.format("%.2f", (Math.max(0, getTransferBytesPerSecond()) * 8d / 1000000));
return values;
}
private void init() { /* don't forget to check error state after this method */
/* getSocket() is a method from the parent class */
int maxSendDataChunkSize = 32768;
// Generate this value in case we need it.
// It is a random value from [0...2^32-1]
Random sRandom = new Random(); /* Used for initialisation of upload array */
if (getUploadBufferSize() > 0 && getUploadBufferSize() <= maxSendDataChunkSize) {
buff = new byte[getUploadBufferSize()];
} else {
buff = new byte[maxSendDataChunkSize];
SKPorting.sAssert(getClass(), false);
}
if (getRandomEnabled()) { /* randomEnabled comes from the parent (HTTPTest) class */
sRandom = new Random(); /* Used for initialisation of upload array */
sRandom.nextBytes(buff);
}
}
@Override
public String getStringID() {
String ret = "";
if (getThreadsNum() == 1) {
ret = UPSTREAMSINGLE;
} else {
ret = UPSTREAMMULTI;
}
return ret;
}
@Override
public int getNetUsage() {
return (int) (getTotalTransferBytes() + getTotalWarmUpBytes());
}
@Override
public boolean isReady() {
super.isReady();
if (getUploadBufferSize() == 0 || getPostDataLength() == 0) {
setError("Upload parameter missing");
return false;
}
return true;
}
}