package org.webpieces.httpfrontend2.api.http2;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import org.junit.Assert;
import org.junit.Test;
import org.webpieces.httpfrontend2.api.mock2.MockHttp2RequestListener.PassedIn;
import org.webpieces.httpfrontend2.api.mock2.MockStreamWriter;
import com.webpieces.hpack.api.dto.Http2Headers;
import com.webpieces.http2engine.api.StreamWriter;
public class TestBasicHttp2Server extends AbstractHttp2Test {
@Test
public void testBasicIntegration() throws InterruptedException, ExecutionException {
MockStreamWriter mockSw = new MockStreamWriter();
mockListener.addMockStreamToReturn(mockSw );
MockStreamWriter mockSw2 = new MockStreamWriter();
mockListener.addMockStreamToReturn(mockSw2 );
Http2Headers request1 = Http2Requests.createRequest(1, true);
Http2Headers request2 = Http2Requests.createRequest(3, true);
mockChannel.write(request1);
PassedIn requestAndStream1 = mockListener.getSingleRequest();
mockChannel.write(request2);
PassedIn requestAndStream2 = mockListener.getSingleRequest();
//each stream given to webapp is a unique one....
Assert.assertTrue(requestAndStream1.stream != requestAndStream2.stream);
Assert.assertEquals(request1, requestAndStream1.request);
Assert.assertEquals(request2, requestAndStream2.request);
Assert.assertEquals(1, request1.getStreamId());
Assert.assertEquals(3, request2.getStreamId());
Http2Headers resp2 = Http2Requests.createResponse(request2.getStreamId());
CompletableFuture<StreamWriter> future = requestAndStream2.stream.sendResponse(resp2);
Assert.assertTrue(future.isDone());
Http2Headers frame2 = (Http2Headers) mockChannel.getFrameAndClear();
Assert.assertEquals(resp2, frame2);
Http2Headers resp1 = Http2Requests.createResponse(request1.getStreamId());
CompletableFuture<StreamWriter> future1 = requestAndStream1.stream.sendResponse(resp2);
Assert.assertTrue(future1.isDone());
Http2Headers frame1 = (Http2Headers) mockChannel.getFrameAndClear();
Assert.assertEquals(resp1, frame1);
}
@Test
public void testBasicUpload() {
}
@Test
public void testBasicDownload() {
}
@Test
public void testBasicPushResponse() {
}
}