|
35 | 35 |
|
36 | 36 | import com.google.protobuf.ByteString; |
37 | 37 | import java.io.IOException; |
| 38 | +import java.util.Collections; |
38 | 39 | import java.util.HashMap; |
39 | 40 | import java.util.Map; |
40 | 41 | import java.util.concurrent.TimeUnit; |
41 | 42 | import java.util.concurrent.TimeoutException; |
42 | 43 | import org.apache.hadoop.hdds.conf.OzoneConfiguration; |
| 44 | +import org.apache.hadoop.hdds.protocol.DatanodeDetails; |
43 | 45 | import org.apache.hadoop.hdds.scm.ha.SCMContext; |
44 | 46 | import org.apache.hadoop.hdds.scm.ha.SCMServiceManager; |
45 | 47 | import org.apache.hadoop.hdds.scm.ha.StatefulServiceStateManager; |
@@ -291,6 +293,41 @@ public void testGetBalancerStatusInfo() throws Exception { |
291 | 293 | assertSame(ContainerBalancerTask.Status.STOPPED, containerBalancer.getBalancerStatus()); |
292 | 294 | } |
293 | 295 |
|
| 296 | + @Test |
| 297 | + public void testStartBalancerWithInvalidNodes() throws Exception { |
| 298 | + NodeManager nm = scm.getScmNodeManager(); |
| 299 | + String validHost = "1.2.3.4"; |
| 300 | + String invalidHost = "invalid-host-name"; |
| 301 | + |
| 302 | + when(nm.getNodesByAddress(invalidHost)).thenReturn(Collections.emptyList()); |
| 303 | + when(nm.getNodesByAddress(validHost)).thenReturn(Collections.singletonList(mock(DatanodeDetails.class))); |
| 304 | + |
| 305 | + // Test invalid includeNodes |
| 306 | + balancerConfiguration.setIncludeNodes(invalidHost); |
| 307 | + InvalidContainerBalancerConfigurationException ex = |
| 308 | + assertThrows(InvalidContainerBalancerConfigurationException.class, |
| 309 | + () -> containerBalancer.startBalancer(balancerConfiguration)); |
| 310 | + assertThat(ex.getMessage()).contains(invalidHost); |
| 311 | + assertSame(ContainerBalancerTask.Status.STOPPED, containerBalancer.getBalancerStatus()); |
| 312 | + |
| 313 | + // Test invalid excludeNodes |
| 314 | + balancerConfiguration.setIncludeNodes(""); |
| 315 | + balancerConfiguration.setExcludeNodes(invalidHost); |
| 316 | + ex = assertThrows(InvalidContainerBalancerConfigurationException.class, |
| 317 | + () -> containerBalancer.startBalancer(balancerConfiguration)); |
| 318 | + assertThat(ex.getMessage()).contains(invalidHost); |
| 319 | + assertSame(ContainerBalancerTask.Status.STOPPED, containerBalancer.getBalancerStatus()); |
| 320 | + |
| 321 | + // Test a valid case |
| 322 | + balancerConfiguration.setExcludeNodes(""); |
| 323 | + balancerConfiguration.setIncludeNodes(validHost); |
| 324 | + assertDoesNotThrow(() -> startBalancer(balancerConfiguration)); |
| 325 | + assertSame(ContainerBalancerTask.Status.RUNNING, containerBalancer.getBalancerStatus()); |
| 326 | + |
| 327 | + stopBalancer(); |
| 328 | + assertSame(ContainerBalancerTask.Status.STOPPED, containerBalancer.getBalancerStatus()); |
| 329 | + } |
| 330 | + |
294 | 331 | private void startBalancer(ContainerBalancerConfiguration config) |
295 | 332 | throws IllegalContainerBalancerStateException, IOException, |
296 | 333 | InvalidContainerBalancerConfigurationException, TimeoutException { |
|
0 commit comments