commit fa80fff479cfd10359283e4e40e23b59bc109b50 Author: iwakeh iwakeh@torproject.org Date: Tue Jan 9 09:25:13 2018 +0000
Avoid adding superfluous brackets in suggestion links.
Also add a test checking for superfluous brackets. Fixes task-26032. --- .../metrics/exonerator/ExoneraTorServlet.java | 8 +-- .../metrics/exonerator/ExoneraTorServletTest.java | 58 ++++++++++++++++++++++ 2 files changed, 62 insertions(+), 4 deletions(-)
diff --git a/src/main/java/org/torproject/metrics/exonerator/ExoneraTorServlet.java b/src/main/java/org/torproject/metrics/exonerator/ExoneraTorServlet.java index 8f114eb..659f494 100644 --- a/src/main/java/org/torproject/metrics/exonerator/ExoneraTorServlet.java +++ b/src/main/java/org/torproject/metrics/exonerator/ExoneraTorServlet.java @@ -466,7 +466,7 @@ public class ExoneraTorServlet extends HttpServlet { contactLink); }
- private void writeSummaryAddressesInSameNetwork(PrintWriter out, + void writeSummaryAddressesInSameNetwork(PrintWriter out, ResourceBundle rb, String relayIp, String timestampStr, String langStr, List<String> addressesInSameNetwork) throws IOException { Object[][] panelItems = new Object[addressesInSameNetwork.size()][]; @@ -475,10 +475,10 @@ public class ExoneraTorServlet extends HttpServlet { String link; String address; if (addressInSameNetwork.contains(":")) { + address = addressInSameNetwork.replaceAll("[\[\]]", ""); link = String.format("/?ip=[%s]×tamp=%s&lang=%s", - addressInSameNetwork.replaceAll(":", "%3A"), timestampStr, - langStr); - address = "[" + addressInSameNetwork + "]"; + address.replaceAll(":", "%3A"), timestampStr, langStr); + address = "[" + address + "]"; } else { link = String.format("/?ip=%s×tamp=%s&lang=%s", addressInSameNetwork, timestampStr, langStr); diff --git a/src/test/java/org/torproject/metrics/exonerator/ExoneraTorServletTest.java b/src/test/java/org/torproject/metrics/exonerator/ExoneraTorServletTest.java index 81d6d3c..34dfd42 100644 --- a/src/test/java/org/torproject/metrics/exonerator/ExoneraTorServletTest.java +++ b/src/test/java/org/torproject/metrics/exonerator/ExoneraTorServletTest.java @@ -4,9 +4,17 @@ package org.torproject.metrics.exonerator;
import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue;
import org.junit.Test;
+import java.io.PrintWriter; +import java.io.StringReader; +import java.io.StringWriter; +import java.util.Arrays; +import java.util.Locale; +import java.util.ResourceBundle; + public class ExoneraTorServletTest {
private static final String[][] ipTestData @@ -32,5 +40,55 @@ public class ExoneraTorServletTest { assertEquals(data[1], ExoneraTorServlet.parseIpParameter(data[0])); } } + + @Test + public void testNearbyIpV6Response() throws Exception { + ExoneraTorServlet es = new ExoneraTorServlet(); + ResourceBundle rb = ResourceBundle + .getBundle("ExoneraTor", Locale.forLanguageTag("en")); + for (QueryResponse qr : qrs) { + StringWriter sw = new StringWriter(); + es.writeSummaryAddressesInSameNetwork(new PrintWriter(sw), rb, + qr.queryAddress, qr.queryDate, "en", + Arrays.asList(qr.nearbyAddresses)); + String errorMsg = "Test data:" + QueryResponse.toJson(qr) + + "\nresult:\n" + sw.toString(); + assertTrue(errorMsg, + sw.toString().contains("Result is negative")); + assertTrue(errorMsg, + sw.toString().contains("ip=[2a06%3Ae80%3A1%3A%3A10]&")); + assertTrue(errorMsg, + sw.toString().contains("ip=[2a06%3Ae80%3A1%3A%3A15]&")); + } + } + + private QueryResponse[] qrs = new QueryResponse[]{ + QueryResponse.fromJson(new StringReader( + "{"version":"1.0"," + + ""query_address":"2a06:e80:1::11"," + + ""query_date":"2016-12-12"," + + ""first_date_in_database":"2016-01-01"," + + ""last_date_in_database":"2016-12-31"," + + ""relevant_statuses":false," + + ""nearby_addresses":["2a06:e80:1::10"," + + ""2a06:e80:1::15"]}")), + QueryResponse.fromJson(new StringReader( + "{"version":"1.0"," + + ""query_address":"2a06:e80:1::11"," + + ""query_date":"2016-12-12"," + + ""first_date_in_database":"2016-01-01"," + + ""last_date_in_database":"2016-12-31"," + + ""relevant_statuses":false," + + ""nearby_addresses":["[2a06:e80:1::10]"," + + ""2a06:e80:1::15"]}")), + QueryResponse.fromJson(new StringReader( + "{"version":"1.0"," + + ""query_address":"2a06:e80:1::11"," + + ""query_date":"2016-12-12"," + + ""first_date_in_database":"2016-01-01"," + + ""last_date_in_database":"2016-12-31"," + + ""relevant_statuses":false," + + ""nearby_addresses":["[2a06:e80:1::10]"," + + ""[2a06:e80:1::15]"]}"))}; }