Skip to content

Commit a566891

Browse files
committed
Correctly clone values provided by the setter
Fixes #1437
1 parent 4aef466 commit a566891

2 files changed

Lines changed: 42 additions & 3 deletions

File tree

src/main/java/org/java_websocket/extensions/permessage_deflate/PerMessageDeflateExtension.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,11 @@ public String getProvidedExtensionAsServer() {
330330

331331
@Override
332332
public IExtension copyInstance() {
333-
return new PerMessageDeflateExtension();
333+
PerMessageDeflateExtension clone = new PerMessageDeflateExtension();
334+
clone.setThreshold(this.getThreshold());
335+
clone.setClientNoContextTakeover(this.isClientNoContextTakeover());
336+
clone.setServerNoContextTakeover(this.isServerNoContextTakeover());
337+
return clone;
334338
}
335339

336340
/**

src/test/java/org/java_websocket/extensions/PerMessageDeflateExtensionTest.java

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,8 +191,36 @@ public void testSetClientNoContextTakeover() {
191191
@Test
192192
public void testCopyInstance() {
193193
PerMessageDeflateExtension deflateExtension = new PerMessageDeflateExtension();
194-
IExtension newDeflateExtension = deflateExtension.copyInstance();
195-
assertEquals(deflateExtension.toString(), newDeflateExtension.toString());
194+
PerMessageDeflateExtension newDeflateExtension = (PerMessageDeflateExtension)deflateExtension.copyInstance();
195+
assertEquals("PerMessageDeflateExtension", newDeflateExtension.toString());
196+
// Also check the values
197+
assertEquals(deflateExtension.getThreshold(), newDeflateExtension.getThreshold());
198+
assertEquals(deflateExtension.isClientNoContextTakeover(), newDeflateExtension.isClientNoContextTakeover());
199+
assertEquals(deflateExtension.isServerNoContextTakeover(), newDeflateExtension.isServerNoContextTakeover());
200+
// Adjust this to the factory
201+
//assertEquals(deflateExtension.getDeflater(), newDeflateExtension.getDeflater());
202+
//assertEquals(deflateExtension.getInflater(), newDeflateExtension.getInflater());
203+
204+
deflateExtension = new PerMessageDeflateExtension();
205+
deflateExtension.setThreshold(512);
206+
deflateExtension.setServerNoContextTakeover(false);
207+
deflateExtension.setClientNoContextTakeover(true);
208+
newDeflateExtension = (PerMessageDeflateExtension)deflateExtension.copyInstance();
209+
210+
assertEquals(deflateExtension.getThreshold(), newDeflateExtension.getThreshold());
211+
assertEquals(deflateExtension.isClientNoContextTakeover(), newDeflateExtension.isClientNoContextTakeover());
212+
assertEquals(deflateExtension.isServerNoContextTakeover(), newDeflateExtension.isServerNoContextTakeover());
213+
214+
215+
deflateExtension = new PerMessageDeflateExtension();
216+
deflateExtension.setThreshold(64);
217+
deflateExtension.setServerNoContextTakeover(true);
218+
deflateExtension.setClientNoContextTakeover(false);
219+
newDeflateExtension = (PerMessageDeflateExtension)deflateExtension.copyInstance();
220+
221+
assertEquals(deflateExtension.getThreshold(), newDeflateExtension.getThreshold());
222+
assertEquals(deflateExtension.isClientNoContextTakeover(), newDeflateExtension.isClientNoContextTakeover());
223+
assertEquals(deflateExtension.isServerNoContextTakeover(), newDeflateExtension.isServerNoContextTakeover());
196224
}
197225

198226
@Test
@@ -222,4 +250,11 @@ public void testSetDeflater() {
222250
assertEquals(deflateExtension.getDeflater().finished(),
223251
new Deflater(Deflater.DEFAULT_COMPRESSION, false).finished());
224252
}
253+
@Test
254+
public void testDefaults() {
255+
PerMessageDeflateExtension deflateExtension = new PerMessageDeflateExtension();
256+
assertFalse(deflateExtension.isClientNoContextTakeover());
257+
assertTrue(deflateExtension.isServerNoContextTakeover());
258+
assertEquals(1024, deflateExtension.getThreshold());
259+
}
225260
}

0 commit comments

Comments
 (0)