diff --git a/okhttp-tests/src/test/java/okhttp3/internal/framed/Http2Test.java b/okhttp-tests/src/test/java/okhttp3/internal/framed/Http2Test.java index bbe771ff8268..0ae2f31c7863 100644 --- a/okhttp-tests/src/test/java/okhttp3/internal/framed/Http2Test.java +++ b/okhttp-tests/src/test/java/okhttp3/internal/framed/Http2Test.java @@ -18,6 +18,7 @@ import java.io.IOException; import java.util.Arrays; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import okhttp3.internal.Util; import okio.Buffer; import okio.BufferedSink; @@ -268,7 +269,7 @@ public void pushPromise(int streamId, int promisedStreamId, List
headerB } } - @Test public void readSettingsFrameInvalidSettingId() throws IOException { + @Test public void readSettingsFrameUnknownSettingId() throws IOException { writeMedium(frame, 6); // 2 for the code and 4 for the value frame.writeByte(Http2.TYPE_SETTINGS); frame.writeByte(Http2.FLAG_NONE); @@ -276,12 +277,13 @@ public void pushPromise(int streamId, int promisedStreamId, List
headerB frame.writeShort(7); // old number for SETTINGS_INITIAL_WINDOW_SIZE frame.writeInt(1); - try { - fr.nextFrame(new BaseTestHandler()); - fail(); - } catch (IOException e) { - assertEquals("PROTOCOL_ERROR invalid settings id: 7", e.getMessage()); - } + final AtomicInteger settingValue = new AtomicInteger(); + fr.nextFrame(new BaseTestHandler() { + @Override public void settings(boolean clearPrevious, Settings settings) { + settingValue.set(settings.get(7)); + } + }); + assertEquals(settingValue.intValue(), 1); } @Test public void readSettingsFrameNegativeWindowSize() throws IOException { diff --git a/okhttp/src/main/java/okhttp3/internal/framed/Http2.java b/okhttp/src/main/java/okhttp3/internal/framed/Http2.java index 78ca9ce79976..a6c177cc608b 100644 --- a/okhttp/src/main/java/okhttp3/internal/framed/Http2.java +++ b/okhttp/src/main/java/okhttp3/internal/framed/Http2.java @@ -294,7 +294,7 @@ private void readSettings(Handler handler, int length, byte flags, int streamId) case 6: // SETTINGS_MAX_HEADER_LIST_SIZE break; // Advisory only, so ignored. default: - throw ioException("PROTOCOL_ERROR invalid settings id: %s", id); + break; // Must ignore setting with unknown id. } settings.set(id, 0, value); }