ContainerAuthentication needs "authenticated" built-in role.

git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@11597 71c3de6d-444a-0410-be80-ed276b4c234a
This commit is contained in:
kohsuke 2008-08-18 21:02:06 +00:00
parent 3907140d1c
commit f9486afebc
3 changed files with 111 additions and 4 deletions

View File

@ -38,6 +38,7 @@ public final class ContainerAuthentication implements Authentication {
if(request.isUserInRole(g))
l.add(new GrantedAuthorityImpl(g));
}
l.add(AUTHENTICATED);
authorities = l.toArray(new GrantedAuthority[l.size()]);
}
return authorities;
@ -67,7 +68,5 @@ public final class ContainerAuthentication implements Authentication {
return getPrincipal();
}
private static final GrantedAuthority[] ADMIN_AUTHORITY = {new GrantedAuthorityImpl("admin")};
// Acegi doesn't like empty array, so we need to set something
private static final GrantedAuthority[] NO_AUTHORITY = {new GrantedAuthorityImpl("authenticated")};
private static final GrantedAuthorityImpl AUTHENTICATED = new GrantedAuthorityImpl("authenticated");
}

View File

@ -1,6 +1,11 @@
package org.jvnet.hudson.test;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.gargoylesoftware.htmlunit.Page;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.ElementNotFoundException;
import hudson.model.FreeStyleProject;
import hudson.model.Hudson;
import hudson.model.Item;
@ -23,6 +28,7 @@ import java.io.IOException;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.List;
@ -189,12 +195,64 @@ public abstract class HudsonTestCase extends TestCase {
setJavaScriptEnabled(false);
}
/**
* Logs in to Hudson.
*/
public WebClient login(String username, String password) throws Exception {
HtmlPage page = goTo("login");
// page = (HtmlPage) page.getFirstAnchorByText("Login").click();
HtmlForm form = page.getFormByName("login");
form.getInputByName("j_username").setValueAttribute(username);
form.getInputByName("j_password").setValueAttribute(password);
form.submit(null);
return this;
}
/**
* Logs in to Hudson, by using the user name as the password.
*
* <p>
* See {@link HudsonTestCase#configureUserRealm()} for how the container is set up with the user names
* and passwords. All the test accounts have the same user name and password.
*/
public WebClient login(String username) throws Exception {
login(username,username);
return this;
}
public HtmlPage getPage(Item item) throws IOException, SAXException {
return getPage(item,"");
}
public HtmlPage getPage(Item item, String relative) throws IOException, SAXException {
return (HtmlPage)getPage("http://localhost:"+localPort+contextPath+item.getUrl()+relative);
return goTo(item.getUrl()+relative);
}
/**
* @deprecated
* This method expects a full URL. This method is marked as deprecated to warn you
* that you probably should be using {@link #goTo(String)} method, which accepts
* a relative path within the Hudson being tested. (IOW, if you really need to hit
* a website on the internet, there's nothing wrong with using this method.)
*/
public Page getPage(String url) throws IOException, FailingHttpStatusCodeException {
return super.getPage(url);
}
/**
* Requests a page within Hudson.
*
* @param relative
* Relative path within Hudson. Starts without '/'.
* For example, "job/test/" to go to a job top page.
*/
public HtmlPage goTo(String relative) throws IOException, SAXException {
return (HtmlPage)goTo(relative, "text/html");
}
public Page goTo(String relative, String expectedContentType) throws IOException, SAXException {
return super.getPage("http://localhost:"+localPort+contextPath+relative);
}
}
}

View File

@ -0,0 +1,50 @@
package hudson.bugs;
import org.jvnet.hudson.test.HudsonTestCase;
import org.jvnet.hudson.test.recipes.PresetData;
import org.jvnet.hudson.test.recipes.PresetData.DataSet;
import org.dom4j.io.DOMReader;
import org.dom4j.Document;
import org.dom4j.Element;
import hudson.model.Slave;
import hudson.model.Node.Mode;
import hudson.slaves.JNLPLauncher;
import hudson.slaves.RetentionStrategy;
import hudson.slaves.RetentionStrategy.Always;
import java.util.Collections;
import java.util.List;
import java.net.URL;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.xml.XmlPage;
import sun.management.resources.agent;
/**
* @author Kohsuke Kawaguchi
*/
public class JnlpAccessWithSecuredHudsonTest extends HudsonTestCase {
/**
* Creates a new slave that needs to be launched via JNLP.
*/
protected Slave createNewJnlpSlave(String name) throws Exception {
return new Slave(name,"",System.getProperty("java.io.tmpdir")+'/'+name,"2", Mode.NORMAL, "", new JNLPLauncher(), RetentionStrategy.INSTANCE);
}
@PresetData(DataSet.NO_ANONYMOUS_READACCESS)
public void test() throws Exception {
hudson.setSlaves(Collections.singletonList(createNewJnlpSlave("test")));
HudsonTestCase.WebClient wc = new WebClient();
HtmlPage p = wc.login("alice").goTo("computer/test/");
XmlPage jnlp = (XmlPage) wc.goTo("computer/test/slave-agent.jnlp","application/x-java-jnlp-file");
URL baseUrl = jnlp.getWebResponse().getUrl();
Document dom = new DOMReader().read(jnlp.getXmlDocument());
for( Element jar : (List<Element>)dom.selectNodes("//jar") ) {
URL url = new URL(baseUrl,jar.attributeValue("href"));
System.out.println(url);
}
}
}