package org.webpieces.httpparser.api.simulations;
import java.io.InputStream;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
import org.junit.Assert;
import org.junit.Test;
import org.webpieces.data.api.BufferCreationPool;
import org.webpieces.data.api.DataWrapper;
import org.webpieces.data.api.DataWrapperGenerator;
import org.webpieces.data.api.DataWrapperGeneratorFactory;
import org.webpieces.httpparser.api.HttpParser;
import org.webpieces.httpparser.api.HttpParserFactory;
import org.webpieces.httpparser.api.Memento;
import org.webpieces.httpparser.api.common.KnownHeaderName;
import org.webpieces.httpparser.api.dto.HttpChunk;
import org.webpieces.httpparser.api.dto.HttpLastChunk;
import org.webpieces.httpparser.api.dto.HttpPayload;
import org.webpieces.httpparser.api.dto.HttpResponse;
import org.webpieces.recording.api.Playback;
import org.webpieces.recording.api.RecordingPlaybackFactory;
public class TestGooglePlayback {
private HttpParser parser = HttpParserFactory.createParser(new BufferCreationPool());
private DataWrapperGenerator dataGen = DataWrapperGeneratorFactory.createDataWrapperGenerator();
@Test
public void testGooglePlayback() {
List<HttpPayload> results = runPlayback("google.com.11015.recording");
Assert.assertEquals(3, results.size());
HttpResponse resp = (HttpResponse) results.get(0);
HttpChunk chunk = (HttpChunk) results.get(1);
HttpLastChunk lastChunk = (HttpLastChunk) results.get(2);
Assert.assertEquals("chunked", resp.getHeaderLookupStruct().getHeader(KnownHeaderName.TRANSFER_ENCODING).getValue());
Assert.assertEquals(10349, chunk.getBody().getReadableSize());
Assert.assertTrue(lastChunk.isLastChunk());
}
@Test
public void testHttpsGooglePlayback() {
List<HttpPayload> results = runPlayback("https.google.com.recording");
Assert.assertEquals(3, results.size());
HttpResponse resp = (HttpResponse) results.get(0);
HttpChunk chunk = (HttpChunk) results.get(1);
HttpLastChunk lastChunk = (HttpLastChunk) results.get(2);
Assert.assertEquals("chunked", resp.getHeaderLookupStruct().getHeader(KnownHeaderName.TRANSFER_ENCODING).getValue());
Assert.assertEquals(10396, chunk.getBody().getReadableSize());
Assert.assertTrue(lastChunk.isLastChunk());
}
private List<HttpPayload> runPlayback(String name) {
Memento mem = parser.prepareToParse();
int counter = 0;
ClassLoader cl = getClass().getClassLoader();
InputStream in = cl.getResourceAsStream(name);
//This loads relative to this test class package(while the above does not).
//InputStream in = getClass().getResourceAsStream(name);
Playback playback = RecordingPlaybackFactory.createPlayback(in, 1);
List<HttpPayload> results = new ArrayList<>();
while(true) {
counter++;
if(counter > 1000)
throw new IllegalArgumentException("Is your simulation really this long...1000+ buffers?");
ByteBuffer buffer = playback.getNextPacket();
if(buffer == null)
return results;
DataWrapper data = dataGen.wrapByteBuffer(buffer);
mem = parser.parse(mem, data);
List<HttpPayload> parsedMessages = mem.getParsedMessages();
results.addAll(parsedMessages);
}
}
}