ConnectionSetupTimeSelection implements NATTraversalSelection { @Override public List<NATTraversalTechnique> getNATTraversalTechniquesForNATSituation(final NATSituation natSituation) { List<NATTraversalTechnique> natTraversalTechniques = new ArrayList<NATTraversalTechnique>(); natTraversalTechniques.addAll(this.determineAppropriateNATTraversalTechniques(natSituation)); natTraversalTechniques = this.sortNATTraversalTechniquesByConnectionSetupTime(natTraversalTechniques); return Collections.unmodifiableList(natTraversalTechniques); } ConnectionSetupTimeSelection(final NATTraversalRegistry natTraversalRegistry);  ConnectionSetupTimeSelection(final NATTraversalRegistry registry, final DecisionTree initializedDecisionTree); @Override List<NATTraversalTechnique> getNATTraversalTechniquesForNATSituation(final NATSituation natSituation); @Override int hashCode(); @Override boolean equals(Object obj);  }
@Test public void testGetNATTraversalTechniquesForNATSituation() { final List<NATTraversalTechnique> expected = new ArrayList<NATTraversalTechnique>(); expected.add(new NATTraversalTechniqueMock("Relaying", 7, false)); final NATSituation natSituation = new NATSituation(NATFeatureRealization.CONNECTION_DEPENDENT, NATFeatureRealization.CONNECTION_DEPENDENT, NATFeatureRealization.CONNECTION_DEPENDENT, NATFeatureRealization.CONNECTION_DEPENDENT); final List<NATTraversalTechnique> actual = this.selection .getNATTraversalTechniquesForNATSituation(natSituation); assertEquals(expected, actual); }