/** * Copyright 2016 Yahoo Inc. * * 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 com.yahoo.pulsar.broker.loadbalance; import java.util.Set; import java.util.TreeSet; import com.yahoo.pulsar.broker.loadbalance.impl.BrokerVersionFilter; import org.testng.Assert; import org.testng.annotations.Test; import com.yahoo.pulsar.broker.BrokerData; import com.yahoo.pulsar.broker.LocalBrokerData; import com.yahoo.pulsar.broker.ServiceConfiguration; import com.github.zafarkhaja.semver.Version; public class BrokerVersionFilterTest { @Test public void testLatestVersion() { LoadData loadData = initLoadData(); Set<String> brokers = new TreeSet<>(); brokers.add("broker1"); brokers.add("broker2"); brokers.add("broker3"); BrokerVersionFilter filter = new BrokerVersionFilter(); try { Version latestVersion = filter.getLatestVersionNumber(brokers, loadData); Assert.assertEquals(latestVersion.getMajorVersion(), 1); Assert.assertEquals(latestVersion.getMinorVersion(), 2); Assert.assertEquals(latestVersion.getPatchVersion(), 0); } catch (BrokerFilterBadVersionException bad) { Assert.fail(bad.getMessage(), bad); } ServiceConfiguration configuration = new ServiceConfiguration(); configuration.setPreferLaterVersions(true); try { filter.filter(brokers, null, loadData, configuration); // Only one broker is running the latest version Assert.assertEquals(brokers.size(), 1); } catch (BrokerFilterBadVersionException bad) { Assert.fail(bad.getMessage(), bad); } } private LoadData initLoadData() { LocalBrokerData broker1Data = new LocalBrokerData(); broker1Data.setBrokerVersionString("1.1.0-SNAPSHOT"); LocalBrokerData broker2Data = new LocalBrokerData(); broker2Data.setBrokerVersionString("1.1.0-SNAPSHOT"); LocalBrokerData broker3Data = new LocalBrokerData(); broker3Data.setBrokerVersionString("1.2.0-SNAPSHOT"); LoadData loadData = new LoadData(); loadData.getBrokerData().put("broker1", new BrokerData(broker1Data)); loadData.getBrokerData().put("broker2", new BrokerData(broker2Data)); loadData.getBrokerData().put("broker3", new BrokerData(broker3Data)); return loadData; } }