blob: a6cc8c330a3710691810504761756c2a50c4e5ac [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.bookkeeper.net;
import static org.junit.Assert.assertTrue;
import java.util.Set;
import org.junit.Test;
/**
* Tests for {@link NetworkTopologyImpl}.
*/
public class NetworkTopologyImplTest {
@Test
public void getLeavesShouldReturnEmptySetForNonExistingScope() {
NetworkTopologyImpl networkTopology = new NetworkTopologyImpl();
final Set<Node> leaves = networkTopology.getLeaves("/non-existing-scope");
assertTrue(leaves.isEmpty());
}
@Test
public void getLeavesShouldReturnNodesInScope() {
// GIVEN
// Topology with two racks and 1 bookie in each rack.
NetworkTopologyImpl networkTopology = new NetworkTopologyImpl();
String rack0Scope = "/rack-0";
BookieId bookieIdScopeRack0 = BookieId.parse("bookieIdScopeRack0");
BookieNode bookieRack0ScopeNode = new BookieNode(bookieIdScopeRack0, rack0Scope);
String rack1Scope = "/rack-1";
BookieId bookieIdScopeRack1 = BookieId.parse("bookieIdScopeRack1");
BookieNode bookieRack1ScopeNode = new BookieNode(bookieIdScopeRack1, rack1Scope);
networkTopology.add(bookieRack0ScopeNode);
networkTopology.add(bookieRack1ScopeNode);
// WHEN
Set<Node> leavesScopeRack0 = networkTopology.getLeaves(rack0Scope);
Set<Node> leavesScopeRack1 = networkTopology.getLeaves(rack1Scope);
// THEN
assertTrue(leavesScopeRack0.size() == 1);
assertTrue(leavesScopeRack0.contains(bookieRack0ScopeNode));
assertTrue(leavesScopeRack1.size() == 1);
assertTrue(leavesScopeRack1.contains(bookieRack1ScopeNode));
}
@Test
public void getLeavesShouldReturnLeavesThatAreNotInExcludedScope() {
// GIVEN
// Topology with three racks and 1 bookie in each rack.
NetworkTopologyImpl networkTopology = new NetworkTopologyImpl();
String rack0Scope = "/rack-0";
BookieId bookieIdScopeRack0 = BookieId.parse("bookieIdScopeRack0");
BookieNode bookieRack0ScopeNode = new BookieNode(bookieIdScopeRack0, rack0Scope);
String rack1Scope = "/rack-1";
BookieId bookieIdScopeRack1 = BookieId.parse("bookieIdScopeRack1");
BookieNode bookieRack1ScopeNode = new BookieNode(bookieIdScopeRack1, rack1Scope);
String rack2Scope = "/rack-2";
BookieId bookieIdScopeRack2 = BookieId.parse("bookieIdScopeRack2");
BookieNode bookieRack2ScopeNode = new BookieNode(bookieIdScopeRack2, rack2Scope);
networkTopology.add(bookieRack0ScopeNode);
networkTopology.add(bookieRack1ScopeNode);
networkTopology.add(bookieRack2ScopeNode);
// Excluded scopes are beginned with '~' character.
String scopeExcludingRack1 = "~/rack-1";
// WHEN
// ask for leaves not being at rack1 scope.
Set<Node> leavesExcludingRack2Scope = networkTopology.getLeaves(scopeExcludingRack1);
// THEN
assertTrue(leavesExcludingRack2Scope.size() == 2);
assertTrue(leavesExcludingRack2Scope.contains(bookieRack0ScopeNode));
assertTrue(leavesExcludingRack2Scope.contains(bookieRack2ScopeNode));
}
}