### Question:
AsyncFrameWriter implements FrameWriter { @VisibleForTesting static Level getLogLevel(Throwable t) { if (t instanceof IOException && t.getMessage() != null && QUIET_ERRORS.contains(t.getMessage())) { return Level.FINE; } return Level.INFO; } AsyncFrameWriter(
      TransportExceptionHandler transportExceptionHandler, SerializingExecutor executor); @Override void connectionPreface(); @Override void ackSettings(final Settings peerSettings); @Override void pushPromise(final int streamId, final int promisedStreamId,
      final List<Header> requestHeaders); @Override void flush(); @Override void synStream(final boolean outFinished, final boolean inFinished, final int streamId,
      final int associatedStreamId, final List<Header> headerBlock); @Override void synReply(final boolean outFinished, final int streamId,
      final List<Header> headerBlock); @Override void headers(final int streamId, final List<Header> headerBlock); @Override void rstStream(final int streamId, final ErrorCode errorCode); @Override void data(final boolean outFinished, final int streamId, final Buffer source,
      final int byteCount); @Override void settings(final Settings okHttpSettings); @Override void ping(final boolean ack, final int payload1, final int payload2); @Override void goAway(final int lastGoodStreamId, final ErrorCode errorCode,
      final byte[] debugData); @Override void windowUpdate(final int streamId, final long windowSizeIncrement); @Override void close(); @Override int maxDataLength();  }### Answer:
@Test public void unknownException() { assertThat(getLogLevel(new Exception())).isEqualTo(Level.INFO); }
@Test public void quiet() { assertThat(getLogLevel(new IOException("Socket closed"))).isEqualTo(Level.FINE); }
@Test public void nonquiet() { assertThat(getLogLevel(new IOException("foo"))).isEqualTo(Level.INFO); }
@Test public void nullMessage() { IOException e = new IOException(); assertThat(e.getMessage()).isNull(); assertThat(getLogLevel(e)).isEqualTo(Level.INFO); }