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
.apache
.commons
.logging
.Log
;
17 import org
.apache
.commons
.logging
.LogFactory
;
18 import org
.argeo
.jcr
.JcrException
;
20 import junit
.framework
.TestCase
;
22 /** Base for unit tests with a JCR repository. */
23 public abstract class AbstractJcrTestCase
extends TestCase
{
24 private final static Log log
= LogFactory
.getLog(AbstractJcrTestCase
.class);
26 private Repository repository
;
27 private Session session
= null;
29 public final static String LOGIN_CONTEXT_TEST_SYSTEM
= "TEST_JACKRABBIT_ADMIN";
31 // protected abstract File getRepositoryFile() throws Exception;
33 protected abstract Repository
createRepository() throws Exception
;
35 protected abstract void clearRepository(Repository repository
) throws Exception
;
38 protected void setUp() throws Exception
{
39 File homeDir
= getHomeDir();
40 FileUtils
.deleteDirectory(homeDir
);
41 repository
= createRepository();
45 protected void tearDown() throws Exception
{
46 if (session
!= null) {
48 if (log
.isTraceEnabled())
49 log
.trace("Logout session");
51 clearRepository(repository
);
54 protected Session
session() {
55 if (session
!= null && session
.isLive())
58 if (getLoginContext() != null) {
61 lc
= new LoginContext(getLoginContext());
63 } catch (LoginException e
) {
64 throw new IllegalStateException("JAAS login failed", e
);
66 session
= Subject
.doAs(lc
.getSubject(), new PrivilegedAction
<Session
>() {
69 public Session
run() {
76 this.session
= session
;
80 protected String
getLoginContext() {
84 protected Session
login() {
86 if (log
.isTraceEnabled())
87 log
.trace("Login session");
88 Subject subject
= Subject
.getSubject(AccessController
.getContext());
90 return getRepository().login();
92 return getRepository().login(new SimpleCredentials("demo", "demo".toCharArray()));
93 } catch (RepositoryException e
) {
94 throw new JcrException("Cannot login to repository", e
);
98 protected Repository
getRepository() {
103 * enables children class to set an existing repository in case it is not
104 * deleted on startup, to test migration by instance
106 public void setRepository(Repository repository
) {
107 this.repository
= repository
;
110 protected File
getHomeDir() {
111 File homeDir
= new File(System
.getProperty("java.io.tmpdir"),
112 AbstractJcrTestCase
.class.getSimpleName() + "-" + System
.getProperty("user.name"));