blob: 335963cf8c20b10797467a9a31658fe960743660 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.geronimo.connector.outbound;
import javax.security.auth.Subject;
import jakarta.resource.ResourceException;
/**
*
*
* @version $Rev$ $Date$
*
* */
public class SubjectInterceptorTest extends ConnectionInterceptorTestUtils {
private SubjectInterceptor subjectInterceptor;
protected void setUp() throws Exception {
super.setUp();
SubjectSource subjectSource = new SubjectSource() {
public Subject getSubject() throws SecurityException {
return subject;
}
};
subjectInterceptor = new SubjectInterceptor(this, subjectSource);
}
protected void tearDown() throws Exception {
super.tearDown();
subjectInterceptor = null;
}
public void testGetConnection() throws Exception {
subject = new Subject();
ConnectionInfo connectionInfo = makeConnectionInfo();
ManagedConnectionInfo managedConnectionInfo = connectionInfo.getManagedConnectionInfo();
subjectInterceptor.getConnection(connectionInfo);
assertTrue("Expected call to next with same connectionInfo", connectionInfo == obtainedConnectionInfo);
assertTrue("Expected the same managedConnectionInfo", managedConnectionInfo == connectionInfo.getManagedConnectionInfo());
assertTrue("Expected supplied subject to be inserted", subject == managedConnectionInfo.getSubject());
}
public void testReturnConnection() throws Exception {
ConnectionInfo connectionInfo = makeConnectionInfo();
subjectInterceptor.returnConnection(connectionInfo, ConnectionReturnAction.RETURN_HANDLE);
assertTrue("Expected call to next with same connectionInfo", connectionInfo == returnedConnectionInfo);
}
public void testEnterWithSameSubject() throws Exception {
makeSubject("foo");
ConnectionInfo connectionInfo = makeConnectionInfo();
managedConnection = new TestPlainManagedConnection();
subjectInterceptor.getConnection(connectionInfo);
//reset our test indicator
obtainedConnectionInfo = null;
subjectInterceptor.getConnection(connectionInfo);
assertTrue("Expected connection asked for", obtainedConnectionInfo == connectionInfo);
assertTrue("Expected no connection returned", returnedConnectionInfo == null);
}
public void testEnterWithChangedSubject() throws Exception {
makeSubject("foo");
ConnectionInfo connectionInfo = makeConnectionInfo();
managedConnection = new TestPlainManagedConnection();
subjectInterceptor.getConnection(connectionInfo);
//reset our test indicator
obtainedConnectionInfo = null;
makeSubject("bar");
subjectInterceptor.getConnection(connectionInfo);
//expect re-association
assertTrue("Expected connection asked for", obtainedConnectionInfo != null);
//connection is returned by SubjectInterceptor
assertTrue("Expected connection returned", returnedConnectionInfo != null);
}
public void testApplicationManagedSecurity() throws Exception {
makeSubject("foo");
ConnectionInfo connectionInfo = makeConnectionInfo();
connectionInfo.setApplicationManagedSecurity(true);
ManagedConnectionInfo managedConnectionInfo = connectionInfo.getManagedConnectionInfo();
managedConnection = new TestPlainManagedConnection();
subjectInterceptor.getConnection(connectionInfo);
//expect no subject set on mci
assertTrue("Expected call to next with same connectionInfo", connectionInfo == obtainedConnectionInfo);
assertTrue("Expected the same managedConnectionInfo", managedConnectionInfo == connectionInfo.getManagedConnectionInfo());
assertTrue("Expected no subject to be inserted", null == managedConnectionInfo.getSubject());
}
public void testUnshareablePreventsReAssociation() throws Exception {
makeSubject("foo");
ConnectionInfo connectionInfo = makeConnectionInfo();
connectionInfo.setUnshareable(true);
managedConnection = new TestPlainManagedConnection();
subjectInterceptor.getConnection(connectionInfo);
//reset our test indicator
obtainedConnectionInfo = null;
makeSubject("bar");
try {
subjectInterceptor.getConnection(connectionInfo);
fail("Reassociating should fail on an unshareable connection");
} catch (ResourceException e) {
}
}
}