package test.r2.perf.client; import com.linkedin.r2.message.stream.StreamRequest; import com.linkedin.r2.message.stream.StreamRequestBuilder; import com.linkedin.r2.message.stream.entitystream.EntityStreams; import java.util.stream.IntStream; import test.r2.perf.Generator; import test.r2.perf.PerfStreamWriter; import java.net.URI; import java.util.concurrent.atomic.AtomicInteger; import test.r2.perf.StringGenerator; /** * @auther Zhenkai Zhu */ public class StreamRequestGenerator implements Generator<StreamRequest> { private static final String HTTP_POST_METHOD = "POST"; private static final String STATIC_HEADER_PREFIX = "X-LI-HEADER-"; private final URI _uri; private final int _msgSize; private final int _numHeaders; private final AtomicInteger _msgCounter; private final String _headerContent; public StreamRequestGenerator(URI uri, int numMsgs, int msgSize, int numHeaders, int headerSize) { _uri = uri; _msgCounter = new AtomicInteger(numMsgs); _msgSize = msgSize; _numHeaders = numHeaders; _headerContent = new StringGenerator(headerSize).nextMessage(); } @Override public StreamRequest nextMessage() { if (_msgCounter.getAndDecrement() > 0) { StreamRequestBuilder builder = new StreamRequestBuilder(_uri); builder.setMethod(HTTP_POST_METHOD); for (int i = 0; i < _numHeaders; i++) { builder.setHeader(STATIC_HEADER_PREFIX + i, _headerContent); } return builder.build(EntityStreams.newEntityStream(new PerfStreamWriter(_msgSize))); } else { return null; } } }