package org.jgroups.protocols; import org.jgroups.Global; import org.jgroups.JChannel; import org.jgroups.protocols.pbcast.NAKACK2; import org.jgroups.stack.ProtocolStack; import org.jgroups.util.Util; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.util.stream.Stream; /** * Tests use cases for {@link SYM_ENCRYPT} described in https://issues.jboss.org/browse/JGRP-2021. * Make sure you create the keystore before running this test (ant make-keystore). * @author Bela Ban * @since 4.0 */ @Test(groups=Global.FUNCTIONAL,singleThreaded=true) public class SYM_ENCRYPT_Test extends EncryptTest { protected static final String DEF_PWD="changeit"; @BeforeMethod protected void init() throws Exception { super.init(getClass().getSimpleName()); } @AfterMethod protected void destroy() { super.destroy(); } /** Calling methods in superclass. Kludge because TestNG doesn't call methods in superclass correctly **/ public void testRegularMessageReception() throws Exception { super.testRegularMessageReception(); } public void testRegularMessageReceptionWithNullMessages() throws Exception { super.testRegularMessageReceptionWithNullMessages(); } /** Same as above, but don't encrypt entire message, but just payload */ public void testRegularMessageReceptionWithNullMessagesEncryptOnlyPayload() throws Exception { Stream.of(a,b,c).forEach(ch -> { Encrypt encr=ch.getProtocolStack().findProtocol(Encrypt.class); encr.encryptEntireMessage(false); }); super.testRegularMessageReceptionWithNullMessages(); } public void testRegularMessageReceptionWithEmptyMessages() throws Exception { super.testRegularMessageReceptionWithEmptyMessages(); } public void testRegularMessageReceptionWithEmptyMessagesEncryptOnlyPayload() throws Exception { Stream.of(a,b,c).forEach(ch -> { Encrypt encr=ch.getProtocolStack().findProtocol(Encrypt.class); encr.encryptEntireMessage(false); }); super.testRegularMessageReceptionWithEmptyMessages(); } public void testChecksum() throws Exception { super.testChecksum(); } public void testRogueMemberJoin() throws Exception { super.testRogueMemberJoin(); } public void testMessageSendingByRogue() throws Exception { super.testMessageSendingByRogue(); } public void testMessageSendingByRogueUsingEncryption() throws Exception { super.testMessageSendingByRogueUsingEncryption(); } public void testMessageReceptionByRogue() throws Exception { super.testMessageReceptionByRogue(); } public void testCapturingOfMessageByNonMemberAndResending() throws Exception { super.testCapturingOfMessageByNonMemberAndResending(); } public void testRogueViewInstallation() throws Exception { super.testRogueViewInstallation(); } protected JChannel create(String name) throws Exception { JChannel ch=new JChannel(Util.getTestStack()).name(name); SYM_ENCRYPT encrypt; try { encrypt=createENCRYPT("keystore/defaultStore.keystore", DEF_PWD); } catch(Throwable t) { encrypt=createENCRYPT("defaultStore.keystore", DEF_PWD); } ch.getProtocolStack().insertProtocol(encrypt, ProtocolStack.Position.BELOW, NAKACK2.class); return ch; } // Note that setting encrypt_entire_message to true is critical here, or else some of the tests in this // unit test would fail! protected SYM_ENCRYPT createENCRYPT(String keystore_name, String store_pwd) throws Exception { SYM_ENCRYPT encrypt=new SYM_ENCRYPT().keystoreName(keystore_name).alias("myKey") .storePassword(store_pwd).encryptEntireMessage(true).signMessages(true); encrypt.init(); return encrypt; } }