diff options
Diffstat (limited to 'framework/src/onos/utils/misc')
13 files changed, 217 insertions, 202 deletions
diff --git a/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/DisjointPathPair.java b/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/DisjointPathPair.java index 206a34c8..dfa150e3 100644 --- a/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/DisjointPathPair.java +++ b/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/DisjointPathPair.java @@ -30,8 +30,8 @@ import static com.google.common.base.MoreObjects.toStringHelper; */ public class DisjointPathPair<V extends Vertex, E extends Edge<V>> implements Path<V, E> { - private Path<V, E> primary, secondary; - boolean primaryActive = true; + private final Path<V, E> primary, secondary; + private boolean primaryActive = true; /** * Creates a disjoint path pair from two paths. @@ -88,7 +88,7 @@ public class DisjointPathPair<V extends Vertex, E extends Edge<V>> implements Pa * @return boolean representing whether it has backup */ public boolean hasBackup() { - return secondary != null && secondary.edges() != null; + return secondary != null; } @Override @@ -103,7 +103,9 @@ public class DisjointPathPair<V extends Vertex, E extends Edge<V>> implements Pa @Override public int hashCode() { - return hasBackup() ? Objects.hash(primary) + Objects.hash(secondary) : + // Note: DisjointPathPair with primary and secondary swapped + // must result in same hashCode + return hasBackup() ? primary.hashCode() + secondary.hashCode() : Objects.hash(primary); } diff --git a/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/DisjointPathPair.java.orig b/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/DisjointPathPair.java.orig deleted file mode 100644 index 1cf22b6a..00000000 --- a/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/DisjointPathPair.java.orig +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright 2015 Open Networking Laboratory - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -package org.onlab.graph; - -import java.util.List; -import java.util.Objects; -import java.util.Set; - -import static com.google.common.collect.ImmutableSet.of; -import static com.google.common.base.MoreObjects.toStringHelper; - - -public class DisjointPathPair<V extends Vertex, E extends Edge<V>> implements Path<V, E> { - public Path<V, E> path1, path2; - boolean usingPath1 = true; - -<<<<<<< HEAD - /** - * Creates a Disjoint Path Pair from two paths. - * - * @param p1 first path - * @param p2 second path - */ -======= ->>>>>>> Disjoint Path Pairs (Suurballe) utils - public DisjointPathPair(Path<V, E> p1, Path<V, E> p2) { - path1 = p1; - path2 = p2; - } -<<<<<<< HEAD - - @Override -======= ->>>>>>> Disjoint Path Pairs (Suurballe) utils - public V src() { - return path1.src(); - } - -<<<<<<< HEAD - @Override - public V dst() { - return path1.dst(); - } - - @Override -======= - public V dst() { - return path1.dst(); - } ->>>>>>> Disjoint Path Pairs (Suurballe) utils - public double cost() { - if (!hasBackup()) { - return path1.cost(); - } - return path1.cost() + path2.cost(); - } -<<<<<<< HEAD - - @Override -======= ->>>>>>> Disjoint Path Pairs (Suurballe) utils - public List<E> edges() { - if (usingPath1 || !hasBackup()) { - return path1.edges(); - } else { - return path2.edges(); - } - } -<<<<<<< HEAD - - /** - * Checks if this path pair contains a backup/secondary path. - * - * @return boolean representing whether it has backup - */ - public boolean hasBackup() { - return path2 != null && path2.edges() != null; - } - - /** - * Switches this disjoint path pair to using its backup path, instead of - * using its primary. - */ - public void useBackup() { - usingPath1 = !usingPath1; - } - - @Override -======= - public boolean hasBackup() { - return path2 != null && path2.edges() != null; - } - public void useBackup() { - usingPath1 = !usingPath1; - } ->>>>>>> Disjoint Path Pairs (Suurballe) utils - public String toString() { - return toStringHelper(this) - .add("src", src()) - .add("dst", dst()) - .add("cost", cost()) - .add("edges", edges()) - .toString(); - } -<<<<<<< HEAD - - @Override -======= ->>>>>>> Disjoint Path Pairs (Suurballe) utils - public int hashCode() { - Set<Path<V, E>> paths; - if (!hasBackup()) { - paths = of(path1); - } else { - paths = of(path1, path2); - } - return Objects.hash(paths); - } -<<<<<<< HEAD - - @Override -======= ->>>>>>> Disjoint Path Pairs (Suurballe) utils - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof DisjointPathPair) { - final DisjointPathPair other = (DisjointPathPair) obj; - return Objects.equals(this.src(), other.src()) && - Objects.equals(this.dst(), other.dst()) && - (Objects.equals(this.path1, other.path1) && - Objects.equals(this.path2, other.path2)) || - (Objects.equals(this.path1, other.path2) && - Objects.equals(this.path2, other.path1)); - } - return false; - } -<<<<<<< HEAD - - /** - * Returns number of paths inside this path pair object. - * - * @return number of paths - */ -======= ->>>>>>> Disjoint Path Pairs (Suurballe) utils - public int size() { - if (hasBackup()) { - return 2; - } - return 1; - } -} diff --git a/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/SRLGGraphSearch.java b/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/SrlgGraphSearch.java index 21f687a3..fa3d0ddf 100644 --- a/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/SRLGGraphSearch.java +++ b/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/SrlgGraphSearch.java @@ -31,7 +31,7 @@ import java.util.Random; * if one path goes through an edge in risk group 1, the other path will go * through no edges in risk group 1. */ -public class SRLGGraphSearch<V extends Vertex, E extends Edge<V>> +public class SrlgGraphSearch<V extends Vertex, E extends Edge<V>> extends AbstractGraphPathSearch<V, E> { static final int ITERATIONS = 100; @@ -55,7 +55,7 @@ public class SRLGGraphSearch<V extends Vertex, E extends Edge<V>> * @param groups the number of disjoint risk groups * @param grouping map linking edges to integral group assignments */ - public SRLGGraphSearch(int groups, Map<E, Integer> grouping) { + public SrlgGraphSearch(int groups, Map<E, Integer> grouping) { numGroups = groups; riskGrouping = grouping; } @@ -67,7 +67,7 @@ public class SRLGGraphSearch<V extends Vertex, E extends Edge<V>> * @param grouping map linking edges to object group assignments, * with same-group status linked to equality */ - public SRLGGraphSearch(Map<E, Object> grouping) { + public SrlgGraphSearch(Map<E, Object> grouping) { if (grouping == null) { useSuurballe = true; return; diff --git a/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/TarjanGraphSearch.java b/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/TarjanGraphSearch.java index 5bf305e6..1c436d94 100644 --- a/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/TarjanGraphSearch.java +++ b/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/TarjanGraphSearch.java @@ -42,8 +42,8 @@ public class TarjanGraphSearch<V extends Vertex, E extends Edge<V>> * </p> */ @Override - public SCCResult<V, E> search(Graph<V, E> graph, EdgeWeight<V, E> weight) { - SCCResult<V, E> result = new SCCResult<>(graph); + public SccResult<V, E> search(Graph<V, E> graph, EdgeWeight<V, E> weight) { + SccResult<V, E> result = new SccResult<>(graph); for (V vertex : graph.getVertexes()) { VertexData data = result.data(vertex); if (data == null) { @@ -64,7 +64,7 @@ public class TarjanGraphSearch<V extends Vertex, E extends Edge<V>> */ private VertexData<V> connect(Graph<V, E> graph, V vertex, EdgeWeight<V, E> weight, - SCCResult<V, E> result) { + SccResult<V, E> result) { VertexData<V> data = result.addData(vertex); // Scan through all egress edges of the current vertex. @@ -99,7 +99,7 @@ public class TarjanGraphSearch<V extends Vertex, E extends Edge<V>> /** * Graph search result augmented with SCC vertexData. */ - public static final class SCCResult<V extends Vertex, E extends Edge<V>> + public static final class SccResult<V extends Vertex, E extends Edge<V>> implements Result { private final Graph<V, E> graph; @@ -110,7 +110,7 @@ public class TarjanGraphSearch<V extends Vertex, E extends Edge<V>> private final Map<V, VertexData<V>> vertexData = new HashMap<>(); private final List<VertexData<V>> visited = new ArrayList<>(); - private SCCResult(Graph<V, E> graph) { + private SccResult(Graph<V, E> graph) { this.graph = graph; } @@ -189,7 +189,7 @@ public class TarjanGraphSearch<V extends Vertex, E extends Edge<V>> return Collections.unmodifiableSet(edges); } - public SCCResult<V, E> build() { + public SccResult<V, E> build() { clusterVertexes = Collections.unmodifiableList(clusterVertexes); clusterEdges = Collections.unmodifiableList(clusterEdges); return this; diff --git a/framework/src/onos/utils/misc/src/main/java/org/onlab/util/DefaultHashMap.java b/framework/src/onos/utils/misc/src/main/java/org/onlab/util/DefaultHashMap.java new file mode 100644 index 00000000..d6ddbd56 --- /dev/null +++ b/framework/src/onos/utils/misc/src/main/java/org/onlab/util/DefaultHashMap.java @@ -0,0 +1,42 @@ +/* + * Copyright 2015 Open Networking Laboratory + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onlab.util; + +import java.util.HashMap; + +/** + * HashMap that returns a default value for unmapped keys. + */ +public final class DefaultHashMap<K, V> extends HashMap<K, V> { + + /** Default value to return when no key binding exists. */ + protected final V defaultValue; + + /** + * Constructs an empty map with the given default value. + * + * @param defaultValue the default value + */ + public DefaultHashMap(V defaultValue) { + this.defaultValue = defaultValue; + } + + @Override + public V get(Object k) { + return containsKey(k) ? super.get(k) : defaultValue; + } +}
\ No newline at end of file diff --git a/framework/src/onos/utils/misc/src/main/java/org/onlab/util/Frequency.java b/framework/src/onos/utils/misc/src/main/java/org/onlab/util/Frequency.java index 5669abdc..1ef71130 100644 --- a/framework/src/onos/utils/misc/src/main/java/org/onlab/util/Frequency.java +++ b/framework/src/onos/utils/misc/src/main/java/org/onlab/util/Frequency.java @@ -18,8 +18,6 @@ package org.onlab.util; import com.google.common.base.MoreObjects; import com.google.common.collect.ComparisonChain; -import java.util.Objects; - /** * Class representing frequency. This class is intended to be used for a value whose unit is Hz * and its family (KHz, MHz, etc.). @@ -157,7 +155,7 @@ public final class Frequency implements RichComparable<Frequency> { @Override public int hashCode() { - return Objects.hash(frequency); + return Long.hashCode(frequency); } @Override diff --git a/framework/src/onos/utils/misc/src/main/java/org/onlab/util/Tools.java b/framework/src/onos/utils/misc/src/main/java/org/onlab/util/Tools.java index 1b788145..ffefbfd4 100644 --- a/framework/src/onos/utils/misc/src/main/java/org/onlab/util/Tools.java +++ b/framework/src/onos/utils/misc/src/main/java/org/onlab/util/Tools.java @@ -40,6 +40,7 @@ import java.util.Collection; import java.util.Dictionary; import java.util.List; import java.util.Random; +import java.util.Set; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; @@ -144,6 +145,23 @@ public abstract class Tools { } /** + * Returns the specified set if the set is not null and not empty; + * otherwise throws a not found exception. + * + * @param item set to check + * @param message not found message + * @param <T> Set item type + * @return item if not null and not empty + * @throws org.onlab.util.ItemNotFoundException if set is null or empty + */ + public static <T> Set<T> emptyIsNotFound(Set<T> item, String message) { + if (item == null || item.isEmpty()) { + throw new ItemNotFoundException(message); + } + return item; + } + + /** * Returns the specified item if that item is not null; otherwise throws * bad argument exception. * diff --git a/framework/src/onos/utils/misc/src/test/java/org/onlab/graph/DisjointPathPairTest.java b/framework/src/onos/utils/misc/src/test/java/org/onlab/graph/DisjointPathPairTest.java new file mode 100644 index 00000000..ca6c56c4 --- /dev/null +++ b/framework/src/onos/utils/misc/src/test/java/org/onlab/graph/DisjointPathPairTest.java @@ -0,0 +1,43 @@ +package org.onlab.graph; + +import static org.junit.Assert.*; + +import org.junit.Test; + +import com.google.common.collect.ImmutableList; +import com.google.common.testing.EqualsTester; + +/** + * Test of DisjointPathPair. + */ +public class DisjointPathPairTest { + + private static final TestVertex A = new TestVertex("A"); + private static final TestVertex B = new TestVertex("B"); + private static final TestVertex C = new TestVertex("C"); + private static final TestVertex D = new TestVertex("D"); + + private static final TestEdge AB = new TestEdge(A, B, 1.0); + private static final TestEdge BC = new TestEdge(B, C, 1.0); + private static final TestEdge AD = new TestEdge(A, D, 1.0); + private static final TestEdge DC = new TestEdge(D, C, 1.0); + + private static final Path<TestVertex, TestEdge> ABC + = new DefaultPath<>(ImmutableList.of(AB, BC), 1.0); + private static final Path<TestVertex, TestEdge> ADC + = new DefaultPath<>(ImmutableList.of(AD, DC), 1.0); + + @Test + public void testSwappingPrimarySecondaryDoesntImpactHashCode() { + assertEquals(new DisjointPathPair<>(ABC, ADC).hashCode(), + new DisjointPathPair<>(ADC, ABC).hashCode()); + } + + @Test + public void testSwappingPrimarySecondaryDoesntImpactEquality() { + new EqualsTester() + .addEqualityGroup(new DisjointPathPair<>(ABC, ADC), + new DisjointPathPair<>(ADC, ABC)); + } + +} diff --git a/framework/src/onos/utils/misc/src/test/java/org/onlab/graph/SRLGGraphSearchTest.java b/framework/src/onos/utils/misc/src/test/java/org/onlab/graph/SrlgGraphSearchTest.java index 8bfd270c..26d50364 100644 --- a/framework/src/onos/utils/misc/src/test/java/org/onlab/graph/SRLGGraphSearchTest.java +++ b/framework/src/onos/utils/misc/src/test/java/org/onlab/graph/SrlgGraphSearchTest.java @@ -31,11 +31,11 @@ import static org.onlab.graph.GraphPathSearch.ALL_PATHS; /** * Test of the Suurballe backup path algorithm. */ -public class SRLGGraphSearchTest extends BreadthFirstSearchTest { +public class SrlgGraphSearchTest extends BreadthFirstSearchTest { @Override protected AbstractGraphPathSearch<TestVertex, TestEdge> graphSearch() { - return new SRLGGraphSearch<>(null); + return new SrlgGraphSearch<>(null); } public void setDefaultWeights() { @@ -64,7 +64,7 @@ public class SRLGGraphSearchTest extends BreadthFirstSearchTest { riskProfile.put(bC, 0); riskProfile.put(aD, 1); riskProfile.put(dC, 1); - SRLGGraphSearch<TestVertex, TestEdge> search = new SRLGGraphSearch<>(2, riskProfile); + SrlgGraphSearch<TestVertex, TestEdge> search = new SrlgGraphSearch<>(2, riskProfile); Set<Path<TestVertex, TestEdge>> paths = search.search(graph, A, C, weight, ALL_PATHS).paths(); System.out.println("\n\n\n" + paths + "\n\n\n"); assertEquals("one disjoint path pair found", 1, paths.size()); @@ -105,7 +105,7 @@ public class SRLGGraphSearchTest extends BreadthFirstSearchTest { riskProfile.put(dC, 1); riskProfile.put(cE, 2); riskProfile.put(bE, 3); - SRLGGraphSearch<TestVertex, TestEdge> search = new SRLGGraphSearch<>(4, riskProfile); + SrlgGraphSearch<TestVertex, TestEdge> search = new SrlgGraphSearch<>(4, riskProfile); search.search(graph, A, E, weight, ALL_PATHS).paths(); } @@ -127,7 +127,7 @@ public class SRLGGraphSearchTest extends BreadthFirstSearchTest { riskProfile.put(dE, 3); riskProfile.put(aC, 4); riskProfile.put(cE, 5); - SRLGGraphSearch<TestVertex, TestEdge> search = new SRLGGraphSearch<>(6, riskProfile); + SrlgGraphSearch<TestVertex, TestEdge> search = new SrlgGraphSearch<>(6, riskProfile); Set<Path<TestVertex, TestEdge>> paths = search.search(graph, A, E, weight, ALL_PATHS).paths(); assertTrue("> one disjoint path pair found", paths.size() >= 1); checkIsDisjoint(paths.iterator().next(), riskProfile); @@ -147,7 +147,7 @@ public class SRLGGraphSearchTest extends BreadthFirstSearchTest { riskProfile.put(bC, 0); riskProfile.put(aD, 1); riskProfile.put(dC, 0); - SRLGGraphSearch<TestVertex, TestEdge> search = new SRLGGraphSearch<>(2, riskProfile); + SrlgGraphSearch<TestVertex, TestEdge> search = new SrlgGraphSearch<>(2, riskProfile); Set<Path<TestVertex, TestEdge>> paths = search.search(graph, A, C, weight, ALL_PATHS).paths(); System.out.println(paths); assertTrue("no disjoint path pairs found", paths.size() == 0); @@ -167,7 +167,7 @@ public class SRLGGraphSearchTest extends BreadthFirstSearchTest { riskProfile.put(bC, 0); riskProfile.put(aD, 1); riskProfile.put(dC, 0); - SRLGGraphSearch<TestVertex, TestEdge> search = new SRLGGraphSearch<>(2, riskProfile); + SrlgGraphSearch<TestVertex, TestEdge> search = new SrlgGraphSearch<>(2, riskProfile); Set<Path<TestVertex, TestEdge>> paths = search.search(graph, A, E, weight, ALL_PATHS).paths(); assertTrue("no disjoint path pairs found", paths.size() == 0); } diff --git a/framework/src/onos/utils/misc/src/test/java/org/onlab/graph/TarjanGraphSearchTest.java b/framework/src/onos/utils/misc/src/test/java/org/onlab/graph/TarjanGraphSearchTest.java index 624c5781..40f90513 100644 --- a/framework/src/onos/utils/misc/src/test/java/org/onlab/graph/TarjanGraphSearchTest.java +++ b/framework/src/onos/utils/misc/src/test/java/org/onlab/graph/TarjanGraphSearchTest.java @@ -19,20 +19,20 @@ import org.junit.Test; import static com.google.common.collect.ImmutableSet.of; import static org.junit.Assert.assertEquals; -import static org.onlab.graph.TarjanGraphSearch.SCCResult; +import static org.onlab.graph.TarjanGraphSearch.SccResult; /** * Tarjan graph search tests. */ public class TarjanGraphSearchTest extends GraphTest { - private void validate(SCCResult<TestVertex, TestEdge> result, int cc) { + private void validate(SccResult<TestVertex, TestEdge> result, int cc) { System.out.println("Cluster count: " + result.clusterVertexes().size()); System.out.println("Clusters: " + result.clusterVertexes()); assertEquals("incorrect cluster count", cc, result.clusterCount()); } - private void validate(SCCResult<TestVertex, TestEdge> result, + private void validate(SccResult<TestVertex, TestEdge> result, int i, int vc, int ec) { assertEquals("incorrect cluster count", vc, result.clusterVertexes().get(i).size()); assertEquals("incorrect edge count", ec, result.clusterEdges().get(i).size()); @@ -42,7 +42,7 @@ public class TarjanGraphSearchTest extends GraphTest { public void basic() { graph = new AdjacencyListsGraph<>(vertexes(), edges()); TarjanGraphSearch<TestVertex, TestEdge> gs = new TarjanGraphSearch<>(); - SCCResult<TestVertex, TestEdge> result = gs.search(graph, null); + SccResult<TestVertex, TestEdge> result = gs.search(graph, null); validate(result, 6); } @@ -59,7 +59,7 @@ public class TarjanGraphSearchTest extends GraphTest { new TestEdge(H, A, 1))); TarjanGraphSearch<TestVertex, TestEdge> gs = new TarjanGraphSearch<>(); - SCCResult<TestVertex, TestEdge> result = gs.search(graph, null); + SccResult<TestVertex, TestEdge> result = gs.search(graph, null); validate(result, 1); validate(result, 0, 8, 8); } @@ -76,7 +76,7 @@ public class TarjanGraphSearchTest extends GraphTest { new TestEdge(G, H, 1), new TestEdge(H, E, 1))); TarjanGraphSearch<TestVertex, TestEdge> gs = new TarjanGraphSearch<>(); - SCCResult<TestVertex, TestEdge> result = gs.search(graph, null); + SccResult<TestVertex, TestEdge> result = gs.search(graph, null); validate(result, 2); validate(result, 0, 4, 4); validate(result, 1, 4, 4); @@ -95,7 +95,7 @@ public class TarjanGraphSearchTest extends GraphTest { new TestEdge(H, E, 1), new TestEdge(B, E, 1))); TarjanGraphSearch<TestVertex, TestEdge> gs = new TarjanGraphSearch<>(); - SCCResult<TestVertex, TestEdge> result = gs.search(graph, null); + SccResult<TestVertex, TestEdge> result = gs.search(graph, null); validate(result, 2); validate(result, 0, 4, 4); validate(result, 1, 4, 4); @@ -116,7 +116,7 @@ public class TarjanGraphSearchTest extends GraphTest { new TestEdge(E, B, -1))); TarjanGraphSearch<TestVertex, TestEdge> gs = new TarjanGraphSearch<>(); - SCCResult<TestVertex, TestEdge> result = gs.search(graph, weight); + SccResult<TestVertex, TestEdge> result = gs.search(graph, weight); validate(result, 2); validate(result, 0, 4, 4); validate(result, 1, 4, 4); diff --git a/framework/src/onos/utils/misc/src/test/java/org/onlab/graph/TestVertex.java b/framework/src/onos/utils/misc/src/test/java/org/onlab/graph/TestVertex.java index be92bd27..b0b92a4a 100644 --- a/framework/src/onos/utils/misc/src/test/java/org/onlab/graph/TestVertex.java +++ b/framework/src/onos/utils/misc/src/test/java/org/onlab/graph/TestVertex.java @@ -30,7 +30,7 @@ public class TestVertex implements Vertex { @Override public int hashCode() { - return Objects.hash(name); + return name.hashCode(); } @Override diff --git a/framework/src/onos/utils/misc/src/test/java/org/onlab/util/DefaultHashMapTest.java b/framework/src/onos/utils/misc/src/test/java/org/onlab/util/DefaultHashMapTest.java new file mode 100644 index 00000000..db6b5fb7 --- /dev/null +++ b/framework/src/onos/utils/misc/src/test/java/org/onlab/util/DefaultHashMapTest.java @@ -0,0 +1,81 @@ +/* + * Copyright 2015 Open Networking Laboratory + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onlab.util; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +/** + * Unit tests for {@link DefaultHashMap}. + */ +public class DefaultHashMapTest { + + private static final String ONE = "one"; + private static final String TWO = "two"; + private static final String THREE = "three"; + private static final String FOUR = "four"; + + private static final String ALPHA = "Alpha"; + private static final String BETA = "Beta"; + private static final String OMEGA = "Omega"; + + private DefaultHashMap<String, Integer> map; + private DefaultHashMap<String, String> chartis; + + private void loadMap() { + map.put(ONE, 1); + map.put(TWO, 2); + } + + private void fortioCharti() { + chartis.put(ONE, ALPHA); + chartis.put(TWO, BETA); + } + + @Test + public void nullDefaultIsAllowed() { + // but makes this class behave no different than HashMap + map = new DefaultHashMap<>(null); + loadMap(); + assertEquals("missing 1", 1, (int) map.get(ONE)); + assertEquals("missing 2", 2, (int) map.get(TWO)); + assertEquals("three?", null, map.get(THREE)); + assertEquals("four?", null, map.get(FOUR)); + } + + @Test + public void defaultToFive() { + map = new DefaultHashMap<>(5); + loadMap(); + assertEquals("missing 1", 1, (int) map.get(ONE)); + assertEquals("missing 2", 2, (int) map.get(TWO)); + assertEquals("three?", 5, (int) map.get(THREE)); + assertEquals("four?", 5, (int) map.get(FOUR)); + } + + @Test + public void defaultToOmega() { + chartis = new DefaultHashMap<>(OMEGA); + fortioCharti(); + assertEquals("missing 1", ALPHA, chartis.get(ONE)); + assertEquals("missing 2", BETA, chartis.get(TWO)); + assertEquals("three?", OMEGA, chartis.get(THREE)); + assertEquals("four?", OMEGA, chartis.get(FOUR)); + } + +} diff --git a/framework/src/onos/utils/misc/src/test/java/org/onlab/util/HexStringTest.java b/framework/src/onos/utils/misc/src/test/java/org/onlab/util/HexStringTest.java index e04e29a2..f4aadd15 100644 --- a/framework/src/onos/utils/misc/src/test/java/org/onlab/util/HexStringTest.java +++ b/framework/src/onos/utils/misc/src/test/java/org/onlab/util/HexStringTest.java @@ -47,7 +47,7 @@ public class HexStringTest { } @Test - public void testToLongMSB() { + public void testToLongMsb() { String dpidStr = "ca:7c:5e:d1:64:7a:95:9b"; long valid = -3856102927509056101L; long testLong = HexString.toLong(dpidStr); |