tor-commits
Threads by month
- ----- 2025 -----
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
February 2017
- 14 participants
- 1811 discussions

17 Feb '17
commit 65b7327a82497dd78efb04bc16338796a4d578b0
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Thu Jan 5 15:31:42 2017 +0100
Update to latest metrics-base.
---
src/build | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/build b/src/build
index 7a01d68..bb0e1e5 160000
--- a/src/build
+++ b/src/build
@@ -1 +1 @@
-Subproject commit 7a01d68f813cb5ae2904e73dbc81999ce0622eca
+Subproject commit bb0e1e50ba75dfa15add334706d8ce288fbf2b0b
1
0
commit ed26984902e8458452bf782921a44f777e1dc78e
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Fri Jan 13 16:47:42 2017 +0100
Update copyright.
---
LICENSE | 2 +-
src/main/java/org/torproject/descriptor/BandwidthHistory.java | 2 +-
src/main/java/org/torproject/descriptor/BridgeExtraInfoDescriptor.java | 2 +-
src/main/java/org/torproject/descriptor/BridgeNetworkStatus.java | 2 +-
src/main/java/org/torproject/descriptor/BridgePoolAssignment.java | 2 +-
src/main/java/org/torproject/descriptor/BridgeServerDescriptor.java | 2 +-
src/main/java/org/torproject/descriptor/Descriptor.java | 2 +-
src/main/java/org/torproject/descriptor/DescriptorCollector.java | 2 +-
src/main/java/org/torproject/descriptor/DescriptorDownloader.java | 2 +-
src/main/java/org/torproject/descriptor/DescriptorFile.java | 2 +-
src/main/java/org/torproject/descriptor/DescriptorParseException.java | 2 +-
src/main/java/org/torproject/descriptor/DescriptorParser.java | 2 +-
src/main/java/org/torproject/descriptor/DescriptorReader.java | 2 +-
src/main/java/org/torproject/descriptor/DescriptorRequest.java | 2 +-
src/main/java/org/torproject/descriptor/DescriptorSourceFactory.java | 2 +-
src/main/java/org/torproject/descriptor/DirSourceEntry.java | 2 +-
src/main/java/org/torproject/descriptor/DirectoryKeyCertificate.java | 2 +-
src/main/java/org/torproject/descriptor/DirectorySignature.java | 2 +-
src/main/java/org/torproject/descriptor/ExitList.java | 2 +-
src/main/java/org/torproject/descriptor/ExitListEntry.java | 2 +-
src/main/java/org/torproject/descriptor/ExtraInfoDescriptor.java | 2 +-
.../org/torproject/descriptor/ImplementationNotAccessibleException.java | 2 +-
src/main/java/org/torproject/descriptor/Microdescriptor.java | 2 +-
src/main/java/org/torproject/descriptor/NetworkStatusEntry.java | 2 +-
src/main/java/org/torproject/descriptor/RelayDirectory.java | 2 +-
src/main/java/org/torproject/descriptor/RelayExtraInfoDescriptor.java | 2 +-
src/main/java/org/torproject/descriptor/RelayNetworkStatus.java | 2 +-
.../java/org/torproject/descriptor/RelayNetworkStatusConsensus.java | 2 +-
src/main/java/org/torproject/descriptor/RelayNetworkStatusVote.java | 2 +-
src/main/java/org/torproject/descriptor/RelayServerDescriptor.java | 2 +-
src/main/java/org/torproject/descriptor/RouterStatusEntry.java | 2 +-
src/main/java/org/torproject/descriptor/ServerDescriptor.java | 2 +-
src/main/java/org/torproject/descriptor/TorperfResult.java | 2 +-
src/main/java/org/torproject/descriptor/impl/BandwidthHistoryImpl.java | 2 +-
src/main/java/org/torproject/descriptor/impl/BlockingIteratorImpl.java | 2 +-
.../org/torproject/descriptor/impl/BridgeExtraInfoDescriptorImpl.java | 2 +-
.../java/org/torproject/descriptor/impl/BridgeNetworkStatusImpl.java | 2 +-
.../java/org/torproject/descriptor/impl/BridgePoolAssignmentImpl.java | 2 +-
.../java/org/torproject/descriptor/impl/BridgeServerDescriptorImpl.java | 2 +-
.../java/org/torproject/descriptor/impl/DescriptorCollectorImpl.java | 2 +-
.../java/org/torproject/descriptor/impl/DescriptorDownloaderImpl.java | 2 +-
src/main/java/org/torproject/descriptor/impl/DescriptorFileImpl.java | 2 +-
src/main/java/org/torproject/descriptor/impl/DescriptorImpl.java | 2 +-
.../java/org/torproject/descriptor/impl/DescriptorParseException.java | 2 +-
src/main/java/org/torproject/descriptor/impl/DescriptorParserImpl.java | 2 +-
src/main/java/org/torproject/descriptor/impl/DescriptorReaderImpl.java | 2 +-
src/main/java/org/torproject/descriptor/impl/DescriptorRequestImpl.java | 2 +-
src/main/java/org/torproject/descriptor/impl/DirSourceEntryImpl.java | 2 +-
src/main/java/org/torproject/descriptor/impl/DirectoryDownloader.java | 2 +-
.../org/torproject/descriptor/impl/DirectoryKeyCertificateImpl.java | 2 +-
.../java/org/torproject/descriptor/impl/DirectorySignatureImpl.java | 2 +-
src/main/java/org/torproject/descriptor/impl/DownloadCoordinator.java | 2 +-
.../java/org/torproject/descriptor/impl/DownloadCoordinatorImpl.java | 2 +-
src/main/java/org/torproject/descriptor/impl/ExitListEntryImpl.java | 2 +-
src/main/java/org/torproject/descriptor/impl/ExitListImpl.java | 2 +-
.../java/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java | 2 +-
src/main/java/org/torproject/descriptor/impl/MicrodescriptorImpl.java | 2 +-
.../java/org/torproject/descriptor/impl/NetworkStatusEntryImpl.java | 2 +-
src/main/java/org/torproject/descriptor/impl/NetworkStatusImpl.java | 2 +-
src/main/java/org/torproject/descriptor/impl/ParseHelper.java | 2 +-
src/main/java/org/torproject/descriptor/impl/RelayDirectoryImpl.java | 2 +-
.../org/torproject/descriptor/impl/RelayExtraInfoDescriptorImpl.java | 2 +-
.../org/torproject/descriptor/impl/RelayNetworkStatusConsensusImpl.java | 2 +-
.../java/org/torproject/descriptor/impl/RelayNetworkStatusImpl.java | 2 +-
.../java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java | 2 +-
.../java/org/torproject/descriptor/impl/RelayServerDescriptorImpl.java | 2 +-
src/main/java/org/torproject/descriptor/impl/RouterStatusEntryImpl.java | 2 +-
src/main/java/org/torproject/descriptor/impl/ServerDescriptorImpl.java | 2 +-
src/main/java/org/torproject/descriptor/impl/TorperfResultImpl.java | 2 +-
.../java/org/torproject/descriptor/index/DescriptorIndexCollector.java | 2 +-
src/main/java/org/torproject/descriptor/index/DirectoryNode.java | 2 +-
src/main/java/org/torproject/descriptor/index/FileNode.java | 2 +-
src/main/java/org/torproject/descriptor/index/FileType.java | 2 +-
src/main/java/org/torproject/descriptor/index/IndexNode.java | 2 +-
src/main/java/org/torproject/descriptor/index/package-info.java | 2 +-
src/main/java/org/torproject/descriptor/package-info.java | 2 +-
src/main/resources/bootstrap-development.sh | 2 +-
.../java/org/torproject/descriptor/DescriptorSourceFactoryTest.java | 2 +-
.../java/org/torproject/descriptor/benchmark/MeasurePerformance.java | 2 +-
.../java/org/torproject/descriptor/impl/BridgeNetworkStatusTest.java | 2 +-
src/test/java/org/torproject/descriptor/impl/ConsensusBuilder.java | 2 +-
.../org/torproject/descriptor/impl/DescriptorCollectorImplTest.java | 2 +-
.../java/org/torproject/descriptor/impl/DescriptorReaderImplTest.java | 2 +-
src/test/java/org/torproject/descriptor/impl/ExitListImplTest.java | 2 +-
.../org/torproject/descriptor/impl/ExtraInfoDescriptorImplTest.java | 2 +-
.../torproject/descriptor/impl/RelayNetworkStatusConsensusImplTest.java | 2 +-
.../java/org/torproject/descriptor/impl/RelayNetworkStatusImplTest.java | 2 +-
.../org/torproject/descriptor/impl/RelayNetworkStatusVoteImplTest.java | 2 +-
.../java/org/torproject/descriptor/impl/ServerDescriptorImplTest.java | 2 +-
src/test/java/org/torproject/descriptor/impl/TorperfResultImplTest.java | 2 +-
.../org/torproject/descriptor/index/DescriptorIndexCollectorTest.java | 2 +-
src/test/java/org/torproject/descriptor/index/DirectoryNodeTest.java | 2 +-
src/test/java/org/torproject/descriptor/index/FileNodeTest.java | 2 +-
src/test/java/org/torproject/descriptor/index/IndexNodeTest.java | 2 +-
94 files changed, 94 insertions(+), 94 deletions(-)
diff --git a/LICENSE b/LICENSE
index 4d723e1..97665c8 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright 2011--2016 The Tor Project
+Copyright 2011--2017 The Tor Project
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
diff --git a/src/main/java/org/torproject/descriptor/BandwidthHistory.java b/src/main/java/org/torproject/descriptor/BandwidthHistory.java
index 0be1a53..344d0df 100644
--- a/src/main/java/org/torproject/descriptor/BandwidthHistory.java
+++ b/src/main/java/org/torproject/descriptor/BandwidthHistory.java
@@ -1,4 +1,4 @@
-/* Copyright 2012--2016 The Tor Project
+/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/BridgeExtraInfoDescriptor.java b/src/main/java/org/torproject/descriptor/BridgeExtraInfoDescriptor.java
index a3c168d..e3cd5d1 100644
--- a/src/main/java/org/torproject/descriptor/BridgeExtraInfoDescriptor.java
+++ b/src/main/java/org/torproject/descriptor/BridgeExtraInfoDescriptor.java
@@ -1,4 +1,4 @@
-/* Copyright 2015--2016 The Tor Project
+/* Copyright 2015--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/BridgeNetworkStatus.java b/src/main/java/org/torproject/descriptor/BridgeNetworkStatus.java
index c7458fd..ca2979c 100644
--- a/src/main/java/org/torproject/descriptor/BridgeNetworkStatus.java
+++ b/src/main/java/org/torproject/descriptor/BridgeNetworkStatus.java
@@ -1,4 +1,4 @@
-/* Copyright 2011--2016 The Tor Project
+/* Copyright 2011--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/BridgePoolAssignment.java b/src/main/java/org/torproject/descriptor/BridgePoolAssignment.java
index 2de4ee9..8f40a74 100644
--- a/src/main/java/org/torproject/descriptor/BridgePoolAssignment.java
+++ b/src/main/java/org/torproject/descriptor/BridgePoolAssignment.java
@@ -1,4 +1,4 @@
-/* Copyright 2012--2016 The Tor Project
+/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/BridgeServerDescriptor.java b/src/main/java/org/torproject/descriptor/BridgeServerDescriptor.java
index 7d4503f..2a2fdc4 100644
--- a/src/main/java/org/torproject/descriptor/BridgeServerDescriptor.java
+++ b/src/main/java/org/torproject/descriptor/BridgeServerDescriptor.java
@@ -1,4 +1,4 @@
-/* Copyright 2015--2016 The Tor Project
+/* Copyright 2015--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/Descriptor.java b/src/main/java/org/torproject/descriptor/Descriptor.java
index 7cad109..be6e02f 100644
--- a/src/main/java/org/torproject/descriptor/Descriptor.java
+++ b/src/main/java/org/torproject/descriptor/Descriptor.java
@@ -1,4 +1,4 @@
-/* Copyright 2011--2016 The Tor Project
+/* Copyright 2011--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/DescriptorCollector.java b/src/main/java/org/torproject/descriptor/DescriptorCollector.java
index b1027dc..1ec0a62 100644
--- a/src/main/java/org/torproject/descriptor/DescriptorCollector.java
+++ b/src/main/java/org/torproject/descriptor/DescriptorCollector.java
@@ -1,4 +1,4 @@
-/* Copyright 2015--2016 The Tor Project
+/* Copyright 2015--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/DescriptorDownloader.java b/src/main/java/org/torproject/descriptor/DescriptorDownloader.java
index f0b1101..f3335f4 100644
--- a/src/main/java/org/torproject/descriptor/DescriptorDownloader.java
+++ b/src/main/java/org/torproject/descriptor/DescriptorDownloader.java
@@ -1,4 +1,4 @@
-/* Copyright 2011--2016 The Tor Project
+/* Copyright 2011--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/DescriptorFile.java b/src/main/java/org/torproject/descriptor/DescriptorFile.java
index 417d7f9..b501186 100644
--- a/src/main/java/org/torproject/descriptor/DescriptorFile.java
+++ b/src/main/java/org/torproject/descriptor/DescriptorFile.java
@@ -1,4 +1,4 @@
-/* Copyright 2011--2016 The Tor Project
+/* Copyright 2011--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/DescriptorParseException.java b/src/main/java/org/torproject/descriptor/DescriptorParseException.java
index 65e774a..5f46077 100644
--- a/src/main/java/org/torproject/descriptor/DescriptorParseException.java
+++ b/src/main/java/org/torproject/descriptor/DescriptorParseException.java
@@ -1,4 +1,4 @@
-/* Copyright 2014--2016 The Tor Project
+/* Copyright 2014--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/DescriptorParser.java b/src/main/java/org/torproject/descriptor/DescriptorParser.java
index 680b8b2..b2d5af1 100644
--- a/src/main/java/org/torproject/descriptor/DescriptorParser.java
+++ b/src/main/java/org/torproject/descriptor/DescriptorParser.java
@@ -1,4 +1,4 @@
-/* Copyright 2012--2016 The Tor Project
+/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/DescriptorReader.java b/src/main/java/org/torproject/descriptor/DescriptorReader.java
index 076a7f0..2a4f1c3 100644
--- a/src/main/java/org/torproject/descriptor/DescriptorReader.java
+++ b/src/main/java/org/torproject/descriptor/DescriptorReader.java
@@ -1,4 +1,4 @@
-/* Copyright 2011--2016 The Tor Project
+/* Copyright 2011--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/DescriptorRequest.java b/src/main/java/org/torproject/descriptor/DescriptorRequest.java
index c36c0c0..0927339 100644
--- a/src/main/java/org/torproject/descriptor/DescriptorRequest.java
+++ b/src/main/java/org/torproject/descriptor/DescriptorRequest.java
@@ -1,4 +1,4 @@
-/* Copyright 2011--2016 The Tor Project
+/* Copyright 2011--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/DescriptorSourceFactory.java b/src/main/java/org/torproject/descriptor/DescriptorSourceFactory.java
index 2a58552..efdc5cf 100644
--- a/src/main/java/org/torproject/descriptor/DescriptorSourceFactory.java
+++ b/src/main/java/org/torproject/descriptor/DescriptorSourceFactory.java
@@ -1,4 +1,4 @@
-/* Copyright 2011--2016 The Tor Project
+/* Copyright 2011--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/DirSourceEntry.java b/src/main/java/org/torproject/descriptor/DirSourceEntry.java
index 96d81ee..49d7f8a 100644
--- a/src/main/java/org/torproject/descriptor/DirSourceEntry.java
+++ b/src/main/java/org/torproject/descriptor/DirSourceEntry.java
@@ -1,4 +1,4 @@
-/* Copyright 2011--2016 The Tor Project
+/* Copyright 2011--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/DirectoryKeyCertificate.java b/src/main/java/org/torproject/descriptor/DirectoryKeyCertificate.java
index 07211ef..5a7877b 100644
--- a/src/main/java/org/torproject/descriptor/DirectoryKeyCertificate.java
+++ b/src/main/java/org/torproject/descriptor/DirectoryKeyCertificate.java
@@ -1,4 +1,4 @@
-/* Copyright 2012--2016 The Tor Project
+/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/DirectorySignature.java b/src/main/java/org/torproject/descriptor/DirectorySignature.java
index 8877a4e..0b1c993 100644
--- a/src/main/java/org/torproject/descriptor/DirectorySignature.java
+++ b/src/main/java/org/torproject/descriptor/DirectorySignature.java
@@ -1,4 +1,4 @@
-/* Copyright 2012--2016 The Tor Project
+/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/ExitList.java b/src/main/java/org/torproject/descriptor/ExitList.java
index 181da0c..052362a 100644
--- a/src/main/java/org/torproject/descriptor/ExitList.java
+++ b/src/main/java/org/torproject/descriptor/ExitList.java
@@ -1,4 +1,4 @@
-/* Copyright 2012--2016 The Tor Project
+/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/ExitListEntry.java b/src/main/java/org/torproject/descriptor/ExitListEntry.java
index 2a3d79f..94d5970 100644
--- a/src/main/java/org/torproject/descriptor/ExitListEntry.java
+++ b/src/main/java/org/torproject/descriptor/ExitListEntry.java
@@ -1,4 +1,4 @@
-/* Copyright 2012--2016 The Tor Project
+/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/ExtraInfoDescriptor.java b/src/main/java/org/torproject/descriptor/ExtraInfoDescriptor.java
index 49efbf3..cd63394 100644
--- a/src/main/java/org/torproject/descriptor/ExtraInfoDescriptor.java
+++ b/src/main/java/org/torproject/descriptor/ExtraInfoDescriptor.java
@@ -1,4 +1,4 @@
-/* Copyright 2012--2016 The Tor Project
+/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/ImplementationNotAccessibleException.java b/src/main/java/org/torproject/descriptor/ImplementationNotAccessibleException.java
index 1c7e937..a377276 100644
--- a/src/main/java/org/torproject/descriptor/ImplementationNotAccessibleException.java
+++ b/src/main/java/org/torproject/descriptor/ImplementationNotAccessibleException.java
@@ -1,4 +1,4 @@
-/* Copyright 2014--2016 The Tor Project
+/* Copyright 2014--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/Microdescriptor.java b/src/main/java/org/torproject/descriptor/Microdescriptor.java
index f19b7df..155c799 100644
--- a/src/main/java/org/torproject/descriptor/Microdescriptor.java
+++ b/src/main/java/org/torproject/descriptor/Microdescriptor.java
@@ -1,4 +1,4 @@
-/* Copyright 2014--2016 The Tor Project
+/* Copyright 2014--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/NetworkStatusEntry.java b/src/main/java/org/torproject/descriptor/NetworkStatusEntry.java
index 43b3175..68f6939 100644
--- a/src/main/java/org/torproject/descriptor/NetworkStatusEntry.java
+++ b/src/main/java/org/torproject/descriptor/NetworkStatusEntry.java
@@ -1,4 +1,4 @@
-/* Copyright 2011--2016 The Tor Project
+/* Copyright 2011--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/RelayDirectory.java b/src/main/java/org/torproject/descriptor/RelayDirectory.java
index 8f3e58b..fb07a41 100644
--- a/src/main/java/org/torproject/descriptor/RelayDirectory.java
+++ b/src/main/java/org/torproject/descriptor/RelayDirectory.java
@@ -1,4 +1,4 @@
-/* Copyright 2012--2016 The Tor Project
+/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/RelayExtraInfoDescriptor.java b/src/main/java/org/torproject/descriptor/RelayExtraInfoDescriptor.java
index 73f8438..8c7c06a 100644
--- a/src/main/java/org/torproject/descriptor/RelayExtraInfoDescriptor.java
+++ b/src/main/java/org/torproject/descriptor/RelayExtraInfoDescriptor.java
@@ -1,4 +1,4 @@
-/* Copyright 2015--2016 The Tor Project
+/* Copyright 2015--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/RelayNetworkStatus.java b/src/main/java/org/torproject/descriptor/RelayNetworkStatus.java
index db3ddac..86361cd 100644
--- a/src/main/java/org/torproject/descriptor/RelayNetworkStatus.java
+++ b/src/main/java/org/torproject/descriptor/RelayNetworkStatus.java
@@ -1,4 +1,4 @@
-/* Copyright 2012--2016 The Tor Project
+/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/RelayNetworkStatusConsensus.java b/src/main/java/org/torproject/descriptor/RelayNetworkStatusConsensus.java
index b38bd1d..a2deba3 100644
--- a/src/main/java/org/torproject/descriptor/RelayNetworkStatusConsensus.java
+++ b/src/main/java/org/torproject/descriptor/RelayNetworkStatusConsensus.java
@@ -1,4 +1,4 @@
-/* Copyright 2011--2016 The Tor Project
+/* Copyright 2011--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/RelayNetworkStatusVote.java b/src/main/java/org/torproject/descriptor/RelayNetworkStatusVote.java
index abb7ff0..a3f8170 100644
--- a/src/main/java/org/torproject/descriptor/RelayNetworkStatusVote.java
+++ b/src/main/java/org/torproject/descriptor/RelayNetworkStatusVote.java
@@ -1,4 +1,4 @@
-/* Copyright 2011--2016 The Tor Project
+/* Copyright 2011--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/RelayServerDescriptor.java b/src/main/java/org/torproject/descriptor/RelayServerDescriptor.java
index 6ef3140..eeb1c01 100644
--- a/src/main/java/org/torproject/descriptor/RelayServerDescriptor.java
+++ b/src/main/java/org/torproject/descriptor/RelayServerDescriptor.java
@@ -1,4 +1,4 @@
-/* Copyright 2015--2016 The Tor Project
+/* Copyright 2015--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/RouterStatusEntry.java b/src/main/java/org/torproject/descriptor/RouterStatusEntry.java
index f9a56db..c2ac5ec 100644
--- a/src/main/java/org/torproject/descriptor/RouterStatusEntry.java
+++ b/src/main/java/org/torproject/descriptor/RouterStatusEntry.java
@@ -1,4 +1,4 @@
-/* Copyright 2012--2016 The Tor Project
+/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/ServerDescriptor.java b/src/main/java/org/torproject/descriptor/ServerDescriptor.java
index d1af421..418cb55 100644
--- a/src/main/java/org/torproject/descriptor/ServerDescriptor.java
+++ b/src/main/java/org/torproject/descriptor/ServerDescriptor.java
@@ -1,4 +1,4 @@
-/* Copyright 2011--2016 The Tor Project
+/* Copyright 2011--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/TorperfResult.java b/src/main/java/org/torproject/descriptor/TorperfResult.java
index 188200b..1f4e50c 100644
--- a/src/main/java/org/torproject/descriptor/TorperfResult.java
+++ b/src/main/java/org/torproject/descriptor/TorperfResult.java
@@ -1,4 +1,4 @@
-/* Copyright 2012--2016 The Tor Project
+/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/main/java/org/torproject/descriptor/impl/BandwidthHistoryImpl.java b/src/main/java/org/torproject/descriptor/impl/BandwidthHistoryImpl.java
index fc0cae0..8f18b62 100644
--- a/src/main/java/org/torproject/descriptor/impl/BandwidthHistoryImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/BandwidthHistoryImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2012--2016 The Tor Project
+/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/BlockingIteratorImpl.java b/src/main/java/org/torproject/descriptor/impl/BlockingIteratorImpl.java
index 3e7fa86..3509026 100644
--- a/src/main/java/org/torproject/descriptor/impl/BlockingIteratorImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/BlockingIteratorImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2011--2016 The Tor Project
+/* Copyright 2011--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/BridgeExtraInfoDescriptorImpl.java b/src/main/java/org/torproject/descriptor/impl/BridgeExtraInfoDescriptorImpl.java
index 24a4eda..080dde1 100644
--- a/src/main/java/org/torproject/descriptor/impl/BridgeExtraInfoDescriptorImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/BridgeExtraInfoDescriptorImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2015--2016 The Tor Project
+/* Copyright 2015--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/BridgeNetworkStatusImpl.java b/src/main/java/org/torproject/descriptor/impl/BridgeNetworkStatusImpl.java
index 8e456db..80aba01 100644
--- a/src/main/java/org/torproject/descriptor/impl/BridgeNetworkStatusImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/BridgeNetworkStatusImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2012--2016 The Tor Project
+/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/BridgePoolAssignmentImpl.java b/src/main/java/org/torproject/descriptor/impl/BridgePoolAssignmentImpl.java
index c4f04cf..e2579e5 100644
--- a/src/main/java/org/torproject/descriptor/impl/BridgePoolAssignmentImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/BridgePoolAssignmentImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2012--2016 The Tor Project
+/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/BridgeServerDescriptorImpl.java b/src/main/java/org/torproject/descriptor/impl/BridgeServerDescriptorImpl.java
index 67a6292..43548fc 100644
--- a/src/main/java/org/torproject/descriptor/impl/BridgeServerDescriptorImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/BridgeServerDescriptorImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2015--2016 The Tor Project
+/* Copyright 2015--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/DescriptorCollectorImpl.java b/src/main/java/org/torproject/descriptor/impl/DescriptorCollectorImpl.java
index f9bd60d..c3c0fac 100644
--- a/src/main/java/org/torproject/descriptor/impl/DescriptorCollectorImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/DescriptorCollectorImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2015--2016 The Tor Project
+/* Copyright 2015--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/DescriptorDownloaderImpl.java b/src/main/java/org/torproject/descriptor/impl/DescriptorDownloaderImpl.java
index 2c37740..807abac 100644
--- a/src/main/java/org/torproject/descriptor/impl/DescriptorDownloaderImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/DescriptorDownloaderImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2011--2016 The Tor Project
+/* Copyright 2011--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/DescriptorFileImpl.java b/src/main/java/org/torproject/descriptor/impl/DescriptorFileImpl.java
index 56d10a5..561e0b8 100644
--- a/src/main/java/org/torproject/descriptor/impl/DescriptorFileImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/DescriptorFileImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2011--2016 The Tor Project
+/* Copyright 2011--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/DescriptorImpl.java b/src/main/java/org/torproject/descriptor/impl/DescriptorImpl.java
index 718321a..49f4a2e 100644
--- a/src/main/java/org/torproject/descriptor/impl/DescriptorImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/DescriptorImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2012--2016 The Tor Project
+/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/DescriptorParseException.java b/src/main/java/org/torproject/descriptor/impl/DescriptorParseException.java
index 0ac4d2c..8583ef2 100644
--- a/src/main/java/org/torproject/descriptor/impl/DescriptorParseException.java
+++ b/src/main/java/org/torproject/descriptor/impl/DescriptorParseException.java
@@ -1,4 +1,4 @@
-/* Copyright 2011--2016 The Tor Project
+/* Copyright 2011--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/DescriptorParserImpl.java b/src/main/java/org/torproject/descriptor/impl/DescriptorParserImpl.java
index d22ff59..518f1a2 100644
--- a/src/main/java/org/torproject/descriptor/impl/DescriptorParserImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/DescriptorParserImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2012--2016 The Tor Project
+/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/DescriptorReaderImpl.java b/src/main/java/org/torproject/descriptor/impl/DescriptorReaderImpl.java
index 6a3cd64..2cbb6c8 100644
--- a/src/main/java/org/torproject/descriptor/impl/DescriptorReaderImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/DescriptorReaderImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2011--2016 The Tor Project
+/* Copyright 2011--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/DescriptorRequestImpl.java b/src/main/java/org/torproject/descriptor/impl/DescriptorRequestImpl.java
index 2ea4e77..7362935 100644
--- a/src/main/java/org/torproject/descriptor/impl/DescriptorRequestImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/DescriptorRequestImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2011--2016 The Tor Project
+/* Copyright 2011--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/DirSourceEntryImpl.java b/src/main/java/org/torproject/descriptor/impl/DirSourceEntryImpl.java
index f053a9d..9e5995b 100644
--- a/src/main/java/org/torproject/descriptor/impl/DirSourceEntryImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/DirSourceEntryImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2011--2016 The Tor Project
+/* Copyright 2011--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/DirectoryDownloader.java b/src/main/java/org/torproject/descriptor/impl/DirectoryDownloader.java
index 5d7d4a9..7b3f977 100644
--- a/src/main/java/org/torproject/descriptor/impl/DirectoryDownloader.java
+++ b/src/main/java/org/torproject/descriptor/impl/DirectoryDownloader.java
@@ -1,4 +1,4 @@
-/* Copyright 2011--2016 The Tor Project
+/* Copyright 2011--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/DirectoryKeyCertificateImpl.java b/src/main/java/org/torproject/descriptor/impl/DirectoryKeyCertificateImpl.java
index 443bd8b..df479f4 100644
--- a/src/main/java/org/torproject/descriptor/impl/DirectoryKeyCertificateImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/DirectoryKeyCertificateImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2012--2016 The Tor Project
+/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/DirectorySignatureImpl.java b/src/main/java/org/torproject/descriptor/impl/DirectorySignatureImpl.java
index 744bc51..995f525 100644
--- a/src/main/java/org/torproject/descriptor/impl/DirectorySignatureImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/DirectorySignatureImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2012--2016 The Tor Project
+/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/DownloadCoordinator.java b/src/main/java/org/torproject/descriptor/impl/DownloadCoordinator.java
index ac4a0c9..0d78f06 100644
--- a/src/main/java/org/torproject/descriptor/impl/DownloadCoordinator.java
+++ b/src/main/java/org/torproject/descriptor/impl/DownloadCoordinator.java
@@ -1,4 +1,4 @@
-/* Copyright 2011--2016 The Tor Project
+/* Copyright 2011--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/DownloadCoordinatorImpl.java b/src/main/java/org/torproject/descriptor/impl/DownloadCoordinatorImpl.java
index 05e3936..c79a7cc 100644
--- a/src/main/java/org/torproject/descriptor/impl/DownloadCoordinatorImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/DownloadCoordinatorImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2011--2016 The Tor Project
+/* Copyright 2011--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/ExitListEntryImpl.java b/src/main/java/org/torproject/descriptor/impl/ExitListEntryImpl.java
index 5e4bbd2..947cf9c 100644
--- a/src/main/java/org/torproject/descriptor/impl/ExitListEntryImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/ExitListEntryImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2012--2016 The Tor Project
+/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/ExitListImpl.java b/src/main/java/org/torproject/descriptor/impl/ExitListImpl.java
index 9afee31..75d3a04 100644
--- a/src/main/java/org/torproject/descriptor/impl/ExitListImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/ExitListImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2012--2016 The Tor Project
+/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java b/src/main/java/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java
index 154c86b..d4be77a 100644
--- a/src/main/java/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2012--2016 The Tor Project
+/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/MicrodescriptorImpl.java b/src/main/java/org/torproject/descriptor/impl/MicrodescriptorImpl.java
index ecad5cb..b199a20 100644
--- a/src/main/java/org/torproject/descriptor/impl/MicrodescriptorImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/MicrodescriptorImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2014--2016 The Tor Project
+/* Copyright 2014--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/NetworkStatusEntryImpl.java b/src/main/java/org/torproject/descriptor/impl/NetworkStatusEntryImpl.java
index f528033..d26eaeb 100644
--- a/src/main/java/org/torproject/descriptor/impl/NetworkStatusEntryImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/NetworkStatusEntryImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2011--2016 The Tor Project
+/* Copyright 2011--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/NetworkStatusImpl.java b/src/main/java/org/torproject/descriptor/impl/NetworkStatusImpl.java
index 061a171..e3891a6 100644
--- a/src/main/java/org/torproject/descriptor/impl/NetworkStatusImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/NetworkStatusImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2011--2016 The Tor Project
+/* Copyright 2011--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/ParseHelper.java b/src/main/java/org/torproject/descriptor/impl/ParseHelper.java
index 86d53a1..dfa9065 100644
--- a/src/main/java/org/torproject/descriptor/impl/ParseHelper.java
+++ b/src/main/java/org/torproject/descriptor/impl/ParseHelper.java
@@ -1,4 +1,4 @@
-/* Copyright 2011--2016 The Tor Project
+/* Copyright 2011--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/RelayDirectoryImpl.java b/src/main/java/org/torproject/descriptor/impl/RelayDirectoryImpl.java
index 4f29a90..ff32934 100644
--- a/src/main/java/org/torproject/descriptor/impl/RelayDirectoryImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/RelayDirectoryImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2012--2016 The Tor Project
+/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/RelayExtraInfoDescriptorImpl.java b/src/main/java/org/torproject/descriptor/impl/RelayExtraInfoDescriptorImpl.java
index 246978c..3ec4869 100644
--- a/src/main/java/org/torproject/descriptor/impl/RelayExtraInfoDescriptorImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/RelayExtraInfoDescriptorImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2015--2016 The Tor Project
+/* Copyright 2015--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImpl.java b/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImpl.java
index 66ab776..8733729 100644
--- a/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2011--2016 The Tor Project
+/* Copyright 2011--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusImpl.java b/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusImpl.java
index 308c1b2..7c01e3c 100644
--- a/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2012--2016 The Tor Project
+/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java b/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java
index 2bf8e88..02390de 100644
--- a/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2011--2016 The Tor Project
+/* Copyright 2011--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/RelayServerDescriptorImpl.java b/src/main/java/org/torproject/descriptor/impl/RelayServerDescriptorImpl.java
index c1f9b0c..3353ec1 100644
--- a/src/main/java/org/torproject/descriptor/impl/RelayServerDescriptorImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/RelayServerDescriptorImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2015--2016 The Tor Project
+/* Copyright 2015--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/RouterStatusEntryImpl.java b/src/main/java/org/torproject/descriptor/impl/RouterStatusEntryImpl.java
index f7f896a..6f07b81 100644
--- a/src/main/java/org/torproject/descriptor/impl/RouterStatusEntryImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/RouterStatusEntryImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2012--2016 The Tor Project
+/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/ServerDescriptorImpl.java b/src/main/java/org/torproject/descriptor/impl/ServerDescriptorImpl.java
index 622e9a4..183959a 100644
--- a/src/main/java/org/torproject/descriptor/impl/ServerDescriptorImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/ServerDescriptorImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2012--2016 The Tor Project
+/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/impl/TorperfResultImpl.java b/src/main/java/org/torproject/descriptor/impl/TorperfResultImpl.java
index 33ca328..f5fe892 100644
--- a/src/main/java/org/torproject/descriptor/impl/TorperfResultImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/TorperfResultImpl.java
@@ -1,4 +1,4 @@
-/* Copyright 2012--2016 The Tor Project
+/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/main/java/org/torproject/descriptor/index/DescriptorIndexCollector.java b/src/main/java/org/torproject/descriptor/index/DescriptorIndexCollector.java
index 9b269fe..a6a5fe8 100644
--- a/src/main/java/org/torproject/descriptor/index/DescriptorIndexCollector.java
+++ b/src/main/java/org/torproject/descriptor/index/DescriptorIndexCollector.java
@@ -1,4 +1,4 @@
-/* Copyright 2015--2016 The Tor Project
+/* Copyright 2015--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.index;
diff --git a/src/main/java/org/torproject/descriptor/index/DirectoryNode.java b/src/main/java/org/torproject/descriptor/index/DirectoryNode.java
index 562a6b4..ad9ba74 100644
--- a/src/main/java/org/torproject/descriptor/index/DirectoryNode.java
+++ b/src/main/java/org/torproject/descriptor/index/DirectoryNode.java
@@ -1,4 +1,4 @@
-/* Copyright 2016 The Tor Project
+/* Copyright 2016--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.index;
diff --git a/src/main/java/org/torproject/descriptor/index/FileNode.java b/src/main/java/org/torproject/descriptor/index/FileNode.java
index ccbd261..aa7c1fb 100644
--- a/src/main/java/org/torproject/descriptor/index/FileNode.java
+++ b/src/main/java/org/torproject/descriptor/index/FileNode.java
@@ -1,4 +1,4 @@
-/* Copyright 2016 The Tor Project
+/* Copyright 2016--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.index;
diff --git a/src/main/java/org/torproject/descriptor/index/FileType.java b/src/main/java/org/torproject/descriptor/index/FileType.java
index 34dbfbb..9bb7e5f 100644
--- a/src/main/java/org/torproject/descriptor/index/FileType.java
+++ b/src/main/java/org/torproject/descriptor/index/FileType.java
@@ -1,4 +1,4 @@
-/* Copyright 2016 The Tor Project
+/* Copyright 2016--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.index;
diff --git a/src/main/java/org/torproject/descriptor/index/IndexNode.java b/src/main/java/org/torproject/descriptor/index/IndexNode.java
index bb83fb4..c7a79a0 100644
--- a/src/main/java/org/torproject/descriptor/index/IndexNode.java
+++ b/src/main/java/org/torproject/descriptor/index/IndexNode.java
@@ -1,4 +1,4 @@
-/* Copyright 2016 The Tor Project
+/* Copyright 2016--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.index;
diff --git a/src/main/java/org/torproject/descriptor/index/package-info.java b/src/main/java/org/torproject/descriptor/index/package-info.java
index 321d2db..cfb77ca 100644
--- a/src/main/java/org/torproject/descriptor/index/package-info.java
+++ b/src/main/java/org/torproject/descriptor/index/package-info.java
@@ -1,4 +1,4 @@
-/* Copyright 2016 The Tor Project
+/* Copyright 2016--2017 The Tor Project
* See LICENSE for licensing information */
/**
diff --git a/src/main/java/org/torproject/descriptor/package-info.java b/src/main/java/org/torproject/descriptor/package-info.java
index 5b34554..e5f36d2 100644
--- a/src/main/java/org/torproject/descriptor/package-info.java
+++ b/src/main/java/org/torproject/descriptor/package-info.java
@@ -1,4 +1,4 @@
-/* Copyright 2016 The Tor Project
+/* Copyright 2016--2017 The Tor Project
* See LICENSE for licensing information */
/**
diff --git a/src/main/resources/bootstrap-development.sh b/src/main/resources/bootstrap-development.sh
index 33a1a50..28fb975 100755
--- a/src/main/resources/bootstrap-development.sh
+++ b/src/main/resources/bootstrap-development.sh
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# Copyright 2016 The Tor Project
+# Copyright 2016--2017 The Tor Project
# See LICENSE for licensing information
#
# Use for submodule initialization and checkout.
diff --git a/src/test/java/org/torproject/descriptor/DescriptorSourceFactoryTest.java b/src/test/java/org/torproject/descriptor/DescriptorSourceFactoryTest.java
index 167c625..d8990ac 100644
--- a/src/test/java/org/torproject/descriptor/DescriptorSourceFactoryTest.java
+++ b/src/test/java/org/torproject/descriptor/DescriptorSourceFactoryTest.java
@@ -1,4 +1,4 @@
-/* Copyright 2016 The Tor Project
+/* Copyright 2016--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor;
diff --git a/src/test/java/org/torproject/descriptor/benchmark/MeasurePerformance.java b/src/test/java/org/torproject/descriptor/benchmark/MeasurePerformance.java
index a52020a..4c36ae4 100644
--- a/src/test/java/org/torproject/descriptor/benchmark/MeasurePerformance.java
+++ b/src/test/java/org/torproject/descriptor/benchmark/MeasurePerformance.java
@@ -1,4 +1,4 @@
-/* Copyright 2016 The Tor Project
+/* Copyright 2016--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.benchmark;
diff --git a/src/test/java/org/torproject/descriptor/impl/BridgeNetworkStatusTest.java b/src/test/java/org/torproject/descriptor/impl/BridgeNetworkStatusTest.java
index 1cac579..d1a083e 100644
--- a/src/test/java/org/torproject/descriptor/impl/BridgeNetworkStatusTest.java
+++ b/src/test/java/org/torproject/descriptor/impl/BridgeNetworkStatusTest.java
@@ -1,4 +1,4 @@
-/* Copyright 2015--2016 The Tor Project
+/* Copyright 2015--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/test/java/org/torproject/descriptor/impl/ConsensusBuilder.java b/src/test/java/org/torproject/descriptor/impl/ConsensusBuilder.java
index 7421b8a..fccd33b 100644
--- a/src/test/java/org/torproject/descriptor/impl/ConsensusBuilder.java
+++ b/src/test/java/org/torproject/descriptor/impl/ConsensusBuilder.java
@@ -1,4 +1,4 @@
-/* Copyright 2012--2016 The Tor Project
+/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/test/java/org/torproject/descriptor/impl/DescriptorCollectorImplTest.java b/src/test/java/org/torproject/descriptor/impl/DescriptorCollectorImplTest.java
index 77fb259..ad34528 100644
--- a/src/test/java/org/torproject/descriptor/impl/DescriptorCollectorImplTest.java
+++ b/src/test/java/org/torproject/descriptor/impl/DescriptorCollectorImplTest.java
@@ -1,4 +1,4 @@
-/* Copyright 2015--2016 The Tor Project
+/* Copyright 2015--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/test/java/org/torproject/descriptor/impl/DescriptorReaderImplTest.java b/src/test/java/org/torproject/descriptor/impl/DescriptorReaderImplTest.java
index c01984d..5a418b9 100644
--- a/src/test/java/org/torproject/descriptor/impl/DescriptorReaderImplTest.java
+++ b/src/test/java/org/torproject/descriptor/impl/DescriptorReaderImplTest.java
@@ -1,4 +1,4 @@
-/* Copyright 2016 The Tor Project
+/* Copyright 2016--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/test/java/org/torproject/descriptor/impl/ExitListImplTest.java b/src/test/java/org/torproject/descriptor/impl/ExitListImplTest.java
index 4458451..8bc81f9 100644
--- a/src/test/java/org/torproject/descriptor/impl/ExitListImplTest.java
+++ b/src/test/java/org/torproject/descriptor/impl/ExitListImplTest.java
@@ -1,4 +1,4 @@
-/* Copyright 2015--2016 The Tor Project
+/* Copyright 2015--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/test/java/org/torproject/descriptor/impl/ExtraInfoDescriptorImplTest.java b/src/test/java/org/torproject/descriptor/impl/ExtraInfoDescriptorImplTest.java
index 5556a8b..fb38c86 100644
--- a/src/test/java/org/torproject/descriptor/impl/ExtraInfoDescriptorImplTest.java
+++ b/src/test/java/org/torproject/descriptor/impl/ExtraInfoDescriptorImplTest.java
@@ -1,4 +1,4 @@
-/* Copyright 2012--2016 The Tor Project
+/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImplTest.java b/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImplTest.java
index ebe37c9..57a2d89 100644
--- a/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImplTest.java
+++ b/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImplTest.java
@@ -1,4 +1,4 @@
-/* Copyright 2011--2016 The Tor Project
+/* Copyright 2011--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusImplTest.java b/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusImplTest.java
index 636c7d9..8f4ece2 100644
--- a/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusImplTest.java
+++ b/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusImplTest.java
@@ -1,4 +1,4 @@
-/* Copyright 2016 The Tor Project
+/* Copyright 2016--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImplTest.java b/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImplTest.java
index 1695a2a..79cb78c 100644
--- a/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImplTest.java
+++ b/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImplTest.java
@@ -1,4 +1,4 @@
-/* Copyright 2011--2016 The Tor Project
+/* Copyright 2011--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/test/java/org/torproject/descriptor/impl/ServerDescriptorImplTest.java b/src/test/java/org/torproject/descriptor/impl/ServerDescriptorImplTest.java
index 2d93266..0daa83b 100644
--- a/src/test/java/org/torproject/descriptor/impl/ServerDescriptorImplTest.java
+++ b/src/test/java/org/torproject/descriptor/impl/ServerDescriptorImplTest.java
@@ -1,4 +1,4 @@
-/* Copyright 2012--2016 The Tor Project
+/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/test/java/org/torproject/descriptor/impl/TorperfResultImplTest.java b/src/test/java/org/torproject/descriptor/impl/TorperfResultImplTest.java
index 9ade629..62d0875 100644
--- a/src/test/java/org/torproject/descriptor/impl/TorperfResultImplTest.java
+++ b/src/test/java/org/torproject/descriptor/impl/TorperfResultImplTest.java
@@ -1,4 +1,4 @@
-/* Copyright 2015--2016 The Tor Project
+/* Copyright 2015--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.impl;
diff --git a/src/test/java/org/torproject/descriptor/index/DescriptorIndexCollectorTest.java b/src/test/java/org/torproject/descriptor/index/DescriptorIndexCollectorTest.java
index 8886c85..a40e0e3 100644
--- a/src/test/java/org/torproject/descriptor/index/DescriptorIndexCollectorTest.java
+++ b/src/test/java/org/torproject/descriptor/index/DescriptorIndexCollectorTest.java
@@ -1,4 +1,4 @@
-/* Copyright 2016 The Tor Project
+/* Copyright 2016--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.index;
diff --git a/src/test/java/org/torproject/descriptor/index/DirectoryNodeTest.java b/src/test/java/org/torproject/descriptor/index/DirectoryNodeTest.java
index c653a6a..1fa5f83 100644
--- a/src/test/java/org/torproject/descriptor/index/DirectoryNodeTest.java
+++ b/src/test/java/org/torproject/descriptor/index/DirectoryNodeTest.java
@@ -1,4 +1,4 @@
-/* Copyright 2016 The Tor Project
+/* Copyright 2016--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.index;
diff --git a/src/test/java/org/torproject/descriptor/index/FileNodeTest.java b/src/test/java/org/torproject/descriptor/index/FileNodeTest.java
index 2bc79ad..59b66a6 100644
--- a/src/test/java/org/torproject/descriptor/index/FileNodeTest.java
+++ b/src/test/java/org/torproject/descriptor/index/FileNodeTest.java
@@ -1,4 +1,4 @@
-/* Copyright 2016 The Tor Project
+/* Copyright 2016--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.index;
diff --git a/src/test/java/org/torproject/descriptor/index/IndexNodeTest.java b/src/test/java/org/torproject/descriptor/index/IndexNodeTest.java
index 6a9b9a8..e1d36b2 100644
--- a/src/test/java/org/torproject/descriptor/index/IndexNodeTest.java
+++ b/src/test/java/org/torproject/descriptor/index/IndexNodeTest.java
@@ -1,4 +1,4 @@
-/* Copyright 2016 The Tor Project
+/* Copyright 2016--2017 The Tor Project
* See LICENSE for licensing information */
package org.torproject.descriptor.index;
1
0

[metrics-lib/release] Avoid deleting extraneous local descriptor files.
by karsten@torproject.org 17 Feb '17
by karsten@torproject.org 17 Feb '17
17 Feb '17
commit 8d09f56568652bc9104901ca4f27e170f8aa9316
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Tue Jan 31 15:58:05 2017 +0100
Avoid deleting extraneous local descriptor files.
DescriptorIndexCollector deletes descriptor files from a previous or
concurrent collect run if it doesn't collect those files itself. This
is unexpected behavior and differs from what DescriptorCollectorImpl
does.
Fixes #20525.
---
CHANGELOG.md | 2 ++
.../descriptor/index/DescriptorIndexCollector.java | 19 ++++++++++++-------
.../index/DescriptorIndexCollectorTest.java | 6 ++++--
3 files changed, 18 insertions(+), 9 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 22586d2..afaa1e8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,8 @@
- Unify the build process by adding git-submodule metrics-base in
src/build and removing all centralized parts of the build
process.
+ - Avoid deleting extraneous local descriptor files when collecting
+ descriptors from CollecTor.
# Changes in version 1.5.0 - 2016-10-19
diff --git a/src/main/java/org/torproject/descriptor/index/DescriptorIndexCollector.java b/src/main/java/org/torproject/descriptor/index/DescriptorIndexCollector.java
index a6a5fe8..68b6591 100644
--- a/src/main/java/org/torproject/descriptor/index/DescriptorIndexCollector.java
+++ b/src/main/java/org/torproject/descriptor/index/DescriptorIndexCollector.java
@@ -87,7 +87,8 @@ public class DescriptorIndexCollector implements DescriptorCollector {
if (deleteExtraneousLocalFiles) {
log.info("Deleting extraneous files from local directory {}.",
localDirectory);
- deleteExtraneousLocalFiles(remoteFiles, localDirectory, localFiles);
+ deleteExtraneousLocalFiles(remoteDirectories, remoteFiles, localDirectory,
+ localFiles);
}
log.info("Finished descriptor collection.");
}
@@ -138,15 +139,19 @@ public class DescriptorIndexCollector implements DescriptorCollector {
return true;
}
- static void deleteExtraneousLocalFiles(
+ static void deleteExtraneousLocalFiles(String[] remoteDirectories,
SortedMap<String, FileNode> remoteFiles,
File localDir, SortedMap<String, Long> locals) {
for (String localPath : locals.keySet()) {
- if (!remoteFiles.containsKey(localPath)) {
- File extraneousLocalFile = new File(localDir, localPath);
- log.debug("Deleting extraneous local file {}.",
- extraneousLocalFile.getAbsolutePath());
- extraneousLocalFile.delete();
+ for (String remoteDirectory : remoteDirectories) {
+ if (localPath.startsWith(remoteDirectory)) {
+ if (!remoteFiles.containsKey(localPath)) {
+ File extraneousLocalFile = new File(localDir, localPath);
+ log.debug("Deleting extraneous local file {}.",
+ extraneousLocalFile.getAbsolutePath());
+ extraneousLocalFile.delete();
+ }
+ }
}
}
}
diff --git a/src/test/java/org/torproject/descriptor/index/DescriptorIndexCollectorTest.java b/src/test/java/org/torproject/descriptor/index/DescriptorIndexCollectorTest.java
index a40e0e3..e2a31b5 100644
--- a/src/test/java/org/torproject/descriptor/index/DescriptorIndexCollectorTest.java
+++ b/src/test/java/org/torproject/descriptor/index/DescriptorIndexCollectorTest.java
@@ -139,6 +139,8 @@ public class DescriptorIndexCollectorTest {
public void testNormalCollectingWithDeletion() throws Exception {
File localFolder = tmpf.newFolder();
makeStructure(localFolder, "1");
+ File nonSyncedDir = makeDirs(localFolder.toString(), "d");
+ makeFiles(nonSyncedDir, "p1");
File remoteDirectory = tmpf.newFolder();
makeStructure(remoteDirectory, "2");
@@ -158,10 +160,10 @@ public class DescriptorIndexCollectorTest {
.collectDescriptors(indexFile.toURL().toString(),
new String[]{"a/b", "a/b/c"}, 1451606400_000L, localFolder, true);
- // verify file addition.
+ // verify file addition, including that the non-synced dir is not touched.
checkContains(true,
DescriptorIndexCollector.statLocalDirectory(localFolder).toString(),
- "a/b/y2", "a/b/x2", "a/b/c/u2");
+ "a/b/y2", "a/b/x2", "a/b/c/u2", "d/p1");
// verify that invalid files weren't fetched.
checkContains(false,
1
0

17 Feb '17
commit 2bcd6bb0e4cf8b535cf3b4c4ef0eed83dfc82676
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Mon Feb 13 12:05:47 2017 +0100
Parse new protocol versions lines.
---
CHANGELOG.md | 3 +
.../torproject/descriptor/NetworkStatusEntry.java | 9 +++
.../descriptor/RelayNetworkStatusConsensus.java | 36 +++++++++
.../descriptor/RelayNetworkStatusVote.java | 32 ++++++++
.../torproject/descriptor/ServerDescriptor.java | 10 +++
.../descriptor/impl/NetworkStatusEntryImpl.java | 17 ++++
.../torproject/descriptor/impl/ParseHelper.java | 47 +++++++++++
.../impl/RelayNetworkStatusConsensusImpl.java | 68 +++++++++++++++-
.../impl/RelayNetworkStatusVoteImpl.java | 66 ++++++++++++++++
.../descriptor/impl/ServerDescriptorImpl.java | 20 ++++-
.../descriptor/impl/ConsensusBuilder.java | 60 ++++++++++++++
.../impl/RelayNetworkStatusConsensusImplTest.java | 79 +++++++++++++++++++
.../impl/RelayNetworkStatusVoteImplTest.java | 92 ++++++++++++++++++++++
.../descriptor/impl/ServerDescriptorImplTest.java | 49 ++++++++++--
14 files changed, 581 insertions(+), 7 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 755428d..6bcfea9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -13,6 +13,9 @@
the application can decide at any time to stop consuming
descriptors without having to worry about the reader thread not
being done.
+ - Parse "proto" lines in server descriptors, "pr" lines in status
+ entries, and "(recommended|required)-(client|relay)-protocols"
+ lines in consensuses and votes.
# Changes in version 1.5.0 - 2016-10-19
diff --git a/src/main/java/org/torproject/descriptor/NetworkStatusEntry.java b/src/main/java/org/torproject/descriptor/NetworkStatusEntry.java
index 68f6939..ba413bb 100644
--- a/src/main/java/org/torproject/descriptor/NetworkStatusEntry.java
+++ b/src/main/java/org/torproject/descriptor/NetworkStatusEntry.java
@@ -5,6 +5,7 @@ package org.torproject.descriptor;
import java.util.List;
import java.util.Set;
+import java.util.SortedMap;
import java.util.SortedSet;
/**
@@ -123,6 +124,14 @@ public interface NetworkStatusEntry {
public String getVersion();
/**
+ * Return the version numbers of all protocols supported by this server, or
+ * null if the status entry does not specify supported protocol versions.
+ *
+ * @since 1.6.0
+ */
+ public SortedMap<String, SortedSet<Long>> getProtocols();
+
+ /**
* Return the bandwidth weight of this server or -1 if the status entry
* didn't contain a bandwidth line.
*
diff --git a/src/main/java/org/torproject/descriptor/RelayNetworkStatusConsensus.java b/src/main/java/org/torproject/descriptor/RelayNetworkStatusConsensus.java
index a2deba3..b004b66 100644
--- a/src/main/java/org/torproject/descriptor/RelayNetworkStatusConsensus.java
+++ b/src/main/java/org/torproject/descriptor/RelayNetworkStatusConsensus.java
@@ -113,6 +113,42 @@ public interface RelayNetworkStatusConsensus extends Descriptor {
public List<String> getRecommendedClientVersions();
/**
+ * Return the version numbers of all protocols that clients should support,
+ * or null if the consensus does not contain an opinion about protocol
+ * versions.
+ *
+ * @since 1.6.0
+ */
+ public SortedMap<String, SortedSet<Long>> getRecommendedClientProtocols();
+
+ /**
+ * Return the version numbers of all protocols that relays should support,
+ * or null if the consensus does not contain an opinion about protocol
+ * versions.
+ *
+ * @since 1.6.0
+ */
+ public SortedMap<String, SortedSet<Long>> getRecommendedRelayProtocols();
+
+ /**
+ * Return the version numbers of all protocols that clients must support,
+ * or null if the consensus does not contain an opinion about protocol
+ * versions.
+ *
+ * @since 1.6.0
+ */
+ public SortedMap<String, SortedSet<Long>> getRequiredClientProtocols();
+
+ /**
+ * Return the version numbers of all protocols that relays must support,
+ * or null if the consensus does not contain an opinion about protocol
+ * versions.
+ *
+ * @since 1.6.0
+ */
+ public SortedMap<String, SortedSet<Long>> getRequiredRelayProtocols();
+
+ /**
* Return a list of software packages and their versions together with a
* URL and one or more digests in the format <code>PackageName Version
* URL DIGESTS</code> that are known by at least three directory
diff --git a/src/main/java/org/torproject/descriptor/RelayNetworkStatusVote.java b/src/main/java/org/torproject/descriptor/RelayNetworkStatusVote.java
index a3f8170..9ea804d 100644
--- a/src/main/java/org/torproject/descriptor/RelayNetworkStatusVote.java
+++ b/src/main/java/org/torproject/descriptor/RelayNetworkStatusVote.java
@@ -105,6 +105,38 @@ public interface RelayNetworkStatusVote extends Descriptor {
public List<String> getRecommendedClientVersions();
/**
+ * Return the version numbers of all protocols that clients should support,
+ * or null if the vote does not contain an opinion about protocol versions.
+ *
+ * @since 1.6.0
+ */
+ public SortedMap<String, SortedSet<Long>> getRecommendedClientProtocols();
+
+ /**
+ * Return the version numbers of all protocols that relays should support,
+ * or null if the vote does not contain an opinion about protocol versions.
+ *
+ * @since 1.6.0
+ */
+ public SortedMap<String, SortedSet<Long>> getRecommendedRelayProtocols();
+
+ /**
+ * Return the version numbers of all protocols that clients must support,
+ * or null if the vote does not contain an opinion about protocol versions.
+ *
+ * @since 1.6.0
+ */
+ public SortedMap<String, SortedSet<Long>> getRequiredClientProtocols();
+
+ /**
+ * Return the version numbers of all protocols that relays must support,
+ * or null if the vote does not contain an opinion about protocol versions.
+ *
+ * @since 1.6.0
+ */
+ public SortedMap<String, SortedSet<Long>> getRequiredRelayProtocols();
+
+ /**
* Return a list of software packages and their versions together with a
* URL and one or more digests in the format <code>PackageName Version
* URL DIGESTS</code> that are known by this directory authority, or
diff --git a/src/main/java/org/torproject/descriptor/ServerDescriptor.java b/src/main/java/org/torproject/descriptor/ServerDescriptor.java
index 418cb55..4ecade6 100644
--- a/src/main/java/org/torproject/descriptor/ServerDescriptor.java
+++ b/src/main/java/org/torproject/descriptor/ServerDescriptor.java
@@ -4,6 +4,8 @@
package org.torproject.descriptor;
import java.util.List;
+import java.util.SortedMap;
+import java.util.SortedSet;
/**
* Contains a relay or sanitized bridge server descriptor.
@@ -152,6 +154,14 @@ public interface ServerDescriptor extends Descriptor {
public String getPlatform();
/**
+ * Return the version numbers of all protocols supported by this server, or
+ * null if this descriptor does not specify supported protocol versions.
+ *
+ * @since 1.6.0
+ */
+ public SortedMap<String, SortedSet<Long>> getProtocols();
+
+ /**
* Return the time in milliseconds since the epoch when this descriptor
* and the corresponding extra-info descriptor were generated.
*
diff --git a/src/main/java/org/torproject/descriptor/impl/NetworkStatusEntryImpl.java b/src/main/java/org/torproject/descriptor/impl/NetworkStatusEntryImpl.java
index d26eaeb..f67e6bd 100644
--- a/src/main/java/org/torproject/descriptor/impl/NetworkStatusEntryImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/NetworkStatusEntryImpl.java
@@ -57,6 +57,7 @@ public class NetworkStatusEntryImpl implements NetworkStatusEntry {
this.atMostOnceKeywords = new TreeSet<>();
this.atMostOnceKeywords.add("s");
this.atMostOnceKeywords.add("v");
+ this.atMostOnceKeywords.add("pr");
this.atMostOnceKeywords.add("w");
this.atMostOnceKeywords.add("p");
}
@@ -95,6 +96,9 @@ public class NetworkStatusEntryImpl implements NetworkStatusEntry {
case "v":
this.parseVLine(line, parts);
break;
+ case "pr":
+ this.parsePrLine(line, parts);
+ break;
case "w":
this.parseWLine(line, parts);
break;
@@ -191,6 +195,12 @@ public class NetworkStatusEntryImpl implements NetworkStatusEntry {
}
}
+ private void parsePrLine(String line, String[] parts)
+ throws DescriptorParseException {
+ this.parsedAtMostOnceKeyword("pr");
+ this.protocols = ParseHelper.parseProtocolVersions(line, line, parts);
+ }
+
private void parseWLine(String line, String[] parts)
throws DescriptorParseException {
this.parsedAtMostOnceKeyword("w");
@@ -359,6 +369,13 @@ public class NetworkStatusEntryImpl implements NetworkStatusEntry {
return this.version;
}
+ private SortedMap<String, SortedSet<Long>> protocols;
+
+ @Override
+ public SortedMap<String, SortedSet<Long>> getProtocols() {
+ return this.protocols;
+ }
+
private long bandwidth = -1L;
@Override
diff --git a/src/main/java/org/torproject/descriptor/impl/ParseHelper.java b/src/main/java/org/torproject/descriptor/impl/ParseHelper.java
index dfa9065..f73a591 100644
--- a/src/main/java/org/torproject/descriptor/impl/ParseHelper.java
+++ b/src/main/java/org/torproject/descriptor/impl/ParseHelper.java
@@ -8,13 +8,16 @@ import org.torproject.descriptor.DescriptorParseException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
+import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Locale;
import java.util.Map;
import java.util.SortedMap;
+import java.util.SortedSet;
import java.util.TimeZone;
import java.util.TreeMap;
+import java.util.TreeSet;
import java.util.regex.Pattern;
import javax.xml.bind.DatatypeConverter;
@@ -578,5 +581,49 @@ public class ParseHelper {
throw new DescriptorParseException("Unable to locate "
+ "master-key-ed25519 in identity-ed25519.");
}
+
+ private static Map<String, SortedMap<String, SortedSet<Long>>>
+ parsedProtocolVersions = new HashMap<>();
+
+ protected static SortedMap<String, SortedSet<Long>> parseProtocolVersions(
+ String line, String lineNoOpt, String[] partsNoOpt)
+ throws DescriptorParseException {
+ if (!parsedProtocolVersions.containsKey(lineNoOpt)) {
+ SortedMap<String, SortedSet<Long>> parsed = new TreeMap<>();
+ boolean invalid = false;
+ try {
+ for (int i = 1; i < partsNoOpt.length; i++) {
+ String[] part = partsNoOpt[i].split("=");
+ SortedSet<Long> versions = new TreeSet<>();
+ for (String val : part[1].split(",")) {
+ if (val.contains("-")) {
+ String[] fromTo = val.split("-");
+ long from = Long.parseLong(fromTo[0]);
+ long to = Long.parseLong(fromTo[1]);
+ if (from > to || to >= 0x1_0000_0000L) {
+ invalid = true;
+ } else {
+ for (long j = from;
+ j <= to; j++) {
+ versions.add(j);
+ }
+ }
+ } else {
+ versions.add(Long.parseLong(val));
+ }
+ }
+ parsed.put(part[0], Collections.unmodifiableSortedSet(versions));
+ }
+ } catch (ArrayIndexOutOfBoundsException | NumberFormatException e) {
+ throw new DescriptorParseException("Invalid line '" + line + "'.", e);
+ }
+ if (invalid) {
+ throw new DescriptorParseException("Invalid line '" + line + "'.");
+ }
+ parsedProtocolVersions.put(lineNoOpt,
+ Collections.unmodifiableSortedMap(parsed));
+ }
+ return parsedProtocolVersions.get(lineNoOpt);
+ }
}
diff --git a/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImpl.java b/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImpl.java
index 8733729..fd4cf7e 100644
--- a/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImpl.java
@@ -52,7 +52,9 @@ public class RelayNetworkStatusConsensusImpl extends NetworkStatusImpl
+ "valid-until,voting-delay,known-flags").split(",")));
this.checkExactlyOnceKeywords(exactlyOnceKeywords);
Set<String> atMostOnceKeywords = new HashSet<>(Arrays.asList((
- "client-versions,server-versions,params,directory-footer,"
+ "client-versions,server-versions,recommended-client-protocols,"
+ + "recommended-relay-protocols,required-client-protocols,"
+ + "required-relay-protocols,params,directory-footer,"
+ "bandwidth-weights").split(",")));
this.checkAtMostOnceKeywords(atMostOnceKeywords);
this.checkFirstKeyword("network-status-version");
@@ -124,6 +126,18 @@ public class RelayNetworkStatusConsensusImpl extends NetworkStatusImpl
case "server-versions":
this.parseServerVersionsLine(line, parts);
break;
+ case "recommended-client-protocols":
+ this.parseRecommendedClientProtocolsLine(line, parts);
+ break;
+ case "recommended-relay-protocols":
+ this.parseRecommendedRelayProtocolsLine(line, parts);
+ break;
+ case "required-client-protocols":
+ this.parseRequiredClientProtocolsLine(line, parts);
+ break;
+ case "required-relay-protocols":
+ this.parseRequiredRelayProtocolsLine(line, parts);
+ break;
case "package":
this.parsePackageLine(line, parts);
break;
@@ -281,6 +295,30 @@ public class RelayNetworkStatusConsensusImpl extends NetworkStatusImpl
line, parts);
}
+ private void parseRecommendedClientProtocolsLine(String line, String[] parts)
+ throws DescriptorParseException {
+ this.recommendedClientProtocols = ParseHelper.parseProtocolVersions(line,
+ line, parts);
+ }
+
+ private void parseRecommendedRelayProtocolsLine(String line, String[] parts)
+ throws DescriptorParseException {
+ this.recommendedRelayProtocols = ParseHelper.parseProtocolVersions(line,
+ line, parts);
+ }
+
+ private void parseRequiredClientProtocolsLine(String line, String[] parts)
+ throws DescriptorParseException {
+ this.requiredClientProtocols = ParseHelper.parseProtocolVersions(line,
+ line, parts);
+ }
+
+ private void parseRequiredRelayProtocolsLine(String line, String[] parts)
+ throws DescriptorParseException {
+ this.requiredRelayProtocols = ParseHelper.parseProtocolVersions(line, line,
+ parts);
+ }
+
private void parsePackageLine(String line, String[] parts)
throws DescriptorParseException {
if (parts.length < 5) {
@@ -397,6 +435,34 @@ public class RelayNetworkStatusConsensusImpl extends NetworkStatusImpl
: Arrays.asList(this.recommendedServerVersions);
}
+ private SortedMap<String, SortedSet<Long>> recommendedClientProtocols;
+
+ @Override
+ public SortedMap<String, SortedSet<Long>> getRecommendedClientProtocols() {
+ return this.recommendedClientProtocols;
+ }
+
+ private SortedMap<String, SortedSet<Long>> recommendedRelayProtocols;
+
+ @Override
+ public SortedMap<String, SortedSet<Long>> getRecommendedRelayProtocols() {
+ return this.recommendedRelayProtocols;
+ }
+
+ private SortedMap<String, SortedSet<Long>> requiredClientProtocols;
+
+ @Override
+ public SortedMap<String, SortedSet<Long>> getRequiredClientProtocols() {
+ return this.requiredClientProtocols;
+ }
+
+ private SortedMap<String, SortedSet<Long>> requiredRelayProtocols;
+
+ @Override
+ public SortedMap<String, SortedSet<Long>> getRequiredRelayProtocols() {
+ return this.requiredRelayProtocols;
+ }
+
private List<String> packageLines;
@Override
diff --git a/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java b/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java
index 02390de..619b2c1 100644
--- a/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java
@@ -52,6 +52,8 @@ public class RelayNetworkStatusVoteImpl extends NetworkStatusImpl
this.checkExactlyOnceKeywords(exactlyOnceKeywords);
Set<String> atMostOnceKeywords = new HashSet<>(Arrays.asList((
"consensus-methods,client-versions,server-versions,"
+ + "recommended-client-protocols,recommended-relay-protocols,"
+ + "required-client-protocols,required-relay-protocols,"
+ "flag-thresholds,params,contact,"
+ "legacy-key,dir-key-crosscert,dir-address,directory-footer")
.split(",")));
@@ -117,6 +119,18 @@ public class RelayNetworkStatusVoteImpl extends NetworkStatusImpl
case "server-versions":
this.parseServerVersionsLine(line, parts);
break;
+ case "recommended-client-protocols":
+ this.parseRecommendedClientProtocolsLine(line, parts);
+ break;
+ case "recommended-relay-protocols":
+ this.parseRecommendedRelayProtocolsLine(line, parts);
+ break;
+ case "required-client-protocols":
+ this.parseRequiredClientProtocolsLine(line, parts);
+ break;
+ case "required-relay-protocols":
+ this.parseRequiredRelayProtocolsLine(line, parts);
+ break;
case "package":
this.parsePackageLine(line, parts);
break;
@@ -305,6 +319,30 @@ public class RelayNetworkStatusVoteImpl extends NetworkStatusImpl
line, parts);
}
+ private void parseRecommendedClientProtocolsLine(String line, String[] parts)
+ throws DescriptorParseException {
+ this.recommendedClientProtocols = ParseHelper.parseProtocolVersions(line,
+ line, parts);
+ }
+
+ private void parseRecommendedRelayProtocolsLine(String line, String[] parts)
+ throws DescriptorParseException {
+ this.recommendedRelayProtocols = ParseHelper.parseProtocolVersions(line,
+ line, parts);
+ }
+
+ private void parseRequiredClientProtocolsLine(String line, String[] parts)
+ throws DescriptorParseException {
+ this.requiredClientProtocols = ParseHelper.parseProtocolVersions(line,
+ line, parts);
+ }
+
+ private void parseRequiredRelayProtocolsLine(String line, String[] parts)
+ throws DescriptorParseException {
+ this.requiredRelayProtocols = ParseHelper.parseProtocolVersions(line, line,
+ parts);
+ }
+
private void parsePackageLine(String line, String[] parts)
throws DescriptorParseException {
if (parts.length < 5) {
@@ -710,6 +748,34 @@ public class RelayNetworkStatusVoteImpl extends NetworkStatusImpl
: Arrays.asList(this.recommendedServerVersions);
}
+ private SortedMap<String, SortedSet<Long>> recommendedClientProtocols;
+
+ @Override
+ public SortedMap<String, SortedSet<Long>> getRecommendedClientProtocols() {
+ return this.recommendedClientProtocols;
+ }
+
+ private SortedMap<String, SortedSet<Long>> recommendedRelayProtocols;
+
+ @Override
+ public SortedMap<String, SortedSet<Long>> getRecommendedRelayProtocols() {
+ return this.recommendedRelayProtocols;
+ }
+
+ private SortedMap<String, SortedSet<Long>> requiredClientProtocols;
+
+ @Override
+ public SortedMap<String, SortedSet<Long>> getRequiredClientProtocols() {
+ return this.requiredClientProtocols;
+ }
+
+ private SortedMap<String, SortedSet<Long>> requiredRelayProtocols;
+
+ @Override
+ public SortedMap<String, SortedSet<Long>> getRequiredRelayProtocols() {
+ return this.requiredRelayProtocols;
+ }
+
private List<String> packageLines;
@Override
diff --git a/src/main/java/org/torproject/descriptor/impl/ServerDescriptorImpl.java b/src/main/java/org/torproject/descriptor/impl/ServerDescriptorImpl.java
index 183959a..309cad4 100644
--- a/src/main/java/org/torproject/descriptor/impl/ServerDescriptorImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/ServerDescriptorImpl.java
@@ -16,6 +16,8 @@ import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
+import java.util.SortedMap;
+import java.util.SortedSet;
import javax.xml.bind.DatatypeConverter;
@@ -34,7 +36,7 @@ public abstract class ServerDescriptorImpl extends DescriptorImpl
"router,bandwidth,published".split(",")));
this.checkExactlyOnceKeywords(exactlyOnceKeywords);
Set<String> atMostOnceKeywords = new HashSet<>(Arrays.asList((
- "identity-ed25519,master-key-ed25519,platform,fingerprint,"
+ "identity-ed25519,master-key-ed25519,platform,proto,fingerprint,"
+ "hibernating,uptime,contact,family,read-history,write-history,"
+ "eventdns,caches-extra-info,extra-info-digest,"
+ "hidden-service-dir,protocols,allow-single-hop-exits,onion-key,"
@@ -80,6 +82,9 @@ public abstract class ServerDescriptorImpl extends DescriptorImpl
case "platform":
this.parsePlatformLine(line, lineNoOpt, partsNoOpt);
break;
+ case "proto":
+ this.parseProtoLine(line, lineNoOpt, partsNoOpt);
+ break;
case "published":
this.parsePublishedLine(line, lineNoOpt, partsNoOpt);
break;
@@ -303,6 +308,12 @@ public abstract class ServerDescriptorImpl extends DescriptorImpl
}
}
+ private void parseProtoLine(String line, String lineNoOpt,
+ String[] partsNoOpt) throws DescriptorParseException {
+ this.protocols = ParseHelper.parseProtocolVersions(line, lineNoOpt,
+ partsNoOpt);
+ }
+
private void parsePublishedLine(String line, String lineNoOpt,
String[] partsNoOpt) throws DescriptorParseException {
this.publishedMillis = ParseHelper.parseTimestampAtIndex(line,
@@ -812,6 +823,13 @@ public abstract class ServerDescriptorImpl extends DescriptorImpl
return this.platform;
}
+ private SortedMap<String, SortedSet<Long>> protocols;
+
+ @Override
+ public SortedMap<String, SortedSet<Long>> getProtocols() {
+ return this.protocols;
+ }
+
private long publishedMillis;
@Override
diff --git a/src/test/java/org/torproject/descriptor/impl/ConsensusBuilder.java b/src/test/java/org/torproject/descriptor/impl/ConsensusBuilder.java
index b765be6..24d5a02 100644
--- a/src/test/java/org/torproject/descriptor/impl/ConsensusBuilder.java
+++ b/src/test/java/org/torproject/descriptor/impl/ConsensusBuilder.java
@@ -126,6 +126,54 @@ public class ConsensusBuilder {
return new RelayNetworkStatusConsensusImpl(cb.buildConsensus(), true);
}
+ private String recommendedClientProtocolsLine =
+ "recommended-client-protocols Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 "
+ + "HSIntro=3 HSRend=1 Link=4 LinkAuth=1 Microdesc=1-2 Relay=2";
+
+ protected static RelayNetworkStatusConsensus
+ createWithRecommendedClientProtocolsLine(String line)
+ throws DescriptorParseException {
+ ConsensusBuilder cb = new ConsensusBuilder();
+ cb.recommendedClientProtocolsLine = line;
+ return new RelayNetworkStatusConsensusImpl(cb.buildConsensus(), true);
+ }
+
+ private String recommendedRelayProtocolsLine =
+ "recommended-relay-protocols Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 "
+ + "HSIntro=3 HSRend=1 Link=4 LinkAuth=1 Microdesc=1-2 Relay=2";
+
+ protected static RelayNetworkStatusConsensus
+ createWithRecommendedRelayProtocolsLine(String line)
+ throws DescriptorParseException {
+ ConsensusBuilder cb = new ConsensusBuilder();
+ cb.recommendedRelayProtocolsLine = line;
+ return new RelayNetworkStatusConsensusImpl(cb.buildConsensus(), true);
+ }
+
+ private String requiredClientProtocolsLine =
+ "required-client-protocols Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 "
+ + "HSIntro=3 HSRend=1 Link=4 LinkAuth=1 Microdesc=1-2 Relay=2";
+
+ protected static RelayNetworkStatusConsensus
+ createWithRequiredClientProtocolsLine(String line)
+ throws DescriptorParseException {
+ ConsensusBuilder cb = new ConsensusBuilder();
+ cb.requiredClientProtocolsLine = line;
+ return new RelayNetworkStatusConsensusImpl(cb.buildConsensus(), true);
+ }
+
+ private String requiredRelayProtocolsLine =
+ "required-relay-protocols Cons=1 Desc=1 DirCache=1 HSDir=1 HSIntro=3 "
+ + "HSRend=1 Link=3-4 LinkAuth=1 Microdesc=1 Relay=1-2";
+
+ protected static RelayNetworkStatusConsensus
+ createWithRequiredRelayProtocolsLine(String line)
+ throws DescriptorParseException {
+ ConsensusBuilder cb = new ConsensusBuilder();
+ cb.requiredRelayProtocolsLine = line;
+ return new RelayNetworkStatusConsensusImpl(cb.buildConsensus(), true);
+ }
+
private String paramsLine = "params "
+ "CircuitPriorityHalflifeMsec=30000 bwauthbestratio=1 "
+ "bwauthcircs=1 bwauthdescbw=0 bwauthkp=10000 bwauthpid=1 "
@@ -322,6 +370,18 @@ public class ConsensusBuilder {
if (this.knownFlagsLine != null) {
sb.append(this.knownFlagsLine).append("\n");
}
+ if (this.recommendedClientProtocolsLine != null) {
+ sb.append(this.recommendedClientProtocolsLine).append("\n");
+ }
+ if (this.recommendedRelayProtocolsLine != null) {
+ sb.append(this.recommendedRelayProtocolsLine).append("\n");
+ }
+ if (this.requiredClientProtocolsLine != null) {
+ sb.append(this.requiredClientProtocolsLine).append("\n");
+ }
+ if (this.requiredRelayProtocolsLine != null) {
+ sb.append(this.requiredRelayProtocolsLine).append("\n");
+ }
if (this.paramsLine != null) {
sb.append(this.paramsLine).append("\n");
}
diff --git a/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImplTest.java b/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImplTest.java
index ebcbd83..786ae54 100644
--- a/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImplTest.java
+++ b/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImplTest.java
@@ -19,6 +19,7 @@ import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.TreeSet;
/* TODO Add test cases for all lines starting with "opt ". */
@@ -242,6 +243,16 @@ public class RelayNetworkStatusConsensusImplTest {
return createWithStatusEntry(seb.buildStatusEntry());
}
+ private String prLine = "pr Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 "
+ + "HSIntro=3 HSRend=1-2 Link=1-4 LinkAuth=1 Microdesc=1-2 Relay=1-2";
+
+ private static RelayNetworkStatusConsensus
+ createWithPrLine(String line) throws DescriptorParseException {
+ StatusEntryBuilder seb = new StatusEntryBuilder();
+ seb.prLine = line;
+ return createWithStatusEntry(seb.buildStatusEntry());
+ }
+
@SuppressWarnings("checkstyle:membername")
private String wLine = "w Bandwidth=1";
@@ -275,6 +286,9 @@ public class RelayNetworkStatusConsensusImplTest {
if (this.vLine != null) {
sb.append(this.vLine).append("\n");
}
+ if (this.prLine != null) {
+ sb.append(this.prLine).append("\n");
+ }
if (this.wLine != null) {
sb.append(this.wLine).append("\n");
}
@@ -353,6 +367,14 @@ public class RelayNetworkStatusConsensusImplTest {
assertTrue(consensus.getRecommendedServerVersions().contains(
"0.2.3.8-alpha"));
assertTrue(consensus.getKnownFlags().contains("Running"));
+ assertTrue(consensus.getRecommendedClientProtocols().get("Cons")
+ .contains(1L));
+ assertFalse(consensus.getRecommendedRelayProtocols().get("Cons")
+ .contains(33L));
+ assertFalse(consensus.getRequiredClientProtocols().get("Relay")
+ .contains(1L));
+ assertTrue(consensus.getRequiredRelayProtocols().get("Relay")
+ .contains(1L));
assertEquals(30000, (int) consensus.getConsensusParams().get(
"CircuitPriorityHalflifeMsec"));
assertEquals("86.59.21.38", consensus.getDirSourceEntries().get(
@@ -667,6 +689,54 @@ public class RelayNetworkStatusConsensusImplTest {
}
@Test()
+ public void testRecommendedClientProtocols123()
+ throws DescriptorParseException {
+ RelayNetworkStatusConsensus consensus = ConsensusBuilder
+ .createWithRecommendedClientProtocolsLine(
+ "recommended-client-protocols Cons=1,2,3");
+ assertEquals(new TreeSet<Long>(Arrays.asList(new Long[] { 1L, 2L, 3L })),
+ consensus.getRecommendedClientProtocols().get("Cons"));
+ }
+
+ @Test()
+ public void testRecommendedRelayProtocols134()
+ throws DescriptorParseException {
+ RelayNetworkStatusConsensus consensus = ConsensusBuilder
+ .createWithRecommendedRelayProtocolsLine(
+ "recommended-relay-protocols Cons=1,3-4");
+ assertEquals(new TreeSet<Long>(Arrays.asList(new Long[] { 1L, 3L, 4L })),
+ consensus.getRecommendedRelayProtocols().get("Cons"));
+ }
+
+ @Test()
+ public void testRequiredClientProtocols1425()
+ throws DescriptorParseException {
+ RelayNetworkStatusConsensus consensus = ConsensusBuilder
+ .createWithRequiredClientProtocolsLine(
+ "required-client-protocols Cons=1-3,2-4");
+ assertEquals(new TreeSet<Long>(Arrays.asList(
+ new Long[] { 1L, 2L, 3L, 4L })),
+ consensus.getRequiredClientProtocols().get("Cons"));
+ }
+
+ @Test()
+ public void testRequiredRelayProtocols1111()
+ throws DescriptorParseException {
+ RelayNetworkStatusConsensus consensus = ConsensusBuilder
+ .createWithRequiredRelayProtocolsLine(
+ "required-relay-protocols Cons=1-1,1-1");
+ assertEquals(new TreeSet<Long>(Arrays.asList(new Long[] { 1L })),
+ consensus.getRequiredRelayProtocols().get("Cons"));
+ }
+
+ @Test(expected = DescriptorParseException.class)
+ public void testRequiredRelayProtocolsTwice()
+ throws DescriptorParseException {
+ ConsensusBuilder.createWithRequiredRelayProtocolsLine(
+ "required-relay-protocols Cons=1\nrequired-relay-protocols Cons=1");
+ }
+
+ @Test()
public void testPackageNone() throws DescriptorParseException {
RelayNetworkStatusConsensus consensus =
ConsensusBuilder.createWithPackageLines(null);
@@ -1022,6 +1092,15 @@ public class RelayNetworkStatusConsensusImplTest {
}
@Test(expected = DescriptorParseException.class)
+ public void testTwoPrLines() throws DescriptorParseException {
+ StatusEntryBuilder sb = new StatusEntryBuilder();
+ sb.prLine = sb.prLine + "\n" + sb.prLine;
+ ConsensusBuilder cb = new ConsensusBuilder();
+ cb.statusEntries.add(sb.buildStatusEntry());
+ new RelayNetworkStatusConsensusImpl(cb.buildConsensus(), true);
+ }
+
+ @Test(expected = DescriptorParseException.class)
public void testWLineNoSpace() throws DescriptorParseException {
StatusEntryBuilder.createWithWLine("w");
}
diff --git a/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImplTest.java b/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImplTest.java
index 847c538..ea7b927 100644
--- a/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImplTest.java
+++ b/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImplTest.java
@@ -16,6 +16,7 @@ import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.TreeSet;
/* TODO Add test cases for all lines starting with "opt ". */
@@ -153,6 +154,54 @@ public class RelayNetworkStatusVoteImplTest {
return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
}
+ private String recommendedClientProtocolsLine =
+ "recommended-client-protocols Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 "
+ + "HSIntro=3 HSRend=1 Link=4 LinkAuth=1 Microdesc=1-2 Relay=2";
+
+ private static RelayNetworkStatusVote
+ createWithRecommendedClientProtocolsLine(String line)
+ throws DescriptorParseException {
+ VoteBuilder vb = new VoteBuilder();
+ vb.recommendedClientProtocolsLine = line;
+ return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
+ }
+
+ private String recommendedRelayProtocolsLine =
+ "recommended-relay-protocols Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 "
+ + "HSIntro=3 HSRend=1 Link=4 LinkAuth=1 Microdesc=1-2 Relay=2";
+
+ private static RelayNetworkStatusVote
+ createWithRecommendedRelayProtocolsLine(String line)
+ throws DescriptorParseException {
+ VoteBuilder vb = new VoteBuilder();
+ vb.recommendedRelayProtocolsLine = line;
+ return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
+ }
+
+ private String requiredClientProtocolsLine =
+ "required-client-protocols Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 "
+ + "HSIntro=3 HSRend=1 Link=4 LinkAuth=1 Microdesc=1-2 Relay=2";
+
+ private static RelayNetworkStatusVote
+ createWithRequiredClientProtocolsLine(String line)
+ throws DescriptorParseException {
+ VoteBuilder vb = new VoteBuilder();
+ vb.requiredClientProtocolsLine = line;
+ return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
+ }
+
+ private String requiredRelayProtocolsLine =
+ "required-relay-protocols Cons=1 Desc=1 DirCache=1 HSDir=1 HSIntro=3 "
+ + "HSRend=1 Link=3-4 LinkAuth=1 Microdesc=1 Relay=1-2";
+
+ private static RelayNetworkStatusVote
+ createWithRequiredRelayProtocolsLine(String line)
+ throws DescriptorParseException {
+ VoteBuilder vb = new VoteBuilder();
+ vb.requiredRelayProtocolsLine = line;
+ return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
+ }
+
private String flagThresholdsLine = "flag-thresholds "
+ "stable-uptime=693369 stable-mtbf=153249 fast-speed=40960 "
+ "guard-wfu=94.669% guard-tk=691200 guard-bw-inc-exits=174080 "
@@ -493,6 +542,18 @@ public class RelayNetworkStatusVoteImplTest {
if (this.knownFlagsLine != null) {
sb.append(this.knownFlagsLine).append("\n");
}
+ if (this.recommendedClientProtocolsLine != null) {
+ sb.append(this.recommendedClientProtocolsLine).append("\n");
+ }
+ if (this.recommendedRelayProtocolsLine != null) {
+ sb.append(this.recommendedRelayProtocolsLine).append("\n");
+ }
+ if (this.requiredClientProtocolsLine != null) {
+ sb.append(this.requiredClientProtocolsLine).append("\n");
+ }
+ if (this.requiredRelayProtocolsLine != null) {
+ sb.append(this.requiredRelayProtocolsLine).append("\n");
+ }
if (this.flagThresholdsLine != null) {
sb.append(this.flagThresholdsLine).append("\n");
}
@@ -875,6 +936,37 @@ public class RelayNetworkStatusVoteImplTest {
"client-versions ,0.2.2.34");
}
+ @Test(expected = DescriptorParseException.class)
+ public void testRecommendedClientProtocols21()
+ throws DescriptorParseException {
+ VoteBuilder.createWithRecommendedClientProtocolsLine(
+ "recommended-client-protocols Cons=2-1");
+ }
+
+ @Test()
+ public void testRecommendedRelayProtocols0()
+ throws DescriptorParseException {
+ RelayNetworkStatusVote vote =
+ VoteBuilder.createWithRecommendedRelayProtocolsLine(
+ "recommended-relay-protocols Cons=0");
+ assertEquals(new TreeSet<Long>(Arrays.asList(new Long[] { 0L })),
+ vote.getRecommendedRelayProtocols().get("Cons"));
+ }
+
+ @Test(expected = DescriptorParseException.class)
+ public void testRequiredClientProtocols1Max()
+ throws DescriptorParseException {
+ VoteBuilder.createWithRequiredClientProtocolsLine(
+ "recommended-client-protocols Cons=1-4294967296");
+ }
+
+ @Test(expected = DescriptorParseException.class)
+ public void testRequiredRelayProtocolsMinus1()
+ throws DescriptorParseException {
+ VoteBuilder.createWithRequiredRelayProtocolsLine(
+ "recommended-client-protocols Cons=-1");
+ }
+
@Test()
public void testPackageNone() throws DescriptorParseException {
RelayNetworkStatusVote vote =
diff --git a/src/test/java/org/torproject/descriptor/impl/ServerDescriptorImplTest.java b/src/test/java/org/torproject/descriptor/impl/ServerDescriptorImplTest.java
index 3769ead..4370321 100644
--- a/src/test/java/org/torproject/descriptor/impl/ServerDescriptorImplTest.java
+++ b/src/test/java/org/torproject/descriptor/impl/ServerDescriptorImplTest.java
@@ -21,6 +21,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.SortedMap;
+import java.util.TreeSet;
/* Test parsing of relay server descriptors. */
public class ServerDescriptorImplTest {
@@ -226,7 +227,7 @@ public class ServerDescriptorImplTest {
return new RelayServerDescriptorImpl(db.buildDescriptor(), true);
}
- private String protocolsLine = "opt protocols Link 1 2 Circuit 1";
+ private String protocolsLine = null;
private static ServerDescriptor createWithProtocolsLine(
String line) throws DescriptorParseException {
@@ -235,6 +236,16 @@ public class ServerDescriptorImplTest {
return new RelayServerDescriptorImpl(db.buildDescriptor(), true);
}
+ private String protoLine = "proto Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 "
+ + "HSIntro=3 HSRend=1-2 Link=1-4 LinkAuth=1 Microdesc=1-2 Relay=1-2";
+
+ private static ServerDescriptor createWithProtoLine(
+ String line) throws DescriptorParseException {
+ DescriptorBuilder db = new DescriptorBuilder();
+ db.protoLine = line;
+ return new RelayServerDescriptorImpl(db.buildDescriptor(), true);
+ }
+
private String allowSingleHopExitsLine = null;
private static ServerDescriptor
@@ -395,6 +406,9 @@ public class ServerDescriptorImplTest {
if (this.protocolsLine != null) {
sb.append(this.protocolsLine).append("\n");
}
+ if (this.protoLine != null) {
+ sb.append(this.protoLine).append("\n");
+ }
if (this.allowSingleHopExitsLine != null) {
sb.append(this.allowSingleHopExitsLine).append("\n");
}
@@ -446,10 +460,10 @@ public class ServerDescriptorImplTest {
assertEquals(0, (int) descriptor.getDirPort());
assertEquals("Tor 0.2.2.35 (git-b04388f9e7546a9f) on Linux i686",
descriptor.getPlatform());
- assertEquals(Arrays.asList(new Integer[] {1, 2}),
- descriptor.getLinkProtocolVersions());
- assertEquals(Arrays.asList(new Integer[] {1}),
- descriptor.getCircuitProtocolVersions());
+ assertEquals(new TreeSet<Long>(Arrays.asList(
+ new Long[] { 1L, 2L, 3L, 4L })), descriptor.getProtocols().get("Link"));
+ assertEquals(new TreeSet<Long>(Arrays.asList(
+ new Long[] { 1L })), descriptor.getProtocols().get("LinkAuth"));
assertEquals(1325390599000L, descriptor.getPublishedMillis());
assertEquals("D8733048FC8EC9102466AD8F3098622BF1BF71FD",
descriptor.getFingerprint());
@@ -605,6 +619,16 @@ public class ServerDescriptorImplTest {
}
@Test()
+ public void testProtocolsOpt() throws DescriptorParseException {
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithProtocolsLine("opt protocols Link 1 2 Circuit 1");
+ assertEquals(Arrays.asList(new Integer[] {1, 2}),
+ descriptor.getLinkProtocolVersions());
+ assertEquals(Arrays.asList(new Integer[] {1}),
+ descriptor.getCircuitProtocolVersions());
+ }
+
+ @Test()
public void testProtocolsNoOpt() throws DescriptorParseException {
ServerDescriptor descriptor = DescriptorBuilder
.createWithProtocolsLine("protocols Link 1 2 Circuit 1");
@@ -626,6 +650,21 @@ public class ServerDescriptorImplTest {
DescriptorBuilder.createWithProtocolsLine("opt protocols Link 1 2");
}
+ @Test()
+ public void testProtoGreenPurple() throws DescriptorParseException {
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithProtoLine("proto Green=23 Purple=42");
+ assertEquals(new TreeSet<Long>(Arrays.asList(new Long[] { 23L })),
+ descriptor.getProtocols().get("Green"));
+ assertEquals(new TreeSet<Long>(Arrays.asList(new Long[] { 42L })),
+ descriptor.getProtocols().get("Purple"));
+ }
+
+ @Test(expected = DescriptorParseException.class)
+ public void testProtoInvalid() throws DescriptorParseException {
+ DescriptorBuilder.createWithProtoLine("proto Invalid=1+2+3");
+ }
+
@Test(expected = DescriptorParseException.class)
public void testPublishedMissing() throws DescriptorParseException {
DescriptorBuilder.createWithPublishedLine(null);
1
0
commit b7c236e0fbffc709ba381d660596c3015127be63
Author: iwakeh <iwakeh(a)torproject.org>
Date: Thu Jan 5 12:26:09 2017 +0100
Added changelog entry.
---
CHANGELOG.md | 3 +++
1 file changed, 3 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2a90b84..22586d2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,9 @@
- Add two methods for loading and saving a parse history file in
the descriptor reader to avoid situations where applications fail
after all descriptors are read but before they are all processed.
+ - Unify the build process by adding git-submodule metrics-base in
+ src/build and removing all centralized parts of the build
+ process.
# Changes in version 1.5.0 - 2016-10-19
1
0

17 Feb '17
commit 74ee2145eedacb61b14e9c234b8f4266710e5eb9
Author: iwakeh <iwakeh(a)torproject.org>
Date: Tue Oct 25 12:33:24 2016 +0200
Make the reader thread a daemon thread.
---
CHANGELOG.md | 4 ++++
.../java/org/torproject/descriptor/impl/DescriptorReaderImpl.java | 4 +++-
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index afaa1e8..755428d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,10 @@
process.
- Avoid deleting extraneous local descriptor files when collecting
descriptors from CollecTor.
+ - Turn the descriptor reader thread into a daemon thread, so that
+ the application can decide at any time to stop consuming
+ descriptors without having to worry about the reader thread not
+ being done.
# Changes in version 1.5.0 - 2016-10-19
diff --git a/src/main/java/org/torproject/descriptor/impl/DescriptorReaderImpl.java b/src/main/java/org/torproject/descriptor/impl/DescriptorReaderImpl.java
index cb14588..12d73ad 100644
--- a/src/main/java/org/torproject/descriptor/impl/DescriptorReaderImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/DescriptorReaderImpl.java
@@ -153,7 +153,9 @@ public class DescriptorReaderImpl implements DescriptorReader {
this.tarballs, descriptorQueue, this.autoSaveHistoryFile,
this.manualSaveHistoryFile, this.excludedFiles,
this.failUnrecognizedDescriptorLines);
- new Thread(this.reader).start();
+ Thread readerThread = new Thread(this.reader);
+ readerThread.setDaemon(true);
+ readerThread.start();
return descriptorQueue;
}
1
0

[metrics-lib/release] Only create javadoc for api, implements part of task-21469.
by karsten@torproject.org 17 Feb '17
by karsten@torproject.org 17 Feb '17
17 Feb '17
commit b3d4ff1738186b21ba8c118114bcca435d414fa9
Author: iwakeh <iwakeh(a)torproject.org>
Date: Tue Feb 14 14:29:34 2017 +0000
Only create javadoc for api, implements part of task-21469.
---
build.xml | 2 +-
src/build | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/build.xml b/build.xml
index a870eca..cc7a4a7 100644
--- a/build.xml
+++ b/build.xml
@@ -8,7 +8,7 @@
<property name="release.version" value="1.5.0-dev" />
<property name="javadoc-title" value="DescripTor API Documentation"/>
- <property name="javadoc-excludes" value="**/impl/**" />
+ <property name="javadoc-excludes" value="**/impl/** **/index/**" />
<property name="implementation-title" value="DescripTor" />
<property name="name" value="descriptor" />
<property name="jarpatternprop" value="empty" />
diff --git a/src/build b/src/build
index bb0e1e5..6940759 160000
--- a/src/build
+++ b/src/build
@@ -1 +1 @@
-Subproject commit bb0e1e50ba75dfa15add334706d8ce288fbf2b0b
+Subproject commit 6940759436bbd3bdb117572886f6104f78c3b469
1
0

17 Feb '17
commit c3079ae2ecbed0994273b7986e3cf19160f55153
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Wed Jan 25 11:27:09 2017 +0100
Remove 604 checkstyle complaints.
Resolves #21144.
---
.../descriptor/DescriptorSourceFactory.java | 3 +-
.../descriptor/impl/DescriptorReaderImpl.java | 3 +-
.../descriptor/DescriptorSourceFactoryTest.java | 82 ++---
.../descriptor/DummyCollectorImplementation.java | 15 +
.../descriptor/DummyDownloaderImplementation.java | 15 +
.../descriptor/DummyParserImplementation.java | 15 +
.../descriptor/DummyReaderImplementation.java | 15 +
.../descriptor/benchmark/MeasurePerformance.java | 22 +-
.../descriptor/impl/BridgeNetworkStatusTest.java | 24 +-
.../descriptor/impl/ConsensusBuilder.java | 55 +++-
.../impl/DescriptorCollectorImplTest.java | 5 +-
.../descriptor/impl/DescriptorReaderImplTest.java | 1 +
.../descriptor/impl/ExitListImplTest.java | 10 +-
.../impl/ExtraInfoDescriptorImplTest.java | 231 ++++++++++----
.../descriptor/impl/MicrodescriptorImplTest.java | 16 +-
.../impl/RelayNetworkStatusConsensusImplTest.java | 97 ++++--
.../impl/RelayNetworkStatusImplTest.java | 47 ++-
.../impl/RelayNetworkStatusVoteImplTest.java | 111 +++++--
.../descriptor/impl/ServerDescriptorImplTest.java | 338 ++++++++++++---------
.../descriptor/impl/TorperfResultImplTest.java | 10 +-
20 files changed, 772 insertions(+), 343 deletions(-)
diff --git a/src/main/java/org/torproject/descriptor/DescriptorSourceFactory.java b/src/main/java/org/torproject/descriptor/DescriptorSourceFactory.java
index efdc5cf..77d8740 100644
--- a/src/main/java/org/torproject/descriptor/DescriptorSourceFactory.java
+++ b/src/main/java/org/torproject/descriptor/DescriptorSourceFactory.java
@@ -34,7 +34,8 @@ import org.slf4j.LoggerFactory;
* descriptor downloader:</p>
*
* <p><code>
- * java -Ddescriptor.downloader=my.special.descriptorimpl.Downloader my.app.Mainclass
+ * java -Ddescriptor.downloader=my.special.descriptorimpl.Downloader \
+ * my.app.Mainclass
* </code></p>
*
* @since 1.0.0
diff --git a/src/main/java/org/torproject/descriptor/impl/DescriptorReaderImpl.java b/src/main/java/org/torproject/descriptor/impl/DescriptorReaderImpl.java
index 2cbb6c8..cb14588 100644
--- a/src/main/java/org/torproject/descriptor/impl/DescriptorReaderImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/DescriptorReaderImpl.java
@@ -36,7 +36,8 @@ import java.util.TreeMap;
public class DescriptorReaderImpl implements DescriptorReader {
- private static Logger log = LoggerFactory.getLogger(DescriptorReaderImpl.class);
+ private static Logger log = LoggerFactory.getLogger(
+ DescriptorReaderImpl.class);
private boolean hasStartedReading = false;
private List<File> directories = new ArrayList<>();
diff --git a/src/test/java/org/torproject/descriptor/DescriptorSourceFactoryTest.java b/src/test/java/org/torproject/descriptor/DescriptorSourceFactoryTest.java
index d8990ac..9e0b5ff 100644
--- a/src/test/java/org/torproject/descriptor/DescriptorSourceFactoryTest.java
+++ b/src/test/java/org/torproject/descriptor/DescriptorSourceFactoryTest.java
@@ -1,42 +1,46 @@
/* Copyright 2016--2017 The Tor Project
* See LICENSE for licensing information */
+
package org.torproject.descriptor;
-import static org.torproject.descriptor.DescriptorSourceFactory.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.torproject.descriptor.DescriptorSourceFactory.COLLECTOR_DEFAULT;
+import static org.torproject.descriptor.DescriptorSourceFactory.COLLECTOR_PROPERTY;
+import static org.torproject.descriptor.DescriptorSourceFactory.DOWNLOADER_DEFAULT;
+import static org.torproject.descriptor.DescriptorSourceFactory.DOWNLOADER_PROPERTY;
+import static org.torproject.descriptor.DescriptorSourceFactory.PARSER_DEFAULT;
+import static org.torproject.descriptor.DescriptorSourceFactory.PARSER_PROPERTY;
+import static org.torproject.descriptor.DescriptorSourceFactory.READER_DEFAULT;
+import static org.torproject.descriptor.DescriptorSourceFactory.READER_PROPERTY;
-import org.torproject.descriptor.DescriptorCollector;
-import org.torproject.descriptor.DescriptorDownloader;
-import org.torproject.descriptor.DescriptorParser;
-import org.torproject.descriptor.DescriptorReader;
-import org.torproject.descriptor.ImplementationNotAccessibleException;
import org.torproject.descriptor.impl.DescriptorDownloaderImpl;
import org.torproject.descriptor.impl.DescriptorParserImpl;
import org.torproject.descriptor.impl.DescriptorReaderImpl;
import org.torproject.descriptor.index.DescriptorIndexCollector;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
import org.junit.Test;
-import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
public class DescriptorSourceFactoryTest {
- private final static String[] properties = new String[]{
- COLLECTOR_PROPERTY, DOWNLOADER_PROPERTY, PARSER_PROPERTY, READER_PROPERTY};
- private final static String[] defaults = new String[]{
- COLLECTOR_DEFAULT, DOWNLOADER_DEFAULT, PARSER_DEFAULT, READER_DEFAULT};
+ private static final String[] properties = new String[] { COLLECTOR_PROPERTY,
+ DOWNLOADER_PROPERTY, PARSER_PROPERTY, READER_PROPERTY };
+
+ private static final String[] defaults = new String[] { COLLECTOR_DEFAULT,
+ DOWNLOADER_DEFAULT, PARSER_DEFAULT, READER_DEFAULT };
@Test()
public void testDefaults() {
setProperties(defaults);
- DescriptorCollector dc = DescriptorSourceFactory.createDescriptorCollector();
+ DescriptorCollector dc =
+ DescriptorSourceFactory.createDescriptorCollector();
assertTrue(dc instanceof DescriptorIndexCollector);
- DescriptorDownloader dd = DescriptorSourceFactory.createDescriptorDownloader();
+ DescriptorDownloader dd =
+ DescriptorSourceFactory.createDescriptorDownloader();
assertTrue(dd instanceof DescriptorDownloaderImpl);
DescriptorParser dp = DescriptorSourceFactory.createDescriptorParser();
assertTrue(dp instanceof DescriptorParserImpl);
@@ -66,7 +70,7 @@ public class DescriptorSourceFactoryTest {
retrieve.setAccessible(true);
retrieve.invoke(null, "unknown.property");
} catch (InvocationTargetException ite) {
- if(ite.getCause() instanceof ImplementationNotAccessibleException) {
+ if (ite.getCause() instanceof ImplementationNotAccessibleException) {
return;
} else {
fail("Cause was " + ite.getCause()
@@ -79,16 +83,17 @@ public class DescriptorSourceFactoryTest {
@Test()
public void testProperties() {
- setProperties(new String[]{
+ setProperties(new String[] {
"org.torproject.descriptor.DummyCollectorImplementation",
"org.torproject.descriptor.DummyDownloaderImplementation",
"org.torproject.descriptor.DummyParserImplementation",
- "org.torproject.descriptor.DummyReaderImplementation",
- });
- DescriptorCollector dc = DescriptorSourceFactory.createDescriptorCollector();
+ "org.torproject.descriptor.DummyReaderImplementation" });
+ DescriptorCollector dc =
+ DescriptorSourceFactory.createDescriptorCollector();
assertTrue(dc instanceof DummyCollectorImplementation);
assertEquals(1, DummyCollectorImplementation.count);
- DescriptorDownloader dd = DescriptorSourceFactory.createDescriptorDownloader();
+ DescriptorDownloader dd =
+ DescriptorSourceFactory.createDescriptorDownloader();
assertTrue(dd instanceof DummyDownloaderImplementation);
assertEquals(1, DummyDownloaderImplementation.count);
DescriptorParser dp = DescriptorSourceFactory.createDescriptorParser();
@@ -98,33 +103,4 @@ public class DescriptorSourceFactoryTest {
assertTrue(dr instanceof DummyReaderImplementation);
assertEquals(1, DummyReaderImplementation.count);
}
-
-}
-
-class DummyCollectorImplementation extends DescriptorIndexCollector {
- static int count;
- public DummyCollectorImplementation() {
- count++;
- }
-}
-
-class DummyDownloaderImplementation extends DescriptorDownloaderImpl {
- static int count;
- public DummyDownloaderImplementation() {
- count++;
- }
-}
-
-class DummyParserImplementation extends DescriptorParserImpl {
- static int count;
- public DummyParserImplementation() {
- count++;
- }
-}
-
-class DummyReaderImplementation extends DescriptorReaderImpl {
- static int count;
- public DummyReaderImplementation() {
- count++;
- }
}
diff --git a/src/test/java/org/torproject/descriptor/DummyCollectorImplementation.java b/src/test/java/org/torproject/descriptor/DummyCollectorImplementation.java
new file mode 100644
index 0000000..130a718
--- /dev/null
+++ b/src/test/java/org/torproject/descriptor/DummyCollectorImplementation.java
@@ -0,0 +1,15 @@
+/* Copyright 2016--2017 The Tor Project
+ * See LICENSE for licensing information */
+
+package org.torproject.descriptor;
+
+import org.torproject.descriptor.index.DescriptorIndexCollector;
+
+class DummyCollectorImplementation extends DescriptorIndexCollector {
+
+ static int count;
+
+ public DummyCollectorImplementation() {
+ count++;
+ }
+}
diff --git a/src/test/java/org/torproject/descriptor/DummyDownloaderImplementation.java b/src/test/java/org/torproject/descriptor/DummyDownloaderImplementation.java
new file mode 100644
index 0000000..dce3372
--- /dev/null
+++ b/src/test/java/org/torproject/descriptor/DummyDownloaderImplementation.java
@@ -0,0 +1,15 @@
+/* Copyright 2016--2017 The Tor Project
+ * See LICENSE for licensing information */
+
+package org.torproject.descriptor;
+
+import org.torproject.descriptor.impl.DescriptorDownloaderImpl;
+
+class DummyDownloaderImplementation extends DescriptorDownloaderImpl {
+
+ static int count;
+
+ public DummyDownloaderImplementation() {
+ count++;
+ }
+}
diff --git a/src/test/java/org/torproject/descriptor/DummyParserImplementation.java b/src/test/java/org/torproject/descriptor/DummyParserImplementation.java
new file mode 100644
index 0000000..42e67c9
--- /dev/null
+++ b/src/test/java/org/torproject/descriptor/DummyParserImplementation.java
@@ -0,0 +1,15 @@
+/* Copyright 2016--2017 The Tor Project
+ * See LICENSE for licensing information */
+
+package org.torproject.descriptor;
+
+import org.torproject.descriptor.impl.DescriptorParserImpl;
+
+class DummyParserImplementation extends DescriptorParserImpl {
+
+ static int count;
+
+ public DummyParserImplementation() {
+ count++;
+ }
+}
diff --git a/src/test/java/org/torproject/descriptor/DummyReaderImplementation.java b/src/test/java/org/torproject/descriptor/DummyReaderImplementation.java
new file mode 100644
index 0000000..8f74337
--- /dev/null
+++ b/src/test/java/org/torproject/descriptor/DummyReaderImplementation.java
@@ -0,0 +1,15 @@
+/* Copyright 2016--2017 The Tor Project
+ * See LICENSE for licensing information */
+
+package org.torproject.descriptor;
+
+import org.torproject.descriptor.impl.DescriptorReaderImpl;
+
+class DummyReaderImplementation extends DescriptorReaderImpl {
+
+ static int count;
+
+ public DummyReaderImplementation() {
+ count++;
+ }
+}
diff --git a/src/test/java/org/torproject/descriptor/benchmark/MeasurePerformance.java b/src/test/java/org/torproject/descriptor/benchmark/MeasurePerformance.java
index 4c36ae4..a0c923c 100644
--- a/src/test/java/org/torproject/descriptor/benchmark/MeasurePerformance.java
+++ b/src/test/java/org/torproject/descriptor/benchmark/MeasurePerformance.java
@@ -1,5 +1,6 @@
/* Copyright 2016--2017 The Tor Project
* See LICENSE for licensing information */
+
package org.torproject.descriptor.benchmark;
import org.torproject.descriptor.Descriptor;
@@ -20,7 +21,7 @@ import java.util.SortedMap;
public class MeasurePerformance {
- /* Check if all necessary files are available and then measure
+ /** Check if all necessary files are available and then measure
* performance of some more or less common use cases. */
public static void main(String[] args) {
if (!filesAvailable()) {
@@ -88,8 +89,9 @@ public class MeasurePerformance {
private static void measureAverageAdvertisedBandwidth(
File tarballFileOrDirectory) {
System.out.println("Starting measureAverageAdvertisedBandwidth");
- long startedMillis = System.currentTimeMillis();
- long sumAdvertisedBandwidth = 0, countedServerDescriptors = 0;
+ final long startedMillis = System.currentTimeMillis();
+ long sumAdvertisedBandwidth = 0;
+ long countedServerDescriptors = 0;
DescriptorReader descriptorReader =
DescriptorSourceFactory.createDescriptorReader();
descriptorReader.addTarball(tarballFileOrDirectory);
@@ -125,7 +127,7 @@ public class MeasurePerformance {
private static void measureCountriesV3Requests(File tarballFile) {
System.out.println("Starting measureCountriesV3Requests");
- long startedMillis = System.currentTimeMillis();
+ final long startedMillis = System.currentTimeMillis();
Set<String> countries = new HashSet<>();
long countedExtraInfoDescriptors = 0;
DescriptorReader descriptorReader =
@@ -165,9 +167,10 @@ public class MeasurePerformance {
private static void measureAverageRelaysExit(
File tarballFileOrDirectory) {
System.out.println("Starting measureAverageRelaysExit");
- long startedMillis = System.currentTimeMillis();
- long totalRelaysWithExitFlag = 0L, totalRelays = 0L,
- countedConsensuses = 0L;
+ final long startedMillis = System.currentTimeMillis();
+ long totalRelaysWithExitFlag = 0L;
+ long totalRelays = 0L;
+ long countedConsensuses = 0L;
DescriptorReader descriptorReader =
DescriptorSourceFactory.createDescriptorReader();
descriptorReader.addTarball(tarballFileOrDirectory);
@@ -212,8 +215,9 @@ public class MeasurePerformance {
File tarballFile) {
System.out.println("Starting "
+ "measureFractionRelaysExit80Microdescriptors");
- long startedMillis = System.currentTimeMillis();
- long totalRelaysWithExitFlag = 0L, countedMicrodescriptors = 0L;
+ final long startedMillis = System.currentTimeMillis();
+ long totalRelaysWithExitFlag = 0L;
+ long countedMicrodescriptors = 0L;
DescriptorReader descriptorReader =
DescriptorSourceFactory.createDescriptorReader();
descriptorReader.addTarball(tarballFile);
diff --git a/src/test/java/org/torproject/descriptor/impl/BridgeNetworkStatusTest.java b/src/test/java/org/torproject/descriptor/impl/BridgeNetworkStatusTest.java
index d1a083e..8720d7b 100644
--- a/src/test/java/org/torproject/descriptor/impl/BridgeNetworkStatusTest.java
+++ b/src/test/java/org/torproject/descriptor/impl/BridgeNetworkStatusTest.java
@@ -1,17 +1,19 @@
/* Copyright 2015--2017 The Tor Project
* See LICENSE for licensing information */
+
package org.torproject.descriptor.impl;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.junit.Test;
import org.torproject.descriptor.BridgeNetworkStatus;
import org.torproject.descriptor.DescriptorParseException;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+
/* Test parsing of bridge network statuses. Some of the parsing code is
* already tested in the consensus/vote-parsing tests. */
public class BridgeNetworkStatusTest {
@@ -19,8 +21,10 @@ public class BridgeNetworkStatusTest {
/* Helper class to build a bridge network status based on default data
* and modifications requested by test methods. */
private static class StatusBuilder {
+
private String fileName = "20151121-173936-"
+ "4A0CCD2DDC7995083D73F5D667100C8A5831F16D";
+
private static BridgeNetworkStatus
createWithFileName(String fileName)
throws DescriptorParseException {
@@ -29,7 +33,9 @@ public class BridgeNetworkStatusTest {
return new BridgeNetworkStatusImpl(sb.buildStatus(), sb.fileName,
true);
}
+
private String publishedLine = "published 2015-11-21 17:39:36";
+
private static BridgeNetworkStatus
createWithPublishedLine(String line)
throws DescriptorParseException {
@@ -38,11 +44,13 @@ public class BridgeNetworkStatusTest {
return new BridgeNetworkStatusImpl(sb.buildStatus(), sb.fileName,
true);
}
+
private String flagThresholdsLine = "flag-thresholds "
+ "stable-uptime=3105080 stable-mtbf=2450615 fast-speed=55000 "
+ "guard-wfu=98.000% guard-tk=691200 guard-bw-inc-exits=337000 "
+ "guard-bw-exc-exits=339000 enough-mtbf=1 "
+ "ignoring-advertised-bws=0";
+
private static BridgeNetworkStatus
createWithFlagThresholdsLine(String line)
throws DescriptorParseException {
@@ -51,8 +59,11 @@ public class BridgeNetworkStatusTest {
return new BridgeNetworkStatusImpl(sb.buildStatus(), sb.fileName,
true);
}
+
private List<String> statusEntries = new ArrayList<>();
+
private String unrecognizedHeaderLine = null;
+
protected static BridgeNetworkStatus
createWithUnrecognizedHeaderLine(String line,
boolean failUnrecognizedDescriptorLines)
@@ -62,7 +73,9 @@ public class BridgeNetworkStatusTest {
return new BridgeNetworkStatusImpl(sb.buildStatus(), sb.fileName,
failUnrecognizedDescriptorLines);
}
+
private String unrecognizedStatusEntryLine = null;
+
protected static BridgeNetworkStatus
createWithUnrecognizedStatusEntryLine(String line,
boolean failUnrecognizedDescriptorLines)
@@ -79,12 +92,14 @@ public class BridgeNetworkStatusTest {
+ "10.153.163.200 443 0\ns Fast Running Stable Valid\n"
+ "w Bandwidth=264\np reject 1-65535");
}
+
private byte[] buildStatus() {
StringBuilder sb = new StringBuilder();
this.appendHeader(sb);
this.appendStatusEntries(sb);
return sb.toString().getBytes();
}
+
private void appendHeader(StringBuilder sb) {
if (this.publishedLine != null) {
sb.append(this.publishedLine).append("\n");
@@ -96,6 +111,7 @@ public class BridgeNetworkStatusTest {
sb.append(this.unrecognizedHeaderLine).append("\n");
}
}
+
private void appendStatusEntries(StringBuilder sb) {
for (String statusEntry : this.statusEntries) {
sb.append(statusEntry).append("\n");
diff --git a/src/test/java/org/torproject/descriptor/impl/ConsensusBuilder.java b/src/test/java/org/torproject/descriptor/impl/ConsensusBuilder.java
index fccd33b..b765be6 100644
--- a/src/test/java/org/torproject/descriptor/impl/ConsensusBuilder.java
+++ b/src/test/java/org/torproject/descriptor/impl/ConsensusBuilder.java
@@ -1,17 +1,20 @@
/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
+
package org.torproject.descriptor.impl;
import org.torproject.descriptor.DescriptorParseException;
+import org.torproject.descriptor.RelayNetworkStatusConsensus;
+
import java.util.ArrayList;
import java.util.List;
-import org.torproject.descriptor.RelayNetworkStatusConsensus;
-
/* Helper class to build a consensus based on default data and
* modifications requested by test methods. */
public class ConsensusBuilder {
+
String networkStatusVersionLine = "network-status-version 3";
+
protected static RelayNetworkStatusConsensus
createWithNetworkStatusVersionLine(String line)
throws DescriptorParseException {
@@ -19,7 +22,9 @@ public class ConsensusBuilder {
cb.networkStatusVersionLine = line;
return new RelayNetworkStatusConsensusImpl(cb.buildConsensus(), true);
}
+
private String voteStatusLine = "vote-status consensus";
+
protected static RelayNetworkStatusConsensus
createWithVoteStatusLine(String line)
throws DescriptorParseException {
@@ -27,7 +32,9 @@ public class ConsensusBuilder {
cb.voteStatusLine = line;
return new RelayNetworkStatusConsensusImpl(cb.buildConsensus(), true);
}
+
private String consensusMethodLine = "consensus-method 11";
+
protected static RelayNetworkStatusConsensus
createWithConsensusMethodLine(String line)
throws DescriptorParseException {
@@ -35,7 +42,9 @@ public class ConsensusBuilder {
cb.consensusMethodLine = line;
return new RelayNetworkStatusConsensusImpl(cb.buildConsensus(), true);
}
+
private String validAfterLine = "valid-after 2011-11-30 09:00:00";
+
protected static RelayNetworkStatusConsensus
createWithValidAfterLine(String line)
throws DescriptorParseException {
@@ -43,7 +52,9 @@ public class ConsensusBuilder {
cb.validAfterLine = line;
return new RelayNetworkStatusConsensusImpl(cb.buildConsensus(), true);
}
+
private String freshUntilLine = "fresh-until 2011-11-30 10:00:00";
+
protected static RelayNetworkStatusConsensus
createWithFreshUntilLine(String line)
throws DescriptorParseException {
@@ -51,7 +62,9 @@ public class ConsensusBuilder {
cb.freshUntilLine = line;
return new RelayNetworkStatusConsensusImpl(cb.buildConsensus(), true);
}
+
private String validUntilLine = "valid-until 2011-11-30 12:00:00";
+
protected static RelayNetworkStatusConsensus
createWithValidUntilLine(String line)
throws DescriptorParseException {
@@ -59,7 +72,9 @@ public class ConsensusBuilder {
cb.validUntilLine = line;
return new RelayNetworkStatusConsensusImpl(cb.buildConsensus(), true);
}
+
private String votingDelayLine = "voting-delay 300 300";
+
protected static RelayNetworkStatusConsensus
createWithVotingDelayLine(String line)
throws DescriptorParseException {
@@ -67,8 +82,10 @@ public class ConsensusBuilder {
cb.votingDelayLine = line;
return new RelayNetworkStatusConsensusImpl(cb.buildConsensus(), true);
}
+
String clientVersionsLine = "client-versions 0.2.1.31,"
+ "0.2.2.34,0.2.3.6-alpha,0.2.3.7-alpha,0.2.3.8-alpha";
+
protected static RelayNetworkStatusConsensus
createWithClientVersionsLine(String line)
throws DescriptorParseException {
@@ -76,8 +93,10 @@ public class ConsensusBuilder {
cb.clientVersionsLine = line;
return new RelayNetworkStatusConsensusImpl(cb.buildConsensus(), true);
}
+
String serverVersionsLine = "server-versions 0.2.1.31,"
+ "0.2.2.34,0.2.3.6-alpha,0.2.3.7-alpha,0.2.3.8-alpha";
+
protected static RelayNetworkStatusConsensus
createWithServerVersionsLine(String line)
throws DescriptorParseException {
@@ -85,7 +104,9 @@ public class ConsensusBuilder {
cb.serverVersionsLine = line;
return new RelayNetworkStatusConsensusImpl(cb.buildConsensus(), true);
}
+
private String packageLines = null;
+
protected static RelayNetworkStatusConsensus
createWithPackageLines(String lines)
throws DescriptorParseException {
@@ -93,8 +114,10 @@ public class ConsensusBuilder {
cb.packageLines = lines;
return new RelayNetworkStatusConsensusImpl(cb.buildConsensus(), true);
}
+
private String knownFlagsLine = "known-flags Authority BadExit Exit "
+ "Fast Guard HSDir Named Running Stable Unnamed V2Dir Valid";
+
protected static RelayNetworkStatusConsensus
createWithKnownFlagsLine(String line)
throws DescriptorParseException {
@@ -102,11 +125,13 @@ public class ConsensusBuilder {
cb.knownFlagsLine = line;
return new RelayNetworkStatusConsensusImpl(cb.buildConsensus(), true);
}
+
private String paramsLine = "params "
+ "CircuitPriorityHalflifeMsec=30000 bwauthbestratio=1 "
+ "bwauthcircs=1 bwauthdescbw=0 bwauthkp=10000 bwauthpid=1 "
+ "bwauthtd=5000 bwauthti=50000 bwauthtidecay=5000 cbtnummodes=3 "
+ "cbtquantile=80 circwindow=1000 refuseunknownexits=1";
+
protected static RelayNetworkStatusConsensus
createWithParamsLine(String line)
throws DescriptorParseException {
@@ -114,12 +139,17 @@ public class ConsensusBuilder {
cb.paramsLine = line;
return new RelayNetworkStatusConsensusImpl(cb.buildConsensus(), true);
}
+
List<String> dirSources = new ArrayList<>();
+
List<String> statusEntries = new ArrayList<>();
+
private String directoryFooterLine = "directory-footer";
+
protected void setDirectoryFooterLine(String line) {
this.directoryFooterLine = line;
}
+
protected static RelayNetworkStatusConsensus
createWithDirectoryFooterLine(String line)
throws DescriptorParseException {
@@ -127,13 +157,16 @@ public class ConsensusBuilder {
cb.directoryFooterLine = line;
return new RelayNetworkStatusConsensusImpl(cb.buildConsensus(), true);
}
+
private String bandwidthWeightsLine = "bandwidth-weights Wbd=285 "
+ "Wbe=0 Wbg=0 Wbm=10000 Wdb=10000 Web=10000 Wed=1021 Wee=10000 "
+ "Weg=1021 Wem=10000 Wgb=10000 Wgd=8694 Wgg=10000 Wgm=10000 "
+ "Wmb=10000 Wmd=285 Wme=0 Wmg=0 Wmm=10000";
+
protected void setBandwidthWeightsLine(String line) {
this.bandwidthWeightsLine = line;
}
+
protected static RelayNetworkStatusConsensus
createWithBandwidthWeightsLine(String line)
throws DescriptorParseException {
@@ -141,11 +174,15 @@ public class ConsensusBuilder {
cb.bandwidthWeightsLine = line;
return new RelayNetworkStatusConsensusImpl(cb.buildConsensus(), true);
}
+
private List<String> directorySignatures = new ArrayList<>();
+
protected void addDirectorySignature(String directorySignatureString) {
this.directorySignatures.add(directorySignatureString);
}
+
private String unrecognizedHeaderLine = null;
+
protected static RelayNetworkStatusConsensus
createWithUnrecognizedHeaderLine(String line,
boolean failUnrecognizedDescriptorLines)
@@ -155,7 +192,9 @@ public class ConsensusBuilder {
return new RelayNetworkStatusConsensusImpl(cb.buildConsensus(),
failUnrecognizedDescriptorLines);
}
+
private String unrecognizedDirSourceLine = null;
+
protected static RelayNetworkStatusConsensus
createWithUnrecognizedDirSourceLine(String line,
boolean failUnrecognizedDescriptorLines)
@@ -165,7 +204,9 @@ public class ConsensusBuilder {
return new RelayNetworkStatusConsensusImpl(cb.buildConsensus(),
failUnrecognizedDescriptorLines);
}
+
private String unrecognizedStatusEntryLine = null;
+
protected static RelayNetworkStatusConsensus
createWithUnrecognizedStatusEntryLine(String line,
boolean failUnrecognizedDescriptorLines)
@@ -175,7 +216,9 @@ public class ConsensusBuilder {
return new RelayNetworkStatusConsensusImpl(cb.buildConsensus(),
failUnrecognizedDescriptorLines);
}
+
private String unrecognizedFooterLine = null;
+
protected static RelayNetworkStatusConsensus
createWithUnrecognizedFooterLine(String line,
boolean failUnrecognizedDescriptorLines)
@@ -185,7 +228,9 @@ public class ConsensusBuilder {
return new RelayNetworkStatusConsensusImpl(cb.buildConsensus(),
failUnrecognizedDescriptorLines);
}
+
private String unrecognizedDirectorySignatureLine = null;
+
protected static RelayNetworkStatusConsensus
createWithUnrecognizedDirectorySignatureLine(String line,
boolean failUnrecognizedDescriptorLines)
@@ -232,6 +277,7 @@ public class ConsensusBuilder {
+ "oQA/qeby7E\n5374pPPL6WwCLJHkKtk21S9oHDmFBdlZq7JWQelWlVM=\n"
+ "-----END SIGNATURE-----");
}
+
protected byte[] buildConsensus() {
StringBuilder sb = new StringBuilder();
this.appendHeader(sb);
@@ -241,6 +287,7 @@ public class ConsensusBuilder {
this.appendDirectorySignatures(sb);
return sb.toString().getBytes();
}
+
private void appendHeader(StringBuilder sb) {
if (this.networkStatusVersionLine != null) {
sb.append(this.networkStatusVersionLine).append("\n");
@@ -282,6 +329,7 @@ public class ConsensusBuilder {
sb.append(this.unrecognizedHeaderLine).append("\n");
}
}
+
private void appendDirSources(StringBuilder sb) {
for (String dirSource : this.dirSources) {
sb.append(dirSource).append("\n");
@@ -290,6 +338,7 @@ public class ConsensusBuilder {
sb.append(this.unrecognizedDirSourceLine).append("\n");
}
}
+
private void appendStatusEntries(StringBuilder sb) {
for (String statusEntry : this.statusEntries) {
sb.append(statusEntry).append("\n");
@@ -298,6 +347,7 @@ public class ConsensusBuilder {
sb.append(this.unrecognizedStatusEntryLine).append("\n");
}
}
+
private void appendFooter(StringBuilder sb) {
if (this.directoryFooterLine != null) {
sb.append(this.directoryFooterLine).append("\n");
@@ -309,6 +359,7 @@ public class ConsensusBuilder {
sb.append(this.unrecognizedFooterLine).append("\n");
}
}
+
private void appendDirectorySignatures(StringBuilder sb) {
for (String directorySignature : this.directorySignatures) {
sb.append(directorySignature).append("\n");
diff --git a/src/test/java/org/torproject/descriptor/impl/DescriptorCollectorImplTest.java b/src/test/java/org/torproject/descriptor/impl/DescriptorCollectorImplTest.java
index ad34528..45752b2 100644
--- a/src/test/java/org/torproject/descriptor/impl/DescriptorCollectorImplTest.java
+++ b/src/test/java/org/torproject/descriptor/impl/DescriptorCollectorImplTest.java
@@ -1,5 +1,6 @@
/* Copyright 2015--2017 The Tor Project
* See LICENSE for licensing information */
+
package org.torproject.descriptor.impl;
import static org.junit.Assert.assertEquals;
@@ -8,10 +9,10 @@ import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
-import java.util.SortedMap;
-
import org.junit.Test;
+import java.util.SortedMap;
+
public class DescriptorCollectorImplTest {
private static final String REMOTE_DIRECTORY_CONSENSUSES =
diff --git a/src/test/java/org/torproject/descriptor/impl/DescriptorReaderImplTest.java b/src/test/java/org/torproject/descriptor/impl/DescriptorReaderImplTest.java
index 5a418b9..0d3bdcf 100644
--- a/src/test/java/org/torproject/descriptor/impl/DescriptorReaderImplTest.java
+++ b/src/test/java/org/torproject/descriptor/impl/DescriptorReaderImplTest.java
@@ -1,5 +1,6 @@
/* Copyright 2016--2017 The Tor Project
* See LICENSE for licensing information */
+
package org.torproject.descriptor.impl;
import static org.junit.Assert.assertEquals;
diff --git a/src/test/java/org/torproject/descriptor/impl/ExitListImplTest.java b/src/test/java/org/torproject/descriptor/impl/ExitListImplTest.java
index 8bc81f9..916c4df 100644
--- a/src/test/java/org/torproject/descriptor/impl/ExitListImplTest.java
+++ b/src/test/java/org/torproject/descriptor/impl/ExitListImplTest.java
@@ -1,17 +1,19 @@
/* Copyright 2015--2017 The Tor Project
* See LICENSE for licensing information */
+
package org.torproject.descriptor.impl;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.junit.Test;
import org.torproject.descriptor.DescriptorParseException;
import org.torproject.descriptor.ExitListEntry;
+import org.junit.Test;
+
+import java.util.HashMap;
+import java.util.Map;
+
public class ExitListImplTest {
@Test()
diff --git a/src/test/java/org/torproject/descriptor/impl/ExtraInfoDescriptorImplTest.java b/src/test/java/org/torproject/descriptor/impl/ExtraInfoDescriptorImplTest.java
index fb38c86..096314e 100644
--- a/src/test/java/org/torproject/descriptor/impl/ExtraInfoDescriptorImplTest.java
+++ b/src/test/java/org/torproject/descriptor/impl/ExtraInfoDescriptorImplTest.java
@@ -1,5 +1,6 @@
/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
+
package org.torproject.descriptor.impl;
import static org.junit.Assert.assertEquals;
@@ -7,6 +8,13 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
+import org.torproject.descriptor.BridgeExtraInfoDescriptor;
+import org.torproject.descriptor.DescriptorParseException;
+import org.torproject.descriptor.ExtraInfoDescriptor;
+import org.torproject.descriptor.RelayExtraInfoDescriptor;
+
+import org.junit.Test;
+
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
@@ -14,138 +22,166 @@ import java.util.List;
import java.util.Map;
import java.util.SortedMap;
-import org.junit.Test;
-import org.torproject.descriptor.BridgeExtraInfoDescriptor;
-import org.torproject.descriptor.DescriptorParseException;
-import org.torproject.descriptor.ExtraInfoDescriptor;
-import org.torproject.descriptor.RelayExtraInfoDescriptor;
-
/* Test parsing of extra-info descriptors. */
public class ExtraInfoDescriptorImplTest {
/* Helper class to build a descriptor based on default data and
* modifications requested by test methods. */
private static class DescriptorBuilder {
+
private String extraInfoLine = "extra-info chaoscomputerclub5 "
+ "A9C039A5FD02FCA06303DCFAABE25C5912C63B26";
+
private static ExtraInfoDescriptor createWithExtraInfoLine(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.extraInfoLine = line;
return new RelayExtraInfoDescriptorImpl(db.buildDescriptor(), true);
}
+
private String publishedLine = "published 2012-02-11 09:08:36";
+
private static ExtraInfoDescriptor createWithPublishedLine(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.publishedLine = line;
return new RelayExtraInfoDescriptorImpl(db.buildDescriptor(), true);
}
+
private String writeHistoryLine = "write-history 2012-02-11 09:03:39 "
+ "(900 s) 4713350144,4723824640,4710717440,4572675072";
+
private static ExtraInfoDescriptor createWithWriteHistoryLine(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.writeHistoryLine = line;
return new RelayExtraInfoDescriptorImpl(db.buildDescriptor(), true);
}
+
private String readHistoryLine = "read-history 2012-02-11 09:03:39 "
+ "(900 s) 4707695616,4699666432,4650004480,4489718784";
+
private static ExtraInfoDescriptor createWithReadHistoryLine(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.readHistoryLine = line;
return new RelayExtraInfoDescriptorImpl(db.buildDescriptor(), true);
}
+
private String dirreqWriteHistoryLine = "dirreq-write-history "
+ "2012-02-11 09:03:39 (900 s) 81281024,64996352,60625920,"
+ "67922944";
+
private static ExtraInfoDescriptor createWithDirreqWriteHistoryLine(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.dirreqWriteHistoryLine = line;
return new RelayExtraInfoDescriptorImpl(db.buildDescriptor(), true);
}
+
private String dirreqReadHistoryLine = "dirreq-read-history "
+ "2012-02-11 09:03:39 (900 s) 17074176,16235520,16005120,"
+ "16209920";
+
private static ExtraInfoDescriptor createWithDirreqReadHistoryLine(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.dirreqReadHistoryLine = line;
return new RelayExtraInfoDescriptorImpl(db.buildDescriptor(), true);
}
+
private String geoipDbDigestLine = null;
+
private static ExtraInfoDescriptor createWithGeoipDbDigestLine(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.geoipDbDigestLine = line;
return new RelayExtraInfoDescriptorImpl(db.buildDescriptor(), true);
}
+
private String geoip6DbDigestLine = null;
+
private static ExtraInfoDescriptor createWithGeoip6DbDigestLine(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.geoip6DbDigestLine = line;
return new RelayExtraInfoDescriptorImpl(db.buildDescriptor(), true);
}
+
private String geoipStatsLines = null;
+
private static ExtraInfoDescriptor createWithGeoipStatsLines(
String lines) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.geoipStatsLines = lines;
return new RelayExtraInfoDescriptorImpl(db.buildDescriptor(), true);
}
+
private String dirreqStatsLines = null;
+
private static ExtraInfoDescriptor createWithDirreqStatsLines(
String lines) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.dirreqStatsLines = lines;
return new RelayExtraInfoDescriptorImpl(db.buildDescriptor(), true);
}
+
private String entryStatsLines = null;
+
private static ExtraInfoDescriptor createWithEntryStatsLines(
String lines) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.entryStatsLines = lines;
return new RelayExtraInfoDescriptorImpl(db.buildDescriptor(), true);
}
+
private String cellStatsLines = null;
+
private static ExtraInfoDescriptor createWithCellStatsLines(
String lines) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.cellStatsLines = lines;
return new RelayExtraInfoDescriptorImpl(db.buildDescriptor(), true);
}
+
private String connBiDirectLine = null;
+
private static ExtraInfoDescriptor createWithConnBiDirectLine(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.connBiDirectLine = line;
return new RelayExtraInfoDescriptorImpl(db.buildDescriptor(), true);
}
+
private String exitStatsLines = null;
+
private static ExtraInfoDescriptor createWithExitStatsLines(
String lines) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.exitStatsLines = lines;
return new RelayExtraInfoDescriptorImpl(db.buildDescriptor(), true);
}
+
private String bridgeStatsLines = null;
+
private static ExtraInfoDescriptor createWithBridgeStatsLines(
String lines) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.bridgeStatsLines = lines;
return new RelayExtraInfoDescriptorImpl(db.buildDescriptor(), true);
}
+
private String hidservStatsLines = null;
+
private static ExtraInfoDescriptor createWithHidservStatsLines(
String lines) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.hidservStatsLines = lines;
return new RelayExtraInfoDescriptorImpl(db.buildDescriptor(), true);
}
+
private String unrecognizedLine = null;
+
private static ExtraInfoDescriptor createWithUnrecognizedLine(
String line, boolean failUnrecognizedDescriptorLines)
throws DescriptorParseException {
@@ -154,7 +190,9 @@ public class ExtraInfoDescriptorImplTest {
return new RelayExtraInfoDescriptorImpl(db.buildDescriptor(),
failUnrecognizedDescriptorLines);
}
+
private byte[] nonAsciiLineBytes = null;
+
private static ExtraInfoDescriptor createWithNonAsciiLineBytes(
byte[] lineBytes, boolean failUnrecognizedDescriptorLines)
throws DescriptorParseException {
@@ -163,20 +201,27 @@ public class ExtraInfoDescriptorImplTest {
return new RelayExtraInfoDescriptorImpl(db.buildDescriptor(),
failUnrecognizedDescriptorLines);
}
+
private String routerSignatureLines = "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "o4j+kH8UQfjBwepUnr99v0ebN8RpzHJ/lqYsTojXHy9kMr1RNI9IDeSzA7PSqT"
+ "uV\n4PL8QsGtlfwthtIoZpB2srZeyN/mcpA9fa1JXUrt/UN9K/+32Cyaad7h0n"
+ "HE6Xfb\njqpXDpnBpvk4zjmzjjKYnIsUWTnADmu0fo3xTRqXi7g=\n"
+ "-----END SIGNATURE-----";
+
private static ExtraInfoDescriptor createWithRouterSignatureLines(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.routerSignatureLines = line;
return new RelayExtraInfoDescriptorImpl(db.buildDescriptor(), true);
}
- private String identityEd25519Lines = null,
- masterKeyEd25519Line = null, routerSigEd25519Line = null;
+
+ private String identityEd25519Lines = null;
+
+ private String masterKeyEd25519Line = null;
+
+ private String routerSigEd25519Line = null;
+
private static ExtraInfoDescriptor createWithEd25519Lines(
String identityEd25519Lines, String masterKeyEd25519Line,
String routerSigEd25519Line) throws DescriptorParseException {
@@ -186,6 +231,7 @@ public class ExtraInfoDescriptorImplTest {
db.routerSigEd25519Line = routerSigEd25519Line;
return new RelayExtraInfoDescriptorImpl(db.buildDescriptor(), true);
}
+
private byte[] buildDescriptor() {
StringBuilder sb = new StringBuilder();
if (this.extraInfoLine != null) {
@@ -272,8 +318,10 @@ public class ExtraInfoDescriptorImplTest {
/* Helper class to build a set of geoip-stats lines based on default
* data and modifications requested by test methods. */
private static class GeoipStatsBuilder {
+
private String geoipStartTimeLine = "geoip-start-time 2012-02-10 "
+ "18:32:51";
+
private static ExtraInfoDescriptor createWithGeoipStartTimeLine(
String line) throws DescriptorParseException {
GeoipStatsBuilder gsb = new GeoipStatsBuilder();
@@ -281,8 +329,10 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithGeoipStatsLines(
gsb.buildGeoipStatsLines());
}
+
private String geoipClientOriginsLine = "geoip-client-origins "
+ "de=1152,cn=896,us=712,it=504,ru=352,fr=208,gb=208,ir=200";
+
private static ExtraInfoDescriptor createWithGeoipClientOriginsLine(
String line) throws DescriptorParseException {
GeoipStatsBuilder gsb = new GeoipStatsBuilder();
@@ -290,11 +340,13 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithGeoipStatsLines(
gsb.buildGeoipStatsLines());
}
+
private static ExtraInfoDescriptor createWithDefaultLines()
throws DescriptorParseException {
return DescriptorBuilder.createWithGeoipStatsLines(
new GeoipStatsBuilder().buildGeoipStatsLines());
}
+
private String buildGeoipStatsLines() {
StringBuilder sb = new StringBuilder();
if (this.geoipStartTimeLine != null) {
@@ -314,8 +366,10 @@ public class ExtraInfoDescriptorImplTest {
/* Helper class to build a set of dirreq-stats lines based on default
* data and modifications requested by test methods. */
private static class DirreqStatsBuilder {
+
private String dirreqStatsEndLine = "dirreq-stats-end 2012-02-11 "
+ "00:59:53 (86400 s)";
+
private static ExtraInfoDescriptor createWithDirreqStatsEndLine(
String line) throws DescriptorParseException {
DirreqStatsBuilder dsb = new DirreqStatsBuilder();
@@ -323,8 +377,10 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithDirreqStatsLines(
dsb.buildDirreqStatsLines());
}
+
private String dirreqV3IpsLine = "dirreq-v3-ips us=1544,de=1056,"
+ "it=1032,fr=784,es=640,ru=440,br=312,gb=272,kr=224,sy=192";
+
private static ExtraInfoDescriptor createWithDirreqV3IpsLine(
String line) throws DescriptorParseException {
DirreqStatsBuilder dsb = new DirreqStatsBuilder();
@@ -332,7 +388,9 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithDirreqStatsLines(
dsb.buildDirreqStatsLines());
}
+
private String dirreqV2IpsLine = "dirreq-v2-ips ";
+
private static ExtraInfoDescriptor createWithDirreqV2IpsLine(
String line) throws DescriptorParseException {
DirreqStatsBuilder dsb = new DirreqStatsBuilder();
@@ -340,8 +398,10 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithDirreqStatsLines(
dsb.buildDirreqStatsLines());
}
+
private String dirreqV3ReqsLine = "dirreq-v3-reqs us=1744,de=1224,"
+ "it=1080,fr=832,es=664,ru=536,br=344,gb=296,kr=272,in=216";
+
private static ExtraInfoDescriptor createWithDirreqV3ReqsLine(
String line) throws DescriptorParseException {
DirreqStatsBuilder dsb = new DirreqStatsBuilder();
@@ -349,7 +409,9 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithDirreqStatsLines(
dsb.buildDirreqStatsLines());
}
+
private String dirreqV2ReqsLine = "dirreq-v2-reqs ";
+
private static ExtraInfoDescriptor createWithDirreqV2ReqsLine(
String line) throws DescriptorParseException {
DirreqStatsBuilder dsb = new DirreqStatsBuilder();
@@ -357,9 +419,11 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithDirreqStatsLines(
dsb.buildDirreqStatsLines());
}
+
private String dirreqV3RespLine = "dirreq-v3-resp ok=10848,"
+ "not-enough-sigs=8,unavailable=0,not-found=0,not-modified=0,"
+ "busy=80";
+
private static ExtraInfoDescriptor createWithDirreqV3RespLine(
String line) throws DescriptorParseException {
DirreqStatsBuilder dsb = new DirreqStatsBuilder();
@@ -367,8 +431,10 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithDirreqStatsLines(
dsb.buildDirreqStatsLines());
}
+
private String dirreqV2RespLine = "dirreq-v2-resp ok=0,unavailable=0,"
+ "not-found=1576,not-modified=0,busy=0";
+
private static ExtraInfoDescriptor createWithDirreqV2RespLine(
String line) throws DescriptorParseException {
DirreqStatsBuilder dsb = new DirreqStatsBuilder();
@@ -376,7 +442,9 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithDirreqStatsLines(
dsb.buildDirreqStatsLines());
}
+
private String dirreqV2ShareLine = "dirreq-v2-share 0.37%";
+
private static ExtraInfoDescriptor createWithDirreqV2ShareLine(
String line) throws DescriptorParseException {
DirreqStatsBuilder dsb = new DirreqStatsBuilder();
@@ -384,7 +452,9 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithDirreqStatsLines(
dsb.buildDirreqStatsLines());
}
+
private String dirreqV3ShareLine = "dirreq-v3-share 0.37%";
+
private static ExtraInfoDescriptor createWithDirreqV3ShareLine(
String line) throws DescriptorParseException {
DirreqStatsBuilder dsb = new DirreqStatsBuilder();
@@ -392,10 +462,12 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithDirreqStatsLines(
dsb.buildDirreqStatsLines());
}
+
private String dirreqV3DirectDlLine = "dirreq-v3-direct-dl "
+ "complete=36,timeout=4,running=0,min=7538,d1=20224,d2=28950,"
+ "q1=40969,d3=55786,d4=145813,md=199164,d6=267230,d7=480900,"
+ "q3=481049,d8=531276,d9=778086,max=15079428";
+
private static ExtraInfoDescriptor createWithDirreqV3DirectDlLine(
String line) throws DescriptorParseException {
DirreqStatsBuilder dsb = new DirreqStatsBuilder();
@@ -403,8 +475,10 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithDirreqStatsLines(
dsb.buildDirreqStatsLines());
}
+
private String dirreqV2DirectDlLine = "dirreq-v2-direct-dl "
+ "complete=0,timeout=0,running=0";
+
private static ExtraInfoDescriptor createWithDirreqV2DirectDlLine(
String line) throws DescriptorParseException {
DirreqStatsBuilder dsb = new DirreqStatsBuilder();
@@ -412,10 +486,12 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithDirreqStatsLines(
dsb.buildDirreqStatsLines());
}
+
private String dirreqV3TunneledDlLine = "dirreq-v3-tunneled-dl "
+ "complete=10608,timeout=204,running=4,min=507,d1=20399,"
+ "d2=27588,q1=29292,d3=30889,d4=40624,md=59967,d6=103333,"
+ "d7=161170,q3=209415,d8=256711,d9=452503,max=23417777";
+
private static ExtraInfoDescriptor createWithDirreqV3TunneledDlLine(
String line) throws DescriptorParseException {
DirreqStatsBuilder dsb = new DirreqStatsBuilder();
@@ -423,8 +499,10 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithDirreqStatsLines(
dsb.buildDirreqStatsLines());
}
+
private String dirreqV2TunneledDlLine = "dirreq-v2-tunneled-dl "
+ "complete=0,timeout=0,running=0";
+
private static ExtraInfoDescriptor createWithDirreqV2TunneledDlLine(
String line) throws DescriptorParseException {
DirreqStatsBuilder dsb = new DirreqStatsBuilder();
@@ -432,11 +510,13 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithDirreqStatsLines(
dsb.buildDirreqStatsLines());
}
+
private static ExtraInfoDescriptor createWithDefaultLines()
throws DescriptorParseException {
return DescriptorBuilder.createWithDirreqStatsLines(
new DirreqStatsBuilder().buildDirreqStatsLines());
}
+
private String buildDirreqStatsLines() {
StringBuilder sb = new StringBuilder();
if (this.dirreqStatsEndLine != null) {
@@ -489,8 +569,10 @@ public class ExtraInfoDescriptorImplTest {
/* Helper class to build a set of entry-stats lines based on default
* data and modifications requested by test methods. */
private static class EntryStatsBuilder {
+
private String entryStatsEndLine = "entry-stats-end 2012-02-11 "
+ "01:59:39 (86400 s)";
+
private static ExtraInfoDescriptor createWithEntryStatsEndLine(
String line) throws DescriptorParseException {
EntryStatsBuilder esb = new EntryStatsBuilder();
@@ -498,9 +580,11 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithEntryStatsLines(
esb.buildEntryStatsLines());
}
+
private String entryIpsLine = "entry-ips ir=25368,us=15744,it=14816,"
+ "de=13256,es=8280,fr=8120,br=5176,sy=4760,ru=4504,sa=4216,"
+ "gb=3152,pl=2928,nl=2208,kr=1856,ca=1792,ua=1272,in=1192";
+
private static ExtraInfoDescriptor createWithEntryIpsLine(
String line) throws DescriptorParseException {
EntryStatsBuilder esb = new EntryStatsBuilder();
@@ -508,11 +592,13 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithEntryStatsLines(
esb.buildEntryStatsLines());
}
+
private static ExtraInfoDescriptor createWithDefaultLines()
throws DescriptorParseException {
return DescriptorBuilder.createWithEntryStatsLines(
new EntryStatsBuilder().buildEntryStatsLines());
}
+
private String buildEntryStatsLines() {
StringBuilder sb = new StringBuilder();
if (this.entryStatsEndLine != null) {
@@ -532,8 +618,10 @@ public class ExtraInfoDescriptorImplTest {
/* Helper class to build a set of cell-stats lines based on default
* data and modifications requested by test methods. */
private static class CellStatsBuilder {
+
private String cellStatsEndLine = "cell-stats-end 2012-02-11 "
+ "01:59:39 (86400 s)";
+
private static ExtraInfoDescriptor createWithCellStatsEndLine(
String line) throws DescriptorParseException {
CellStatsBuilder csb = new CellStatsBuilder();
@@ -541,8 +629,10 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithCellStatsLines(
csb.buildCellStatsLines());
}
+
private String cellProcessedCellsLine = "cell-processed-cells "
+ "1441,11,6,4,2,1,1,1,1,1";
+
private static ExtraInfoDescriptor createWithCellProcessedCellsLine(
String line) throws DescriptorParseException {
CellStatsBuilder csb = new CellStatsBuilder();
@@ -550,8 +640,10 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithCellStatsLines(
csb.buildCellStatsLines());
}
+
private String cellQueuedCellsLine = "cell-queued-cells "
+ "3.29,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00";
+
private static ExtraInfoDescriptor createWithCellQueuedCellsLine(
String line) throws DescriptorParseException {
CellStatsBuilder csb = new CellStatsBuilder();
@@ -559,8 +651,10 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithCellStatsLines(
csb.buildCellStatsLines());
}
+
private String cellTimeInQueueLine = "cell-time-in-queue "
+ "524,1,1,0,0,25,0,0,0,0";
+
private static ExtraInfoDescriptor createWithCellTimeInQueueLine(
String line) throws DescriptorParseException {
CellStatsBuilder csb = new CellStatsBuilder();
@@ -568,8 +662,10 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithCellStatsLines(
csb.buildCellStatsLines());
}
+
private String cellCircuitsPerDecileLine = "cell-circuits-per-decile "
+ "866";
+
private static ExtraInfoDescriptor
createWithCellCircuitsPerDecileLine(String line)
throws DescriptorParseException {
@@ -578,11 +674,13 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithCellStatsLines(
csb.buildCellStatsLines());
}
+
private static ExtraInfoDescriptor createWithDefaultLines()
throws DescriptorParseException {
return DescriptorBuilder.createWithCellStatsLines(
new CellStatsBuilder().buildCellStatsLines());
}
+
private String buildCellStatsLines() {
StringBuilder sb = new StringBuilder();
if (this.cellStatsEndLine != null) {
@@ -611,8 +709,10 @@ public class ExtraInfoDescriptorImplTest {
/* Helper class to build a set of exit-stats lines based on default
* data and modifications requested by test methods. */
private static class ExitStatsBuilder {
+
private String exitStatsEndLine = "exit-stats-end 2012-02-11 "
+ "01:59:39 (86400 s)";
+
private static ExtraInfoDescriptor createWithExitStatsEndLine(
String line) throws DescriptorParseException {
ExitStatsBuilder esb = new ExitStatsBuilder();
@@ -620,9 +720,11 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithExitStatsLines(
esb.buildExitStatsLines());
}
+
private String exitKibibytesWrittenLine = "exit-kibibytes-written "
+ "25=74647,80=31370,443=20577,49755=23,52563=12,52596=1111,"
+ "57528=4,60912=11,61351=6,64811=3365,other=2592";
+
private static ExtraInfoDescriptor createWithExitKibibytesWrittenLine(
String line) throws DescriptorParseException {
ExitStatsBuilder esb = new ExitStatsBuilder();
@@ -630,10 +732,12 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithExitStatsLines(
esb.buildExitStatsLines());
}
+
private String exitKibibytesReadLine = "exit-kibibytes-read "
+ "25=35562,80=1254256,443=110279,49755=9396,52563=1911,"
+ "52596=648,57528=1188,60912=1427,61351=1824,64811=14,"
+ "other=3054";
+
private static ExtraInfoDescriptor createWithExitKibibytesReadLine(
String line) throws DescriptorParseException {
ExitStatsBuilder esb = new ExitStatsBuilder();
@@ -641,9 +745,11 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithExitStatsLines(
esb.buildExitStatsLines());
}
+
private String exitStreamsOpenedLine = "exit-streams-opened "
+ "25=369748,80=64212,443=151660,49755=4,52563=4,52596=4,57528=4,"
+ "60912=4,61351=4,64811=4,other=1212";
+
private static ExtraInfoDescriptor createWithExitStreamsOpenedLine(
String line) throws DescriptorParseException {
ExitStatsBuilder esb = new ExitStatsBuilder();
@@ -651,11 +757,13 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithExitStatsLines(
esb.buildExitStatsLines());
}
+
private static ExtraInfoDescriptor createWithDefaultLines()
throws DescriptorParseException {
return DescriptorBuilder.createWithExitStatsLines(
new ExitStatsBuilder().buildExitStatsLines());
}
+
private String buildExitStatsLines() {
StringBuilder sb = new StringBuilder();
if (this.exitStatsEndLine != null) {
@@ -681,8 +789,10 @@ public class ExtraInfoDescriptorImplTest {
/* Helper class to build a set of bridge-stats lines based on default
* data and modifications requested by test methods. */
private static class BridgeStatsBuilder {
+
private String bridgeStatsEndLine = "bridge-stats-end 2012-02-11 "
+ "01:59:39 (86400 s)";
+
private static ExtraInfoDescriptor createWithBridgeStatsEndLine(
String line) throws DescriptorParseException {
BridgeStatsBuilder bsb = new BridgeStatsBuilder();
@@ -690,8 +800,10 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithBridgeStatsLines(
bsb.buildBridgeStatsLines());
}
+
private String bridgeIpsLine = "bridge-ips ir=24,sy=16,??=8,cn=8,"
+ "de=8,es=8,fr=8,gb=8,in=8,jp=8,kz=8,nl=8,ua=8,us=8,vn=8,za=8";
+
private static ExtraInfoDescriptor createWithBridgeIpsLine(
String line) throws DescriptorParseException {
BridgeStatsBuilder bsb = new BridgeStatsBuilder();
@@ -699,7 +811,9 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithBridgeStatsLines(
bsb.buildBridgeStatsLines());
}
+
private String bridgeIpVersionsLine = "bridge-ip-versions v4=8,v6=16";
+
private static ExtraInfoDescriptor createWithBridgeIpVersionsLine(
String line) throws DescriptorParseException {
BridgeStatsBuilder bsb = new BridgeStatsBuilder();
@@ -707,8 +821,10 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithBridgeStatsLines(
bsb.buildBridgeStatsLines());
}
+
private String bridgeIpTransportsLine = "bridge-ip-transports "
+ "<OR>=8,obfs2=792,obfs3=1728";
+
private static ExtraInfoDescriptor createWithBridgeIpTransportsLine(
String line) throws DescriptorParseException {
BridgeStatsBuilder bsb = new BridgeStatsBuilder();
@@ -716,11 +832,13 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithBridgeStatsLines(
bsb.buildBridgeStatsLines());
}
+
private static ExtraInfoDescriptor createWithDefaultLines()
throws DescriptorParseException {
return DescriptorBuilder.createWithBridgeStatsLines(
new BridgeStatsBuilder().buildBridgeStatsLines());
}
+
private String buildBridgeStatsLines() {
StringBuilder sb = new StringBuilder();
if (this.bridgeStatsEndLine != null) {
@@ -746,8 +864,10 @@ public class ExtraInfoDescriptorImplTest {
/* Helper class to build a set of hidserv-stats lines based on default
* data and modifications requested by test methods. */
private static class HidservStatsBuilder {
+
private String hidservStatsEndLine = "hidserv-stats-end 2015-12-03 "
+ "14:26:56 (86400 s)";
+
private static ExtraInfoDescriptor createWithHidservStatsEndLine(
String line) throws DescriptorParseException {
HidservStatsBuilder hsb = new HidservStatsBuilder();
@@ -755,9 +875,11 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithHidservStatsLines(
hsb.buildHidservStatsLines());
}
+
private String hidservRendRelayedCellsLine =
"hidserv-rend-relayed-cells 36474281 delta_f=2048 epsilon=0.30 "
+ "bin_size=1024";
+
private static ExtraInfoDescriptor
createWithHidservRendRelayedCellsLine(String line)
throws DescriptorParseException {
@@ -766,8 +888,10 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithHidservStatsLines(
hsb.buildHidservStatsLines());
}
+
private String hidservDirOnionsSeenLine = "hidserv-dir-onions-seen "
+ "-3 delta_f=8 epsilon=0.30 bin_size=8";
+
private static ExtraInfoDescriptor createWithHidservDirOnionsSeenLine(
String line) throws DescriptorParseException {
HidservStatsBuilder hsb = new HidservStatsBuilder();
@@ -775,11 +899,13 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithHidservStatsLines(
hsb.buildHidservStatsLines());
}
+
private static ExtraInfoDescriptor createWithDefaultLines()
throws DescriptorParseException {
return DescriptorBuilder.createWithHidservStatsLines(
new HidservStatsBuilder().buildHidservStatsLines());
}
+
private String buildHidservStatsLines() {
StringBuilder sb = new StringBuilder();
if (this.hidservStatsEndLine != null) {
@@ -809,11 +935,11 @@ public class ExtraInfoDescriptorImplTest {
descriptor.getFingerprint());
assertEquals(1328951316000L, descriptor.getPublishedMillis());
assertNotNull(descriptor.getWriteHistory());
- assertEquals(1328951019000L, descriptor.getWriteHistory().
- getHistoryEndMillis());
+ assertEquals(1328951019000L, descriptor.getWriteHistory()
+ .getHistoryEndMillis());
assertEquals(900L, descriptor.getWriteHistory().getIntervalLength());
- assertEquals(4572675072L, (long) descriptor.getWriteHistory().
- getBandwidthValues().get(1328951019000L));
+ assertEquals(4572675072L, (long) descriptor.getWriteHistory()
+ .getBandwidthValues().get(1328951019000L));
assertNotNull(descriptor.getReadHistory());
assertNotNull(descriptor.getDirreqWriteHistory());
assertNotNull(descriptor.getDirreqReadHistory());
@@ -826,8 +952,8 @@ public class ExtraInfoDescriptorImplTest {
@Test()
public void testExtraInfoOpt() throws DescriptorParseException {
- ExtraInfoDescriptor descriptor = DescriptorBuilder.
- createWithExtraInfoLine("opt extra-info chaoscomputerclub5 "
+ ExtraInfoDescriptor descriptor = DescriptorBuilder
+ .createWithExtraInfoLine("opt extra-info chaoscomputerclub5 "
+ "A9C039A5FD02FCA06303DCFAABE25C5912C63B26");
assertEquals("chaoscomputerclub5", descriptor.getNickname());
assertEquals("A9C039A5FD02FCA06303DCFAABE25C5912C63B26",
@@ -837,8 +963,8 @@ public class ExtraInfoDescriptorImplTest {
@Test()
public void testExtraInfoNicknameTwoSpaces()
throws DescriptorParseException {
- ExtraInfoDescriptor descriptor = DescriptorBuilder.
- createWithExtraInfoLine("opt extra-info chaoscomputerclub5 "
+ ExtraInfoDescriptor descriptor = DescriptorBuilder
+ .createWithExtraInfoLine("opt extra-info chaoscomputerclub5 "
+ "A9C039A5FD02FCA06303DCFAABE25C5912C63B26");
assertEquals("chaoscomputerclub5", descriptor.getNickname());
assertEquals("A9C039A5FD02FCA06303DCFAABE25C5912C63B26",
@@ -899,15 +1025,15 @@ public class ExtraInfoDescriptorImplTest {
@Test()
public void testPublishedOpt() throws DescriptorParseException {
- ExtraInfoDescriptor descriptor = DescriptorBuilder.
- createWithPublishedLine("opt published 2012-02-11 09:08:36");
+ ExtraInfoDescriptor descriptor = DescriptorBuilder
+ .createWithPublishedLine("opt published 2012-02-11 09:08:36");
assertEquals(1328951316000L, descriptor.getPublishedMillis());
}
@Test()
public void testPublishedMillis() throws DescriptorParseException {
- ExtraInfoDescriptor descriptor = DescriptorBuilder.
- createWithPublishedLine("opt published 2012-02-11 09:08:36.123");
+ ExtraInfoDescriptor descriptor = DescriptorBuilder
+ .createWithPublishedLine("opt published 2012-02-11 09:08:36.123");
assertEquals(1328951316000L, descriptor.getPublishedMillis());
}
@@ -977,8 +1103,8 @@ public class ExtraInfoDescriptorImplTest {
@Test()
public void testGeoipDbDigestValid() throws DescriptorParseException {
- ExtraInfoDescriptor descriptor = DescriptorBuilder.
- createWithGeoipDbDigestLine("geoip-db-digest "
+ ExtraInfoDescriptor descriptor = DescriptorBuilder
+ .createWithGeoipDbDigestLine("geoip-db-digest "
+ "916A3CA8B7DF61473D5AE5B21711F35F301CE9E8");
assertEquals("916A3CA8B7DF61473D5AE5B21711F35F301CE9E8",
descriptor.getGeoipDbDigest());
@@ -1006,8 +1132,8 @@ public class ExtraInfoDescriptorImplTest {
@Test()
public void testGeoip6DbDigestValid() throws DescriptorParseException {
- ExtraInfoDescriptor descriptor = DescriptorBuilder.
- createWithGeoip6DbDigestLine("geoip6-db-digest "
+ ExtraInfoDescriptor descriptor = DescriptorBuilder
+ .createWithGeoip6DbDigestLine("geoip6-db-digest "
+ "916A3CA8B7DF61473D5AE5B21711F35F301CE9E8");
assertEquals("916A3CA8B7DF61473D5AE5B21711F35F301CE9E8",
descriptor.getGeoip6DbDigest());
@@ -1015,8 +1141,8 @@ public class ExtraInfoDescriptorImplTest {
@Test()
public void testGeoipStatsValid() throws DescriptorParseException {
- ExtraInfoDescriptor descriptor = GeoipStatsBuilder.
- createWithDefaultLines();
+ ExtraInfoDescriptor descriptor = GeoipStatsBuilder
+ .createWithDefaultLines();
assertEquals(1328898771000L, descriptor.getGeoipStartTimeMillis());
SortedMap<String, Integer> ips = descriptor.getGeoipClientOrigins();
assertNotNull(ips);
@@ -1117,8 +1243,8 @@ public class ExtraInfoDescriptorImplTest {
@Test()
public void testDirreqStatsValid() throws DescriptorParseException {
- ExtraInfoDescriptor descriptor = DirreqStatsBuilder.
- createWithDefaultLines();
+ ExtraInfoDescriptor descriptor = DirreqStatsBuilder
+ .createWithDefaultLines();
assertEquals(1328921993000L, descriptor.getDirreqStatsEndMillis());
assertEquals(86400L, descriptor.getDirreqStatsIntervalLength());
SortedMap<String, Integer> ips = descriptor.getDirreqV3Ips();
@@ -1237,8 +1363,8 @@ public class ExtraInfoDescriptorImplTest {
@Test()
public void testEntryStatsValid() throws DescriptorParseException {
- ExtraInfoDescriptor descriptor = EntryStatsBuilder.
- createWithDefaultLines();
+ ExtraInfoDescriptor descriptor = EntryStatsBuilder
+ .createWithDefaultLines();
assertEquals(1328925579000L, descriptor.getEntryStatsEndMillis());
assertEquals(86400L, descriptor.getEntryStatsIntervalLength());
SortedMap<String, Integer> ips = descriptor.getEntryIps();
@@ -1262,8 +1388,8 @@ public class ExtraInfoDescriptorImplTest {
@Test()
public void testCellStatsValid() throws DescriptorParseException {
- ExtraInfoDescriptor descriptor = CellStatsBuilder.
- createWithDefaultLines();
+ ExtraInfoDescriptor descriptor = CellStatsBuilder
+ .createWithDefaultLines();
assertEquals(1328925579000L, descriptor.getCellStatsEndMillis());
assertEquals(86400L, descriptor.getCellStatsIntervalLength());
List<Integer> processedCells = descriptor.getCellProcessedCells();
@@ -1319,8 +1445,8 @@ public class ExtraInfoDescriptorImplTest {
@Test()
public void testConnBiDirectValid()
throws DescriptorParseException {
- ExtraInfoDescriptor descriptor = DescriptorBuilder.
- createWithConnBiDirectLine("conn-bi-direct 2012-02-11 01:59:39 "
+ ExtraInfoDescriptor descriptor = DescriptorBuilder
+ .createWithConnBiDirectLine("conn-bi-direct 2012-02-11 01:59:39 "
+ "(86400 s) 42173,1591,1310,1744");
assertEquals(1328925579000L,
descriptor.getConnBiDirectStatsEndMillis());
@@ -1340,35 +1466,35 @@ public class ExtraInfoDescriptorImplTest {
@Test()
public void testExitStatsValid() throws DescriptorParseException {
- ExtraInfoDescriptor descriptor = ExitStatsBuilder.
- createWithDefaultLines();
+ ExtraInfoDescriptor descriptor = ExitStatsBuilder
+ .createWithDefaultLines();
assertEquals(1328925579000L, descriptor.getExitStatsEndMillis());
assertEquals(86400L, descriptor.getExitStatsIntervalLength());
String[] ports = new String[] { "25", "80", "443", "49755",
"52563", "52596", "57528", "60912", "61351", "64811", "other" };
int[] writtenValues = new int[] { 74647, 31370, 20577, 23, 12, 1111,
4, 11, 6, 3365, 2592 };
- int i = 0;
+ int index = 0;
for (Map.Entry<String, Long> e :
descriptor.getExitKibibytesWritten().entrySet()) {
- assertEquals(ports[i], e.getKey());
- assertEquals(writtenValues[i++], e.getValue().intValue());
+ assertEquals(ports[index], e.getKey());
+ assertEquals(writtenValues[index++], e.getValue().intValue());
}
int[] readValues = new int[] { 35562, 1254256, 110279, 9396, 1911,
648, 1188, 1427, 1824, 14, 3054 };
- i = 0;
+ index = 0;
for (Map.Entry<String, Long> e :
descriptor.getExitKibibytesRead().entrySet()) {
- assertEquals(ports[i], e.getKey());
- assertEquals(readValues[i++], e.getValue().intValue());
+ assertEquals(ports[index], e.getKey());
+ assertEquals(readValues[index++], e.getValue().intValue());
}
int[] streamsValues = new int[] { 369748, 64212, 151660, 4, 4, 4, 4,
4, 4, 4, 1212 };
- i = 0;
+ index = 0;
for (Map.Entry<String, Long> e :
descriptor.getExitStreamsOpened().entrySet()) {
- assertEquals(ports[i], e.getKey());
- assertEquals(streamsValues[i++], e.getValue().intValue());
+ assertEquals(ports[index], e.getKey());
+ assertEquals(streamsValues[index++], e.getValue().intValue());
}
}
@@ -1416,8 +1542,8 @@ public class ExtraInfoDescriptorImplTest {
@Test()
public void testBridgeStatsValid() throws DescriptorParseException {
- ExtraInfoDescriptor descriptor = BridgeStatsBuilder.
- createWithDefaultLines();
+ ExtraInfoDescriptor descriptor = BridgeStatsBuilder
+ .createWithDefaultLines();
assertEquals(1328925579000L, descriptor.getBridgeStatsEndMillis());
assertEquals(86400L, descriptor.getBridgeStatsIntervalLength());
SortedMap<String, Integer> ips = descriptor.getBridgeIps();
@@ -1482,8 +1608,8 @@ public class ExtraInfoDescriptorImplTest {
@Test()
public void testHidservStatsValid() throws DescriptorParseException {
- ExtraInfoDescriptor descriptor = HidservStatsBuilder.
- createWithDefaultLines();
+ ExtraInfoDescriptor descriptor = HidservStatsBuilder
+ .createWithDefaultLines();
assertEquals(1449152816000L, descriptor.getHidservStatsEndMillis());
assertEquals(86400L, descriptor.getHidservStatsIntervalLength());
assertEquals(36474281.0, descriptor.getHidservRendRelayedCells(),
@@ -1575,8 +1701,8 @@ public class ExtraInfoDescriptorImplTest {
public void testUnrecognizedLineIgnore()
throws DescriptorParseException {
String unrecognizedLine = "unrecognized-line 1";
- ExtraInfoDescriptor descriptor = DescriptorBuilder.
- createWithUnrecognizedLine(unrecognizedLine, false);
+ ExtraInfoDescriptor descriptor = DescriptorBuilder
+ .createWithUnrecognizedLine(unrecognizedLine, false);
List<String> unrecognizedLines = new ArrayList<>();
unrecognizedLines.add(unrecognizedLine);
assertEquals(unrecognizedLines, descriptor.getUnrecognizedLines());
@@ -1727,7 +1853,8 @@ public class ExtraInfoDescriptorImplTest {
+ "geoip6-db-digest 212DE17D5A368DCAFA19B95F168BFFA101145A93\n"
+ "router-digest-sha256 "
+ "TvrqpjI7OmCtwGwair/NHUxg5ROVVQYz6/EDyXsDHR4\n"
- + "router-digest 00B98F076B586272C3172B7F3DA29ADEE75F2ED8\n").getBytes();
+ + "router-digest 00B98F076B586272C3172B7F3DA29ADEE75F2ED8\n")
+ .getBytes();
BridgeExtraInfoDescriptor descriptor =
new BridgeExtraInfoDescriptorImpl(descriptorBytes, true);
assertEquals("TvrqpjI7OmCtwGwair/NHUxg5ROVVQYz6/EDyXsDHR4",
diff --git a/src/test/java/org/torproject/descriptor/impl/MicrodescriptorImplTest.java b/src/test/java/org/torproject/descriptor/impl/MicrodescriptorImplTest.java
index abb51db..20b0849 100644
--- a/src/test/java/org/torproject/descriptor/impl/MicrodescriptorImplTest.java
+++ b/src/test/java/org/torproject/descriptor/impl/MicrodescriptorImplTest.java
@@ -1,20 +1,19 @@
+/* Copyright 2015--2017 The Tor Project
+ * See LICENSE for licensing information */
+
package org.torproject.descriptor.impl;
-import org.junit.Test;
import org.torproject.descriptor.DescriptorParseException;
import org.torproject.descriptor.Microdescriptor;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import org.junit.Test;
public class MicrodescriptorImplTest {
/* Helper class to build a microdescriptor based on default data and
* modifications requested by test methods. */
private static class DescriptorBuilder {
+
private String onionKeyLines = "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBALNZ4pNsHHkl7a+kFWbBmPHNAepjjvuhjTr1TaMB3UKuCRaXJmS2Qr"
@@ -22,20 +21,25 @@ public class MicrodescriptorImplTest {
+ "UutXaZ\nfkyty5XOgV4Qucx9wokzTMCHlO0V0x9y0FwFsK5Nb6ugqfQLLQ6XAg"
+ "MBAAE=\n"
+ "-----END RSA PUBLIC KEY-----";
+
private static Microdescriptor createWithDefaultLines()
throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
return new MicrodescriptorImpl(db.buildDescriptor(), true);
}
+
private String ntorOnionKeyLine =
"ntor-onion-key PXLa7IGE+TzPDMsM5j9rFnDa37rd6kfZa5QuzqqJukw=";
+
private String idLine = "id rsa1024 bvegfGxp8k7T9QFpjPTrPaJTa/8";
+
private static Microdescriptor createWithIdLine(String line)
throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.idLine = line;
return new MicrodescriptorImpl(db.buildDescriptor(), true);
}
+
private byte[] buildDescriptor() {
StringBuilder sb = new StringBuilder();
if (this.onionKeyLines != null) {
diff --git a/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImplTest.java b/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImplTest.java
index 57a2d89..ebcbd83 100644
--- a/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImplTest.java
+++ b/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImplTest.java
@@ -1,9 +1,7 @@
/* Copyright 2011--2017 The Tor Project
* See LICENSE for licensing information */
-package org.torproject.descriptor.impl;
-import org.torproject.descriptor.DescriptorParseException;
-import org.torproject.descriptor.DirectorySignature;
+package org.torproject.descriptor.impl;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -11,15 +9,17 @@ import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import org.torproject.descriptor.DescriptorParseException;
+import org.torproject.descriptor.DirectorySignature;
+import org.torproject.descriptor.NetworkStatusEntry;
+import org.torproject.descriptor.RelayNetworkStatusConsensus;
+
+import org.junit.Test;
+
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-
-import org.junit.Test;
-import org.torproject.descriptor.NetworkStatusEntry;
-import org.torproject.descriptor.RelayNetworkStatusConsensus;
-
/* TODO Add test cases for all lines starting with "opt ". */
/* Test parsing of network status consensuses. The main focus is on
@@ -31,6 +31,7 @@ public class RelayNetworkStatusConsensusImplTest {
/* Helper class to build a directory source based on default data and
* modifications requested by test methods. */
private static class DirSourceBuilder {
+
private static RelayNetworkStatusConsensus
createWithDirSource(String dirSourceString)
throws DescriptorParseException {
@@ -39,7 +40,9 @@ public class RelayNetworkStatusConsensusImplTest {
return new RelayNetworkStatusConsensusImpl(cb.buildConsensus(),
true);
}
+
private String nickname = "gabelmoo";
+
private static RelayNetworkStatusConsensus
createWithNickname(String string)
throws DescriptorParseException {
@@ -47,7 +50,9 @@ public class RelayNetworkStatusConsensusImplTest {
dsb.nickname = string;
return createWithDirSource(dsb.buildDirSource());
}
+
private String identity = "ED03BB616EB2F60BEC80151114BB25CEF515B226";
+
private static RelayNetworkStatusConsensus
createWithIdentity(String string)
throws DescriptorParseException {
@@ -55,7 +60,9 @@ public class RelayNetworkStatusConsensusImplTest {
dsb.identity = string;
return createWithDirSource(dsb.buildDirSource());
}
+
private String hostName = "212.112.245.170";
+
private static RelayNetworkStatusConsensus
createWithHostName(String string)
throws DescriptorParseException {
@@ -63,7 +70,9 @@ public class RelayNetworkStatusConsensusImplTest {
dsb.hostName = string;
return createWithDirSource(dsb.buildDirSource());
}
+
private String address = "212.112.245.170";
+
private static RelayNetworkStatusConsensus
createWithAddress(String string)
throws DescriptorParseException {
@@ -71,7 +80,9 @@ public class RelayNetworkStatusConsensusImplTest {
dsb.address = string;
return createWithDirSource(dsb.buildDirSource());
}
+
private String dirPort = "80";
+
private static RelayNetworkStatusConsensus
createWithDirPort(String string)
throws DescriptorParseException {
@@ -79,7 +90,9 @@ public class RelayNetworkStatusConsensusImplTest {
dsb.dirPort = string;
return createWithDirSource(dsb.buildDirSource());
}
+
private String orPort = "443";
+
private static RelayNetworkStatusConsensus
createWithOrPort(String string)
throws DescriptorParseException {
@@ -87,8 +100,10 @@ public class RelayNetworkStatusConsensusImplTest {
dsb.orPort = string;
return createWithDirSource(dsb.buildDirSource());
}
+
private String contactLine = "contact 4096R/C5AA446D Sebastian Hahn "
+ "<tor(a)sebastianhahn.net>";
+
private static RelayNetworkStatusConsensus
createWithContactLine(String line)
throws DescriptorParseException {
@@ -96,8 +111,10 @@ public class RelayNetworkStatusConsensusImplTest {
dsb.contactLine = line;
return createWithDirSource(dsb.buildDirSource());
}
+
private String voteDigestLine =
"vote-digest 0F398A5834D2C139E1D92310B09F814F243354D1";
+
private static RelayNetworkStatusConsensus
createWithVoteDigestLine(String line)
throws DescriptorParseException {
@@ -105,6 +122,7 @@ public class RelayNetworkStatusConsensusImplTest {
dsb.voteDigestLine = line;
return createWithDirSource(dsb.buildDirSource());
}
+
private String buildDirSource() {
StringBuilder sb = new StringBuilder();
String dirSourceLine = "dir-source " + this.nickname + " "
@@ -127,6 +145,7 @@ public class RelayNetworkStatusConsensusImplTest {
/* Helper class to build a status entry based on default data and
* modifications requested by test methods. */
private static class StatusEntryBuilder {
+
private static RelayNetworkStatusConsensus
createWithStatusEntry(String statusEntryString)
throws DescriptorParseException {
@@ -135,7 +154,9 @@ public class RelayNetworkStatusConsensusImplTest {
return new RelayNetworkStatusConsensusImpl(cb.buildConsensus(),
true);
}
+
private String nickname = "right2privassy3";
+
private static RelayNetworkStatusConsensus
createWithNickname(String string)
throws DescriptorParseException {
@@ -143,7 +164,9 @@ public class RelayNetworkStatusConsensusImplTest {
seb.nickname = string;
return createWithStatusEntry(seb.buildStatusEntry());
}
+
private String fingerprintBase64 = "ADQ6gCT3DiFHKPDFr3rODBUI8HM";
+
private static RelayNetworkStatusConsensus
createWithFingerprintBase64(String string)
throws DescriptorParseException {
@@ -151,7 +174,9 @@ public class RelayNetworkStatusConsensusImplTest {
seb.fingerprintBase64 = string;
return createWithStatusEntry(seb.buildStatusEntry());
}
+
private String descriptorBase64 = "Yiti+nayuT2Efe2X1+M4nslwVuU";
+
private static RelayNetworkStatusConsensus
createWithDescriptorBase64(String string)
throws DescriptorParseException {
@@ -159,7 +184,9 @@ public class RelayNetworkStatusConsensusImplTest {
seb.descriptorBase64 = string;
return createWithStatusEntry(seb.buildStatusEntry());
}
+
private String publishedString = "2011-11-29 21:34:27";
+
private static RelayNetworkStatusConsensus
createWithPublishedString(String string)
throws DescriptorParseException {
@@ -167,55 +194,75 @@ public class RelayNetworkStatusConsensusImplTest {
seb.publishedString = string;
return createWithStatusEntry(seb.buildStatusEntry());
}
+
private String address = "50.63.8.215";
+
private static RelayNetworkStatusConsensus
createWithAddress(String string) throws DescriptorParseException {
StatusEntryBuilder seb = new StatusEntryBuilder();
seb.address = string;
return createWithStatusEntry(seb.buildStatusEntry());
}
+
private String orPort = "9023";
+
private static RelayNetworkStatusConsensus
createWithOrPort(String string) throws DescriptorParseException {
StatusEntryBuilder seb = new StatusEntryBuilder();
seb.orPort = string;
return createWithStatusEntry(seb.buildStatusEntry());
}
+
private String dirPort = "0";
+
private static RelayNetworkStatusConsensus
createWithDirPort(String string) throws DescriptorParseException {
StatusEntryBuilder seb = new StatusEntryBuilder();
seb.dirPort = string;
return createWithStatusEntry(seb.buildStatusEntry());
}
+
+ @SuppressWarnings("checkstyle:membername")
private String sLine = "s Exit Fast Named Running Stable Valid";
+
private static RelayNetworkStatusConsensus
createWithSLine(String line) throws DescriptorParseException {
StatusEntryBuilder seb = new StatusEntryBuilder();
seb.sLine = line;
return createWithStatusEntry(seb.buildStatusEntry());
}
+
+ @SuppressWarnings("checkstyle:membername")
private String vLine = "v Tor 0.2.1.29 (r8e9b25e6c7a2e70c)";
+
private static RelayNetworkStatusConsensus
createWithVLine(String line) throws DescriptorParseException {
StatusEntryBuilder seb = new StatusEntryBuilder();
seb.vLine = line;
return createWithStatusEntry(seb.buildStatusEntry());
}
+
+ @SuppressWarnings("checkstyle:membername")
private String wLine = "w Bandwidth=1";
+
private static RelayNetworkStatusConsensus
createWithWLine(String line) throws DescriptorParseException {
StatusEntryBuilder seb = new StatusEntryBuilder();
seb.wLine = line;
return createWithStatusEntry(seb.buildStatusEntry());
}
+
+ @SuppressWarnings("checkstyle:membername")
private String pLine = "p accept 80,1194,1220,1293";
+
private static RelayNetworkStatusConsensus
createWithPLine(String line) throws DescriptorParseException {
StatusEntryBuilder seb = new StatusEntryBuilder();
seb.pLine = line;
return createWithStatusEntry(seb.buildStatusEntry());
}
+
+ @SuppressWarnings("checkstyle:localvariablename")
private String buildStatusEntry() {
StringBuilder sb = new StringBuilder();
String rLine = "r " + nickname + " " + fingerprintBase64 + " "
@@ -244,6 +291,7 @@ public class RelayNetworkStatusConsensusImplTest {
/* Helper class to build a directory signature based on default data and
* modifications requested by test methods. */
private static class DirectorySignatureBuilder {
+
private static RelayNetworkStatusConsensus
createWithDirectorySignature(String directorySignatureString)
throws DescriptorParseException {
@@ -252,7 +300,9 @@ public class RelayNetworkStatusConsensusImplTest {
return new RelayNetworkStatusConsensusImpl(cb.buildConsensus(),
true);
}
+
private String identity = "ED03BB616EB2F60BEC80151114BB25CEF515B226";
+
private static RelayNetworkStatusConsensus
createWithIdentity(String string)
throws DescriptorParseException {
@@ -260,8 +310,10 @@ public class RelayNetworkStatusConsensusImplTest {
dsb.identity = string;
return createWithDirectorySignature(dsb.buildDirectorySignature());
}
+
private String signingKey =
"845CF1D0B370CA443A8579D18E7987E7E532F639";
+
private static RelayNetworkStatusConsensus
createWithSigningKey(String string)
throws DescriptorParseException {
@@ -269,6 +321,7 @@ public class RelayNetworkStatusConsensusImplTest {
dsb.signingKey = string;
return createWithDirectorySignature(dsb.buildDirectorySignature());
}
+
private String buildDirectorySignature() {
String directorySignature = "directory-signature " + identity + " "
+ signingKey + "\n"
@@ -1093,16 +1146,16 @@ public class RelayNetworkStatusConsensusImplTest {
@Test()
public void testBandwidthWeightsLineNoSpace()
throws DescriptorParseException {
- RelayNetworkStatusConsensus consensus = ConsensusBuilder.
- createWithBandwidthWeightsLine("bandwidth-weights");
+ RelayNetworkStatusConsensus consensus = ConsensusBuilder
+ .createWithBandwidthWeightsLine("bandwidth-weights");
assertNotNull(consensus.getBandwidthWeights());
}
@Test()
public void testBandwidthWeightsLineOneSpace()
throws DescriptorParseException {
- RelayNetworkStatusConsensus consensus = ConsensusBuilder.
- createWithBandwidthWeightsLine("bandwidth-weights ");
+ RelayNetworkStatusConsensus consensus = ConsensusBuilder
+ .createWithBandwidthWeightsLine("bandwidth-weights ");
assertNotNull(consensus.getBandwidthWeights());
}
@@ -1185,8 +1238,8 @@ public class RelayNetworkStatusConsensusImplTest {
public void testUnrecognizedHeaderLineIgnore()
throws DescriptorParseException {
String unrecognizedLine = "unrecognized-line 1";
- RelayNetworkStatusConsensus consensus = ConsensusBuilder.
- createWithUnrecognizedHeaderLine(unrecognizedLine, false);
+ RelayNetworkStatusConsensus consensus = ConsensusBuilder
+ .createWithUnrecognizedHeaderLine(unrecognizedLine, false);
List<String> unrecognizedLines = new ArrayList<>();
unrecognizedLines.add(unrecognizedLine);
assertEquals(unrecognizedLines, consensus.getUnrecognizedLines());
@@ -1204,8 +1257,8 @@ public class RelayNetworkStatusConsensusImplTest {
public void testUnrecognizedDirSourceLineIgnore()
throws DescriptorParseException {
String unrecognizedLine = "unrecognized-line 1";
- RelayNetworkStatusConsensus consensus = ConsensusBuilder.
- createWithUnrecognizedDirSourceLine(unrecognizedLine, false);
+ RelayNetworkStatusConsensus consensus = ConsensusBuilder
+ .createWithUnrecognizedDirSourceLine(unrecognizedLine, false);
List<String> unrecognizedLines = new ArrayList<>();
unrecognizedLines.add(unrecognizedLine);
assertEquals(unrecognizedLines, consensus.getUnrecognizedLines());
@@ -1223,8 +1276,8 @@ public class RelayNetworkStatusConsensusImplTest {
public void testUnrecognizedStatusEntryLineIgnore()
throws DescriptorParseException {
String unrecognizedLine = "unrecognized-line 1";
- RelayNetworkStatusConsensus consensus = ConsensusBuilder.
- createWithUnrecognizedStatusEntryLine(unrecognizedLine, false);
+ RelayNetworkStatusConsensus consensus = ConsensusBuilder
+ .createWithUnrecognizedStatusEntryLine(unrecognizedLine, false);
List<String> unrecognizedLines = new ArrayList<>();
unrecognizedLines.add(unrecognizedLine);
assertEquals(unrecognizedLines, consensus.getUnrecognizedLines());
@@ -1242,8 +1295,8 @@ public class RelayNetworkStatusConsensusImplTest {
public void testUnrecognizedDirectoryFooterLineIgnore()
throws DescriptorParseException {
String unrecognizedLine = "unrecognized-line 1";
- RelayNetworkStatusConsensus consensus = ConsensusBuilder.
- createWithUnrecognizedFooterLine(unrecognizedLine, false);
+ RelayNetworkStatusConsensus consensus = ConsensusBuilder
+ .createWithUnrecognizedFooterLine(unrecognizedLine, false);
List<String> unrecognizedLines = new ArrayList<>();
unrecognizedLines.add(unrecognizedLine);
assertEquals(unrecognizedLines, consensus.getUnrecognizedLines());
@@ -1261,8 +1314,8 @@ public class RelayNetworkStatusConsensusImplTest {
public void testUnrecognizedDirectorySignatureLineIgnore()
throws DescriptorParseException {
String unrecognizedLine = "unrecognized-line 1";
- RelayNetworkStatusConsensus consensus = ConsensusBuilder.
- createWithUnrecognizedDirectorySignatureLine(unrecognizedLine,
+ RelayNetworkStatusConsensus consensus = ConsensusBuilder
+ .createWithUnrecognizedDirectorySignatureLine(unrecognizedLine,
false);
List<String> unrecognizedLines = new ArrayList<>();
unrecognizedLines.add(unrecognizedLine);
diff --git a/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusImplTest.java b/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusImplTest.java
index 8f4ece2..d550d26 100644
--- a/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusImplTest.java
+++ b/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusImplTest.java
@@ -1,37 +1,31 @@
/* Copyright 2016--2017 The Tor Project
* See LICENSE for licensing information */
-package org.torproject.descriptor.impl;
-import org.torproject.descriptor.DescriptorParseException;
+package org.torproject.descriptor.impl;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import org.torproject.descriptor.DescriptorParseException;
import org.junit.Test;
-import org.torproject.descriptor.RelayNetworkStatus;
public class RelayNetworkStatusImplTest {
- private final static String validHeader = "network-status-version 2\n"
- + "dir-source 194.109.206.212 194.109.206.212 80\n"
- + "fingerprint 7EA6EAD6FD83083C538F44038BBFA077587DD755\n"
- + "contact 1024R/8D56913D Alex de Joode <adejoode(a)sabotage.org>\n"
- + "published 2012-03-01 00:10:43\n"
- + "dir-options\n"
- + "dir-signing-key\n"
- + "-----BEGIN RSA PUBLIC KEY-----\n"
- + "MIGJAoGBAL7QJ6cmXhMlexV97ehnV5hn5ePOeo0sbDYXhlfw52CheEycoUqSD9Y/\n"
- + "3qEo0Rm7XTEol0dRW34ca1LMIXGM4B4whXxBKCRRYe1RY6nF70zb2EUuaHWEWc+f\n"
- + "c6JWYUWZSPpW1uyjyLPUI/ikyyH7zmtR4MfhSeNdt2zSakojYNaPAgMBAAE=\n"
- + "-----END RSA PUBLIC KEY-----\n";
-
- private final static String validStatus =
- "@type network-status-2 1.0\n" + validHeader;
+ private static final String validHeader = "network-status-version 2\n"
+ + "dir-source 194.109.206.212 194.109.206.212 80\n"
+ + "fingerprint 7EA6EAD6FD83083C538F44038BBFA077587DD755\n"
+ + "contact 1024R/8D56913D Alex de Joode <adejoode(a)sabotage.org>\n"
+ + "published 2012-03-01 00:10:43\n"
+ + "dir-options\n"
+ + "dir-signing-key\n"
+ + "-----BEGIN RSA PUBLIC KEY-----\n"
+ + "MIGJAoGBAL7QJ6cmXhMlexV97ehnV5hn5ePOeo0sbDYXhlfw52CheEycoUqSD9Y/\n"
+ + "3qEo0Rm7XTEol0dRW34ca1LMIXGM4B4whXxBKCRRYe1RY6nF70zb2EUuaHWEWc+f\n"
+ + "c6JWYUWZSPpW1uyjyLPUI/ikyyH7zmtR4MfhSeNdt2zSakojYNaPAgMBAAE=\n"
+ + "-----END RSA PUBLIC KEY-----\n";
+
+ private static final String validStatus =
+ "@type network-status-2 1.0\n" + validHeader;
@Test(expected = DescriptorParseException.class)
public void testParseBrokenHeader() throws DescriptorParseException {
@@ -42,12 +36,11 @@ public class RelayNetworkStatusImplTest {
@Test()
public void testValidHeader() throws DescriptorParseException {
- RelayNetworkStatusImpl rnsi
- = new RelayNetworkStatusImpl(validStatus.getBytes(), true);
+ RelayNetworkStatusImpl rnsi =
+ new RelayNetworkStatusImpl(validStatus.getBytes(), true);
rnsi.parseHeader(validHeader.getBytes());
assertEquals(rnsi.getContactLine(),
- "1024R/8D56913D Alex de Joode <adejoode(a)sabotage.org>");
+ "1024R/8D56913D Alex de Joode <adejoode(a)sabotage.org>");
}
-
}
diff --git a/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImplTest.java b/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImplTest.java
index 79cb78c..847c538 100644
--- a/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImplTest.java
+++ b/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImplTest.java
@@ -1,21 +1,22 @@
/* Copyright 2011--2017 The Tor Project
* See LICENSE for licensing information */
-package org.torproject.descriptor.impl;
-import org.torproject.descriptor.DescriptorParseException;
-import org.torproject.descriptor.DirectorySignature;
+package org.torproject.descriptor.impl;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import org.torproject.descriptor.DescriptorParseException;
+import org.torproject.descriptor.DirectorySignature;
+import org.torproject.descriptor.RelayNetworkStatusVote;
+
+import org.junit.Test;
+
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import org.junit.Test;
-import org.torproject.descriptor.RelayNetworkStatusVote;
-
/* TODO Add test cases for all lines starting with "opt ". */
/* Test parsing of network status votes. Some of the vote-parsing code is
@@ -27,7 +28,9 @@ public class RelayNetworkStatusVoteImplTest {
/* Helper class to build a vote based on default data and modifications
* requested by test methods. */
private static class VoteBuilder {
+
private String networkStatusVersionLine = "network-status-version 3";
+
private static RelayNetworkStatusVote
createWithNetworkStatusVersionLine(String line)
throws DescriptorParseException {
@@ -35,7 +38,9 @@ public class RelayNetworkStatusVoteImplTest {
vb.networkStatusVersionLine = line;
return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
}
+
private String voteStatusLine = "vote-status vote";
+
private static RelayNetworkStatusVote
createWithVoteStatusLine(String line)
throws DescriptorParseException {
@@ -43,8 +48,10 @@ public class RelayNetworkStatusVoteImplTest {
vb.voteStatusLine = line;
return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
}
+
private String consensusMethodsLine =
"consensus-methods 1 2 3 4 5 6 7 8 9 10 11";
+
private static RelayNetworkStatusVote
createWithConsensusMethodsLine(String line)
throws DescriptorParseException {
@@ -52,7 +59,9 @@ public class RelayNetworkStatusVoteImplTest {
vb.consensusMethodsLine = line;
return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
}
+
private String publishedLine = "published 2011-11-30 08:50:01";
+
private static RelayNetworkStatusVote
createWithPublishedLine(String line)
throws DescriptorParseException {
@@ -60,7 +69,9 @@ public class RelayNetworkStatusVoteImplTest {
vb.publishedLine = line;
return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
}
+
private String validAfterLine = "valid-after 2011-11-30 09:00:00";
+
private static RelayNetworkStatusVote
createWithValidAfterLine(String line)
throws DescriptorParseException {
@@ -68,7 +79,9 @@ public class RelayNetworkStatusVoteImplTest {
vb.validAfterLine = line;
return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
}
+
private String freshUntilLine = "fresh-until 2011-11-30 10:00:00";
+
private static RelayNetworkStatusVote
createWithFreshUntilLine(String line)
throws DescriptorParseException {
@@ -76,7 +89,9 @@ public class RelayNetworkStatusVoteImplTest {
vb.freshUntilLine = line;
return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
}
+
private String validUntilLine = "valid-until 2011-11-30 12:00:00";
+
private static RelayNetworkStatusVote
createWithValidUntilLine(String line)
throws DescriptorParseException {
@@ -84,7 +99,9 @@ public class RelayNetworkStatusVoteImplTest {
vb.validUntilLine = line;
return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
}
+
private String votingDelayLine = "voting-delay 300 300";
+
private static RelayNetworkStatusVote
createWithVotingDelayLine(String line)
throws DescriptorParseException {
@@ -92,8 +109,10 @@ public class RelayNetworkStatusVoteImplTest {
vb.votingDelayLine = line;
return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
}
+
private String clientVersionsLine = "client-versions 0.2.1.31,"
+ "0.2.2.34,0.2.3.6-alpha,0.2.3.7-alpha,0.2.3.8-alpha";
+
private static RelayNetworkStatusVote
createWithClientVersionsLine(String line)
throws DescriptorParseException {
@@ -101,8 +120,10 @@ public class RelayNetworkStatusVoteImplTest {
vb.clientVersionsLine = line;
return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
}
+
private String serverVersionsLine = "server-versions 0.2.1.31,"
+ "0.2.2.34,0.2.3.6-alpha,0.2.3.7-alpha,0.2.3.8-alpha";
+
private static RelayNetworkStatusVote
createWithServerVersionsLine(String line)
throws DescriptorParseException {
@@ -110,7 +131,9 @@ public class RelayNetworkStatusVoteImplTest {
vb.serverVersionsLine = line;
return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
}
+
private String packageLines = null;
+
protected static RelayNetworkStatusVote
createWithPackageLines(String lines)
throws DescriptorParseException {
@@ -118,8 +141,10 @@ public class RelayNetworkStatusVoteImplTest {
vb.packageLines = lines;
return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
}
+
private String knownFlagsLine = "known-flags Authority BadExit Exit "
+ "Fast Guard HSDir Named Running Stable Unnamed V2Dir Valid";
+
private static RelayNetworkStatusVote
createWithKnownFlagsLine(String line)
throws DescriptorParseException {
@@ -127,10 +152,12 @@ public class RelayNetworkStatusVoteImplTest {
vb.knownFlagsLine = line;
return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
}
+
private String flagThresholdsLine = "flag-thresholds "
+ "stable-uptime=693369 stable-mtbf=153249 fast-speed=40960 "
+ "guard-wfu=94.669% guard-tk=691200 guard-bw-inc-exits=174080 "
+ "guard-bw-exc-exits=184320 enough-mtbf=1";
+
private static RelayNetworkStatusVote
createWithFlagThresholdsLine(String line)
throws DescriptorParseException {
@@ -138,11 +165,13 @@ public class RelayNetworkStatusVoteImplTest {
vb.flagThresholdsLine = line;
return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
}
+
private String paramsLine = "params "
+ "CircuitPriorityHalflifeMsec=30000 bwauthbestratio=1 "
+ "bwauthcircs=1 bwauthdescbw=0 bwauthkp=10000 bwauthpid=1 "
+ "bwauthtd=5000 bwauthti=50000 bwauthtidecay=5000 cbtnummodes=3 "
+ "cbtquantile=80 circwindow=1000 refuseunknownexits=1";
+
private static RelayNetworkStatusVote
createWithParamsLine(String line)
throws DescriptorParseException {
@@ -150,9 +179,11 @@ public class RelayNetworkStatusVoteImplTest {
vb.paramsLine = line;
return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
}
+
private String dirSourceLine = "dir-source urras "
+ "80550987E1D626E3EBA5E5E75A458DE0626D088C 208.83.223.34 "
+ "208.83.223.34 443 80";
+
private static RelayNetworkStatusVote
createWithDirSourceLine(String line)
throws DescriptorParseException {
@@ -160,8 +191,10 @@ public class RelayNetworkStatusVoteImplTest {
vb.dirSourceLine = line;
return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
}
+
private String contactLine = "contact 4096R/E012B42D Jacob Appelbaum "
+ "<jacob(a)appelbaum.net>";
+
private static RelayNetworkStatusVote
createWithContactLine(String line)
throws DescriptorParseException {
@@ -169,7 +202,9 @@ public class RelayNetworkStatusVoteImplTest {
vb.contactLine = line;
return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
}
+
private String legacyDirKeyLine = null;
+
private static RelayNetworkStatusVote
createWithLegacyDirKeyLine(String line)
throws DescriptorParseException {
@@ -177,8 +212,10 @@ public class RelayNetworkStatusVoteImplTest {
vb.legacyDirKeyLine = line;
return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
}
+
private String dirKeyCertificateVersionLine =
"dir-key-certificate-version 3";
+
private static RelayNetworkStatusVote
createWithDirKeyCertificateVersionLine(String line)
throws DescriptorParseException {
@@ -186,8 +223,10 @@ public class RelayNetworkStatusVoteImplTest {
vb.dirKeyCertificateVersionLine = line;
return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
}
+
private String fingerprintLine = "fingerprint "
+ "80550987E1D626E3EBA5E5E75A458DE0626D088C";
+
private static RelayNetworkStatusVote
createWithFingerprintLine(String line)
throws DescriptorParseException {
@@ -195,8 +234,10 @@ public class RelayNetworkStatusVoteImplTest {
vb.fingerprintLine = line;
return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
}
+
private String dirKeyPublishedLine = "dir-key-published 2011-04-27 "
+ "05:34:37";
+
private static RelayNetworkStatusVote
createWithDirKeyPublishedLine(String line)
throws DescriptorParseException {
@@ -204,8 +245,10 @@ public class RelayNetworkStatusVoteImplTest {
vb.dirKeyPublishedLine = line;
return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
}
+
private String dirKeyExpiresLine = "dir-key-expires 2012-04-27 "
+ "05:34:37";
+
private static RelayNetworkStatusVote
createWithDirKeyExpiresLine(String line)
throws DescriptorParseException {
@@ -213,6 +256,7 @@ public class RelayNetworkStatusVoteImplTest {
vb.dirKeyExpiresLine = line;
return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
}
+
private String dirIdentityKeyLines = "dir-identity-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIIBigKCAYEAtKpuLgVK25sfScjsxfVU1ljofrDygt9GP7bNJl/rghX42KUT97"
@@ -225,6 +269,7 @@ public class RelayNetworkStatusVoteImplTest {
+ "TvcaKz9CEj4XcKm+kOmzejYmIa\nkbWNcRpXPiUZ+xmwGtsq30xrzqiONmERkx"
+ "qlmf7bVQPFvh3Kz6hGcmTBhTbHSe9h\nzDgmdaTNn3EHAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----";
+
private static RelayNetworkStatusVote
createWithDirIdentityKeyLines(String lines)
throws DescriptorParseException {
@@ -232,6 +277,7 @@ public class RelayNetworkStatusVoteImplTest {
vb.dirIdentityKeyLines = lines;
return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
}
+
private String dirSigningKeyLines = "dir-signing-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAN05qyHFQlTqykMP8yLuD4G2UuYulD4Xs8iSX5uqF+WGsUA1E4zZh4"
@@ -239,6 +285,7 @@ public class RelayNetworkStatusVoteImplTest {
+ "mBGsN7\nPUXyMNjwRKL6UvrcbYk1d2mRBLO7SAP/sFW5fHhIBVeLIWrzQ19rAg"
+ "MBAAE=\n"
+ "-----END RSA PUBLIC KEY-----";
+
private static RelayNetworkStatusVote
createWithDirSigningKeyLines(String lines)
throws DescriptorParseException {
@@ -246,12 +293,14 @@ public class RelayNetworkStatusVoteImplTest {
vb.dirSigningKeyLines = lines;
return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
}
+
private String dirKeyCrosscertLines = "dir-key-crosscert\n"
+ "-----BEGIN ID SIGNATURE-----\n"
+ "rPBFn6IJ6TvAHj4pSwlg+RTn1fP89JGSVa08wuyJr5dAvZsdakQXvRjamT9oJU"
+ "aZ\nnY5Rl/tRlGuSQ0BglTPPKoXdKERK0FUr9f0EKrQy7NDUgE2j9losiRuyKz"
+ "hA3neZ\nK4yF8bhqAwM51u7fzAhIjNeRif9c04rhFJJCseco84w=\n"
+ "-----END ID SIGNATURE-----";
+
private static RelayNetworkStatusVote
createWithDirKeyCrosscertLines(String lines)
throws DescriptorParseException {
@@ -259,6 +308,7 @@ public class RelayNetworkStatusVoteImplTest {
vb.dirKeyCrosscertLines = lines;
return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
}
+
private String dirKeyCertificationLines = "dir-key-certification\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "hPSh6FuohNF5ccjiMbkvr8cZJwGFuL11cNtwN9k0X3pUdFZVATIEkqBe7z+rE2"
@@ -271,6 +321,7 @@ public class RelayNetworkStatusVoteImplTest {
+ "bEGbvY/P8mzVAZxp3Yz+sRtNel\nC1SWz/Fx+Saex5oI7DJ3xtSD4XqKb/wYwZ"
+ "FT8IxDYq1t2tFXdHxd4QPRVcvc0zYC\n"
+ "-----END SIGNATURE-----";
+
private static RelayNetworkStatusVote
createWithDirKeyCertificationLines(String lines)
throws DescriptorParseException {
@@ -278,14 +329,18 @@ public class RelayNetworkStatusVoteImplTest {
vb.dirKeyCertificationLines = lines;
return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
}
+
private List<String> statusEntries = null;
+
private static RelayNetworkStatusVote createWithStatusEntries(
List<String> statusEntries) throws DescriptorParseException {
VoteBuilder vb = new VoteBuilder();
vb.statusEntries = statusEntries;
return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
}
+
private String directoryFooterLine = "directory-footer";
+
private static RelayNetworkStatusVote
createWithDirectoryFooterLine(String line)
throws DescriptorParseException {
@@ -293,6 +348,7 @@ public class RelayNetworkStatusVoteImplTest {
vb.directoryFooterLine = line;
return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
}
+
private String directorySignatureLines = "directory-signature "
+ "80550987E1D626E3EBA5E5E75A458DE0626D088C "
+ "EEB9299D295C1C815E289FBF2F2BBEA5F52FDD19\n"
@@ -301,6 +357,7 @@ public class RelayNetworkStatusVoteImplTest {
+ "F3Yh\nrXVaaoP07r6Ta+s0g1Zijm3lms50Nk/4tV2p8Y63c3F4Q3DAnK40Oi"
+ "kfOIwEj+Ny\n+zBRQssP3hPhTPOj/A7o3mZZwtL6x1sxpeu/nME1l5E=\n"
+ "-----END SIGNATURE-----";
+
private static RelayNetworkStatusVote
createWithDirectorySignatureLines(String lines)
throws DescriptorParseException {
@@ -308,7 +365,9 @@ public class RelayNetworkStatusVoteImplTest {
vb.directorySignatureLines = lines;
return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
}
+
private String unrecognizedHeaderLine = null;
+
protected static RelayNetworkStatusVote
createWithUnrecognizedHeaderLine(String line,
boolean failUnrecognizedDescriptorLines)
@@ -318,7 +377,9 @@ public class RelayNetworkStatusVoteImplTest {
return new RelayNetworkStatusVoteImpl(vb.buildVote(),
failUnrecognizedDescriptorLines);
}
+
private String unrecognizedDirSourceLine = null;
+
protected static RelayNetworkStatusVote
createWithUnrecognizedDirSourceLine(String line,
boolean failUnrecognizedDescriptorLines)
@@ -328,7 +389,9 @@ public class RelayNetworkStatusVoteImplTest {
return new RelayNetworkStatusVoteImpl(vb.buildVote(),
failUnrecognizedDescriptorLines);
}
+
private String unrecognizedStatusEntryLine = null;
+
protected static RelayNetworkStatusVote
createWithUnrecognizedStatusEntryLine(String line,
boolean failUnrecognizedDescriptorLines)
@@ -338,7 +401,9 @@ public class RelayNetworkStatusVoteImplTest {
return new RelayNetworkStatusVoteImpl(vb.buildVote(),
failUnrecognizedDescriptorLines);
}
+
private String unrecognizedFooterLine = null;
+
protected static RelayNetworkStatusVote
createWithUnrecognizedFooterLine(String line,
boolean failUnrecognizedDescriptorLines)
@@ -348,7 +413,9 @@ public class RelayNetworkStatusVoteImplTest {
return new RelayNetworkStatusVoteImpl(vb.buildVote(),
failUnrecognizedDescriptorLines);
}
+
private String unrecognizedDirectorySignatureLine = null;
+
protected static RelayNetworkStatusVote
createWithUnrecognizedDirectorySignatureLine(String line,
boolean failUnrecognizedDescriptorLines)
@@ -378,6 +445,7 @@ public class RelayNetworkStatusVoteImplTest {
+ "m 8,9,10,11 "
+ "sha256=9ciEx9t0McXk9A06I7qwN7pxuNOdpCP64RV/6cx2Zkc");
}
+
private byte[] buildVote() {
StringBuilder sb = new StringBuilder();
this.appendHeader(sb);
@@ -387,6 +455,7 @@ public class RelayNetworkStatusVoteImplTest {
this.appendDirectorySignature(sb);
return sb.toString().getBytes();
}
+
private void appendHeader(StringBuilder sb) {
if (this.networkStatusVersionLine != null) {
sb.append(this.networkStatusVersionLine).append("\n");
@@ -434,6 +503,7 @@ public class RelayNetworkStatusVoteImplTest {
sb.append(this.unrecognizedHeaderLine).append("\n");
}
}
+
private void appendDirSource(StringBuilder sb) {
if (this.dirSourceLine != null) {
sb.append(this.dirSourceLine).append("\n");
@@ -472,6 +542,7 @@ public class RelayNetworkStatusVoteImplTest {
sb.append(this.unrecognizedDirSourceLine).append("\n");
}
}
+
private void appendStatusEntries(StringBuilder sb) {
for (String statusEntry : this.statusEntries) {
sb.append(statusEntry).append("\n");
@@ -480,6 +551,7 @@ public class RelayNetworkStatusVoteImplTest {
sb.append(this.unrecognizedStatusEntryLine).append("\n");
}
}
+
private void appendFooter(StringBuilder sb) {
if (this.directoryFooterLine != null) {
sb.append(this.directoryFooterLine).append("\n");
@@ -488,6 +560,7 @@ public class RelayNetworkStatusVoteImplTest {
sb.append(this.unrecognizedFooterLine).append("\n");
}
}
+
private void appendDirectorySignature(StringBuilder sb) {
if (this.directorySignatureLines != null) {
sb.append(directorySignatureLines).append("\n");
@@ -517,8 +590,8 @@ public class RelayNetworkStatusVoteImplTest {
assertEquals(30000, (int) vote.getConsensusParams().get(
"CircuitPriorityHalflifeMsec"));
assertEquals("Tor 0.2.1.29 (r8e9b25e6c7a2e70c)",
- vote.getStatusEntry("00343A8024F70E214728F0C5AF7ACE0C1508F073").
- getVersion());
+ vote.getStatusEntry("00343A8024F70E214728F0C5AF7ACE0C1508F073")
+ .getVersion());
assertEquals(3, vote.getDirKeyCertificateVersion());
assertEquals("80550987E1D626E3EBA5E5E75A458DE0626D088C",
vote.getIdentity());
@@ -832,11 +905,11 @@ public class RelayNetworkStatusVoteImplTest {
}
}
- @Test(expected = DescriptorParseException.class)
- public void testPackageIncomplete() throws DescriptorParseException {
- String packageLine = "package shouldbesecond 0 http";
- ConsensusBuilder.createWithPackageLines(packageLine);
- }
+ @Test(expected = DescriptorParseException.class)
+ public void testPackageIncomplete() throws DescriptorParseException {
+ String packageLine = "package shouldbesecond 0 http";
+ ConsensusBuilder.createWithPackageLines(packageLine);
+ }
@Test(expected = DescriptorParseException.class)
public void testKnownFlagsNoLine() throws DescriptorParseException {
@@ -1284,8 +1357,8 @@ public class RelayNetworkStatusVoteImplTest {
public void testUnrecognizedHeaderLineIgnore()
throws DescriptorParseException {
String unrecognizedLine = "unrecognized-line 1";
- RelayNetworkStatusVote vote = VoteBuilder.
- createWithUnrecognizedHeaderLine(unrecognizedLine, false);
+ RelayNetworkStatusVote vote = VoteBuilder
+ .createWithUnrecognizedHeaderLine(unrecognizedLine, false);
List<String> unrecognizedLines = new ArrayList<>();
unrecognizedLines.add(unrecognizedLine);
assertEquals(unrecognizedLines, vote.getUnrecognizedLines());
@@ -1303,8 +1376,8 @@ public class RelayNetworkStatusVoteImplTest {
public void testUnrecognizedDirSourceLineIgnore()
throws DescriptorParseException {
String unrecognizedLine = "unrecognized-line 1";
- RelayNetworkStatusVote vote = VoteBuilder.
- createWithUnrecognizedDirSourceLine(unrecognizedLine, false);
+ RelayNetworkStatusVote vote = VoteBuilder
+ .createWithUnrecognizedDirSourceLine(unrecognizedLine, false);
List<String> unrecognizedLines = new ArrayList<>();
unrecognizedLines.add(unrecognizedLine);
assertEquals(unrecognizedLines, vote.getUnrecognizedLines());
@@ -1321,8 +1394,8 @@ public class RelayNetworkStatusVoteImplTest {
public void testUnrecognizedFooterLineIgnore()
throws DescriptorParseException {
String unrecognizedLine = "unrecognized-line 1";
- RelayNetworkStatusVote vote = VoteBuilder.
- createWithUnrecognizedFooterLine(unrecognizedLine, false);
+ RelayNetworkStatusVote vote = VoteBuilder
+ .createWithUnrecognizedFooterLine(unrecognizedLine, false);
List<String> unrecognizedLines = new ArrayList<>();
unrecognizedLines.add(unrecognizedLine);
assertEquals(unrecognizedLines, vote.getUnrecognizedLines());
diff --git a/src/test/java/org/torproject/descriptor/impl/ServerDescriptorImplTest.java b/src/test/java/org/torproject/descriptor/impl/ServerDescriptorImplTest.java
index 0daa83b..3769ead 100644
--- a/src/test/java/org/torproject/descriptor/impl/ServerDescriptorImplTest.java
+++ b/src/test/java/org/torproject/descriptor/impl/ServerDescriptorImplTest.java
@@ -1,14 +1,20 @@
/* Copyright 2012--2017 The Tor Project
* See LICENSE for licensing information */
+
package org.torproject.descriptor.impl;
-import org.torproject.descriptor.DescriptorParseException;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import org.torproject.descriptor.BandwidthHistory;
+import org.torproject.descriptor.DescriptorParseException;
+import org.torproject.descriptor.ServerDescriptor;
+
+import org.junit.Test;
+
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
@@ -16,68 +22,79 @@ import java.util.Arrays;
import java.util.List;
import java.util.SortedMap;
-import org.junit.Test;
-import org.torproject.descriptor.BandwidthHistory;
-import org.torproject.descriptor.ServerDescriptor;
-
/* Test parsing of relay server descriptors. */
public class ServerDescriptorImplTest {
/* Helper class to build a descriptor based on default data and
* modifications requested by test methods. */
private static class DescriptorBuilder {
+
private String routerLine = "router saberrider2008 94.134.192.243 "
+ "9001 0 0";
+
private static ServerDescriptor createWithRouterLine(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.routerLine = line;
return new RelayServerDescriptorImpl(db.buildDescriptor(), true);
}
+
private String bandwidthLine = "bandwidth 51200 51200 53470";
+
private static ServerDescriptor createWithBandwidthLine(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.bandwidthLine = line;
return new RelayServerDescriptorImpl(db.buildDescriptor(), true);
}
+
private String platformLine = "platform Tor 0.2.2.35 "
+ "(git-b04388f9e7546a9f) on Linux i686";
+
private static ServerDescriptor createWithPlatformLine(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.platformLine = line;
return new RelayServerDescriptorImpl(db.buildDescriptor(), true);
}
+
private String publishedLine = "published 2012-01-01 04:03:19";
+
private static ServerDescriptor createWithPublishedLine(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.publishedLine = line;
return new RelayServerDescriptorImpl(db.buildDescriptor(), true);
}
+
private String fingerprintLine = "opt fingerprint D873 3048 FC8E "
+ "C910 2466 AD8F 3098 622B F1BF 71FD";
+
private static ServerDescriptor createWithFingerprintLine(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.fingerprintLine = line;
return new RelayServerDescriptorImpl(db.buildDescriptor(), true);
}
+
private String hibernatingLine = null;
+
private static ServerDescriptor createWithHibernatingLine(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.hibernatingLine = line;
return new RelayServerDescriptorImpl(db.buildDescriptor(), true);
}
+
private String uptimeLine = "uptime 48";
+
private static ServerDescriptor createWithUptimeLine(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.uptimeLine = line;
return new RelayServerDescriptorImpl(db.buildDescriptor(), true);
}
+
private String onionKeyLines = "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAKM+iiHhO6eHsvd6Xjws9z9EQB1V/Bpuy5ciGJ1U4V9SeiKooSo5Bp"
@@ -85,12 +102,14 @@ public class ServerDescriptorImplTest {
+ "uC3cTF\n9wE4WXY4nX7w0RTN18UVLxrt1A9PP0cobFNiPs9rzJCbKFfacOkpAg"
+ "MBAAE=\n"
+ "-----END RSA PUBLIC KEY-----";
+
private static ServerDescriptor createWithOnionKeyLines(
String lines) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.onionKeyLines = lines;
return new RelayServerDescriptorImpl(db.buildDescriptor(), true);
}
+
private String signingKeyLines = "signing-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBALMm3r3QDh482Ewe6Ub9wvRIfmEkoNX6q5cEAtQRNHSDcNx41gjELb"
@@ -98,99 +117,126 @@ public class ServerDescriptorImplTest {
+ "DhUROG\n8URDIhQoixcUeyyrVB8sxliSstKimulGnB7xpjYOlO8JKaHLNL4TAg"
+ "MBAAE=\n"
+ "-----END RSA PUBLIC KEY-----";
+
private static ServerDescriptor createWithSigningKeyLines(
String lines) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.signingKeyLines = lines;
return new RelayServerDescriptorImpl(db.buildDescriptor(), true);
}
+
private String onionKeyCrosscertLines = null;
+
private static ServerDescriptor createWithOnionKeyCrosscertLines(
String lines) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.onionKeyCrosscertLines = lines;
return new RelayServerDescriptorImpl(db.buildDescriptor(), true);
}
+
private String ntorOnionKeyCrosscertLines = null;
+
private static ServerDescriptor createWithNtorOnionKeyCrosscertLines(
String lines) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.ntorOnionKeyCrosscertLines = lines;
return new RelayServerDescriptorImpl(db.buildDescriptor(), true);
}
+
private String exitPolicyLines = "reject *:*";
+
private static ServerDescriptor createWithExitPolicyLines(
String lines) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.exitPolicyLines = lines;
return new RelayServerDescriptorImpl(db.buildDescriptor(), true);
}
+
private String contactLine = "contact Random Person <nobody AT "
+ "example dot com>";
+
private static ServerDescriptor createWithContactLine(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.contactLine = line;
return new RelayServerDescriptorImpl(db.buildDescriptor(), true);
}
+
private String familyLine = null;
+
private static ServerDescriptor createWithFamilyLine(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.familyLine = line;
return new RelayServerDescriptorImpl(db.buildDescriptor(), true);
}
+
private String readHistoryLine = null;
+
private static ServerDescriptor createWithReadHistoryLine(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.readHistoryLine = line;
return new RelayServerDescriptorImpl(db.buildDescriptor(), true);
}
+
private String writeHistoryLine = null;
+
private static ServerDescriptor createWithWriteHistoryLine(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.writeHistoryLine = line;
return new RelayServerDescriptorImpl(db.buildDescriptor(), true);
}
+
private String eventdnsLine = null;
+
private static ServerDescriptor createWithEventdnsLine(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.eventdnsLine = line;
return new RelayServerDescriptorImpl(db.buildDescriptor(), true);
}
+
private String cachesExtraInfoLine = null;
+
private static ServerDescriptor createWithCachesExtraInfoLine(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.cachesExtraInfoLine = line;
return new RelayServerDescriptorImpl(db.buildDescriptor(), true);
}
+
private String extraInfoDigestLine = "opt extra-info-digest "
+ "1469D1550738A25B1E7B47CDDBCD7B2899F51B74";
+
private static ServerDescriptor createWithExtraInfoDigestLine(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.extraInfoDigestLine = line;
return new RelayServerDescriptorImpl(db.buildDescriptor(), true);
}
+
private String hiddenServiceDirLine = "opt hidden-service-dir";
+
private static ServerDescriptor createWithHiddenServiceDirLine(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.hiddenServiceDirLine = line;
return new RelayServerDescriptorImpl(db.buildDescriptor(), true);
}
+
private String protocolsLine = "opt protocols Link 1 2 Circuit 1";
+
private static ServerDescriptor createWithProtocolsLine(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.protocolsLine = line;
return new RelayServerDescriptorImpl(db.buildDescriptor(), true);
}
+
private String allowSingleHopExitsLine = null;
+
private static ServerDescriptor
createWithAllowSingleHopExitsLine(String line)
throws DescriptorParseException {
@@ -198,40 +244,50 @@ public class ServerDescriptorImplTest {
db.allowSingleHopExitsLine = line;
return new RelayServerDescriptorImpl(db.buildDescriptor(), true);
}
+
private String ipv6PolicyLine = null;
+
private static ServerDescriptor createWithIpv6PolicyLine(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.ipv6PolicyLine = line;
return new RelayServerDescriptorImpl(db.buildDescriptor(), true);
}
+
private String ntorOnionKeyLine = null;
+
private static ServerDescriptor createWithNtorOnionKeyLine(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.ntorOnionKeyLine = line;
return new RelayServerDescriptorImpl(db.buildDescriptor(), true);
}
+
private String tunnelledDirServerLine = null;
+
private static ServerDescriptor createWithTunnelledDirServerLine(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.tunnelledDirServerLine = line;
return new RelayServerDescriptorImpl(db.buildDescriptor(), true);
}
+
private String routerSignatureLines = "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "o4j+kH8UQfjBwepUnr99v0ebN8RpzHJ/lqYsTojXHy9kMr1RNI9IDeSzA7PSqT"
+ "uV\n4PL8QsGtlfwthtIoZpB2srZeyN/mcpA9fa1JXUrt/UN9K/+32Cyaad7h0n"
+ "HE6Xfb\njqpXDpnBpvk4zjmzjjKYnIsUWTnADmu0fo3xTRqXi7g=\n"
+ "-----END SIGNATURE-----";
+
private static ServerDescriptor createWithRouterSignatureLines(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.routerSignatureLines = line;
return new RelayServerDescriptorImpl(db.buildDescriptor(), true);
}
+
private String unrecognizedLine = null;
+
private static ServerDescriptor createWithUnrecognizedLine(
String line, boolean failUnrecognizedDescriptorLines)
throws DescriptorParseException {
@@ -240,7 +296,9 @@ public class ServerDescriptorImplTest {
return new RelayServerDescriptorImpl(db.buildDescriptor(),
failUnrecognizedDescriptorLines);
}
+
private byte[] nonAsciiLineBytes = null;
+
private static ServerDescriptor createWithNonAsciiLineBytes(
byte[] lineBytes, boolean failUnrecognizedDescriptorLines)
throws DescriptorParseException {
@@ -249,8 +307,13 @@ public class ServerDescriptorImplTest {
return new RelayServerDescriptorImpl(db.buildDescriptor(),
failUnrecognizedDescriptorLines);
}
- private String identityEd25519Lines = null,
- masterKeyEd25519Line = null, routerSigEd25519Line = null;
+
+ private String identityEd25519Lines = null;
+
+ private String masterKeyEd25519Line = null;
+
+ private String routerSigEd25519Line = null;
+
private static ServerDescriptor createWithEd25519Lines(
String identityEd25519Lines, String masterKeyEd25519Line,
String routerSigEd25519Line) throws DescriptorParseException {
@@ -260,6 +323,7 @@ public class ServerDescriptorImplTest {
db.routerSigEd25519Line = routerSigEd25519Line;
return new RelayServerDescriptorImpl(db.buildDescriptor(), true);
}
+
private byte[] buildDescriptor() {
StringBuilder sb = new StringBuilder();
if (this.routerLine != null) {
@@ -418,8 +482,8 @@ public class ServerDescriptorImplTest {
@Test()
public void testRouterOpt() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithRouterLine("opt router saberrider2008 "
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithRouterLine("opt router saberrider2008 "
+ "94.134.192.243 9001 0 0");
assertEquals("saberrider2008", descriptor.getNickname());
assertEquals("94.134.192.243", descriptor.getAddress());
@@ -455,8 +519,8 @@ public class ServerDescriptorImplTest {
@Test()
public void testNicknameTwoSpaces() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithRouterLine("router saberrider2008 "
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithRouterLine("router saberrider2008 "
+ "94.134.192.243 9001 0 0");
assertEquals("saberrider2008", descriptor.getNickname());
assertEquals("94.134.192.243", descriptor.getAddress());
@@ -512,15 +576,15 @@ public class ServerDescriptorImplTest {
@Test()
public void testPlatformMissing() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithPlatformLine(null);
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithPlatformLine(null);
assertNull(descriptor.getPlatform());
}
@Test()
public void testPlatformOpt() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithPlatformLine("opt platform Tor 0.2.2.35 "
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithPlatformLine("opt platform Tor 0.2.2.35 "
+ "(git-b04388f9e7546a9f) on Linux i686");
assertEquals("Tor 0.2.2.35 (git-b04388f9e7546a9f) on Linux i686",
descriptor.getPlatform());
@@ -528,22 +592,22 @@ public class ServerDescriptorImplTest {
@Test()
public void testPlatformNoSpace() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithPlatformLine("platform");
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithPlatformLine("platform");
assertEquals("", descriptor.getPlatform());
}
@Test()
public void testPlatformSpace() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithPlatformLine("platform ");
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithPlatformLine("platform ");
assertEquals("", descriptor.getPlatform());
}
@Test()
public void testProtocolsNoOpt() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithProtocolsLine("protocols Link 1 2 Circuit 1");
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithProtocolsLine("protocols Link 1 2 Circuit 1");
assertEquals(Arrays.asList(new Integer[] {1, 2}),
descriptor.getLinkProtocolVersions());
assertEquals(Arrays.asList(new Integer[] {1}),
@@ -551,7 +615,7 @@ public class ServerDescriptorImplTest {
}
@Test(expected = DescriptorParseException.class)
- public void testProtocolsAB() throws DescriptorParseException {
+ public void testProtocolsAb() throws DescriptorParseException {
DescriptorBuilder.createWithProtocolsLine("opt protocols Link A B "
+ "Circuit 1");
}
@@ -569,8 +633,8 @@ public class ServerDescriptorImplTest {
@Test()
public void testPublishedOpt() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithPublishedLine("opt published 2012-01-01 04:03:19");
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithPublishedLine("opt published 2012-01-01 04:03:19");
assertEquals(1325390599000L, descriptor.getPublishedMillis());
}
@@ -599,15 +663,15 @@ public class ServerDescriptorImplTest {
@Test()
public void testPublishedMillis() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithPublishedLine("opt published 2012-01-01 04:03:19.123");
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithPublishedLine("opt published 2012-01-01 04:03:19.123");
assertEquals(1325390599000L, descriptor.getPublishedMillis());
}
@Test()
public void testFingerprintNoOpt() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithFingerprintLine("fingerprint D873 3048 FC8E C910 2466 "
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithFingerprintLine("fingerprint D873 3048 FC8E C910 2466 "
+ "AD8F 3098 622B F1BF 71FD");
assertEquals("D8733048FC8EC9102466AD8F3098622BF1BF71FD",
descriptor.getFingerprint());
@@ -639,15 +703,15 @@ public class ServerDescriptorImplTest {
@Test()
public void testUptimeMissing() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithUptimeLine(null);
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithUptimeLine(null);
assertNull(descriptor.getUptime());
}
@Test()
public void testUptimeOpt() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithUptimeLine("opt uptime 48");
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithUptimeLine("opt uptime 48");
assertEquals(48, descriptor.getUptime().longValue());
}
@@ -678,8 +742,8 @@ public class ServerDescriptorImplTest {
@Test()
public void testBandwidthOpt() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithBandwidthLine("opt bandwidth 51200 51200 53470");
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithBandwidthLine("opt bandwidth 51200 51200 53470");
assertEquals(51200, (int) descriptor.getBandwidthRate());
assertEquals(51200, (int) descriptor.getBandwidthBurst());
assertEquals(53470, (int) descriptor.getBandwidthObserved());
@@ -700,8 +764,8 @@ public class ServerDescriptorImplTest {
/* This is allowed, because Tor versions 0.0.8 and older only wrote
* bandwidth lines with rate and burst values, but no observed
* value. */
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithBandwidthLine("bandwidth 51200 51200");
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithBandwidthLine("bandwidth 51200 51200");
assertEquals(51200, (int) descriptor.getBandwidthRate());
assertEquals(51200, (int) descriptor.getBandwidthBurst());
assertEquals(-1, (int) descriptor.getBandwidthObserved());
@@ -721,8 +785,8 @@ public class ServerDescriptorImplTest {
@Test()
public void testExtraInfoDigestNoOpt() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithExtraInfoDigestLine("extra-info-digest "
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithExtraInfoDigestLine("extra-info-digest "
+ "1469D1550738A25B1E7B47CDDBCD7B2899F51B74");
assertEquals("1469D1550738A25B1E7B47CDDBCD7B2899F51B74",
descriptor.getExtraInfoDigest());
@@ -753,8 +817,8 @@ public class ServerDescriptorImplTest {
@Test()
public void testExtraInfoDigestMissing()
throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithExtraInfoDigestLine(null);
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithExtraInfoDigestLine(null);
assertNull(descriptor.getExtraInfoDigest());
}
@@ -766,8 +830,8 @@ public class ServerDescriptorImplTest {
"V609l+N6ActBveebfNbH5lQ6wHDNstDkFgyqEhBHwtA";
String extraInfoDigestLine = String.format("extra-info-digest %s %s",
extraInfoDigest, additionalExtraInfoDigest);
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithExtraInfoDigestLine(extraInfoDigestLine);
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithExtraInfoDigestLine(extraInfoDigestLine);
assertEquals(extraInfoDigest, descriptor.getExtraInfoDigest());
}
@@ -796,16 +860,16 @@ public class ServerDescriptorImplTest {
@Test()
public void testHiddenServiceDirMissing()
throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithHiddenServiceDirLine(null);
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithHiddenServiceDirLine(null);
assertNull(descriptor.getHiddenServiceDirVersions());
}
@Test()
public void testHiddenServiceDirNoOpt()
throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithHiddenServiceDirLine("hidden-service-dir");
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithHiddenServiceDirLine("hidden-service-dir");
assertEquals(Arrays.asList(new Integer[] {2}),
descriptor.getHiddenServiceDirVersions());
}
@@ -813,23 +877,23 @@ public class ServerDescriptorImplTest {
@Test()
public void testHiddenServiceDirVersions2And3()
throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithHiddenServiceDirLine("hidden-service-dir 2 3");
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithHiddenServiceDirLine("hidden-service-dir 2 3");
assertEquals(Arrays.asList(new Integer[] {2, 3}),
descriptor.getHiddenServiceDirVersions());
}
@Test()
public void testContactMissing() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithContactLine(null);
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithContactLine(null);
assertNull(descriptor.getContact());
}
@Test()
public void testContactOpt() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithContactLine("opt contact Random Person");
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithContactLine("opt contact Random Person");
assertEquals("Random Person", descriptor.getContact());
}
@@ -841,8 +905,8 @@ public class ServerDescriptorImplTest {
@Test()
public void testContactNoSpace() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithContactLine("contact");
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithContactLine("contact");
assertEquals("", descriptor.getContact());
}
@@ -856,24 +920,24 @@ public class ServerDescriptorImplTest {
+ "07\rmTQoP40G4zqOrVEOOcXpdSiRnHWJYfgTnkibNZrOZEZLn3H1ywpovEgESm"
+ "oGEdAX\roid3XuIYRpRnqoafbFg9sg+OofX/mGrO+5ACfagQ9rlfx2oxCWijYw"
+ "pYFRk3NhCY=\r=Xaw3\r-----END PGP PUBLIC KEY BLOCK-----";
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithContactLine("contact " + contactString);
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithContactLine("contact " + contactString);
assertEquals(contactString, descriptor.getContact());
}
@Test()
public void testExitPolicyRejectAllAcceptAll()
throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithExitPolicyLines("reject *:*\naccept *:*");
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithExitPolicyLines("reject *:*\naccept *:*");
assertEquals(Arrays.asList(new String[] {"reject *:*", "accept *:*"}),
descriptor.getExitPolicyLines());
}
@Test()
public void testExitPolicyOpt() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithExitPolicyLines("opt reject *:*");
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithExitPolicyLines("opt reject *:*");
assertEquals(Arrays.asList(new String[] {"reject *:*"}),
descriptor.getExitPolicyLines());
}
@@ -886,8 +950,8 @@ public class ServerDescriptorImplTest {
@Test()
public void testExitPolicyAccept80RejectAll()
throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithExitPolicyLines("accept *:80\nreject *:*");
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithExitPolicyLines("accept *:80\nreject *:*");
assertEquals(Arrays.asList(new String[] {"accept *:80",
"reject *:*"}), descriptor.getExitPolicyLines());
}
@@ -916,8 +980,8 @@ public class ServerDescriptorImplTest {
@Test()
public void testExitPolicyMaskTypes() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithExitPolicyLines("reject 192.168.0.0/16:*\n"
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithExitPolicyLines("reject 192.168.0.0/16:*\n"
+ "reject 94.134.192.243/255.255.255.0:*");
assertEquals(Arrays.asList(new String[] { "reject 192.168.0.0/16:*",
"reject 94.134.192.243/255.255.255.0:*"}),
@@ -947,22 +1011,22 @@ public class ServerDescriptorImplTest {
@Test()
public void testHibernatingOpt() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithHibernatingLine("opt hibernating 1");
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithHibernatingLine("opt hibernating 1");
assertTrue(descriptor.isHibernating());
}
@Test()
public void testHibernatingFalse() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithHibernatingLine("hibernating 0");
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithHibernatingLine("hibernating 0");
assertFalse(descriptor.isHibernating());
}
@Test()
public void testHibernatingTrue() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithHibernatingLine("hibernating 1");
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithHibernatingLine("hibernating 1");
assertTrue(descriptor.isHibernating());
}
@@ -978,16 +1042,16 @@ public class ServerDescriptorImplTest {
@Test()
public void testFamilyOpt() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithFamilyLine("opt family saberrider2008");
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithFamilyLine("opt family saberrider2008");
assertEquals(Arrays.asList(new String[] {"saberrider2008"}),
descriptor.getFamilyEntries());
}
@Test()
public void testFamilyFingerprint() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithFamilyLine("family "
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithFamilyLine("family "
+ "$D8733048FC8EC9102466AD8F3098622BF1BF71FD");
assertEquals(Arrays.asList(new String[] {
"$D8733048FC8EC9102466AD8F3098622BF1BF71FD"}),
@@ -996,8 +1060,8 @@ public class ServerDescriptorImplTest {
@Test()
public void testFamilyNickname() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithFamilyLine("family saberrider2008");
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithFamilyLine("family saberrider2008");
assertEquals(Arrays.asList(new String[] {"saberrider2008"}),
descriptor.getFamilyEntries());
}
@@ -1023,8 +1087,8 @@ public class ServerDescriptorImplTest {
@Test()
public void testFamilyFingerprintNicknameNamed()
throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithFamilyLine("family "
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithFamilyLine("family "
+ "$D8733048FC8EC9102466AD8F3098622BF1BF71FD=saberrider2008");
assertEquals(Arrays.asList(new String[]
{ "$D8733048FC8EC9102466AD8F3098622BF1BF71FD=saberrider2008" }),
@@ -1034,8 +1098,8 @@ public class ServerDescriptorImplTest {
@Test()
public void testFamilyFingerprintNicknameUnnamed()
throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithFamilyLine("family "
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithFamilyLine("family "
+ "$D8733048FC8EC9102466AD8F3098622BF1BF71FD~saberrider2008");
assertEquals(Arrays.asList(new String[]
{ "$D8733048FC8EC9102466AD8F3098622BF1BF71FD~saberrider2008" }),
@@ -1046,16 +1110,16 @@ public class ServerDescriptorImplTest {
public void testWriteHistory() throws DescriptorParseException {
String writeHistoryLine = "write-history 2012-01-01 03:51:44 (900 s) "
+ "4345856,261120,7591936,1748992";
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithWriteHistoryLine(writeHistoryLine);
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithWriteHistoryLine(writeHistoryLine);
assertNotNull(descriptor.getWriteHistory());
BandwidthHistory parsedWriteHistory = descriptor.getWriteHistory();
assertEquals(writeHistoryLine, parsedWriteHistory.getLine());
- assertEquals(1325389904000L, (long) parsedWriteHistory.
- getHistoryEndMillis());
+ assertEquals(1325389904000L, (long) parsedWriteHistory
+ .getHistoryEndMillis());
assertEquals(900L, (long) parsedWriteHistory.getIntervalLength());
- SortedMap<Long, Long> bandwidthValues = parsedWriteHistory.
- getBandwidthValues();
+ SortedMap<Long, Long> bandwidthValues = parsedWriteHistory
+ .getBandwidthValues();
assertEquals(4345856L, (long) bandwidthValues.remove(1325387204000L));
assertEquals(261120L, (long) bandwidthValues.remove(1325388104000L));
assertEquals(7591936L, (long) bandwidthValues.remove(1325389004000L));
@@ -1065,8 +1129,8 @@ public class ServerDescriptorImplTest {
@Test()
public void testWriteHistoryOpt() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithWriteHistoryLine("opt write-history 2012-01-01 "
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithWriteHistoryLine("opt write-history 2012-01-01 "
+ "03:51:44 (900 s) 4345856,261120,7591936,1748992");
assertNotNull(descriptor.getWriteHistory());
}
@@ -1115,25 +1179,25 @@ public class ServerDescriptorImplTest {
@Test()
public void testWriteHistoryNoValuesSpace()
throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithWriteHistoryLine("write-history 2012-01-01 03:51:44 "
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithWriteHistoryLine("write-history 2012-01-01 03:51:44 "
+ "(900 s) ");
- assertEquals(900, (long) descriptor.getWriteHistory().
- getIntervalLength());
- assertTrue(descriptor.getWriteHistory().getBandwidthValues().
- isEmpty());
+ assertEquals(900, (long) descriptor.getWriteHistory()
+ .getIntervalLength());
+ assertTrue(descriptor.getWriteHistory().getBandwidthValues()
+ .isEmpty());
}
@Test()
public void testWriteHistoryNoValuesNoSpace()
throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithWriteHistoryLine("write-history 2012-01-01 03:51:44 "
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithWriteHistoryLine("write-history 2012-01-01 03:51:44 "
+ "(900 s)");
- assertEquals(900, (long) descriptor.getWriteHistory().
- getIntervalLength());
- assertTrue(descriptor.getWriteHistory().getBandwidthValues().
- isEmpty());
+ assertEquals(900, (long) descriptor.getWriteHistory()
+ .getIntervalLength());
+ assertTrue(descriptor.getWriteHistory().getBandwidthValues()
+ .isEmpty());
}
@Test(expected = DescriptorParseException.class)
@@ -1152,27 +1216,27 @@ public class ServerDescriptorImplTest {
@Test()
public void testWriteHistory1800Seconds()
throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithWriteHistoryLine("write-history 2012-01-01 03:51:44 "
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithWriteHistoryLine("write-history 2012-01-01 03:51:44 "
+ "(1800 s) 4345856");
- assertEquals(1800L, (long) descriptor.getWriteHistory().
- getIntervalLength());
+ assertEquals(1800L, (long) descriptor.getWriteHistory()
+ .getIntervalLength());
}
@Test()
public void testReadHistory() throws DescriptorParseException {
String readHistoryLine = "read-history 2012-01-01 03:51:44 (900 s) "
+ "4268032,139264,7797760,1415168";
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithReadHistoryLine(readHistoryLine);
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithReadHistoryLine(readHistoryLine);
assertNotNull(descriptor.getReadHistory());
BandwidthHistory parsedReadHistory = descriptor.getReadHistory();
assertEquals(readHistoryLine, parsedReadHistory.getLine());
- assertEquals(1325389904000L, (long) parsedReadHistory.
- getHistoryEndMillis());
+ assertEquals(1325389904000L, (long) parsedReadHistory
+ .getHistoryEndMillis());
assertEquals(900L, (long) parsedReadHistory.getIntervalLength());
- SortedMap<Long, Long> bandwidthValues = parsedReadHistory.
- getBandwidthValues();
+ SortedMap<Long, Long> bandwidthValues = parsedReadHistory
+ .getBandwidthValues();
assertEquals(4268032L, (long) bandwidthValues.remove(1325387204000L));
assertEquals(139264L, (long) bandwidthValues.remove(1325388104000L));
assertEquals(7797760L, (long) bandwidthValues.remove(1325389004000L));
@@ -1191,22 +1255,22 @@ public class ServerDescriptorImplTest {
@Test()
public void testEventdnsOpt() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithEventdnsLine("opt eventdns 1");
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithEventdnsLine("opt eventdns 1");
assertTrue(descriptor.getUsesEnhancedDnsLogic());
}
@Test()
public void testEventdns1() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithEventdnsLine("eventdns 1");
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithEventdnsLine("eventdns 1");
assertTrue(descriptor.getUsesEnhancedDnsLogic());
}
@Test()
public void testEventdns0() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithEventdnsLine("eventdns 0");
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithEventdnsLine("eventdns 0");
assertFalse(descriptor.getUsesEnhancedDnsLogic());
}
@@ -1222,16 +1286,16 @@ public class ServerDescriptorImplTest {
@Test()
public void testCachesExtraInfoOpt() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithCachesExtraInfoLine("opt caches-extra-info");
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithCachesExtraInfoLine("opt caches-extra-info");
assertTrue(descriptor.getCachesExtraInfo());
}
@Test()
public void testCachesExtraInfoNoSpace()
throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithCachesExtraInfoLine("caches-extra-info");
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithCachesExtraInfoLine("caches-extra-info");
assertTrue(descriptor.getCachesExtraInfo());
}
@@ -1244,16 +1308,16 @@ public class ServerDescriptorImplTest {
@Test()
public void testAllowSingleHopExitsOpt()
throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithAllowSingleHopExitsLine("opt allow-single-hop-exits");
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithAllowSingleHopExitsLine("opt allow-single-hop-exits");
assertTrue(descriptor.getAllowSingleHopExits());
}
@Test()
public void testAllowSingleHopExitsNoSpace()
throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithAllowSingleHopExitsLine("allow-single-hop-exits");
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithAllowSingleHopExitsLine("allow-single-hop-exits");
assertTrue(descriptor.getAllowSingleHopExits());
}
@@ -1278,8 +1342,8 @@ public class ServerDescriptorImplTest {
@Test()
public void testIpv6PolicyLine() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithIpv6PolicyLine("ipv6-policy accept 80,1194,1220,1293");
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithIpv6PolicyLine("ipv6-policy accept 80,1194,1220,1293");
assertEquals("accept", descriptor.getIpv6DefaultPolicy());
assertEquals("80,1194,1220,1293", descriptor.getIpv6PortList());
}
@@ -1317,8 +1381,8 @@ public class ServerDescriptorImplTest {
@Test()
public void testNtorOnionKeyLine() throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithNtorOnionKeyLine("ntor-onion-key "
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithNtorOnionKeyLine("ntor-onion-key "
+ "Y/XgaHcPIJVa4D55kir9QLH8rEYAaLXuv3c3sm8jYhY=");
assertEquals("Y/XgaHcPIJVa4D55kir9QLH8rEYAaLXuv3c3sm8jYhY",
descriptor.getNtorOnionKey());
@@ -1327,8 +1391,8 @@ public class ServerDescriptorImplTest {
@Test()
public void testNtorOnionKeyLineNoPadding()
throws DescriptorParseException {
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithNtorOnionKeyLine("ntor-onion-key "
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithNtorOnionKeyLine("ntor-onion-key "
+ "Y/XgaHcPIJVa4D55kir9QLH8rEYAaLXuv3c3sm8jYhY");
assertEquals("Y/XgaHcPIJVa4D55kir9QLH8rEYAaLXuv3c3sm8jYhY",
descriptor.getNtorOnionKey());
@@ -1403,8 +1467,8 @@ public class ServerDescriptorImplTest {
public void testUnrecognizedLineIgnore()
throws DescriptorParseException {
String unrecognizedLine = "unrecognized-line 1";
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithUnrecognizedLine(unrecognizedLine, false);
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithUnrecognizedLine(unrecognizedLine, false);
List<String> unrecognizedLines = new ArrayList<>();
unrecognizedLines.add(unrecognizedLine);
assertEquals(unrecognizedLines, descriptor.getUnrecognizedLines());
@@ -1426,8 +1490,8 @@ public class ServerDescriptorImplTest {
for (String line : unrecognizedLines) {
sb.append("\n").append(line);
}
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithUnrecognizedLine(sb.toString().substring(1), false);
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithUnrecognizedLine(sb.toString().substring(1), false);
assertEquals(unrecognizedLines, descriptor.getUnrecognizedLines());
}
@@ -1447,8 +1511,8 @@ public class ServerDescriptorImplTest {
for (String line : unrecognizedLines) {
sb.append("\n").append(line);
}
- ServerDescriptor descriptor = DescriptorBuilder.
- createWithUnrecognizedLine(sb.toString().substring(1), false);
+ ServerDescriptor descriptor = DescriptorBuilder
+ .createWithUnrecognizedLine(sb.toString().substring(1), false);
assertEquals(unrecognizedLines, descriptor.getUnrecognizedLines());
}
@@ -1579,7 +1643,7 @@ public class ServerDescriptorImplTest {
public void testOnionKeyCrosscertDuplicate()
throws DescriptorParseException {
DescriptorBuilder.createWithOnionKeyCrosscertLines(
- ONION_KEY_CROSSCERT_LINES + "\n" + ONION_KEY_CROSSCERT_LINES);
+ ONION_KEY_CROSSCERT_LINES + "\n" + ONION_KEY_CROSSCERT_LINES);
}
@Test()
diff --git a/src/test/java/org/torproject/descriptor/impl/TorperfResultImplTest.java b/src/test/java/org/torproject/descriptor/impl/TorperfResultImplTest.java
index 62d0875..080d16d 100644
--- a/src/test/java/org/torproject/descriptor/impl/TorperfResultImplTest.java
+++ b/src/test/java/org/torproject/descriptor/impl/TorperfResultImplTest.java
@@ -1,19 +1,21 @@
/* Copyright 2015--2017 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.torproject.descriptor.Descriptor;
import org.junit.Test;
-import org.torproject.descriptor.Descriptor;
+
+import java.util.List;
public class TorperfResultImplTest {
@Test()
- public void testAnnotatedInput() throws Exception{
+ public void testAnnotatedInput() throws Exception {
TorperfResultImpl result = (TorperfResultImpl)
(TorperfResultImpl.parseTorperfResults((torperfAnnotation + input)
.getBytes("US-ASCII"), false).get(0));
@@ -29,7 +31,7 @@ public class TorperfResultImplTest {
}
@Test()
- public void testPartiallyAnnotatedInput() throws Exception{
+ public void testPartiallyAnnotatedInput() throws Exception {
byte[] asciiBytes = (torperfAnnotation
+ input + input + input).getBytes("US-ASCII");
List<Descriptor> result = TorperfResultImpl.parseTorperfResults(
1
0
commit 880c6036a3490dae1318c94d715998a1ce3b75be
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Fri Feb 17 16:20:10 2017 +0100
Tweak Javadocs.
---
src/main/java/org/torproject/descriptor/DescriptorReader.java | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/main/java/org/torproject/descriptor/DescriptorReader.java b/src/main/java/org/torproject/descriptor/DescriptorReader.java
index 2a4f1c3..32c26d1 100644
--- a/src/main/java/org/torproject/descriptor/DescriptorReader.java
+++ b/src/main/java/org/torproject/descriptor/DescriptorReader.java
@@ -68,9 +68,9 @@ public interface DescriptorReader {
* <p>Lines in the history file contain the last modified time in
* milliseconds since the epoch and the absolute path of a file.</p>
*
- * @deprecated Replaced by {@link #setHistoryFile()} and
- * {@link #saveHistoryFile()} which let the application explicitly tell us
- * when it's done processing read descriptors.
+ * @deprecated Replaced by {@link #setHistoryFile(File)} and
+ * {@link #saveHistoryFile(File)} which let the application explicitly
+ * tell us when it's done processing read descriptors.
*
* @since 1.0.0
*/
1
0

[metrics-lib/release] Parse "shared-rand-.*" lines in consensuses and votes.
by karsten@torproject.org 17 Feb '17
by karsten@torproject.org 17 Feb '17
17 Feb '17
commit 110cb01250703d2825d956752ec84557583144ec
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Mon Feb 13 15:54:06 2017 +0100
Parse "shared-rand-.*" lines in consensuses and votes.
---
CHANGELOG.md | 1 +
.../descriptor/RelayNetworkStatusConsensus.java | 34 +++++++
.../descriptor/RelayNetworkStatusVote.java | 55 +++++++++++
.../impl/RelayNetworkStatusConsensusImpl.java | 69 +++++++++++++-
.../impl/RelayNetworkStatusVoteImpl.java | 104 ++++++++++++++++++++-
.../descriptor/impl/ConsensusBuilder.java | 30 ++++++
.../impl/RelayNetworkStatusConsensusImplTest.java | 15 +++
.../impl/RelayNetworkStatusVoteImplTest.java | 97 +++++++++++++++++++
8 files changed, 402 insertions(+), 3 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6bcfea9..a760143 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -16,6 +16,7 @@
- Parse "proto" lines in server descriptors, "pr" lines in status
entries, and "(recommended|required)-(client|relay)-protocols"
lines in consensuses and votes.
+ - Parse "shared-rand-.*" lines in consensuses and votes.
# Changes in version 1.5.0 - 2016-10-19
diff --git a/src/main/java/org/torproject/descriptor/RelayNetworkStatusConsensus.java b/src/main/java/org/torproject/descriptor/RelayNetworkStatusConsensus.java
index b004b66..57a8dd6 100644
--- a/src/main/java/org/torproject/descriptor/RelayNetworkStatusConsensus.java
+++ b/src/main/java/org/torproject/descriptor/RelayNetworkStatusConsensus.java
@@ -179,6 +179,40 @@ public interface RelayNetworkStatusConsensus extends Descriptor {
public SortedMap<String, Integer> getConsensusParams();
/**
+ * Return the number of commits used to generate the second-to-last shared
+ * random value, or -1 if the consensus does not contain a second-to-last
+ * shared random value.
+ *
+ * @since 1.6.0
+ */
+ public int getSharedRandPreviousNumReveals();
+
+ /**
+ * Return the second-to-last shared random value, encoded in base64, or null
+ * if the consensus does not contain a second-to-last shared random value.
+ *
+ * @since 1.6.0
+ */
+ public String getSharedRandPreviousValue();
+
+ /**
+ * Return the number of commits used to generate the latest shared random
+ * value, or -1 if the consensus does not contain the latest shared random
+ * value.
+ *
+ * @since 1.6.0
+ */
+ public int getSharedRandCurrentNumReveals();
+
+ /**
+ * Return the latest shared random value, encoded in base64, or null if the
+ * consensus does not contain the latest shared random value.
+ *
+ * @since 1.6.0
+ */
+ public String getSharedRandCurrentValue();
+
+ /**
* Return directory source entries for each directory authority that
* contributed to the consensus, with map keys being SHA-1 digests of
* the authorities' identity keys in the version 3 directory protocol,
diff --git a/src/main/java/org/torproject/descriptor/RelayNetworkStatusVote.java b/src/main/java/org/torproject/descriptor/RelayNetworkStatusVote.java
index 9ea804d..cfb012b 100644
--- a/src/main/java/org/torproject/descriptor/RelayNetworkStatusVote.java
+++ b/src/main/java/org/torproject/descriptor/RelayNetworkStatusVote.java
@@ -306,6 +306,61 @@ public interface RelayNetworkStatusVote extends Descriptor {
public String getContactLine();
/**
+ * Return whether this directory authority supports and can participate in
+ * the shared random protocol.
+ *
+ * @since 1.6.0
+ */
+ public boolean isSharedRandParticipate();
+
+ /**
+ * Return all currently known directory authority commit lines for the shared
+ * randomness protocol in the original format as they are contained in this
+ * vote, or null if this vote does not contain any such line.
+ *
+ * <pre>
+ * "shared-rand-commit" SP Version SP AlgName SP Identity SP Commit
+ * [SP Reveal] NL
+ * </pre>
+ *
+ * @since 1.6.0
+ */
+ public List<String> getSharedRandCommitLines();
+
+ /**
+ * Return the number of commits used to generate the second-to-last shared
+ * random value, or -1 if this vote does not contain a second-to-last shared
+ * random value.
+ *
+ * @since 1.6.0
+ */
+ public int getSharedRandPreviousNumReveals();
+
+ /**
+ * Return the second-to-last shared random value, encoded in base64, or null
+ * if this vote does not contain a second-to-last shared random value.
+ *
+ * @since 1.6.0
+ */
+ public String getSharedRandPreviousValue();
+
+ /**
+ * Return the number of commits used to generate the latest shared random
+ * value, or -1 if this vote does not contain the latest shared random value.
+ *
+ * @since 1.6.0
+ */
+ public int getSharedRandCurrentNumReveals();
+
+ /**
+ * Return the latest shared random value, encoded in base64, or null if this
+ * vote does not contain the latest shared random value.
+ *
+ * @since 1.6.0
+ */
+ public String getSharedRandCurrentValue();
+
+ /**
* Return the version of the directory key certificate used by this
* authority, which must be 3 or higher.
*
diff --git a/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImpl.java b/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImpl.java
index fd4cf7e..dcb8938 100644
--- a/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImpl.java
@@ -54,8 +54,9 @@ public class RelayNetworkStatusConsensusImpl extends NetworkStatusImpl
Set<String> atMostOnceKeywords = new HashSet<>(Arrays.asList((
"client-versions,server-versions,recommended-client-protocols,"
+ "recommended-relay-protocols,required-client-protocols,"
- + "required-relay-protocols,params,directory-footer,"
- + "bandwidth-weights").split(",")));
+ + "required-relay-protocols,params,shared-rand-previous-value,"
+ + "shared-rand-current-value,directory-footer,bandwidth-weights")
+ .split(",")));
this.checkAtMostOnceKeywords(atMostOnceKeywords);
this.checkFirstKeyword("network-status-version");
this.clearParsedKeywords();
@@ -147,6 +148,12 @@ public class RelayNetworkStatusConsensusImpl extends NetworkStatusImpl
case "params":
this.parseParamsLine(line, parts);
break;
+ case "shared-rand-previous-value":
+ this.parseSharedRandPreviousValueLine(line, parts);
+ break;
+ case "shared-rand-current-value":
+ this.parseSharedRandCurrentValueLine(line, parts);
+ break;
default:
if (this.failUnrecognizedDescriptorLines) {
throw new DescriptorParseException("Unrecognized line '"
@@ -350,6 +357,36 @@ public class RelayNetworkStatusConsensusImpl extends NetworkStatusImpl
parts, 1, "=");
}
+ private void parseSharedRandPreviousValueLine(String line, String[] parts)
+ throws DescriptorParseException {
+ if (parts.length != 3) {
+ throw new DescriptorParseException("Illegal line '" + line
+ + "' in vote.");
+ }
+ try {
+ this.sharedRandPreviousNumReveals = Integer.parseInt(parts[1]);
+ } catch (NumberFormatException e) {
+ throw new DescriptorParseException("Illegal line '" + line
+ + "' in vote.");
+ }
+ this.sharedRandPreviousValue = parts[2];
+ }
+
+ private void parseSharedRandCurrentValueLine(String line, String[] parts)
+ throws DescriptorParseException {
+ if (parts.length != 3) {
+ throw new DescriptorParseException("Illegal line '" + line
+ + "' in vote.");
+ }
+ try {
+ this.sharedRandCurrentNumReveals = Integer.parseInt(parts[1]);
+ } catch (NumberFormatException e) {
+ throw new DescriptorParseException("Illegal line '" + line
+ + "' in vote.");
+ }
+ this.sharedRandCurrentValue = parts[2];
+ }
+
private void parseBandwidthWeightsLine(String line, String[] parts)
throws DescriptorParseException {
this.bandwidthWeights = ParseHelper.parseKeyValueIntegerPairs(line,
@@ -486,6 +523,34 @@ public class RelayNetworkStatusConsensusImpl extends NetworkStatusImpl
: new TreeMap<>(this.consensusParams);
}
+ private int sharedRandPreviousNumReveals = -1;
+
+ @Override
+ public int getSharedRandPreviousNumReveals() {
+ return this.sharedRandPreviousNumReveals;
+ }
+
+ private String sharedRandPreviousValue = null;
+
+ @Override
+ public String getSharedRandPreviousValue() {
+ return this.sharedRandPreviousValue;
+ }
+
+ private int sharedRandCurrentNumReveals = -1;
+
+ @Override
+ public int getSharedRandCurrentNumReveals() {
+ return this.sharedRandCurrentNumReveals;
+ }
+
+ private String sharedRandCurrentValue = null;
+
+ @Override
+ public String getSharedRandCurrentValue() {
+ return this.sharedRandCurrentValue;
+ }
+
private SortedMap<String, Integer> bandwidthWeights;
@Override
diff --git a/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java b/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java
index 619b2c1..1f64173 100644
--- a/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java
+++ b/src/main/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java
@@ -54,7 +54,8 @@ public class RelayNetworkStatusVoteImpl extends NetworkStatusImpl
"consensus-methods,client-versions,server-versions,"
+ "recommended-client-protocols,recommended-relay-protocols,"
+ "required-client-protocols,required-relay-protocols,"
- + "flag-thresholds,params,contact,"
+ + "flag-thresholds,params,contact,shared-rand-participate,"
+ + "shared-rand-previous-value,shared-rand-current-value,"
+ "legacy-key,dir-key-crosscert,dir-address,directory-footer")
.split(",")));
this.checkAtMostOnceKeywords(atMostOnceKeywords);
@@ -149,6 +150,18 @@ public class RelayNetworkStatusVoteImpl extends NetworkStatusImpl
case "contact":
this.parseContactLine(line, parts);
break;
+ case "shared-rand-participate":
+ this.parseSharedRandParticipateLine(line, parts);
+ break;
+ case "shared-rand-commit":
+ this.parseSharedRandCommitLine(line, parts);
+ break;
+ case "shared-rand-previous-value":
+ this.parseSharedRandPreviousValueLine(line, parts);
+ break;
+ case "shared-rand-current-value":
+ this.parseSharedRandCurrentValueLine(line, parts);
+ break;
case "dir-key-certificate-version":
this.parseDirKeyCertificateVersionLine(line, parts);
break;
@@ -452,6 +465,53 @@ public class RelayNetworkStatusVoteImpl extends NetworkStatusImpl
}
}
+ private void parseSharedRandParticipateLine(String line, String[] parts)
+ throws DescriptorParseException {
+ if (parts.length != 1) {
+ throw new DescriptorParseException("Illegal line '" + line
+ + "' in vote.");
+ }
+ this.sharedRandParticipate = true;
+ }
+
+ private void parseSharedRandCommitLine(String line, String[] parts)
+ throws DescriptorParseException {
+ if (this.sharedRandCommitLines == null) {
+ this.sharedRandCommitLines = new ArrayList<>();
+ }
+ this.sharedRandCommitLines.add(line);
+ }
+
+ private void parseSharedRandPreviousValueLine(String line, String[] parts)
+ throws DescriptorParseException {
+ if (parts.length != 3) {
+ throw new DescriptorParseException("Illegal line '" + line
+ + "' in vote.");
+ }
+ try {
+ this.sharedRandPreviousNumReveals = Integer.parseInt(parts[1]);
+ } catch (NumberFormatException e) {
+ throw new DescriptorParseException("Illegal line '" + line
+ + "' in vote.");
+ }
+ this.sharedRandPreviousValue = parts[2];
+ }
+
+ private void parseSharedRandCurrentValueLine(String line, String[] parts)
+ throws DescriptorParseException {
+ if (parts.length != 3) {
+ throw new DescriptorParseException("Illegal line '" + line
+ + "' in vote.");
+ }
+ try {
+ this.sharedRandCurrentNumReveals = Integer.parseInt(parts[1]);
+ } catch (NumberFormatException e) {
+ throw new DescriptorParseException("Illegal line '" + line
+ + "' in vote.");
+ }
+ this.sharedRandCurrentValue = parts[2];
+ }
+
private void parseDirKeyCertificateVersionLine(String line,
String[] parts) throws DescriptorParseException {
if (parts.length != 2) {
@@ -604,6 +664,48 @@ public class RelayNetworkStatusVoteImpl extends NetworkStatusImpl
return this.contactLine;
}
+ private boolean sharedRandParticipate = false;
+
+ @Override
+ public boolean isSharedRandParticipate() {
+ return this.sharedRandParticipate;
+ }
+
+ private List<String> sharedRandCommitLines = null;
+
+ @Override
+ public List<String> getSharedRandCommitLines() {
+ return this.sharedRandCommitLines;
+ }
+
+ private int sharedRandPreviousNumReveals = -1;
+
+ @Override
+ public int getSharedRandPreviousNumReveals() {
+ return this.sharedRandPreviousNumReveals;
+ }
+
+ private String sharedRandPreviousValue = null;
+
+ @Override
+ public String getSharedRandPreviousValue() {
+ return this.sharedRandPreviousValue;
+ }
+
+ private int sharedRandCurrentNumReveals = -1;
+
+ @Override
+ public int getSharedRandCurrentNumReveals() {
+ return this.sharedRandCurrentNumReveals;
+ }
+
+ private String sharedRandCurrentValue = null;
+
+ @Override
+ public String getSharedRandCurrentValue() {
+ return this.sharedRandCurrentValue;
+ }
+
private int dirKeyCertificateVersion;
@Override
diff --git a/src/test/java/org/torproject/descriptor/impl/ConsensusBuilder.java b/src/test/java/org/torproject/descriptor/impl/ConsensusBuilder.java
index 24d5a02..d1cacc0 100644
--- a/src/test/java/org/torproject/descriptor/impl/ConsensusBuilder.java
+++ b/src/test/java/org/torproject/descriptor/impl/ConsensusBuilder.java
@@ -188,6 +188,30 @@ public class ConsensusBuilder {
return new RelayNetworkStatusConsensusImpl(cb.buildConsensus(), true);
}
+ private String sharedRandPreviousValueLine =
+ "shared-rand-previous-value 8 "
+ + "grwbnD6I40odtsdtWYxqs0DvPweCur6qG2Fo5p5ivS4=";
+
+ protected static RelayNetworkStatusConsensus
+ createWithSharedRandPreviousValueLine(String line)
+ throws DescriptorParseException {
+ ConsensusBuilder cb = new ConsensusBuilder();
+ cb.sharedRandPreviousValueLine = line;
+ return new RelayNetworkStatusConsensusImpl(cb.buildConsensus(), true);
+ }
+
+ private String sharedRandCurrentValueLine =
+ "shared-rand-current-value 8 "
+ + "D88plxd8YeLfCIVAR9gjiFlWB1WqpC53kWr350o1pzw=";
+
+ protected static RelayNetworkStatusConsensus
+ createWithSharedRandCurrentValueLine(String line)
+ throws DescriptorParseException {
+ ConsensusBuilder cb = new ConsensusBuilder();
+ cb.sharedRandCurrentValueLine = line;
+ return new RelayNetworkStatusConsensusImpl(cb.buildConsensus(), true);
+ }
+
List<String> dirSources = new ArrayList<>();
List<String> statusEntries = new ArrayList<>();
@@ -385,6 +409,12 @@ public class ConsensusBuilder {
if (this.paramsLine != null) {
sb.append(this.paramsLine).append("\n");
}
+ if (this.sharedRandPreviousValueLine != null) {
+ sb.append(this.sharedRandPreviousValueLine).append("\n");
+ }
+ if (this.sharedRandCurrentValueLine != null) {
+ sb.append(this.sharedRandCurrentValueLine).append("\n");
+ }
if (this.unrecognizedHeaderLine != null) {
sb.append(this.unrecognizedHeaderLine).append("\n");
}
diff --git a/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImplTest.java b/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImplTest.java
index 786ae54..b150a6a 100644
--- a/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImplTest.java
+++ b/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImplTest.java
@@ -855,6 +855,21 @@ public class RelayNetworkStatusConsensusImplTest {
ConsensusBuilder.createWithParamsLine("params max=2147483648");
}
+ @Test(expected = DescriptorParseException.class)
+ public void testSharedRandPreviousNumRevealsOnly()
+ throws DescriptorParseException {
+ ConsensusBuilder.createWithSharedRandPreviousValueLine(
+ "shared-rand-previous-value 8");
+ }
+
+ @Test(expected = DescriptorParseException.class)
+ public void testSharedRandPreviousExtraArg()
+ throws DescriptorParseException {
+ ConsensusBuilder.createWithSharedRandCurrentValueLine(
+ "shared-rand-current-value 8 "
+ + "D88plxd8YeLfCIVAR9gjiFlWB1WqpC53kWr350o1pzw= -1.0");
+ }
+
@Test()
public void testDirSourceLegacyNickname()
throws DescriptorParseException {
diff --git a/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImplTest.java b/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImplTest.java
index ea7b927..727d707 100644
--- a/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImplTest.java
+++ b/src/test/java/org/torproject/descriptor/impl/RelayNetworkStatusVoteImplTest.java
@@ -252,6 +252,52 @@ public class RelayNetworkStatusVoteImplTest {
return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
}
+ private String sharedRandParticipateLine = "shared-rand-participate";
+
+ private static RelayNetworkStatusVote createWithSharedRandParticipateLine(
+ String line) throws DescriptorParseException {
+ VoteBuilder vb = new VoteBuilder();
+ vb.sharedRandParticipateLine = line;
+ return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
+ }
+
+ private List<String> sharedRandCommitLines = Arrays.asList(new String[] {
+ "shared-rand-commit 1 sha3-256 "
+ + "0232AF901C31A04EE9848595AF9BB7620D4C5B2E "
+ + "AAAAAFieVABh3Aauk2h31FVKaW0xIm28T7VPDkzP5nHwoMItxp7iQg==",
+ "shared-rand-commit 1 sha3-256 "
+ + "14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4 "
+ + "AAAAAFieVAA26LuAu9z2UhalmV7zuczWauSkqp1c/bsPA3AkH85iGw==" });
+
+ private static RelayNetworkStatusVote createWithSharedRandCommitLines(
+ List<String> lines) throws DescriptorParseException {
+ VoteBuilder vb = new VoteBuilder();
+ vb.sharedRandCommitLines = lines;
+ return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
+ }
+
+ private String sharedRandPreviousValueLine =
+ "shared-rand-previous-value 8 "
+ + "grwbnD6I40odtsdtWYxqs0DvPweCur6qG2Fo5p5ivS4=";
+
+ private static RelayNetworkStatusVote createWithSharedRandPreviousValueLine(
+ String line) throws DescriptorParseException {
+ VoteBuilder vb = new VoteBuilder();
+ vb.sharedRandPreviousValueLine = line;
+ return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
+ }
+
+ private String sharedRandCurrentValueLine =
+ "shared-rand-current-value 8 "
+ + "D88plxd8YeLfCIVAR9gjiFlWB1WqpC53kWr350o1pzw=";
+
+ private static RelayNetworkStatusVote createWithSharedRandCurrentValueLine(
+ String line) throws DescriptorParseException {
+ VoteBuilder vb = new VoteBuilder();
+ vb.sharedRandCurrentValueLine = line;
+ return new RelayNetworkStatusVoteImpl(vb.buildVote(), true);
+ }
+
private String legacyDirKeyLine = null;
private static RelayNetworkStatusVote
@@ -572,6 +618,20 @@ public class RelayNetworkStatusVoteImplTest {
if (this.contactLine != null) {
sb.append(this.contactLine).append("\n");
}
+ if (this.sharedRandParticipateLine != null) {
+ sb.append(this.sharedRandParticipateLine).append("\n");
+ }
+ if (this.sharedRandCommitLines != null) {
+ for (String line : this.sharedRandCommitLines) {
+ sb.append(line).append("\n");
+ }
+ }
+ if (this.sharedRandPreviousValueLine != null) {
+ sb.append(this.sharedRandPreviousValueLine).append("\n");
+ }
+ if (this.sharedRandCurrentValueLine != null) {
+ sb.append(this.sharedRandCurrentValueLine).append("\n");
+ }
if (this.legacyDirKeyLine != null) {
sb.append(this.legacyDirKeyLine).append("\n");
}
@@ -1252,6 +1312,43 @@ public class RelayNetworkStatusVoteImplTest {
+ "Appelbaum <jacob(a)appelbaum.net>");
}
+ @Test(expected = DescriptorParseException.class)
+ public void testSharedRandParticipateLineDuplicate()
+ throws DescriptorParseException {
+ VoteBuilder.createWithSharedRandParticipateLine("shared-rand-participate\n"
+ + "shared-rand-participate");
+ }
+
+ @Test(expected = DescriptorParseException.class)
+ public void testSharedRandParticipateLineArg()
+ throws DescriptorParseException {
+ VoteBuilder.createWithSharedRandParticipateLine(
+ "shared-rand-participate 1");
+ }
+
+ @Test()
+ public void testSharedRandCommitLinesEmpty() throws DescriptorParseException {
+ RelayNetworkStatusVote vote =
+ VoteBuilder.createWithSharedRandCommitLines(null);
+ assertNull(vote.getSharedRandCommitLines());
+ }
+
+ @Test(expected = DescriptorParseException.class)
+ public void testSharedRandPreviousValueBeforeNumReveals()
+ throws DescriptorParseException {
+ VoteBuilder.createWithSharedRandPreviousValueLine(
+ "shared-rand-previous-value "
+ + "grwbnD6I40odtsdtWYxqs0DvPweCur6qG2Fo5p5ivS4= 8");
+ }
+
+ @Test(expected = DescriptorParseException.class)
+ public void testSharedRandCurrentNoNumReveals()
+ throws DescriptorParseException {
+ VoteBuilder.createWithSharedRandCurrentValueLine(
+ "shared-rand-current-value "
+ + "D88plxd8YeLfCIVAR9gjiFlWB1WqpC53kWr350o1pzw=");
+ }
+
@Test()
public void testLegacyDirKeyLine() throws DescriptorParseException {
RelayNetworkStatusVote vote = VoteBuilder.createWithLegacyDirKeyLine(
1
0