1 package org
.argeo
.jcr
.unit
;
4 import java
.security
.AccessController
;
5 import java
.security
.PrivilegedAction
;
7 import javax
.jcr
.Repository
;
8 import javax
.jcr
.RepositoryException
;
9 import javax
.jcr
.Session
;
10 import javax
.jcr
.SimpleCredentials
;
11 import javax
.security
.auth
.Subject
;
12 import javax
.security
.auth
.login
.LoginContext
;
13 import javax
.security
.auth
.login
.LoginException
;
15 import org
.apache
.commons
.io
.FileUtils
;
16 import org
.argeo
.api
.cms
.CmsLog
;
17 import org
.argeo
.jcr
.JcrException
;
19 import junit
.framework
.TestCase
;
21 /** Base for unit tests with a JCR repository. */
22 public abstract class AbstractJcrTestCase
extends TestCase
{
23 private final static CmsLog log
= CmsLog
.getLog(AbstractJcrTestCase
.class);
25 private Repository repository
;
26 private Session session
= null;
28 public final static String LOGIN_CONTEXT_TEST_SYSTEM
= "TEST_JACKRABBIT_ADMIN";
30 // protected abstract File getRepositoryFile() throws Exception;
32 protected abstract Repository
createRepository() throws Exception
;
34 protected abstract void clearRepository(Repository repository
) throws Exception
;
37 protected void setUp() throws Exception
{
38 File homeDir
= getHomeDir();
39 FileUtils
.deleteDirectory(homeDir
);
40 repository
= createRepository();
44 protected void tearDown() throws Exception
{
45 if (session
!= null) {
47 if (log
.isTraceEnabled())
48 log
.trace("Logout session");
50 clearRepository(repository
);
53 protected Session
session() {
54 if (session
!= null && session
.isLive())
57 if (getLoginContext() != null) {
60 lc
= new LoginContext(getLoginContext());
62 } catch (LoginException e
) {
63 throw new IllegalStateException("JAAS login failed", e
);
65 session
= Subject
.doAs(lc
.getSubject(), new PrivilegedAction
<Session
>() {
68 public Session
run() {
75 this.session
= session
;
79 protected String
getLoginContext() {
83 protected Session
login() {
85 if (log
.isTraceEnabled())
86 log
.trace("Login session");
87 Subject subject
= Subject
.getSubject(AccessController
.getContext());
89 return getRepository().login();
91 return getRepository().login(new SimpleCredentials("demo", "demo".toCharArray()));
92 } catch (RepositoryException e
) {
93 throw new JcrException("Cannot login to repository", e
);
97 protected Repository
getRepository() {
102 * enables children class to set an existing repository in case it is not
103 * deleted on startup, to test migration by instance
105 public void setRepository(Repository repository
) {
106 this.repository
= repository
;
109 protected File
getHomeDir() {
110 File homeDir
= new File(System
.getProperty("java.io.tmpdir"),
111 AbstractJcrTestCase
.class.getSimpleName() + "-" + System
.getProperty("user.name"));