/**
* 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.activemq.shiro.authc;
import org.apache.activemq.broker.Connection;
import org.apache.activemq.broker.ConnectionContext;
import org.apache.activemq.broker.Connector;
import org.apache.activemq.broker.region.ConnectionStatistics;
import org.apache.activemq.command.Command;
import org.apache.activemq.command.ConnectionControl;
import org.apache.activemq.command.ConnectionInfo;
import org.apache.activemq.command.Response;
import org.apache.activemq.shiro.subject.SubjectAdapter;
import org.apache.activemq.shiro.subject.SubjectConnectionReference;
import org.apache.shiro.env.DefaultEnvironment;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.subject.SimplePrincipalCollection;
import org.apache.shiro.subject.Subject;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import static org.junit.Assert.*;
/**
* @since 5.10.0
*/
public class DefaultAuthenticationPolicyTest {
private DefaultAuthenticationPolicy policy;
@Before
public void setUp() {
this.policy = new DefaultAuthenticationPolicy();
}
@Test
public void testVmConnectionAuthenticationRequired() {
boolean required = true;
policy.setVmConnectionAuthenticationRequired(required);
assertEquals(required, policy.isVmConnectionAuthenticationRequired());
}
@Test
public void testSystemAccountUsername() {
String name = "foo";
policy.setSystemAccountUsername(name);
assertEquals(name, policy.getSystemAccountUsername());
}
@Test
public void testSystemAccountRealmName() {
String name = "fooRealm";
policy.setSystemAccountRealmName(name);
assertEquals(name, policy.getSystemAccountRealmName());
}
@Test
public void testAnonymousAllowed() {
boolean allowed = true;
policy.setAnonymousAccessAllowed(allowed);
assertEquals(allowed, policy.isAnonymousAccessAllowed());
}
@Test
public void testAnonymousAccountUsername() {
String name = "blah";
policy.setAnonymousAccountUsername(name);
assertEquals(name, policy.getAnonymousAccountUsername());
}
@Test
public void testAnonymousAccountRealmName() {
String name = "blahRealm";
policy.setAnonymousAccountRealmName(name);
assertEquals(name, policy.getAnonymousAccountRealmName());
}
@Test
public void testIsAnonymousAccount() {
Subject subject = new SubjectAdapter() {
@Override
public PrincipalCollection getPrincipals() {
return new SimplePrincipalCollection("anonymous", "iniRealm");
}
};
assertTrue(policy.isAnonymousAccount(subject));
}
@Test
public void testIsAnonymousAccountWithNullPrincipals() {
assertFalse(policy.isAnonymousAccount(new SubjectAdapter()));
}
@Test
public void testIsSystemAccountWithNullPrincipals() {
assertFalse(policy.isSystemAccount(new SubjectAdapter()));
}
@Test
public void testIsAuthenticationRequiredWhenAlreadyRequired() {
Subject subject = new SubjectAdapter() {
@Override
public boolean isAuthenticated() {
return true;
}
};
SubjectConnectionReference sc = new SubjectConnectionReference(new ConnectionContext(), new ConnectionInfo(),
new DefaultEnvironment(), subject);
assertFalse(policy.isAuthenticationRequired(sc));
}
@Test
public void testIsAuthenticationRequiredWhenAnonymousAllowedAnonymousSubject() {
policy.setAnonymousAccessAllowed(true);
Subject subject = new SubjectAdapter() {
@Override
public PrincipalCollection getPrincipals() {
return new SimplePrincipalCollection("anonymous", "iniRealm");
}
};
SubjectConnectionReference sc = new SubjectConnectionReference(new ConnectionContext(), new ConnectionInfo(),
new DefaultEnvironment(), subject);
assertFalse(policy.isAuthenticationRequired(sc));
}
@Test
public void testIsAuthenticationRequiredWhenAnonymousAllowedAndNotAnonymousSubject() {
policy.setAnonymousAccessAllowed(true);
Subject subject = new SubjectAdapter() {
@Override
public PrincipalCollection getPrincipals() {
return new SimplePrincipalCollection("system", "iniRealm");
}
};
SubjectConnectionReference sc = new SubjectConnectionReference(new ConnectionContext(), new ConnectionInfo(),
new DefaultEnvironment(), subject);
assertFalse(policy.isAuthenticationRequired(sc));
}
@Test
public void testIsAuthenticationRequiredWhenSystemConnectionAndSystemSubject() {
Subject subject = new SubjectAdapter() {
@Override
public PrincipalCollection getPrincipals() {
return new SimplePrincipalCollection("system", "iniRealm");
}
};
SubjectConnectionReference sc = new SubjectConnectionReference(new ConnectionContext(), new ConnectionInfo(),
new DefaultEnvironment(), subject);
assertFalse(policy.isAuthenticationRequired(sc));
}
@Test
public void testIsAuthenticationRequiredWhenSystemConnectionRequiresAuthentication() {
policy.setVmConnectionAuthenticationRequired(true);
Subject subject = new SubjectAdapter() {
@Override
public PrincipalCollection getPrincipals() {
return new SimplePrincipalCollection("system", "iniRealm");
}
};
SubjectConnectionReference sc = new SubjectConnectionReference(new ConnectionContext(), new ConnectionInfo(),
new DefaultEnvironment(), subject);
assertTrue(policy.isAuthenticationRequired(sc));
}
@Test
public void testIsAuthenticationRequiredWhenSystemConnectionDoesNotRequireAuthenticationAndNotSystemAccount() {
Subject subject = new SubjectAdapter() {
@Override
public PrincipalCollection getPrincipals() {
return new SimplePrincipalCollection("foo", "iniRealm");
}
};
SubjectConnectionReference sc = new SubjectConnectionReference(new ConnectionContext(), new ConnectionInfo(),
new DefaultEnvironment(), subject);
assertTrue(policy.isAuthenticationRequired(sc));
}
@Test
public void testIsAssumeIdentity() {
policy.setAnonymousAccessAllowed(true);
assertTrue(policy.isAssumeIdentity(null));
}
@Test
public void testIsAssumeIdentityWithSystemConnection() {
ConnectionContext ctx = new ConnectionContext();
Connection connection = new Connection() {
@Override
public Connector getConnector() {
return null; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public void dispatchSync(Command message) {
//To change body of implemented methods use File | Settings | File Templates.
}
@Override
public void dispatchAsync(Command command) {
//To change body of implemented methods use File | Settings | File Templates.
}
@Override
public Response service(Command command) {
return null; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public void serviceException(Throwable error) {
//To change body of implemented methods use File | Settings | File Templates.
}
@Override
public boolean isSlow() {
return false; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public boolean isBlocked() {
return false; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public boolean isConnected() {
return false; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public boolean isActive() {
return false; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public int getDispatchQueueSize() {
return 0; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public ConnectionStatistics getStatistics() {
return null; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public boolean isManageable() {
return false; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public String getRemoteAddress() {
return "vm://localhost";
}
@Override
public void serviceExceptionAsync(IOException e) {
//To change body of implemented methods use File | Settings | File Templates.
}
@Override
public String getConnectionId() {
return null; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public boolean isNetworkConnection() {
return false; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public boolean isFaultTolerantConnection() {
return false; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public void updateClient(ConnectionControl control) {
//To change body of implemented methods use File | Settings | File Templates.
}
@Override
public void start() throws Exception {
//To change body of implemented methods use File | Settings | File Templates.
}
@Override
public void stop() throws Exception {
//To change body of implemented methods use File | Settings | File Templates.
}
@Override
public int getActiveTransactionCount() {
return 0; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public Long getOldestActiveTransactionDuration() {
return null; //To change body of implemented methods use File | Settings | File Templates.
}
};
ctx.setConnection(connection);
SubjectConnectionReference sc = new SubjectConnectionReference(ctx, new ConnectionInfo(),
new DefaultEnvironment(), new SubjectAdapter());
assertTrue(policy.isAssumeIdentity(sc));
}
}