This commit is contained in:
Clebert Suconic 2019-06-26 15:23:04 -04:00
commit 2eecc15a3d
4 changed files with 127 additions and 15 deletions

View File

@ -37,10 +37,14 @@ public class InputAbstract extends ActionAbstract {
@Option(name = "--silent", description = "It will disable all the inputs, and it would make a best guess for any required input")
private boolean silentInput = false;
private boolean isSilentInput() {
public boolean isSilentInput() {
return silentInput || !inputEnabled;
}
public void setSilentInput(boolean isSilent) {
this.silentInput = isSilent;
}
protected boolean inputBoolean(String propertyName, String prompt, boolean silentDefault) {
if (isSilentInput()) {
return silentDefault;

View File

@ -44,6 +44,38 @@ public class ConnectionAbstract extends InputAbstract {
@Option(name = "--protocol", description = "Protocol used. Valid values are amqp or core. Default=core.")
String protocol = "core";
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getClientID() {
return clientID;
}
public void setClientID(String clientID) {
this.clientID = clientID;
}
public String getProtocol() {
return protocol;
}
public void setProtocol(String protocol) {
this.protocol = protocol;
}
protected ConnectionFactory createConnectionFactory() throws Exception {
if (protocol.equals("core")) {
return createCoreConnectionFactory();
@ -72,13 +104,21 @@ public class ConnectionAbstract extends InputAbstract {
// if a security exception will get the user and password through an input
context.err.println("Connection failed::" + e.getMessage());
userPassword();
return new JmsConnectionFactory(user, password, brokerURL);
cf = new JmsConnectionFactory(user, password, brokerURL);
if (clientID != null) {
cf.setClientID(clientID);
}
return cf;
} catch (JMSException e) {
// if a connection exception will ask for the URL, user and password
context.err.println("Connection failed::" + e.getMessage());
brokerURL = input("--url", "Type in the broker URL for a retry (e.g. tcp://localhost:61616)", brokerURL);
userPassword();
return new JmsConnectionFactory(user, password, brokerURL);
cf = new JmsConnectionFactory(user, password, brokerURL);
if (clientID != null) {
cf.setClientID(clientID);
}
return cf;
}
}
@ -95,15 +135,27 @@ public class ConnectionAbstract extends InputAbstract {
return cf;
} catch (JMSSecurityException e) {
// if a security exception will get the user and password through an input
context.err.println("Connection failed::" + e.getMessage());
if (context != null) {
context.err.println("Connection failed::" + e.getMessage());
}
userPassword();
return new ActiveMQConnectionFactory(brokerURL, user, password);
cf = new ActiveMQConnectionFactory(brokerURL, user, password);
if (clientID != null) {
cf.setClientID(clientID);
}
return cf;
} catch (JMSException e) {
// if a connection exception will ask for the URL, user and password
context.err.println("Connection failed::" + e.getMessage());
if (context != null) {
context.err.println("Connection failed::" + e.getMessage());
}
brokerURL = input("--url", "Type in the broker URL for a retry (e.g. tcp://localhost:61616)", brokerURL);
userPassword();
return new ActiveMQConnectionFactory(brokerURL, user, password);
cf = new ActiveMQConnectionFactory(brokerURL, user, password);
if (clientID != null) {
cf.setClientID(clientID);
}
return cf;
}
}

View File

@ -90,14 +90,6 @@ public class StatQueue extends AbstractAction {
this.maxRows = maxRows;
}
public void setUser(String user) {
this.user = user;
}
public void setPassword(String password) {
this.password = password;
}
public void setverbose(boolean verbose) {
this.verbose = verbose;
}

View File

@ -0,0 +1,64 @@
/*
* 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.cli.test;
import java.io.File;
import org.apache.activemq.artemis.api.core.Pair;
import org.apache.activemq.artemis.api.core.management.ActiveMQServerControl;
import org.apache.activemq.artemis.cli.Artemis;
import org.apache.activemq.artemis.cli.commands.Run;
import org.apache.activemq.artemis.cli.commands.messages.ConnectionAbstract;
import org.apache.activemq.artemis.core.server.ActiveMQServer;
import org.apache.activemq.artemis.core.server.management.ManagementContext;
import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory;
import org.junit.Assert;
import org.junit.Test;
public class RetryCLIClientIDTest extends CliTestBase {
@Test
public void testWrongUserAndPass() throws Exception {
try {
Run.setEmbedded(true);
File instance1 = new File(temporaryFolder.getRoot(), "instance_user");
System.setProperty("java.security.auth.login.config", instance1.getAbsolutePath() + "/etc/login.config");
Artemis.main("create", instance1.getAbsolutePath(), "--silent", "--no-autotune", "--no-web", "--no-amqp-acceptor", "--no-mqtt-acceptor", "--no-stomp-acceptor", "--no-hornetq-acceptor", "--user", "dumb", "--password", "dumber", "--require-login");
System.setProperty("artemis.instance", instance1.getAbsolutePath());
Object result = Artemis.internalExecute("run");
ActiveMQServer activeMQServer = ((Pair<ManagementContext, ActiveMQServer>) result).getB();
ActiveMQServerControl activeMQServerControl = activeMQServer.getActiveMQServerControl();
ConnectionTest test = new ConnectionTest();
test.setSilentInput(true);
test.setClientID("someClientID");
ActiveMQConnectionFactory cf = test.newCF();
Assert.assertEquals("someClientID", cf.getClientID());
} finally {
stopServer();
}
}
private class ConnectionTest extends ConnectionAbstract {
public ActiveMQConnectionFactory newCF() {
return createCoreConnectionFactory();
}
}
}