package com.plexobject.rbac.repository.bdb; import java.io.File; import java.util.Collection; import junit.framework.Assert; import org.apache.commons.io.FileUtils; import org.apache.log4j.Logger; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.plexobject.rbac.repository.DomainRepository; import com.plexobject.rbac.repository.PersistenceException; import com.plexobject.rbac.repository.RepositoryFactory; import com.plexobject.rbac.domain.Domain; import com.plexobject.rbac.domain.Subject; import com.plexobject.rbac.utils.CurrentRequest; public class DomainRepositoryImplTest { private static final String DOMAIN = "domain"; private static final String USERNAME = "shahbhat"; private static final String TEST_DB_DIR = "test_db_dirx"; private static final Logger LOGGER = Logger .getLogger(DomainRepositoryImplTest.class); private DomainRepository repository; private RepositoryFactory repositoryFactory; @Before public void setUp() throws Exception { new File(TEST_DB_DIR, "je.lck").delete(); FileUtils.deleteDirectory(new File(TEST_DB_DIR)); CurrentRequest.startRequest(DOMAIN, USERNAME, "127.0.0.1"); repositoryFactory = new RepositoryFactoryImpl(TEST_DB_DIR); repository = repositoryFactory.getDomainRepository(); repositoryFactory.getDefaultSubjectRepository().getOrCreateSubject( new Subject(USERNAME, "pass")); } @After public void tearDown() throws Exception { if (repositoryFactory != null) { ((RepositoryFactoryImpl) repositoryFactory).closeDefault(); } new File(TEST_DB_DIR, "je.lck").delete(); FileUtils.deleteDirectory(new File(TEST_DB_DIR)); CurrentRequest.endRequest(); } @Test public void testRemove() { final String subjectName = "subject " + System.currentTimeMillis(); for (int i = 0; i < 10; i++) { repositoryFactory.getSubjectRepository("name" + i) .getOrCreateSubject(new Subject(USERNAME, "pass")); Domain app = new Domain("name" + i, subjectName); repository.save(app); } for (int i = 0; i < 10; i++) { LOGGER.info("deleting name" + i); Assert.assertTrue(repository.remove("name" + i)); } } @Test public void testFindAll() { try { Collection<Domain> all = repository.findAll(null, -1); Assert.assertEquals(1, all.size()); // default domain final String subjectName = "subject " + System.currentTimeMillis(); for (int i = 0; i < 10; i++) { repositoryFactory.getSubjectRepository("name" + i) .getOrCreateSubject(new Subject(USERNAME, "pass")); Domain app = new Domain("name" + i, subjectName); repository.save(app); } all = repository.findAll(null, 100); for (Domain app : all) { Assert.assertTrue(app.getId().startsWith("name") || app.getId().startsWith(Domain.DEFAULT_DOMAIN_NAME)); } Assert.assertEquals(11, all.size()); // 10 + default } catch (Exception e) { e.printStackTrace(); } } @Test public void testFindByName() { final String subjectName = "subject " + System.currentTimeMillis(); for (int i = 0; i < 10; i++) { repositoryFactory.getSubjectRepository("name" + i) .getOrCreateSubject(new Subject(USERNAME, "pass")); Domain app = new Domain("name" + i, subjectName); repository.save(app); } for (int i = 0; i < 10; i++) { Domain app = repository.findById("name" + i); if (LOGGER.isDebugEnabled()) { LOGGER.debug("app " + app); } Assert.assertNotNull(app); } } @Test public void testFindById() { final String subjectName = "subject " + System.currentTimeMillis(); for (int i = 0; i < 10; i++) { repositoryFactory.getSubjectRepository("name" + i) .getOrCreateSubject(new Subject(USERNAME, "pass")); Domain app = new Domain("name" + i, subjectName); repository.save(app); } for (int i = 0; i < 10; i++) { Domain app = repository.findById("name" + i); if (LOGGER.isDebugEnabled()) { LOGGER.debug("app " + app); } Assert.assertNotNull(app); } } @Test(expected = PersistenceException.class) public void testClose() { ((DomainRepositoryImpl) repository).close(); repository.findAll(null, 100); // should fail } }