[tor-commits] [onionoo/master] Add tests for UpdateStatusUpdater.
karsten at torproject.org
karsten at torproject.org
Mon Apr 14 13:29:25 UTC 2014
commit 7ad85bd18b82973a6a323fe776a0dd657a7f8a15
Author: Karsten Loesing <karsten.loesing at gmx.net>
Date: Sun Mar 23 17:09:38 2014 +0100
Add tests for UpdateStatusUpdater.
---
.../torproject/onionoo/ClientsStatusUpdater.java | 1 -
src/org/torproject/onionoo/DescriptorSource.java | 49 +++---
src/org/torproject/onionoo/Main.java | 19 +--
.../torproject/onionoo/UptimeStatusUpdater.java | 1 -
test/org/torproject/onionoo/DummyBridgeStatus.java | 43 +++++
test/org/torproject/onionoo/DummyConsensus.java | 114 +++++++++++++
.../torproject/onionoo/DummyDescriptorSource.java | 133 +++++++++++++++
.../org/torproject/onionoo/DummyDocumentStore.java | 6 +
test/org/torproject/onionoo/DummyStatusEntry.java | 92 ++++++++++
.../onionoo/UptimeStatusUpdaterTest.java | 176 ++++++++++++++++++++
10 files changed, 594 insertions(+), 40 deletions(-)
diff --git a/src/org/torproject/onionoo/ClientsStatusUpdater.java b/src/org/torproject/onionoo/ClientsStatusUpdater.java
index ed4390e..4fe2b2d 100644
--- a/src/org/torproject/onionoo/ClientsStatusUpdater.java
+++ b/src/org/torproject/onionoo/ClientsStatusUpdater.java
@@ -149,7 +149,6 @@ public class ClientsStatusUpdater implements DescriptorListener,
this.compressHistory(clientsStatus);
this.documentStore.store(clientsStatus, hashedFingerprint);
}
- Logger.printStatusTime("Updated clients status files");
}
private void addToHistory(ClientsStatus clientsStatus,
diff --git a/src/org/torproject/onionoo/DescriptorSource.java b/src/org/torproject/onionoo/DescriptorSource.java
index f5adf56..f4ff2fc 100644
--- a/src/org/torproject/onionoo/DescriptorSource.java
+++ b/src/org/torproject/onionoo/DescriptorSource.java
@@ -318,42 +318,21 @@ public class DescriptorSource {
this.fingerprintListeners.get(descriptorType).add(listener);
}
- public void readRelayNetworkConsensuses() {
+ public void readDescriptors() {
this.readDescriptors(DescriptorType.RELAY_CONSENSUSES,
DescriptorHistory.RELAY_CONSENSUS_HISTORY, true);
- }
-
- public void readRelayServerDescriptors() {
this.readDescriptors(DescriptorType.RELAY_SERVER_DESCRIPTORS,
DescriptorHistory.RELAY_SERVER_HISTORY, true);
- }
-
- public void readRelayExtraInfos() {
this.readDescriptors(DescriptorType.RELAY_EXTRA_INFOS,
DescriptorHistory.RELAY_EXTRAINFO_HISTORY, true);
- }
-
- public void readExitLists() {
this.readDescriptors(DescriptorType.EXIT_LISTS,
DescriptorHistory.EXIT_LIST_HISTORY, true);
- }
-
- public void readBridgeNetworkStatuses() {
this.readDescriptors(DescriptorType.BRIDGE_STATUSES,
DescriptorHistory.BRIDGE_STATUS_HISTORY, false);
- }
-
- public void readBridgeServerDescriptors() {
this.readDescriptors(DescriptorType.BRIDGE_SERVER_DESCRIPTORS,
DescriptorHistory.BRIDGE_SERVER_HISTORY, false);
- }
-
- public void readBridgeExtraInfos() {
this.readDescriptors(DescriptorType.BRIDGE_EXTRA_INFOS,
DescriptorHistory.BRIDGE_EXTRAINFO_HISTORY, false);
- }
-
- public void readBridgePoolAssignments() {
this.readDescriptors(DescriptorType.BRIDGE_POOL_ASSIGNMENTS,
DescriptorHistory.BRIDGE_POOLASSIGN_HISTORY, false);
}
@@ -419,6 +398,32 @@ public class DescriptorSource {
fingerprintListener.processFingerprints(fingerprints, relay);
}
}
+ switch (descriptorType) {
+ case RELAY_CONSENSUSES:
+ Logger.printStatusTime("Read relay network consensuses");
+ break;
+ case RELAY_SERVER_DESCRIPTORS:
+ Logger.printStatusTime("Read relay server descriptors");
+ break;
+ case RELAY_EXTRA_INFOS:
+ Logger.printStatusTime("Read relay extra-info descriptors");
+ break;
+ case EXIT_LISTS:
+ Logger.printStatusTime("Read exit lists");
+ break;
+ case BRIDGE_STATUSES:
+ Logger.printStatusTime("Read bridge network statuses");
+ break;
+ case BRIDGE_SERVER_DESCRIPTORS:
+ Logger.printStatusTime("Read bridge server descriptors");
+ break;
+ case BRIDGE_EXTRA_INFOS:
+ Logger.printStatusTime("Read bridge extra-info descriptors");
+ break;
+ case BRIDGE_POOL_ASSIGNMENTS:
+ Logger.printStatusTime("Read bridge-pool assignments");
+ break;
+ }
}
public void writeHistoryFiles() {
diff --git a/src/org/torproject/onionoo/Main.java b/src/org/torproject/onionoo/Main.java
index 141e44b..cceef92 100644
--- a/src/org/torproject/onionoo/Main.java
+++ b/src/org/torproject/onionoo/Main.java
@@ -59,26 +59,13 @@ public class Main {
udw };
Logger.printStatus("Reading descriptors.");
- dso.readRelayNetworkConsensuses();
- Logger.printStatusTime("Read relay network consensuses");
- dso.readRelayServerDescriptors();
- Logger.printStatusTime("Read relay server descriptors");
- dso.readRelayExtraInfos();
- Logger.printStatusTime("Read relay extra-info descriptors");
- dso.readExitLists();
- Logger.printStatusTime("Read exit lists");
- dso.readBridgeNetworkStatuses();
- Logger.printStatusTime("Read bridge network statuses");
- dso.readBridgeServerDescriptors();
- Logger.printStatusTime("Read bridge server descriptors");
- dso.readBridgeExtraInfos();
- Logger.printStatusTime("Read bridge extra-info descriptors");
- dso.readBridgePoolAssignments();
- Logger.printStatusTime("Read bridge-pool assignments");
+ dso.readDescriptors();
Logger.printStatus("Updating internal status files.");
for (StatusUpdater su : sus) {
su.updateStatuses();
+ Logger.printStatusTime(su.getClass().getSimpleName()
+ + " updated status files");
}
Logger.printStatus("Updating document files.");
diff --git a/src/org/torproject/onionoo/UptimeStatusUpdater.java b/src/org/torproject/onionoo/UptimeStatusUpdater.java
index 6dc0b94..eccc2f2 100644
--- a/src/org/torproject/onionoo/UptimeStatusUpdater.java
+++ b/src/org/torproject/onionoo/UptimeStatusUpdater.java
@@ -100,7 +100,6 @@ public class UptimeStatusUpdater implements DescriptorListener,
this.updateStatus(false, e.getKey(), e.getValue());
}
this.updateStatus(false, null, this.newBridgeStatuses);
- Logger.printStatusTime("Updated uptime status files");
}
private void updateStatus(boolean relay, String fingerprint,
diff --git a/test/org/torproject/onionoo/DummyBridgeStatus.java b/test/org/torproject/onionoo/DummyBridgeStatus.java
new file mode 100644
index 0000000..35a9036
--- /dev/null
+++ b/test/org/torproject/onionoo/DummyBridgeStatus.java
@@ -0,0 +1,43 @@
+/* Copyright 2014 The Tor Project
+ * See LICENSE for licensing information */
+package org.torproject.onionoo;
+
+import java.util.List;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+import org.torproject.descriptor.BridgeNetworkStatus;
+import org.torproject.descriptor.NetworkStatusEntry;
+
+public class DummyBridgeStatus implements BridgeNetworkStatus {
+
+ public byte[] getRawDescriptorBytes() {
+ return null;
+ }
+
+ public List<String> getAnnotations() {
+ return null;
+ }
+
+ public List<String> getUnrecognizedLines() {
+ return null;
+ }
+
+ private long publishedMillis;
+ public void setPublishedMillis(long publishedMillis) {
+ this.publishedMillis = publishedMillis;
+ }
+ public long getPublishedMillis() {
+ return this.publishedMillis;
+ }
+
+ private SortedMap<String, NetworkStatusEntry> statusEntries =
+ new TreeMap<String, NetworkStatusEntry>();
+ public void addStatusEntry(NetworkStatusEntry statusEntry) {
+ this.statusEntries.put(statusEntry.getFingerprint(), statusEntry);
+ }
+ public SortedMap<String, NetworkStatusEntry> getStatusEntries() {
+ return this.statusEntries;
+ }
+}
+
diff --git a/test/org/torproject/onionoo/DummyConsensus.java b/test/org/torproject/onionoo/DummyConsensus.java
new file mode 100644
index 0000000..3fa0fdd
--- /dev/null
+++ b/test/org/torproject/onionoo/DummyConsensus.java
@@ -0,0 +1,114 @@
+/* Copyright 2014 The Tor Project
+ * See LICENSE for licensing information */
+package org.torproject.onionoo;
+
+import java.util.List;
+import java.util.SortedMap;
+import java.util.SortedSet;
+import java.util.TreeMap;
+
+import org.torproject.descriptor.DirSourceEntry;
+import org.torproject.descriptor.DirectorySignature;
+import org.torproject.descriptor.NetworkStatusEntry;
+import org.torproject.descriptor.RelayNetworkStatusConsensus;
+
+public class DummyConsensus implements RelayNetworkStatusConsensus {
+
+ public byte[] getRawDescriptorBytes() {
+ return null;
+ }
+
+ public List<String> getAnnotations() {
+ return null;
+ }
+
+ public List<String> getUnrecognizedLines() {
+ return null;
+ }
+
+ public int getNetworkStatusVersion() {
+ return 0;
+ }
+
+ public String getConsensusFlavor() {
+ return null;
+ }
+
+ public int getConsensusMethod() {
+ return 0;
+ }
+
+ private long validAfterMillis;
+ public void setValidAfterMillis(long validAfterMillis) {
+ this.validAfterMillis = validAfterMillis;
+ }
+ public long getValidAfterMillis() {
+ return this.validAfterMillis;
+ }
+
+ public long getFreshUntilMillis() {
+ return 0;
+ }
+
+ public long getValidUntilMillis() {
+ return 0;
+ }
+
+ public long getVoteSeconds() {
+ return 0;
+ }
+
+ public long getDistSeconds() {
+ return 0;
+ }
+
+ public List<String> getRecommendedServerVersions() {
+ return null;
+ }
+
+ public List<String> getRecommendedClientVersions() {
+ return null;
+ }
+
+ public SortedSet<String> getKnownFlags() {
+ return null;
+ }
+
+ public SortedMap<String, Integer> getConsensusParams() {
+ return null;
+ }
+
+ public SortedMap<String, DirSourceEntry> getDirSourceEntries() {
+ return null;
+ }
+
+ private SortedMap<String, NetworkStatusEntry> statusEntries =
+ new TreeMap<String, NetworkStatusEntry>();
+ public void addStatusEntry(NetworkStatusEntry statusEntry) {
+ this.statusEntries.put(statusEntry.getFingerprint(), statusEntry);
+ }
+ public SortedMap<String, NetworkStatusEntry> getStatusEntries() {
+ return this.statusEntries;
+ }
+
+ public boolean containsStatusEntry(String fingerprint) {
+ return false;
+ }
+
+ public NetworkStatusEntry getStatusEntry(String fingerprint) {
+ return null;
+ }
+
+ public SortedMap<String, DirectorySignature> getDirectorySignatures() {
+ return null;
+ }
+
+ public SortedMap<String, Integer> getBandwidthWeights() {
+ return null;
+ }
+
+ public String getConsensusDigest() {
+ return null;
+ }
+}
+
diff --git a/test/org/torproject/onionoo/DummyDescriptorSource.java b/test/org/torproject/onionoo/DummyDescriptorSource.java
new file mode 100644
index 0000000..06ec499
--- /dev/null
+++ b/test/org/torproject/onionoo/DummyDescriptorSource.java
@@ -0,0 +1,133 @@
+package org.torproject.onionoo;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import org.torproject.descriptor.Descriptor;
+
+public class DummyDescriptorSource extends DescriptorSource {
+
+ private Map<DescriptorType, Set<Descriptor>> descriptors =
+ new HashMap<DescriptorType, Set<Descriptor>>();
+
+ public void provideDescriptors(DescriptorType descriptorType,
+ Collection<Descriptor> descriptors) {
+ for (Descriptor descriptor : descriptors) {
+ this.addDescriptor(descriptorType, descriptor);
+ }
+ }
+
+ public void addDescriptor(DescriptorType descriptorType,
+ Descriptor descriptor) {
+ this.getDescriptorsByType(descriptorType).add(descriptor);
+ }
+
+ private Set<Descriptor> getDescriptorsByType(
+ DescriptorType descriptorType) {
+ if (!this.descriptors.containsKey(descriptorType)) {
+ this.descriptors.put(descriptorType, new HashSet<Descriptor>());
+ }
+ return this.descriptors.get(descriptorType);
+ }
+
+ private Map<DescriptorType, SortedSet<String>> fingerprints =
+ new HashMap<DescriptorType, SortedSet<String>>();
+
+ public void addFingerprints(DescriptorType descriptorType,
+ Collection<String> fingerprints) {
+ this.getFingerprintsByType(descriptorType).addAll(fingerprints);
+ }
+
+ public void addFingerprint(DescriptorType descriptorType,
+ String fingerprint) {
+ this.getFingerprintsByType(descriptorType).add(fingerprint);
+ }
+
+ private SortedSet<String> getFingerprintsByType(
+ DescriptorType descriptorType) {
+ if (!this.fingerprints.containsKey(descriptorType)) {
+ this.fingerprints.put(descriptorType, new TreeSet<String>());
+ }
+ return this.fingerprints.get(descriptorType);
+ }
+
+ private Map<DescriptorType, Set<DescriptorListener>>
+ descriptorListeners = new HashMap<DescriptorType,
+ Set<DescriptorListener>>();
+
+ public void registerDescriptorListener(DescriptorListener listener,
+ DescriptorType descriptorType) {
+ if (!this.descriptorListeners.containsKey(descriptorType)) {
+ this.descriptorListeners.put(descriptorType,
+ new HashSet<DescriptorListener>());
+ }
+ this.descriptorListeners.get(descriptorType).add(listener);
+ }
+
+ private Map<DescriptorType, Set<FingerprintListener>>
+ fingerprintListeners = new HashMap<DescriptorType,
+ Set<FingerprintListener>>();
+
+ public void registerFingerprintListener(FingerprintListener listener,
+ DescriptorType descriptorType) {
+ if (!this.fingerprintListeners.containsKey(descriptorType)) {
+ this.fingerprintListeners.put(descriptorType,
+ new HashSet<FingerprintListener>());
+ }
+ this.fingerprintListeners.get(descriptorType).add(listener);
+ }
+
+ public void readDescriptors() {
+ Set<DescriptorType> descriptorTypes = new HashSet<DescriptorType>();
+ descriptorTypes.addAll(this.descriptorListeners.keySet());
+ descriptorTypes.addAll(this.fingerprintListeners.keySet());
+ for (DescriptorType descriptorType : descriptorTypes) {
+ boolean relay;
+ switch (descriptorType) {
+ case RELAY_CONSENSUSES:
+ case RELAY_SERVER_DESCRIPTORS:
+ case RELAY_EXTRA_INFOS:
+ case EXIT_LISTS:
+ relay = true;
+ break;
+ case BRIDGE_STATUSES:
+ case BRIDGE_SERVER_DESCRIPTORS:
+ case BRIDGE_EXTRA_INFOS:
+ case BRIDGE_POOL_ASSIGNMENTS:
+ default:
+ relay = false;
+ break;
+ }
+ if (this.descriptors.containsKey(descriptorType) &&
+ this.descriptorListeners.containsKey(descriptorType)) {
+ Set<DescriptorListener> listeners =
+ this.descriptorListeners.get(descriptorType);
+ for (Descriptor descriptor :
+ this.getDescriptorsByType(descriptorType)) {
+ for (DescriptorListener listener : listeners) {
+ listener.processDescriptor(descriptor, relay);
+ }
+ }
+ }
+ if (this.fingerprints.containsKey(descriptorType) &&
+ this.fingerprintListeners.containsKey(descriptorType)) {
+ Set<FingerprintListener> listeners =
+ this.fingerprintListeners.get(descriptorType);
+ for (FingerprintListener listener : listeners) {
+ listener.processFingerprints(this.getFingerprintsByType(
+ descriptorType), relay);
+ }
+ }
+ }
+ }
+
+ public void writeHistoryFiles() {
+ /* Nothing to do here. */
+ }
+}
+
diff --git a/test/org/torproject/onionoo/DummyDocumentStore.java b/test/org/torproject/onionoo/DummyDocumentStore.java
index 05723d0..6969b8f 100644
--- a/test/org/torproject/onionoo/DummyDocumentStore.java
+++ b/test/org/torproject/onionoo/DummyDocumentStore.java
@@ -30,6 +30,12 @@ public class DummyDocumentStore extends DocumentStore {
fingerprint == null ? FINGERPRINT_NULL : fingerprint, document);
}
+ public <T extends Document> T getDocument(Class<T> documentType,
+ String fingerprint) {
+ return documentType.cast(this.getStoredDocumentsByClass(documentType).
+ get(fingerprint == null ? FINGERPRINT_NULL : fingerprint));
+ }
+
public void flushDocumentCache() {
/* Nothing to do. */
}
diff --git a/test/org/torproject/onionoo/DummyStatusEntry.java b/test/org/torproject/onionoo/DummyStatusEntry.java
new file mode 100644
index 0000000..8fdc5cd
--- /dev/null
+++ b/test/org/torproject/onionoo/DummyStatusEntry.java
@@ -0,0 +1,92 @@
+/* Copyright 2014 The Tor Project
+ * See LICENSE for licensing information */
+package org.torproject.onionoo;
+
+import java.util.List;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import org.torproject.descriptor.NetworkStatusEntry;
+
+public class DummyStatusEntry implements NetworkStatusEntry {
+
+ public DummyStatusEntry(String fingerprint) {
+ this.fingerprint = fingerprint;
+ }
+
+ public byte[] getStatusEntryBytes() {
+ return null;
+ }
+
+ @Override
+ public String getNickname() {
+ return null;
+ }
+
+ private String fingerprint;
+ public String getFingerprint() {
+ return this.fingerprint;
+ }
+
+ public String getDescriptor() {
+ return null;
+ }
+
+ public long getPublishedMillis() {
+ return 0;
+ }
+
+ public String getAddress() {
+ return null;
+ }
+
+ public int getOrPort() {
+ return 0;
+ }
+
+ public int getDirPort() {
+ return 0;
+ }
+
+ public Set<String> getMicrodescriptorDigests() {
+ return null;
+ }
+
+ public List<String> getOrAddresses() {
+ return null;
+ }
+
+ private SortedSet<String> flags = new TreeSet<String>();
+ public void addFlag(String flag) {
+ this.flags.add(flag);
+ }
+ public SortedSet<String> getFlags() {
+ return this.flags;
+ }
+
+ public String getVersion() {
+ return null;
+ }
+
+ public long getBandwidth() {
+ return 0;
+ }
+
+ public long getMeasured() {
+ return 0;
+ }
+
+ public boolean getUnmeasured() {
+ return false;
+ }
+
+ public String getDefaultPolicy() {
+ return null;
+ }
+
+ public String getPortList() {
+ return null;
+ }
+}
+
diff --git a/test/org/torproject/onionoo/UptimeStatusUpdaterTest.java b/test/org/torproject/onionoo/UptimeStatusUpdaterTest.java
new file mode 100644
index 0000000..4ca2245
--- /dev/null
+++ b/test/org/torproject/onionoo/UptimeStatusUpdaterTest.java
@@ -0,0 +1,176 @@
+/* Copyright 2014 The Tor Project
+ * See LICENSE for licensing information */
+package org.torproject.onionoo;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class UptimeStatusUpdaterTest {
+
+ private DummyDescriptorSource descriptorSource;
+
+ @Before
+ public void createDummyDescriptorSource() {
+ this.descriptorSource = new DummyDescriptorSource();
+ ApplicationFactory.setDescriptorSource(this.descriptorSource);
+ }
+
+ private DummyDocumentStore documentStore;
+
+ @Before
+ public void createDummyDocumentStore() {
+ this.documentStore = new DummyDocumentStore();
+ ApplicationFactory.setDocumentStore(this.documentStore);
+ }
+
+ @Test
+ public void testNoDescriptorsNoStatusFiles() {
+ UptimeStatusUpdater updater = new UptimeStatusUpdater();
+ ApplicationFactory.getDescriptorSource().readDescriptors();
+ updater.updateStatuses();
+ assertEquals("Without providing any data, nothing should be written "
+ + "to disk.", 0,
+ this.documentStore.getPerformedStoreOperations());
+ }
+
+ private static final long VALID_AFTER_SAMPLE =
+ DateTimeHelper.parse("2014-03-21 20:00:00");
+
+ private static final String GABELMOO_FINGERPRINT =
+ "F2044413DAC2E02E3D6BCF4735A19BCA1DE97281";
+
+ private void addConsensusSample() {
+ DummyStatusEntry statusEntry = new DummyStatusEntry(
+ GABELMOO_FINGERPRINT);
+ statusEntry.addFlag("Running");
+ DummyConsensus consensus = new DummyConsensus();
+ consensus.setValidAfterMillis(VALID_AFTER_SAMPLE);
+ consensus.addStatusEntry(statusEntry);
+ this.descriptorSource.addDescriptor(DescriptorType.RELAY_CONSENSUSES,
+ consensus);
+ }
+
+ @Test
+ public void testOneConsensusNoStatusFiles() {
+ this.addConsensusSample();
+ UptimeStatusUpdater updater = new UptimeStatusUpdater();
+ ApplicationFactory.getDescriptorSource().readDescriptors();
+ updater.updateStatuses();
+ assertEquals("Two status files should have been written to disk.",
+ 2, this.documentStore.getPerformedStoreOperations());
+ for (String fingerprint : new String[] { GABELMOO_FINGERPRINT,
+ null }) {
+ UptimeStatus status = this.documentStore.getDocument(
+ UptimeStatus.class, fingerprint);
+ UptimeHistory history = status.getHistory().first();
+ assertEquals("History must contain one entry.", 1,
+ status.getHistory().size());
+ assertEquals("History not for relay.", true, history.isRelay());
+ assertEquals("History start millis not as expected.",
+ VALID_AFTER_SAMPLE, history.getStartMillis());
+ assertEquals("History uptime hours must be 1.", 1,
+ history.getUptimeHours());
+ }
+ }
+
+ private static final String ALL_RELAYS_AND_BRIDGES_FINGERPRINT = null;
+
+ private static final String ALL_RELAYS_AND_BRIDGES_UPTIME_SAMPLE =
+ "r 2013-07-22-17 5811\n" /* ends 2014-03-21 20:00:00 */
+ + "b 2013-07-22-17 5811\n"; /* ends 2014-03-21 20:00:00 */
+
+ private void addAllRelaysAndBridgesUptimeSample() {
+ UptimeStatus uptimeStatus = new UptimeStatus();
+ uptimeStatus.fromDocumentString(ALL_RELAYS_AND_BRIDGES_UPTIME_SAMPLE);
+ this.documentStore.addDocument(uptimeStatus,
+ ALL_RELAYS_AND_BRIDGES_FINGERPRINT);
+ }
+
+ @Test
+ public void testOneConsensusOneStatusFiles() {
+ this.addAllRelaysAndBridgesUptimeSample();
+ this.addConsensusSample();
+ UptimeStatusUpdater updater = new UptimeStatusUpdater();
+ ApplicationFactory.getDescriptorSource().readDescriptors();
+ updater.updateStatuses();
+ assertEquals("Two status files should have been written to disk.",
+ 2, this.documentStore.getPerformedStoreOperations());
+ UptimeStatus status = this.documentStore.getDocument(
+ UptimeStatus.class, ALL_RELAYS_AND_BRIDGES_FINGERPRINT);
+ assertEquals("History must contain two entries.", 2,
+ status.getHistory().size());
+ UptimeHistory history = status.getHistory().first();
+ assertEquals("History not for relay.", true, history.isRelay());
+ assertEquals("History start millis not as expected.",
+ DateTimeHelper.parse("2013-07-22 17:00:00"),
+ history.getStartMillis());
+ assertEquals("History uptime hours must be 5812.", 5812,
+ history.getUptimeHours());
+ }
+
+ private static final long PUBLISHED_SAMPLE =
+ DateTimeHelper.parse("2014-03-21 20:37:03");
+
+ private static final String NDNOP2_FINGERPRINT =
+ "DE6397A047ABE5F78B4C87AF725047831B221AAB";
+
+ private void addBridgeStatusSample() {
+ DummyStatusEntry statusEntry = new DummyStatusEntry(
+ NDNOP2_FINGERPRINT);
+ statusEntry.addFlag("Running");
+ DummyBridgeStatus bridgeStatus = new DummyBridgeStatus();
+ bridgeStatus.setPublishedMillis(PUBLISHED_SAMPLE);
+ bridgeStatus.addStatusEntry(statusEntry);
+ this.descriptorSource.addDescriptor(DescriptorType.BRIDGE_STATUSES,
+ bridgeStatus);
+ }
+
+ @Test
+ public void testOneBridgeStatusNoStatusFiles() {
+ this.addBridgeStatusSample();
+ UptimeStatusUpdater updater = new UptimeStatusUpdater();
+ ApplicationFactory.getDescriptorSource().readDescriptors();
+ updater.updateStatuses();
+ assertEquals("Two status files should have been written to disk.",
+ 2, this.documentStore.getPerformedStoreOperations());
+ for (String fingerprint : new String[] { NDNOP2_FINGERPRINT,
+ null }) {
+ UptimeStatus status = this.documentStore.getDocument(
+ UptimeStatus.class, fingerprint);
+ UptimeHistory history = status.getHistory().first();
+ assertEquals("History must contain one entry.", 1,
+ status.getHistory().size());
+ assertEquals("History not for bridge.", false, history.isRelay());
+ assertEquals("History start millis not as expected.",
+ DateTimeHelper.parse("2014-03-21 20:00:00"),
+ history.getStartMillis());
+ assertEquals("History uptime hours must be 1.", 1,
+ history.getUptimeHours());
+ }
+ }
+
+ @Test
+ public void testOneBridgeStatusOneStatusFiles() {
+ this.addAllRelaysAndBridgesUptimeSample();
+ this.addBridgeStatusSample();
+ UptimeStatusUpdater updater = new UptimeStatusUpdater();
+ ApplicationFactory.getDescriptorSource().readDescriptors();
+ updater.updateStatuses();
+ assertEquals("Two status files should have been written to disk.",
+ 2, this.documentStore.getPerformedStoreOperations());
+ UptimeStatus status = this.documentStore.getDocument(
+ UptimeStatus.class, ALL_RELAYS_AND_BRIDGES_FINGERPRINT);
+ assertEquals("History must contain two entries.", 2,
+ status.getHistory().size());
+ UptimeHistory history = status.getHistory().last();
+ assertEquals("History not for relay.", false, history.isRelay());
+ assertEquals("History start millis not as expected.",
+ DateTimeHelper.parse("2013-07-22 17:00:00"),
+ history.getStartMillis());
+ assertEquals("History uptime hours must be 5812.", 5812,
+ history.getUptimeHours());
+ }
+}
+
More information about the tor-commits
mailing list