package org.jgroups.tests.byteman; import org.jboss.byteman.contrib.bmunit.BMNGRunner; import org.jboss.byteman.contrib.bmunit.BMScript; import org.jgroups.Global; import org.jgroups.JChannel; import org.jgroups.auth.MD5Token; import org.jgroups.protocols.*; import org.jgroups.protocols.pbcast.GMS; import org.jgroups.protocols.pbcast.NAKACK2; import org.jgroups.protocols.pbcast.STABLE; import org.jgroups.stack.Protocol; import org.jgroups.util.MyReceiver; import org.jgroups.util.Util; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; /** * Tests https://issues.jboss.org/browse/JGRP-2131 * @author Bela Ban * @since 3.6.12, 4.0.0 */ @Test(groups=Global.BYTEMAN,singleThreaded=true) public class ASYM_ENCRYPT_BlockTest extends BMNGRunner { protected JChannel a, b; protected MyReceiver ra, rb; @BeforeMethod protected void setup() throws Exception { a=create("A"); b=create("B"); a.setReceiver(ra=new MyReceiver()); b.setReceiver(rb=new MyReceiver()); a.connect(ASYM_ENCRYPT_BlockTest.class.getSimpleName()); b.connect(ASYM_ENCRYPT_BlockTest.class.getSimpleName()); Util.waitUntilAllChannelsHaveSameView(10000, 1000, a,b); } @AfterMethod protected void tearDown() { Util.close(b, a); } @BMScript(dir="scripts/ASYM_ENCRYPT_BlockTest", value="testASYM_ENCRYPT_NotBlockingJoin") public void testASYM_ENCRYPT_NotBlockingJoin() throws Exception { a.send(b.getAddress(), "one"); b.send(a.getAddress(), "two"); for(int i=0; i < 10; i++) { if(ra.size() >= 1 && rb.size() >= 1) // fail fast if size > 1 break; Util.sleep(1000); } System.out.printf("A's messages:\n%s\nB's messages:\n%s\n", print(ra), print(rb)); assert ra.size() == 1 : String.format("A has %d messages", ra.size()); assert rb.size() >= 1 : String.format("B has %d messages", rb.size()); rb.list().stream().anyMatch(obj -> obj.equals("one")); assert "two".equals(ra.list().get(0)); } protected JChannel create(String name) throws Exception { Protocol[] protocols={ new SHARED_LOOPBACK(), new SHARED_LOOPBACK_PING(), new ASYM_ENCRYPT().encryptEntireMessage(false).symKeylength(128) .symAlgorithm("AES/ECB/PKCS5Padding").asymKeylength(512).asymAlgorithm("RSA"), new NAKACK2(), new UNICAST3(), new STABLE(), new AUTH().setAuthToken(new MD5Token("jdgservercluster", "MD5")), new GMS().joinTimeout(5000), new FRAG2().fragSize(8000) }; return new JChannel(protocols).name(name); } protected static String print(MyReceiver r) { StringBuilder sb=new StringBuilder(); for(Object str: r.list()) sb.append(str + "\n"); return sb.toString(); } }