Improve IP_PATTERN in DirectRTCClient in Android AppRTC Demo

Earlier, strings like "aaaa" and "1111" would be interpreted as IP
addresses, which is not optimal. This CL improves the IP_PATTERN and
adds a test for it.

Review-Url: https://codereview.webrtc.org/2009493002
Cr-Commit-Position: refs/heads/master@{#12887}
This commit is contained in:
sakal
2016-05-25 02:26:22 -07:00
committed by Commit bot
parent 834081aadf
commit b0cf1a8916
2 changed files with 50 additions and 2 deletions

View File

@ -42,10 +42,10 @@ public class DirectRTCClient implements AppRTCClient, TCPChannelClient.TCPChanne
// IPv6
+ "\\[((([0-9a-fA-F]{1,4}:)*[0-9a-fA-F]{1,4})?::"
+ "(([0-9a-fA-F]{1,4}:)*[0-9a-fA-F]{1,4})?)\\]|"
+ "\\[(([0-9a-fA-F]{1,4}:)*[0-9a-fA-F]{1,4})\\]|"
+ "\\[(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4})\\]|"
// IPv6 without []
+ "((([0-9a-fA-F]{1,4}:)*[0-9a-fA-F]{1,4})?::(([0-9a-fA-F]{1,4}:)*[0-9a-fA-F]{1,4})?)|"
+ "(([0-9a-fA-F]{1,4}:)*[0-9a-fA-F]{1,4})|"
+ "(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4})|"
// Literals
+ "localhost"
+ ")"

View File

@ -18,6 +18,10 @@ import org.robolectric.annotation.Config;
import org.webrtc.IceCandidate;
import org.webrtc.SessionDescription;
import java.util.regex.Matcher;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.isNotNull;
@ -57,6 +61,50 @@ public class DirectRTCClientTest {
server = new DirectRTCClient(serverEvents);
}
@Test
public void testValidIpPattern() {
// Strings that should match the pattern.
final String[] ipAddresses = new String[] {
"0.0.0.0",
"127.0.0.1",
"192.168.0.1",
"0.0.0.0:8888",
"127.0.0.1:8888",
"192.168.0.1:8888",
"::",
"::1",
"2001:0db8:85a3:0000:0000:8a2e:0370:7946",
"[::]",
"[::1]",
"[2001:0db8:85a3:0000:0000:8a2e:0370:7946]",
"[::]:8888",
"[::1]:8888",
"[2001:0db8:85a3:0000:0000:8a2e:0370:7946]:8888"
};
for (String ip : ipAddresses) {
assertTrue(ip + " didn't match IP_PATTERN even though it should.",
DirectRTCClient.IP_PATTERN.matcher(ip).matches());
}
}
@Test
public void testInvalidIpPattern() {
// Strings that shouldn't match the pattern.
final String[] invalidIpAddresses = new String[] {
"Hello, World!",
"aaaa",
"1111",
"[hello world]",
"hello:world"
};
for (String invalidIp : invalidIpAddresses) {
assertFalse(invalidIp + " matched IP_PATTERN even though it shouldn't.",
DirectRTCClient.IP_PATTERN.matcher(invalidIp).matches());
}
}
@Test
public void testDirectRTCClient() {
server.connectToRoom(new AppRTCClient.RoomConnectionParameters(ROOM_URL, "0.0.0.0", LOOPBACK));