Hi Nathan,
OK. I make a new patch according to your requirements. Please help to review
and check it. It passes on z/OS.
Index:
src/test/api/common/org/apache/harmony/luni/tests/java/net/SocketTest.java
===================================================================
---
src/test/api/common/org/apache/harmony/luni/tests/java/net/SocketTest.java
(revision 799973)
+++
src/test/api/common/org/apache/harmony/luni/tests/java/net/SocketTest.java
(working copy)
@@ -35,6 +35,7 @@
import java.net.SocketTimeoutException;
import java.net.UnknownHostException;
import java.security.Permission;
+import java.util.Arrays;
import java.util.Locale;
import org.apache.harmony.luni.net.PlainSocketImpl;
@@ -1506,13 +1507,13 @@
OutputStream theOutput = worker.getOutputStream();
// Send the regular data
- String sendString = new String("Test");
- theOutput.write(sendString.getBytes());
+ byte[] sendBytes = new String("Test").getBytes();
+ theOutput.write(sendBytes);
theOutput.flush();
// Send the urgent data byte which should not be received
worker.sendUrgentData("UrgentData".getBytes()[0]);
- theOutput.write(sendString.getBytes());
+ theOutput.write(sendBytes);
worker.shutdownOutput();
worker.close();
@@ -1532,10 +1533,17 @@
client.close();
server.close();
- String receivedString = new String(myBytes, 0, totalBytesRead);
- assertEquals("Urgent data was received", sendString + sendString,
- receivedString);
+ byte[] expectBytes = new byte[2 * sendBytes.length];
+ System.arraycopy(sendBytes, 0, expectBytes, 0, sendBytes.length);
+ System.arraycopy(sendBytes, 0, expectBytes, sendBytes.length,
+ sendBytes.length);
+ byte[] resultBytes = new byte[totalBytesRead];
+ System.arraycopy(myBytes, 0, resultBytes, 0, totalBytesRead);
+
+ assertTrue("Urgent data was received", Arrays.equals(expectBytes,
+ resultBytes));
+
/*
* Test 2: Now validate that urgent data is received as expected.
Expect
* that it should be between the two writes.
@@ -1552,8 +1560,8 @@
theOutput = worker.getOutputStream();
// Send the regular data
- sendString = new String("Test - Urgent Data");
- theOutput.write(sendString.getBytes());
+ sendBytes = new String("Test - Urgent Data").getBytes();
+ theOutput.write(sendBytes);
// Send the urgent data (one byte) which should be received
client.setOOBInline(true);
@@ -1561,7 +1569,7 @@
worker.sendUrgentData(urgentByte);
// Send more data, the urgent byte must stay in position
- theOutput.write(sendString.getBytes());
+ theOutput.write(sendBytes);
worker.shutdownOutput();
worker.close();
@@ -1581,12 +1589,18 @@
client.close();
server.close();
- receivedString = new String(myBytes, 0, totalBytesRead);
- assertEquals(
- "Urgent data was not received with one urgent byte",
- sendString + new String(new byte[] { urgentByte }) +
sendString,
- receivedString);
+ expectBytes = new byte[2 * sendBytes.length + 1];
+ System.arraycopy(sendBytes, 0, expectBytes, 0, sendBytes.length);
+ expectBytes[sendBytes.length] = urgentByte;
+ System.arraycopy(sendBytes, 0, expectBytes, sendBytes.length + 1,
+ sendBytes.length);
+ resultBytes = new byte[totalBytesRead];
+ System.arraycopy(myBytes, 0, resultBytes, 0, totalBytesRead);
+
+ assertTrue("Urgent data was not received with one urgent byte",
Arrays
+ .equals(expectBytes, resultBytes));
+
/*
* Test 3: Now validate that urgent data is received as expected.
Expect
* that it should be between the two writes.
@@ -1603,8 +1617,8 @@
theOutput = worker.getOutputStream();
// Send the regular data
- sendString = new String("Test - Urgent Data");
- theOutput.write(sendString.getBytes());
+ sendBytes = new String("Test - Urgent Data").getBytes();
+ theOutput.write(sendBytes);
// Send the urgent data (one byte) which should be received
client.setOOBInline(true);
@@ -1614,7 +1628,7 @@
worker.sendUrgentData(urgentByte2);
// Send more data, the urgent byte must stay in position
- theOutput.write(sendString.getBytes());
+ theOutput.write(sendBytes);
worker.shutdownOutput();
worker.close();
@@ -1634,12 +1648,19 @@
client.close();
server.close();
- receivedString = new String(myBytes, 0, totalBytesRead);
- assertEquals("Urgent data was not received with two urgent bytes",
- sendString
- + new String(new byte[] { urgentByte1, urgentByte2
})
- + sendString, receivedString);
+ expectBytes = new byte[2 * sendBytes.length + 2];
+ System.arraycopy(sendBytes, 0, expectBytes, 0, sendBytes.length);
+ expectBytes[sendBytes.length] = urgentByte1;
+ expectBytes[sendBytes.length + 1] = urgentByte2;
+ System.arraycopy(sendBytes, 0, expectBytes, sendBytes.length + 2,
+ sendBytes.length);
+ resultBytes = new byte[totalBytesRead];
+ System.arraycopy(myBytes, 0, resultBytes, 0, totalBytesRead);
+
+ assertTrue("Urgent data was not received with two urgent bytes",
Arrays
+ .equals(expectBytes, resultBytes));
+
/*
* Test 4: Now test the case where there is only urgent data.
*/