/* * Copyright (c) 2008-2017, Hazelcast, Inc. All Rights Reserved. * * 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.hazelcast.internal.cluster.impl; import com.hazelcast.instance.MemberImpl; import com.hazelcast.internal.cluster.MemberInfo; import com.hazelcast.nio.Address; import com.hazelcast.test.HazelcastParallelClassRunner; import com.hazelcast.test.annotation.ParallelTest; import com.hazelcast.test.annotation.QuickTest; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.runner.RunWith; import java.util.Arrays; import java.util.List; import java.util.Set; import static com.hazelcast.internal.cluster.impl.MemberMapTest.newMember; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @RunWith(HazelcastParallelClassRunner.class) @Category({QuickTest.class, ParallelTest.class}) public class MembersViewTest { @Test public void createNew() throws Exception { int version = 7; MemberImpl[] members = MemberMapTest.newMembers(5); MembersView view = MembersView.createNew(version, Arrays.asList(members)); assertEquals(version, view.getVersion()); assertMembersViewEquals(members, view); } @Test public void cloneAdding() throws Exception { int version = 6; MemberImpl[] members = MemberMapTest.newMembers(4); List<MemberInfo> additionalMembers = Arrays.asList(new MemberInfo(newMember(6000)), new MemberInfo(newMember(7000))); MembersView view = MembersView.cloneAdding(MembersView.createNew(version, Arrays.asList(members)), additionalMembers); assertEquals(version + 1, view.getVersion()); MemberImpl[] newMembers = Arrays.copyOf(members, members.length + additionalMembers.size()); for (int i = 0; i < additionalMembers.size(); i++) { newMembers[members.length + i] = additionalMembers.get(i).toMember(); } assertMembersViewEquals(newMembers, view); } @Test public void toMemberMap() throws Exception { int version = 5; MemberImpl[] members = MemberMapTest.newMembers(3); MembersView view = MembersView.createNew(version, Arrays.asList(members)); MemberMap memberMap = view.toMemberMap(); assertEquals(version, memberMap.getVersion()); assertMembersViewEquals(memberMap.getMembers().toArray(new MemberImpl[0]), view); } @Test public void containsAddress() throws Exception { MemberImpl[] members = MemberMapTest.newMembers(3); MembersView view = MembersView.createNew(1, Arrays.asList(members)); for (MemberImpl member : members) { assertTrue(view.containsAddress(member.getAddress())); } } @Test public void containsMember() throws Exception { MemberImpl[] members = MemberMapTest.newMembers(3); MembersView view = MembersView.createNew(1, Arrays.asList(members)); for (MemberImpl member : members) { assertTrue(view.containsMember(member.getAddress(), member.getUuid())); } } @Test public void getAddresses() throws Exception { MemberImpl[] members = MemberMapTest.newMembers(3); MembersView view = MembersView.createNew(1, Arrays.asList(members)); Set<Address> addresses = view.getAddresses(); assertEquals(members.length, addresses.size()); for (MemberImpl member : members) { assertTrue(addresses.contains(member.getAddress())); } } @Test public void isLaterThan() throws Exception { MembersView view1 = MembersView.createNew(1, Arrays.asList(MemberMapTest.newMembers(5))); MembersView view2 = MembersView.createNew(3, Arrays.asList(MemberMapTest.newMembers(5))); MembersView view3 = MembersView.createNew(5, Arrays.asList(MemberMapTest.newMembers(5))); assertTrue(view2.isLaterThan(view1)); assertTrue(view3.isLaterThan(view1)); assertTrue(view3.isLaterThan(view2)); assertFalse(view1.isLaterThan(view1)); assertFalse(view1.isLaterThan(view2)); assertFalse(view1.isLaterThan(view3)); assertFalse(view2.isLaterThan(view2)); assertFalse(view2.isLaterThan(view3)); assertFalse(view3.isLaterThan(view3)); } private static void assertMembersViewEquals(MemberImpl[] members, MembersView view) { assertEquals(members.length, view.size()); List<MemberInfo> membersInfos = view.getMembers(); for (int i = 0; i < members.length; i++) { assertEquals(members[i], membersInfos.get(i).toMember()); } } }