private boolean checkViewSize(int expectedSize, JChannel... channels) { boolean b = true; for (JChannel ch : channels) { b = b && ch.getView().size() == expectedSize; } return b; }
public void testSASLDigestMD5Merge() throws Exception { a = createChannel("A", "DIGEST-MD5", "jack"); b = createChannel("B", "DIGEST-MD5", "jack"); a.connect("SaslTest"); b.connect("SaslTest"); assertTrue(b.isConnected()); print(a, b); createPartitions(a, b); print(a, b); assertTrue(checkViewSize(1, a, b)); dropDiscard(a, b); mergePartitions(a, b); for (int i = 0; i < 10 && !checkViewSize(2, a, b); i++) { Util.sleep(500); } assertTrue(viewContains(a.getView(), a, b)); assertTrue(viewContains(b.getView(), a, b)); }
private static void mergePartitions(JChannel... channels) throws Exception { Membership membership = new Membership(); for (JChannel ch : channels) { membership.add(ch.getAddress()); } membership.sort(); Address leaderAddress = membership.elementAt(0); JChannel leader = findChannelByAddress(leaderAddress, channels); GMS gms = (GMS) leader.getProtocolStack().findProtocol(GMS.class); gms.setLevel("trace"); Map<Address, View> views = new HashMap<>(); for (JChannel ch : channels) { views.put(ch.getAddress(), ch.getView()); } gms.up(new Event(Event.MERGE, views)); }
private static void print(JChannel... channels) { for (JChannel ch : channels) { System.out.println(ch.getName() + ": " + ch.getView()); } }