package org.infinispan.client.hotrod; import static org.infinispan.server.hotrod.test.HotRodTestingUtil.hotRodCacheConfiguration; import static org.testng.AssertJUnit.assertEquals; import java.util.Collections; import javax.security.sasl.Sasl; import org.infinispan.client.hotrod.configuration.ConfigurationBuilder; import org.infinispan.client.hotrod.exceptions.HotRodClientException; import org.infinispan.client.hotrod.exceptions.TransportException; import org.infinispan.commons.CacheConfigurationException; import org.infinispan.manager.EmbeddedCacheManager; import org.infinispan.server.core.security.simple.SimpleServerAuthenticationProvider; import org.infinispan.server.hotrod.HotRodServer; import org.infinispan.server.hotrod.test.TestCallbackHandler; import org.infinispan.test.fwk.CleanupAfterMethod; import org.infinispan.test.fwk.TestCacheManagerFactory; import org.testng.annotations.Test; /** * @author Tristan Tarrant * @since 7.0 */ @Test(testName = "client.hotrod.AuthenticationTest", groups = "functional") @CleanupAfterMethod public class AuthenticationTest extends AbstractAuthenticationTest { protected HotRodServer hotrodServer; @Override protected EmbeddedCacheManager createCacheManager() throws Exception { cacheManager = TestCacheManagerFactory.createCacheManager(hotRodCacheConfiguration()); cacheManager.getCache(); return cacheManager; } @Override protected SimpleServerAuthenticationProvider createAuthenticationProvider() { SimpleServerAuthenticationProvider sap = new SimpleServerAuthenticationProvider(); sap.addUser("user", "realm", "password".toCharArray()); return sap; } @Test public void testAuthentication() { ConfigurationBuilder clientBuilder = initServerAndClient(); clientBuilder.security().authentication().callbackHandler(new TestCallbackHandler("user", "realm", "password".toCharArray())); remoteCacheManager = new RemoteCacheManager(clientBuilder.build()); RemoteCache<String, String> defaultRemote = remoteCacheManager.getCache(); defaultRemote.put("a", "a"); assertEquals("a", defaultRemote.get("a")); } @Test(expectedExceptions=TransportException.class) public void testAuthenticationFailWrongAuth() { ConfigurationBuilder clientBuilder = initServerAndClient(); clientBuilder.security().authentication().callbackHandler(new TestCallbackHandler("user", "realm", "foobar".toCharArray())); remoteCacheManager = new RemoteCacheManager(clientBuilder.build()); remoteCacheManager.getCache(); } @Test(expectedExceptions=HotRodClientException.class, expectedExceptionsMessageRegExp = ".*ISPN006017:.*") public void testAuthenticationFailNoAuth() { ConfigurationBuilder clientBuilder = initServerAndClient(Collections.singletonMap(Sasl.POLICY_NOANONYMOUS, "true")); clientBuilder.security().authentication().disable(); remoteCacheManager = new RemoteCacheManager(clientBuilder.build()); RemoteCache<String, String> cache = remoteCacheManager.getCache(); cache.put("a", "a"); } @Test public void testAuthenticationUsername() { ConfigurationBuilder clientBuilder = initServerAndClient(); clientBuilder.security().authentication().username("user").realm("realm").password("password"); remoteCacheManager = new RemoteCacheManager(clientBuilder.build()); RemoteCache<String, String> defaultRemote = remoteCacheManager.getCache(); defaultRemote.put("a", "a"); assertEquals("a", defaultRemote.get("a")); } @Test(expectedExceptions = CacheConfigurationException.class, expectedExceptionsMessageRegExp = ".*ISPN004067.*") public void testAuthenticationUsernameWithCallbackFail() { ConfigurationBuilder clientBuilder = initServerAndClient(); clientBuilder.security().authentication().username("user").realm("realm").password("password").callbackHandler(new TestCallbackHandler("user", "realm", "foobar".toCharArray())); remoteCacheManager = new RemoteCacheManager(clientBuilder.build()); } }