Skip to content

Commit

Permalink
Merge pull request #60 from lanwen/JENKINS-30242_fix
Browse files Browse the repository at this point in the history
[FIXES JENKINS-30242] don't cast object in converter to string
  • Loading branch information
Radosław Antoniuk committed Sep 4, 2015
2 parents b14eac4 + b5f5b18 commit 286a532
Show file tree
Hide file tree
Showing 2 changed files with 92 additions and 13 deletions.
35 changes: 22 additions & 13 deletions src/main/java/hudson/plugins/jira/JiraProjectProperty.java
Expand Up @@ -8,12 +8,15 @@
import hudson.util.CopyOnWriteList;
import net.sf.json.JSONObject;
import org.apache.commons.beanutils.Converter;
import org.kohsuke.accmod.Restricted;
import org.kohsuke.accmod.restrictions.NoExternalUse;
import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.Stapler;
import org.kohsuke.stapler.StaplerRequest;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
Expand Down Expand Up @@ -113,25 +116,31 @@ public boolean configure(StaplerRequest req, JSONObject formData) {
//Should check for existing handler etc, but since this is a dirty hack,
//we won't
Stapler.CONVERT_UTILS.deregister(java.net.URL.class);
Stapler.CONVERT_UTILS.register(new Converter() {
public Object convert(Class aClass, Object o) {
if (o == null || "".equals(o) || "null".equals(o)) {
return null;
}
try {
return new URL((String) o);
} catch (MalformedURLException e) {
LOGGER.warning(String.format("%s is not a valid URL.", o.toString()));
return null;
}
}
}, java.net.URL.class);
Stapler.CONVERT_UTILS.register(new EmptyFriendlyURLConverter(), java.net.URL.class);
//End hack

sites.replaceBy(req.bindJSONToList(JiraSite.class, formData.get("sites")));
save();
return true;
}

/**
* It's little hackish
*/
@Restricted(NoExternalUse.class)
public static class EmptyFriendlyURLConverter implements Converter {
public Object convert(Class aClass, Object o) {
if (o == null || "".equals(o) || "null".equals(o)) {
return null;
}
try {
return new URL(o.toString());
} catch (MalformedURLException e) {
LOGGER.log(Level.WARNING, "{0} is not a valid URL", o);
return null;
}
}
}
}

private static final Logger LOGGER = Logger
Expand Down
@@ -0,0 +1,70 @@
package hudson.plugins.jira;

import org.apache.commons.lang.StringUtils;
import org.hamcrest.Matchers;
import org.junit.Rule;
import org.junit.Test;
import org.jvnet.hudson.test.JenkinsRule;
import org.jvnet.hudson.test.WithoutJenkins;

import java.net.URL;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.nullValue;

/**
* @author lanwen (Merkushev Kirill)
*/
public class EmptyFriendlyURLConverterTest {

public static final String SOME_VALID_URL = "http://localhost/";

@Rule
public JenkinsRule jRule = new JenkinsRule();

@Test
@WithoutJenkins
public void shouldHandleURLClass() throws Exception {
URL someUrl = new URL(SOME_VALID_URL);
assertThat(new JiraProjectProperty.DescriptorImpl.EmptyFriendlyURLConverter()
.convert(URL.class, someUrl), Matchers.<Object>is(someUrl));
}

@Test
@WithoutJenkins
public void shouldHandleStringClass() throws Exception {
assertThat(new JiraProjectProperty.DescriptorImpl.EmptyFriendlyURLConverter()
.convert(URL.class, SOME_VALID_URL), Matchers.<Object>is(new URL(SOME_VALID_URL)));
}

@Test
@WithoutJenkins
public void shouldHandleNull() throws Exception {
assertThat(new JiraProjectProperty.DescriptorImpl.EmptyFriendlyURLConverter()
.convert(URL.class, null), nullValue());
}

@Test
@WithoutJenkins
public void shouldHandleEmptyString() throws Exception {
assertThat(new JiraProjectProperty.DescriptorImpl.EmptyFriendlyURLConverter()
.convert(URL.class, StringUtils.EMPTY), nullValue());
}

@Test
@WithoutJenkins
public void shouldHandleNullAsString() throws Exception {
assertThat(new JiraProjectProperty.DescriptorImpl.EmptyFriendlyURLConverter()
.convert(URL.class, "null"), nullValue());
}

/**
* Requires jenkins rule because of LOGGER usage starts descriptor creating
*/
@Test
public void shouldHandleMalformedUrlAsString() throws Exception {
assertThat(new JiraProjectProperty.DescriptorImpl.EmptyFriendlyURLConverter()
.convert(URL.class, "bla"), nullValue());
}

}

0 comments on commit 286a532

Please sign in to comment.