[tor-commits] [metrics-lib/master] Prevent disappearance of torperf annotation.
karsten at torproject.org
karsten at torproject.org
Fri Dec 4 16:38:11 UTC 2015
commit 1e942ab15d636ca3307fe5327896afff807b52f8
Author: iwakeh <iwakeh at users.ourproject.org>
Date: Thu Nov 26 10:00:00 2015 +0000
Prevent disappearance of torperf annotation.
---
.../descriptor/impl/TorperfResultImpl.java | 12 ++-
.../descriptor/impl/TorperfResultImplTest.java | 86 ++++++++++++++++++++
2 files changed, 96 insertions(+), 2 deletions(-)
diff --git a/src/org/torproject/descriptor/impl/TorperfResultImpl.java b/src/org/torproject/descriptor/impl/TorperfResultImpl.java
index d865802..6da985f 100644
--- a/src/org/torproject/descriptor/impl/TorperfResultImpl.java
+++ b/src/org/torproject/descriptor/impl/TorperfResultImpl.java
@@ -27,6 +27,7 @@ public class TorperfResultImpl extends DescriptorImpl
List<Descriptor> parsedDescriptors = new ArrayList<Descriptor>();
String descriptorString = new String(rawDescriptorBytes);
Scanner s = new Scanner(descriptorString).useDelimiter("\n");
+ String typeAnnotation = "";
while (s.hasNext()) {
String line = s.next();
if (line.startsWith("@type torperf ")) {
@@ -40,9 +41,12 @@ public class TorperfResultImpl extends DescriptorImpl
throw new DescriptorParseException("Unsupported version in "
+ " line '" + line + "'.");
}
+ typeAnnotation = line + "\n";
} else {
- parsedDescriptors.add(new TorperfResultImpl(line.getBytes(),
+ parsedDescriptors.add(new TorperfResultImpl(
+ (typeAnnotation + line).getBytes(),
failUnrecognizedDescriptorLines));
+ typeAnnotation = "";
}
}
return parsedDescriptors;
@@ -55,8 +59,12 @@ public class TorperfResultImpl extends DescriptorImpl
this.parseTorperfResultLine(new String(rawDescriptorBytes));
}
- private void parseTorperfResultLine(String line)
+ private void parseTorperfResultLine(String inputLine)
throws DescriptorParseException {
+ String line = inputLine;
+ while (line.startsWith("@") && line.contains("\n")) {
+ line = line.split("\n")[1];
+ }
if (line.isEmpty()) {
throw new DescriptorParseException("Blank lines are not allowed.");
}
diff --git a/test/org/torproject/descriptor/impl/TorperfResultImplTest.java b/test/org/torproject/descriptor/impl/TorperfResultImplTest.java
new file mode 100644
index 0000000..be9221f
--- /dev/null
+++ b/test/org/torproject/descriptor/impl/TorperfResultImplTest.java
@@ -0,0 +1,86 @@
+/* Copyright 2015 The Tor Project
+ * See LICENSE for licensing information */
+package org.torproject.descriptor.impl;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.List;
+
+import org.junit.Test;
+import org.torproject.descriptor.Descriptor;
+
+public class TorperfResultImplTest {
+
+ @Test()
+ public void testAnnotatedInput() throws Exception{
+ TorperfResultImpl result = (TorperfResultImpl)
+ (TorperfResultImpl.parseTorperfResults((torperfAnnotation + input)
+ .getBytes("US-ASCII"), false).get(0));
+ assertEquals("Expected one annotation.", 1,
+ result.getAnnotations().size());
+ assertEquals(torperfAnnotation.substring(0, 17),
+ result.getAnnotations().get(0));
+ int count = 0;
+ for (Long l: result.getDataPercentiles().values()) {
+ assertNotNull(l);
+ assertEquals(l.longValue(), deciles[count++]);
+ }
+ }
+
+ @Test()
+ public void testPartiallyAnnotatedInput() throws Exception{
+ byte[] asciiBytes = (torperfAnnotation
+ + input + input + input).getBytes("US-ASCII");
+ List<Descriptor> result = TorperfResultImpl.parseTorperfResults(
+ asciiBytes, false);
+ assertEquals("Expected one annotation.", 1,
+ ((TorperfResultImpl)(result.get(0))).getAnnotations().size());
+ assertEquals(3, result.size());
+ assertEquals("Expected zero annotations.", 0,
+ ((TorperfResultImpl)(result.get(1))).getAnnotations().size());
+ assertEquals("Expected zero annotations.", 0,
+ ((TorperfResultImpl)(result.get(2))).getAnnotations().size());
+ }
+
+ @Test()
+ public void testAllAnnotatedInput() throws Exception{
+ byte[] asciiBytes = (torperfAnnotation + input
+ + torperfAnnotation + input
+ + torperfAnnotation + input).getBytes("US-ASCII");
+ List<Descriptor> result = TorperfResultImpl.parseTorperfResults(
+ asciiBytes, false);
+ assertEquals("Expected one annotation.", 1,
+ ((TorperfResultImpl)(result.get(0))).getAnnotations().size());
+ assertEquals(3, result.size());
+ assertEquals("Expected one annotation.", 1,
+ ((TorperfResultImpl)(result.get(1))).getAnnotations().size());
+ assertEquals("Expected one annotation.", 1,
+ ((TorperfResultImpl)(result.get(2))).getAnnotations().size());
+ }
+
+ private static long[] deciles = new long[] {
+ 1441065602980L, 1441065603030L, 1441065603090L, 1441065603120L,
+ 1441065603230L, 1441065603250L, 1441065603310L, 1441065603370L,
+ 1441065603370L };
+
+ private static final String torperfAnnotation = "@type torperf 1.0\n";
+
+ private static final String input =
+ "BUILDTIMES=0.872834920883,1.09103679657,1.49180984497 "
+ + "CIRC_ID=1228 CONNECT=1441065601.86 DATACOMPLETE=1441065603.39 "
+ + "DATAPERC10=1441065602.98 DATAPERC20=1441065603.03 "
+ + "DATAPERC30=1441065603.09 DATAPERC40=1441065603.12 "
+ + "DATAPERC50=1441065603.23 DATAPERC60=1441065603.25 "
+ + "DATAPERC70=1441065603.31 DATAPERC80=1441065603.37 "
+ + "DATAPERC90=1441065603.37 DATAREQUEST=1441065602.38 "
+ + "DATARESPONSE=1441065602.84 DIDTIMEOUT=0 FILESIZE=51200 "
+ + "LAUNCH=1441065361.30 NEGOTIATE=1441065601.86 "
+ + "PATH=$C4C9C332D25B3546BEF4E1250CF410E97EF996E6,"
+ + "$C43FA6474A9F071E9120DF63ED6EB8FDBA105234,"
+ + "$7C0AA4E3B73E407E9F5FEB1912F8BE26D8AA124D QUANTILE=0.800000 "
+ + "READBYTES=51416 REQUEST=1441065601.86 RESPONSE=1441065602.38 "
+ + "SOCKET=1441065601.86 SOURCE=moria START=1441065601.86 "
+ + "TIMEOUT=1500 USED_AT=1441065603.40 USED_BY=2475 WRITEBYTES=75\n";
+}
+
More information about the tor-commits
mailing list