package org.webpieces.httpfrontend2.api.mock2; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; import org.webpieces.frontend2.api.FrontendStream; import org.webpieces.frontend2.api.HttpRequestListener; import org.webpieces.frontend2.api.Protocol; import org.webpieces.mock.MethodEnum; import org.webpieces.mock.MockSuperclass; import org.webpieces.mock.ParametersPassedIn; import com.webpieces.hpack.api.dto.Http2Headers; import com.webpieces.http2engine.api.StreamWriter; import com.webpieces.http2parser.api.dto.RstStreamFrame; public class MockHttp2RequestListener extends MockSuperclass implements HttpRequestListener { private enum Method implements MethodEnum { INCOMING, CANCEL } public static class Cancel { public FrontendStream stream; public RstStreamFrame reset; public Cancel(FrontendStream stream, RstStreamFrame reset) { super(); this.stream = stream; this.reset = reset; } } public static class PassedIn { public FrontendStream stream; public Http2Headers request; public Protocol type; public PassedIn(FrontendStream stream, Http2Headers headers, Protocol type) { super(); this.stream = stream; this.request = headers; this.type = type; } } @Override public StreamWriter incomingRequest(FrontendStream stream, Http2Headers headers, Protocol type) { return (StreamWriter) super.calledMethod(Method.INCOMING, new PassedIn(stream, headers, type)); } public void setDefaultRetVal(StreamWriter writer) { super.setDefaultReturnValue(Method.INCOMING, writer); } public int getNumRequestsThatCameIn() { return super.getCalledMethodList(Method.INCOMING).size(); } public PassedIn getSingleRequest() { List<ParametersPassedIn> list = super.getCalledMethodList(Method.INCOMING); if(list.size() != 1) throw new IllegalArgumentException("method was not called exactly once. numTimes="+list.size()); return (PassedIn) list.get(0).getArgs()[0]; } @Override public void cancelRequest(FrontendStream stream, RstStreamFrame c) { super.calledVoidMethod(Method.CANCEL, new Cancel(stream, c)); } @SuppressWarnings("unchecked") public List<Cancel> getCancels() { Stream<ParametersPassedIn> calledMethodList = super.getCalledMethods(Method.CANCEL); Stream<Cancel> retVal = calledMethodList.map(p -> (Cancel)p.getArgs()[0]); return retVal.collect(Collectors.toList()); } public Cancel getCancelInfo() { List<Cancel> list = getCancels(); if(list.size() != 1) throw new IllegalArgumentException("method was not called exactly once. numTimes="+list.size()); return (Cancel) list.get(0); } public int getNumCancelsThatCameIn() { return super.getCalledMethodList(Method.CANCEL).size(); } public void addMockStreamToReturn(StreamWriter writer) { super.addValueToReturn(Method.INCOMING, writer); } }