From 98d2c54efdc7d158b81ed26070902d70cb4e9bee Mon Sep 17 00:00:00 2001 From: Qiang Zhao <74767115+mattisonchao@users.noreply.github.com> Date: Sat, 19 Jun 2021 15:41:02 +0800 Subject: [PATCH] Fixed #fixed incorrect use list.remove method. (#10935) * Fixed #fixed incorrect use list.remove method. * Fixed add License to test file. --- .../cli/CmdNamespaceIsolationPolicy.java | 12 ++--- .../cli/TestCmdNamespaceIsolationPolicy.java | 51 +++++++++++++++++++ 2 files changed, 56 insertions(+), 7 deletions(-) create mode 100644 pulsar-client-tools/src/test/java/org/apache/pulsar/admin/cli/TestCmdNamespaceIsolationPolicy.java diff --git a/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdNamespaceIsolationPolicy.java b/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdNamespaceIsolationPolicy.java index 1f8df532b1feb..f06a109e9da15 100644 --- a/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdNamespaceIsolationPolicy.java +++ b/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdNamespaceIsolationPolicy.java @@ -22,12 +22,13 @@ import java.util.List; import java.util.Map; import java.util.function.Supplier; +import java.util.stream.Collectors; +import org.apache.commons.lang3.StringUtils; import org.apache.pulsar.admin.cli.utils.NameValueParameterSplitter; import org.apache.pulsar.client.admin.PulsarAdmin; import org.apache.pulsar.client.admin.PulsarAdminException; import org.apache.pulsar.common.policies.data.AutoFailoverPolicyData; -import org.apache.pulsar.common.policies.data.AutoFailoverPolicyDataImpl; import org.apache.pulsar.common.policies.data.AutoFailoverPolicyType; import org.apache.pulsar.common.policies.data.BrokerNamespaceIsolationDataImpl; import org.apache.pulsar.common.policies.data.BrokerNamespaceIsolationData; @@ -152,12 +153,9 @@ void run() throws PulsarAdminException { } private List validateList(List list) { - for (int i = 0; i < list.size(); i++) { - if (list.get(i).isEmpty()) { - list.remove(i); - } - } - return list; + return list.stream() + .filter(StringUtils::isNotEmpty) + .collect(Collectors.toList()); } private NamespaceIsolationData createNamespaceIsolationData(List namespaces, List primary, diff --git a/pulsar-client-tools/src/test/java/org/apache/pulsar/admin/cli/TestCmdNamespaceIsolationPolicy.java b/pulsar-client-tools/src/test/java/org/apache/pulsar/admin/cli/TestCmdNamespaceIsolationPolicy.java new file mode 100644 index 0000000000000..b6589a781081f --- /dev/null +++ b/pulsar-client-tools/src/test/java/org/apache/pulsar/admin/cli/TestCmdNamespaceIsolationPolicy.java @@ -0,0 +1,51 @@ +/** + * 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.pulsar.admin.cli; + +import com.google.common.collect.Lists; +import org.junit.Test; +import org.testng.Assert; + +import java.lang.reflect.InvocationTargetException; +import java.util.Arrays; +import java.util.List; + + +public class TestCmdNamespaceIsolationPolicy { + @Test + public void testValidateListMethodToReturnNonNullStringList() { + List mockList = Lists.newArrayList("", "1", "", "", "1", "2", "3", "4", "", "", "", "1", ""); + List resultList = Lists.newArrayList("1", "1", "2", "3", "4", "1"); + CmdNamespaceIsolationPolicy cmdNamespaceIsolationPolicy = new CmdNamespaceIsolationPolicy(() -> null); + Class klass = cmdNamespaceIsolationPolicy.getClass(); + Arrays.stream(klass.getDeclaredMethods()) + .filter((innerMethod) -> innerMethod.getName().contains("validateList")) + .findFirst().ifPresent(innerMethod -> { + try { + innerMethod.setAccessible(true); + List calculatedList = (List) innerMethod.invoke(cmdNamespaceIsolationPolicy, mockList); + Assert.assertEquals(calculatedList.size(), resultList.size()); + for (int i = 0; i < resultList.size(); i++) + Assert.assertEquals(resultList.get(i), calculatedList.get(i)); + } catch (IllegalAccessException | InvocationTargetException e) { + e.printStackTrace(); + } + }); + } +}