Skip to content

Commit

Permalink
Merge pull request #6 from societe-generale/add_virtual_host
Browse files Browse the repository at this point in the history
Add RabbitMQ VirtualHost parameter
  • Loading branch information
FrogDevelopper committed May 16, 2019
2 parents 247bda7 + 0630482 commit 841695a
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -109,10 +109,10 @@ public void setToJson(boolean toJson) {
this.toJson = toJson;
}

public boolean getConversion(){return conversion;}
public boolean getConversion(){ return conversion; }

@DataBoundSetter
public void setConversion(boolean conversion) {this.conversion = conversion;}
public void setConversion(boolean conversion) { this.conversion = conversion; }

@Override
public boolean perform(AbstractBuild build, Launcher launcher, BuildListener listener) {
Expand Down Expand Up @@ -345,15 +345,17 @@ public static class RabbitConfig extends AbstractDescribableImpl<RabbitConfig> {
private boolean isSecure;
private String username;
private String password;
private String virtualHost = ConnectionFactory.DEFAULT_VHOST;

@DataBoundConstructor
public RabbitConfig(String name, String host, int port, String username, String password, boolean isSecure) {
public RabbitConfig(String name, String host, int port, String username, String password, boolean isSecure,String virtualHost) {
this.name = name;
this.host = host;
this.port = port;
this.isSecure = isSecure;
this.username = username;
this.password = password;
this.virtualHost = virtualHost;
}

public String getName() {
Expand All @@ -376,6 +378,8 @@ public String getPassword() {
return password;
}

public String getVirtualHost() { return virtualHost; }

public static String getDecodedPassword(String password) {
Secret decrypt = Secret.decrypt(password);

Expand All @@ -401,10 +405,11 @@ static RabbitConfig fromJSON(JSONObject jsonObject) {
String username = jsonObject.getString("username");
String password = jsonObject.getString("password");
boolean isSecure = jsonObject.getBoolean("isSecure");
String virtualHost = jsonObject.getString("virtualHost");

Secret secret = Secret.fromString(password);

return new RabbitConfig(name, host, port, username, secret.getEncryptedValue(), isSecure);
return new RabbitConfig(name, host, port, username, secret.getEncryptedValue(), isSecure, virtualHost);
}

@Override
Expand All @@ -429,7 +434,8 @@ public FormValidation doTestConnection(@QueryParameter("host") final String host
@QueryParameter("port") final String port,
@QueryParameter("username") final String username,
@QueryParameter("password") final String password,
@QueryParameter("isSecure") final String isSecure) {
@QueryParameter("isSecure") final String isSecure,
@QueryParameter("virtualHost") final String virtualHost) {
// https://jenkins.io/doc/developer/security/form-validation/
Jenkins.get().checkPermission(Jenkins.ADMINISTER);

Expand All @@ -439,7 +445,8 @@ public FormValidation doTestConnection(@QueryParameter("host") final String host
getDecodedPassword(password),
host,
Integer.parseInt(port),
Boolean.parseBoolean(isSecure)
Boolean.parseBoolean(isSecure),
virtualHost
);

try (Connection connection = connectionFactory.newConnection()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class RabbitMqFactory {
static ConnectionFactory mockConnectionFactory; // keep it, for test use
static RabbitTemplate mockRabbitTemplate; // keep it, for test use

static ConnectionFactory createConnectionFactory(String username, String password, String host, int port, boolean isSecure) throws GeneralSecurityException {
static ConnectionFactory createConnectionFactory(String username, String password, String host, int port, boolean isSecure,String virtualHost) throws GeneralSecurityException {

LOGGER.info("Initialisation Rabbit-MQ :\n\t-Host : {}\n\t-Port : {}\n\t-User : {}", host, port, username);

Expand All @@ -28,6 +28,7 @@ static ConnectionFactory createConnectionFactory(String username, String passwor
connectionFactory.setPort(port);
connectionFactory.setUsername(username);
connectionFactory.setPassword(password);
connectionFactory.setVirtualHost(virtualHost);

if (isSecure) {
connectionFactory.useSslProtocol();
Expand All @@ -49,7 +50,8 @@ static CachingConnectionFactory getCachingConnectionFactory(RabbitMqBuilder.Rabb
rabbitConfig.getDecodedPassword(),
rabbitConfig.getHost(),
rabbitConfig.getPort(),
rabbitConfig.getIsSecure()
rabbitConfig.getIsSecure(),
rabbitConfig.getVirtualHost()
);

return new CachingConnectionFactory(connectionFactory);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,13 @@
<f:checkbox/>
</f:entry>

<f:entry title="Virtual Host" field="virtualHost">
<f:textbox clazz="required" default="/"/>
</f:entry>

<f:validateButton
title="Test Connection" progress="Testing..."
method="testConnection" with="host,port,username,password,isSecure" checkMethod="post"/>
method="testConnection" with="host,port,username,password,isSecure,virtualHost" checkMethod="post"/>

<f:entry title="">
<div align="right">
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<div>
Define the virtual Host
</div>
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,7 @@
import fr.frogdevelopment.jenkins.plugins.mq.RabbitMqBuilder.Configs;
import fr.frogdevelopment.jenkins.plugins.mq.RabbitMqBuilder.RabbitConfig.RabbitConfigDescriptor;
import fr.frogdevelopment.jenkins.plugins.mq.RabbitMqBuilder.RabbitMqDescriptor;
import hudson.model.FreeStyleBuild;
import hudson.model.FreeStyleProject;
import hudson.model.ParameterValue;
import hudson.model.ParametersAction;
import hudson.model.StringParameterValue;
import hudson.model.*;
import hudson.util.FormValidation;
import hudson.util.ListBoxModel;
import net.sf.json.JSONArray;
Expand All @@ -35,7 +31,7 @@
// https://wiki.jenkins.io/display/JENKINS/Unit+Test
public class RabbitMqBuilderTest {

private static final RabbitConfig RABBIT_CONFIG = new RabbitConfig("rabbit-test", "roger-rabbit", 5672, "guest", "guest", false);
private static final RabbitConfig RABBIT_CONFIG = new RabbitConfig("rabbit-test", "roger-rabbit", 5672, "guest", "guest", false, "/");

@Rule
public JenkinsRule jenkinsRule = new JenkinsRule();
Expand Down Expand Up @@ -307,7 +303,7 @@ public void test_RabbitConfig_fromJSON() {
rabbitConfigJSON.put("username", "username_value");
rabbitConfigJSON.put("password", "password_value");
rabbitConfigJSON.put("isSecure", false);

rabbitConfigJSON.put("virtualHost", "/test");
// call
RabbitConfig rabbitConfig = RabbitConfig.fromJSON(rabbitConfigJSON);

Expand All @@ -318,6 +314,7 @@ public void test_RabbitConfig_fromJSON() {
Assertions.assertThat(rabbitConfig.getUsername()).isEqualTo(rabbitConfigJSON.getString("username"));
Assertions.assertThat(rabbitConfig.getDecodedPassword()).isEqualTo(rabbitConfigJSON.getString("password"));
Assertions.assertThat(rabbitConfig.getIsSecure()).isEqualTo(rabbitConfigJSON.getBoolean("isSecure"));
Assertions.assertThat(rabbitConfig.getVirtualHost()).isEqualTo(rabbitConfigJSON.getString("virtualHost"));
}

@Test
Expand All @@ -340,6 +337,7 @@ public void test_Configs_fromJSON_1_config() {
rabbitConfigJSON.put("username", "username_value");
rabbitConfigJSON.put("password", "password_value");
rabbitConfigJSON.put("isSecure", false);
rabbitConfigJSON.put("virtualHost", "/test");


JSONObject configsJSON = new JSONObject();
Expand All @@ -361,6 +359,7 @@ public void test_Configs_fromJSON_1_config() {
Assertions.assertThat(rabbitConfig.getUsername()).isEqualTo(rabbitConfigJSON.getString("username"));
Assertions.assertThat(rabbitConfig.getDecodedPassword()).isEqualTo(rabbitConfigJSON.getString("password"));
Assertions.assertThat(rabbitConfig.getIsSecure()).isEqualTo(rabbitConfigJSON.getBoolean("isSecure"));
Assertions.assertThat(rabbitConfig.getVirtualHost()).isEqualTo(rabbitConfigJSON.getString("virtualHost"));
}

@Test
Expand All @@ -373,6 +372,7 @@ public void test_Configs_fromJSON_n_configs() {
rabbitConfigJSON_1.put("username", "username_value1");
rabbitConfigJSON_1.put("password", "password_value1");
rabbitConfigJSON_1.put("isSecure", false);
rabbitConfigJSON_1.put("virtualHost", "/");

JSONObject rabbitConfigJSON_2 = new JSONObject();
rabbitConfigJSON_2.put("name", "name_value2");
Expand All @@ -381,6 +381,7 @@ public void test_Configs_fromJSON_n_configs() {
rabbitConfigJSON_2.put("username", "username_value2");
rabbitConfigJSON_2.put("password", "password_value2");
rabbitConfigJSON_2.put("isSecure", false);
rabbitConfigJSON_2.put("virtualHost", "/");

JSONArray rabbitConfigsJSONArray = new JSONArray();
rabbitConfigsJSONArray.add(rabbitConfigJSON_1);
Expand All @@ -405,14 +406,16 @@ public void test_Configs_fromJSON_n_configs() {
Assertions.assertThat(rabbitConfig_1.getUsername()).isEqualTo(rabbitConfigJSON_1.getString("username"));
Assertions.assertThat(rabbitConfig_1.getDecodedPassword()).isEqualTo(rabbitConfigJSON_1.getString("password"));
Assertions.assertThat(rabbitConfig_1.getIsSecure()).isEqualTo(rabbitConfigJSON_1.getBoolean("isSecure"));
Assertions.assertThat(rabbitConfig_1.getVirtualHost()).isEqualTo(rabbitConfigJSON_1.getString("virtualHost"));

RabbitConfig rabbitConfig_2 = configs.getRabbitConfigs().get(1);
Assertions.assertThat(rabbitConfig_2.getName()).isEqualTo(rabbitConfigJSON_2.getString("name"));
Assertions.assertThat(rabbitConfig_2.getHost()).isEqualTo(rabbitConfigJSON_2.getString("host"));
Assertions.assertThat(rabbitConfig_2.getPort()).isEqualTo(rabbitConfigJSON_2.getInt("port"));
Assertions.assertThat(rabbitConfig_2.getUsername()).isEqualTo(rabbitConfigJSON_2.getString("username"));
Assertions.assertThat(rabbitConfig_2.getDecodedPassword()).isEqualTo(rabbitConfigJSON_2.getString("password"));
Assertions.assertThat(rabbitConfig_2.getIsSecure()).isEqualTo(rabbitConfigJSON_1.getBoolean("isSecure"));
Assertions.assertThat(rabbitConfig_2.getIsSecure()).isEqualTo(rabbitConfigJSON_2.getBoolean("isSecure"));
Assertions.assertThat(rabbitConfig_2.getVirtualHost()).isEqualTo(rabbitConfigJSON_2.getString("virtualHost"));
}


Expand All @@ -425,14 +428,16 @@ public void test_RabbitConfigDescriptor_doTestConnection_isOpen_true() throws IO
String username = "username";
String password = "password";
String isSecure = "false";
String virtualHost = "/test";

// create mock
ConnectionFactory mockConnectionFactory = RabbitMqFactory.createConnectionFactory(
username,
host,
host,
Integer.parseInt(port),
false
false,
virtualHost
);
Connection connection = Mockito.mock(Connection.class);

Expand All @@ -441,7 +446,7 @@ public void test_RabbitConfigDescriptor_doTestConnection_isOpen_true() throws IO
Mockito.doReturn(true).when(connection).isOpen();

// call
FormValidation formValidation = rabbitConfigDescriptor.doTestConnection(host, port, username, password, isSecure);
FormValidation formValidation = rabbitConfigDescriptor.doTestConnection(host, port, username, password, isSecure,virtualHost);

// assertions
Assertions.assertThat(formValidation.kind).isEqualTo(FormValidation.Kind.OK);
Expand All @@ -457,14 +462,16 @@ public void test_RabbitConfigDescriptor_doTestConnection_isOpen_false() throws I
String username = "username";
String password = "password";
String isSecure = "false";
String virtualHost = "/test";

// create mock
ConnectionFactory mockConnectionFactory = RabbitMqFactory.createConnectionFactory(
username,
host,
host,
Integer.parseInt(port),
Boolean.parseBoolean(isSecure)
Boolean.parseBoolean(isSecure),
virtualHost
);
Connection connection = Mockito.mock(Connection.class);

Expand All @@ -473,7 +480,7 @@ public void test_RabbitConfigDescriptor_doTestConnection_isOpen_false() throws I
Mockito.doReturn(false).when(connection).isOpen();

// call
FormValidation formValidation = rabbitConfigDescriptor.doTestConnection(host, port, username, password, isSecure);
FormValidation formValidation = rabbitConfigDescriptor.doTestConnection(host, port, username, password, isSecure, virtualHost);

// assertions
Assertions.assertThat(formValidation.kind).isEqualTo(FormValidation.Kind.ERROR);
Expand All @@ -489,6 +496,7 @@ public void test_RabbitConfigDescriptor_doTestConnection_exception() throws IOEx
String username = "username";
String password = "password";
String isSecure = "false";
String virtualHost = "/test";

IOException exception_for_text = new IOException("Mocked exception for text");

Expand All @@ -498,14 +506,15 @@ public void test_RabbitConfigDescriptor_doTestConnection_exception() throws IOEx
host,
host,
Integer.parseInt(port),
Boolean.parseBoolean(isSecure)
Boolean.parseBoolean(isSecure),
virtualHost
);

// mock
Mockito.doThrow(exception_for_text).when(mockConnectionFactory).newConnection();

// call
FormValidation formValidation = rabbitConfigDescriptor.doTestConnection(host, port, username, password, isSecure);
FormValidation formValidation = rabbitConfigDescriptor.doTestConnection(host, port, username, password, isSecure,virtualHost);

// assertions
Assertions.assertThat(formValidation.kind).isEqualTo(FormValidation.Kind.ERROR);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class RabbitMqFactory {
static RabbitTemplate mockRabbitTemplate;

static ConnectionFactory createConnectionFactory(String username, String password, String host, int port,
boolean isSecure) throws GeneralSecurityException {
boolean isSecure,String virtualHost) throws GeneralSecurityException {
if (mockConnectionFactory == null) {
LOGGER.info("Mocking ConnectionFactory");
mockConnectionFactory = Mockito.mock(ConnectionFactory.class);
Expand Down Expand Up @@ -45,7 +45,8 @@ static CachingConnectionFactory getCachingConnectionFactory(RabbitMqBuilder.Rabb
rabbitConfig.getDecodedPassword(),
rabbitConfig.getHost(),
rabbitConfig.getPort(),
rabbitConfig.getIsSecure()
rabbitConfig.getIsSecure(),
rabbitConfig.getVirtualHost()
);

return new CachingConnectionFactory(connectionFactory);
Expand Down

0 comments on commit 841695a

Please sign in to comment.