blob: 8714d915f636635d201e2630506465f52f00cb50 [file] [log] [blame]
package org.apache.turbine.testcontainer;
import static junit.framework.TestCase.assertEquals;
import static junit.framework.TestCase.assertTrue;
import static junit.framework.TestCase.fail;
import java.io.File;
import java.io.FileOutputStream;
import org.apache.fulcrum.security.entity.ExtendedUser;
import org.apache.fulcrum.security.util.UnknownEntityException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.torque.ConstraintViolationException;
import org.apache.turbine.annotation.AnnotationProcessor;
import org.apache.turbine.annotation.TurbineService;
import org.apache.turbine.om.security.User;
import org.apache.turbine.services.security.SecurityService;
import org.apache.turbine.util.TurbineConfig;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.MethodOrderer.OrderAnnotation;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
/**
* Steps to run this @see {@link BuildContainerWithDockerfileTest}
*
* TODO
* This test might be more useful in a running turbine environment,
* e.g. created by archetypes or in torque-test testing databases.
*
* @author gkallidis
*
*/
@TestMethodOrder(OrderAnnotation.class)
@Testcontainers
@Tag("docker")
// requires manual port mapping in docker-manager/TorqueTest.properties,
//@Disabled
class UserManagerWithContainerTest {
@TurbineService
SecurityService turbineSecurityService;
static TurbineConfig tc;
boolean onDeleteCascade = true;
private static Logger log = LogManager.getLogger();
@Container
private static GenericContainer MY_SQL_CONTAINER = BuildContainerWithDockerfileTest.MY_SQL_CONTAINER;
@BeforeAll
public static void init() {
MY_SQL_CONTAINER.setStartupAttempts( 3 ); // see MySQLContainer
tc = new TurbineConfig(".",
"/conf/test/docker-manager/CompleteTurbineResources.properties");
try {
// get Torque component configuration and override torque.dsfactory.default.connection.url with url containing mapped port.
//Connection c = BuildContainerWithDockerfileTest.getConnection();
//MY_SQL_CONTAINER.getMappedPort( BuildContainerWithDockerfileTest.SERVICE_PORT );
String jdbcConnectionString = BuildContainerWithDockerfileTest.generateJdbcUrl();
String customUrl = "torque.dsfactory.default.connection.url="+ jdbcConnectionString;
// override and set mapped port in url, which is known only at runtime.
File file = new File("./conf/test/docker-manager/torque.usersettings.properties");
try (FileOutputStream fop = new FileOutputStream(file )) {
if (!file.exists()) {
file.createNewFile();
}
fop.write( customUrl.getBytes() );
fop.flush();
}
tc.initialize();
} catch (Exception e) {
fail();
}
}
/**
* executes as designed even if tests are disabled
* @throws Exception
*/
@BeforeEach
public void before() throws Exception {
AnnotationProcessor.process(this);
}
@Test
@Order(1)
@Tag("docker")
public void testCreateManagedUser()
throws Exception
{
User user = turbineSecurityService.getUserInstance();
user.setAccessCounter( 5 );
user.setName( "ringo" );
// required not null constraint
( (ExtendedUser) user ).setFirstName( user.getName() );
( (ExtendedUser) user ).setLastName( user.getName() );
turbineSecurityService.addUser( user, "fakepassword" );
assertTrue( turbineSecurityService.accountExists( user ) );
//assertTrue( turbineSecurityService.getUserManager().checkExists( user ) );
}
@Test
@Order(2)
@Tag("docker")
//@Disabled
void selectNewUser() {
User ringo;
try {
ringo = turbineSecurityService.getUser("ringo");
assertEquals("ringo", ringo.getFirstName());
deleteUser(ringo);
} catch (Exception sqle) {
log.error( "new user error",sqle);
fail();
}
try {
ringo = turbineSecurityService.getUser("ringo");
fail("Should throw UnknownEntity");
} catch (UnknownEntityException sqle) {
log.info( "correct entity unknown",sqle);
} catch (Exception sqle) {
log.error( "new user error",sqle);
fail();
}
}
private void deleteUser( User user )
{
if ( onDeleteCascade )
{
try
{
// revokeAll is called before user delete
turbineSecurityService.removeUser( user );
log.info( "try to delete user " + user.getName() );
}
catch ( Exception e )
{
log.error( "deleting user " + user.getName() + " failed. "
+ e.getMessage() );
if ( e.getCause() != null &&
e.getCause() instanceof ConstraintViolationException)
{
log.info( "error due to " + e.getCause().getMessage() );
}
else
{
log.info( "error due to " + e.getMessage() );
}
}
}
else
{
log.info( "onDeleteCascade false, user " + user.getName()
+ " not deleted!" );
}
}
}