package org.jgroups.protocols;
import org.jgroups.Global;
import org.jgroups.auth.FixedMembershipToken;
import org.jgroups.auth.MD5Token;
import org.jgroups.auth.SimpleToken;
import org.jgroups.stack.IpAddress;
import org.testng.annotations.Test;
/**
* A set of tests for the AUTH protocol
* @author Chris Mills
*/
@Test(groups=Global.FUNCTIONAL,sequential=false)
public class AUTHTest {
/**
* Creates two SimpleToken objects with identical auth_values and authenticates one against the other
* Test fails if an exception is thrown or authentication fails
*/
public static void testSimpleToken() {
SimpleToken token1=new SimpleToken();
token1.setAuthValue("chris");
SimpleToken token2=new SimpleToken();
token2.setAuthValue("chris");
assert token1.authenticate(token2, null);
}
/**
* Creates two SimpleToken objects with different auth_values and authenticates one against the other
* <p/>
* Test fails if an exception is thrown or authentication passes
*/
public static void testSimpleTokenMismatch() {
SimpleToken token1=new SimpleToken();
token1.setAuthValue("chris");
SimpleToken token2=new SimpleToken();
token2.setAuthValue("chrismills");
assert !token1.authenticate(token2, null);
}
/**
* Creates two MD5Token objects with identical auth_values and authenticates one against the other
* <p/>
* Uses an MD5 hash type
* <p/>
* Test fails if an exception is thrown or authentication fails
*/
public static void testMD5Token() {
MD5Token token1=new MD5Token();
token1.setAuthValue("chris");
token1.setHashType("MD5");
MD5Token token2=new MD5Token();
token2.setAuthValue("chris");
token2.setHashType("MD5");
assert token1.authenticate(token2, null);
}
/**
* Creates two MD5Token objects with different auth_values and authenticates one against the other
* <p/>
* Uses an MD5 hash type
* <p/>
* Test fails if an exception is thrown or authentication passes
*/
public static void testMD5TokenMismatch() {
MD5Token token1=new MD5Token();
token1.setAuthValue("chris");
token1.setHashType("MD5");
MD5Token token2=new MD5Token();
token2.setAuthValue("chrismills");
token2.setHashType("MD5");
assert !token1.authenticate(token2, null);
}
/**
* Creates two MD5Token objects with identical auth_values and authenticates one against the other
* <p/>
* Uses an SHA hash type
* <p/>
* Test fails if an exception is thrown or authentication fails
*/
public static void testSHAToken() {
MD5Token token1=new MD5Token();
token1.setAuthValue("chris");
token1.setHashType("SHA");
MD5Token token2=new MD5Token();
token2.setAuthValue("chris");
token2.setHashType("SHA");
assert token1.authenticate(token2, null);
}
/**
* Creates two MD5Token objects with different auth_values and authenticates one against the other
* <p/>
* Uses an SHA hash type
* <p/>
* Test fails if an exception is thrown or authentication passes
*/
public static void testSHATokenMismatch() {
MD5Token token1=new MD5Token();
token1.setAuthValue("chris");
token1.setHashType("SHA");
MD5Token token2=new MD5Token();
token2.setAuthValue("chrismills");
token2.setHashType("SHA");
assert !token1.authenticate(token2, null);
}
/**
* Test to create an AuthHeader object and set and get the Token object
* <p/>
* Fails if an exception is thrown or the set and get don't equal the same object
*/
public static void testAuthHeader() {
SimpleToken token1=new SimpleToken();
token1.setAuthValue("chris");
AuthHeader header=new AuthHeader();
header.setToken(token1);
assert token1 == header.getToken();
}
/**
* Test to create an AuthHeader object and set and get the Token object
* <p/>
* Fails if an exception is thrown or the set and get equal the same object
*/
public static void testAuthHeaderDifferent() {
SimpleToken token1=new SimpleToken();
token1.setAuthValue("chris");
SimpleToken token2=new SimpleToken();
token2.setAuthValue("chris");
AuthHeader header=new AuthHeader();
header.setToken(token1);
assert !(token2 == header.getToken());
}
public static void testFixedMembershipTokenIPv4() throws Exception {
FixedMembershipToken tok=new FixedMembershipToken();
tok.setMemberList("192.168.1.6,10.1.1.1/7500,localhost/7800");
assert !tok.isInMembersList(new IpAddress("192.168.1.3", 7500));
assert !tok.isInMembersList(new IpAddress("10.1.1.1", 7000));
assert tok.isInMembersList(new IpAddress("10.1.1.1", 7500));
assert tok.isInMembersList(new IpAddress("192.168.1.6", 7500)); // port is not matched
assert tok.isInMembersList(new IpAddress("192.168.1.6", 0)); // port is not matched
}
public static void testFixedMembershipTokenIPv6() throws Exception {
FixedMembershipToken tok=new FixedMembershipToken();
tok.setMemberList("fe80::aa20:66ff:fe11:d346,2a02:120b:2c45:1b70:aa20:66ff:fe11:d346/7500,2a02:120b:2c45:1b70:f474:e6ca:3038:6b5f/7500");
assert tok.isInMembersList(new IpAddress("2a02:120b:2c45:1b70:f474:e6ca:3038:6b5f", 7500));
}
}