package com.github.ebnew.ki4so.core.authentication.handlers;
import junit.framework.Assert;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import com.github.ebnew.ki4so.core.authentication.Credential;
import com.github.ebnew.ki4so.core.authentication.EncryCredential;
import com.github.ebnew.ki4so.core.authentication.EncryCredentialManager;
import com.github.ebnew.ki4so.core.exception.InvalidEncryCredentialException;
import com.github.ebnew.ki4so.core.model.EncryCredentialInfo;
/**
* 测试加密后凭据认证处理器对象。
* @author burgess yang
*
*/
public class EncryCredentialAuthenticationHandlerTest {
private EncryCredentialAuthenticationHandler handler;
@Before
public void setUp() throws Exception {
handler = new EncryCredentialAuthenticationHandler();
}
@After
public void tearDown() throws Exception {
}
@Test
public void testDoAuthentication() {
/**
* 测试异常输入情况。
*/
Assert.assertFalse(handler.authenticate(null));
Credential credential = Mockito.mock(Credential.class);
Assert.assertFalse(handler.authenticate(credential));
/**
* 测试解密失败抛出异常的情况。
*/
EncryCredential encryCredential = new EncryCredential("sssddaf");
EncryCredentialManager encryCredentialManager = Mockito.mock(EncryCredentialManager.class);
this.handler.setEncryCredentialManager(encryCredentialManager);
Mockito.when(encryCredentialManager.decrypt(encryCredential)).thenThrow(InvalidEncryCredentialException.INSTANCE);
Assert.assertFalse(handler.authenticate(encryCredential));
/**
* 测试解密返回null的情况。
*/
Mockito.reset(encryCredentialManager);
Mockito.when(encryCredentialManager.decrypt(encryCredential)).thenReturn(null);
Assert.assertFalse(handler.authenticate(encryCredential));
/**
* 测试解密成功,但是凭据不合法的情况。
*/
Mockito.reset(encryCredentialManager);
EncryCredentialInfo encryCredentialInfo = new EncryCredentialInfo();
Mockito.when(encryCredentialManager.decrypt(encryCredential)).thenReturn(encryCredentialInfo);
Assert.assertFalse(handler.authenticate(encryCredential));
/**
* 测试解密成功,但是凭据合法的情况。
*/
Mockito.reset(encryCredentialManager);
encryCredentialInfo = new EncryCredentialInfo();
Mockito.when(encryCredentialManager.decrypt(encryCredential)).thenReturn(encryCredentialInfo);
Mockito.when(encryCredentialManager.checkEncryCredentialInfo(encryCredentialInfo)).thenReturn(true);
Assert.assertTrue(handler.authenticate(encryCredential));
}
}