package com.cloudbees.plugins.credentials;
import com.cloudbees.plugins.credentials.domains.Domain;
import com.cloudbees.plugins.credentials.domains.DomainSpecification;
import com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl;
import com.gargoylesoftware.htmlunit.WebResponse;
import hudson.ExtensionList;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import org.junit.Rule;
import org.junit.Test;
import org.jvnet.hudson.test.JenkinsRule;
import static com.cloudbees.plugins.credentials.XmlMatchers.isSimilarToIgnoringPrivateAttrs;
import static org.junit.Assert.assertThat;
public class ViewCredentialsActionTest {
@Rule
public JenkinsRule j = new JenkinsRule();
@Test
public void smokes() throws Exception {
SystemCredentialsProvider.ProviderImpl system = ExtensionList.lookup(CredentialsProvider.class).get(
SystemCredentialsProvider.ProviderImpl.class);
CredentialsStore systemStore = system.getStore(j.getInstance());
List<Domain> domainList = new ArrayList<Domain>(systemStore.getDomains());
domainList.remove(Domain.global());
for (Domain d: domainList) {
systemStore.removeDomain(d);
}
List<Credentials> credentialsList = new ArrayList<Credentials>(systemStore.getCredentials(Domain.global()));
for (Credentials c: credentialsList) {
systemStore.removeCredentials(Domain.global(), c);
}
JenkinsRule.WebClient wc = j.createWebClient();
WebResponse response = wc.goTo("credentials/api/xml?depth=5", "application/xml").getWebResponse();
assertThat(response.getContentAsString(), isSimilarToIgnoringPrivateAttrs("<rootActionImpl>"
+ "<stores>"
+ "<system>"
+ "<domains>"
+ "<_>"
+ "<description>"
+ "Credentials that should be available irrespective of domain specification to requirements "
+ "matching."
+ "</description>"
+ "<displayName>Global credentials (unrestricted)</displayName>"
+ "<fullDisplayName>System » Global credentials (unrestricted)</fullDisplayName>"
+ "<fullName>system/_</fullName>"
+ "<global>true</global>"
+ "<urlName>_</urlName>"
+ "</_>"
+ "</domains>"
+ "</system>"
+ "</stores>"
+ "</rootActionImpl>"));
Random entropy = new Random();
String domainName = "test"+entropy.nextInt();
String domainDescription = "test description " + entropy.nextLong();
String credentialId = "test-id-" + entropy.nextInt();
String credentialDescription = "test-account-" + entropy.nextInt();
String credentialUsername = "test-user-" + entropy.nextInt();
systemStore.addDomain(new Domain(domainName, domainDescription, Collections.<DomainSpecification>emptyList()),
new UsernamePasswordCredentialsImpl(CredentialsScope.GLOBAL, credentialId,
credentialDescription, credentialUsername, "test-secret"));
response = wc.goTo("credentials/api/xml?depth=5", "application/xml").getWebResponse();
assertThat(response.getContentAsString(), isSimilarToIgnoringPrivateAttrs("<rootActionImpl>"
+ "<stores>"
+ "<system>"
+ "<domains>"
+ "<_>"
+ "<description>"
+ "Credentials that should be available irrespective of domain specification to requirements "
+ "matching."
+ "</description>"
+ "<displayName>Global credentials (unrestricted)</displayName>"
+ "<fullDisplayName>System » Global credentials (unrestricted)</fullDisplayName>"
+ "<fullName>system/_</fullName>"
+ "<global>true</global>"
+ "<urlName>_</urlName>"
+ "</_>"
+ "<" + domainName + ">"
+ "<credential>"
+ "<description>"+ credentialDescription +"</description>"
+ "<displayName>" + credentialUsername + "/****** (" + credentialDescription + ")</displayName>"
+ "<fullName>system/"+ domainName + "/" + credentialId + "</fullName>"
+ "<id>" + credentialId + "</id>"
+ "<typeName>Username with password</typeName>"
+ "</credential>"
+ "<description>"
+ domainDescription
+ "</description>"
+ "<displayName>" + domainName + "</displayName>"
+ "<fullDisplayName>System » " + domainName + "</fullDisplayName>"
+ "<fullName>system/" + domainName + "</fullName>"
+ "<global>false</global>"
+ "<urlName>" + domainName + "</urlName>"
+ "</" + domainName + ">"
+ "</domains>"
+ "</system>"
+ "</stores>"
+ "</rootActionImpl>"));
}
}