int rv = nghttp2_submit_response(d_session.get(), streamId, hdrs, sizeof(hdrs) / sizeof(*hdrs), &dataProvider);
// cerr<<"Submitting response for stream ID "<<streamId<<": "<<rv<<endl;
BOOST_CHECK_EQUAL(rv, 0);
- /* just in case, see if we have anything to send */
- rv = nghttp2_session_send(d_session.get());
- BOOST_CHECK_EQUAL(rv, 0);
}
void submitError(uint32_t streamId, uint16_t status, const std::string& msg)
int rv = nghttp2_submit_response(d_session.get(), streamId, hdrs, sizeof(hdrs) / sizeof(*hdrs), nullptr);
BOOST_CHECK_EQUAL(rv, 0);
- /* just in case, see if we have anything to send */
- rv = nghttp2_session_send(d_session.get());
- BOOST_CHECK_EQUAL(rv, 0);
}
- void submitGoAway()
+ void submitGoAway(bool flush) const
{
int rv = nghttp2_submit_goaway(d_session.get(), NGHTTP2_FLAG_NONE, 0, NGHTTP2_INTERNAL_ERROR, nullptr, 0);
BOOST_CHECK_EQUAL(rv, 0);
- /* just in case, see if we have anything to send */
- rv = nghttp2_session_send(d_session.get());
- BOOST_CHECK_EQUAL(rv, 0);
+ if (flush) {
+ /* just in case, see if we have anything to send */
+ rv = nghttp2_session_send(d_session.get());
+ BOOST_CHECK_EQUAL(rv, 0);
+ }
}
private:
DNSName qname(reinterpret_cast<const char*>(query.data()), query.size(), sizeof(dnsheader), false);
if (qname == DNSName("goaway.powerdns.com.")) {
- conn->submitGoAway();
+ conn->submitGoAway(false);
}
else if (qname == DNSName("500.powerdns.com.") && (id % 2) == 0) {
/* we return a 500 on the first query only */
}},
/* acknowledge settings */
{ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, std::numeric_limits<size_t>::max(), [](int desc) {
- s_connectionBuffers.at(desc)->submitGoAway();
+ s_connectionBuffers.at(desc)->submitGoAway(true);
dynamic_cast<MockupFDMultiplexer*>(s_mplexer.get())->setReady(desc);
}},
{ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, std::numeric_limits<size_t>::max()},
{ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, std::numeric_limits<size_t>::max()},
/* acknowledge settings */
{ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, std::numeric_limits<size_t>::max(), [](int desc) {
- s_connectionBuffers.at(desc)->submitGoAway();
+ s_connectionBuffers.at(desc)->submitGoAway(true);
dynamic_cast<MockupFDMultiplexer*>(s_mplexer.get())->setReady(desc);
}},
{ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, std::numeric_limits<size_t>::max()},
/* later the backend sends a go away frame */
{ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, std::numeric_limits<size_t>::max(), [](int desc) {
(void)desc;
- s_connectionBuffers.at(desc)->submitGoAway();
+ s_connectionBuffers.at(desc)->submitGoAway(true);
}},
{ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
};
{ExpectedStep::ExpectedRequest::writeToBackend, IOState::Done, std::numeric_limits<size_t>::max()},
/* try to read, the backend says to go away */
{ExpectedStep::ExpectedRequest::readFromBackend, IOState::Done, std::numeric_limits<size_t>::max(), [](int desc) {
- s_connectionBuffers.at(desc)->submitGoAway();
+ s_connectionBuffers.at(desc)->submitGoAway(true);
}},
{ExpectedStep::ExpectedRequest::closeBackend, IOState::Done},
};