package hudson.plugins.tfs.util;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import hudson.EnvVars;
import hudson.model.AbstractBuild;
import hudson.model.AbstractProject;
import hudson.model.Computer;
import hudson.model.TaskListener;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
@SuppressWarnings("unchecked")
public class BuildVariableResolverTest {
@Mock private AbstractProject<?, ?> project;
@Mock private Computer computer;
@Mock private AbstractBuild build;
@Before public void before() throws Exception {
MockitoAnnotations.initMocks(this);
}
@Test public void assertConstructorBuildUsesProject() throws IOException, InterruptedException {
when(build.getProject()).thenReturn(project);
new BuildVariableResolver(build, computer);
verify(build).getProject();
verifyZeroInteractions(project);
verifyZeroInteractions(computer);
}
@Test public void assertJobNameIsResolved() {
when(project.getName()).thenReturn("ThisIsAJob");
BuildVariableResolver resolver = new BuildVariableResolver(project, computer);
assertEquals("Variable resolution was incorrect", "ThisIsAJob", resolver.resolve("JOB_NAME"));
verifyZeroInteractions(computer);
}
@Test public void assertJobNameWithoutComputerIsResolved() {
when(project.getName()).thenReturn("ThisIsAJob");
BuildVariableResolver resolver = new BuildVariableResolver(project);
assertEquals("Variable resolution was incorrect", "ThisIsAJob", resolver.resolve("JOB_NAME"));
assertNull("Variable resolution was performed", resolver.resolve("NONE_EXISTING_KEY"));
}
@Test public void assertComputerEnvVarIsResolved() throws Exception {
EnvVars map = new EnvVars();
map.put("ENV_VAR", "This is an env var");
when(computer.getEnvironment()).thenReturn(map);
BuildVariableResolver resolver = new BuildVariableResolver(project, computer);
assertEquals("Variable resolution was incorrect", "This is an env var", resolver.resolve("ENV_VAR"));
verifyZeroInteractions(project);
}
@Test public void assertComputerUserNameIsResolved() throws Exception {
Map<Object, Object> map = new HashMap<Object, Object>();
map.put("user.name", "Other_user");
when(computer.getSystemProperties()).thenReturn(map);
BuildVariableResolver resolver = new BuildVariableResolver(project, computer);
assertEquals("Variable resolution was incorrect", "Other_user", resolver.resolve("USER_NAME"));
verifyZeroInteractions(project);
}
@Test public void assertNodeNameIsResolved() {
when(computer.getName()).thenReturn("AKIRA");
BuildVariableResolver resolver = new BuildVariableResolver(project, computer);
assertEquals("Variable resolution was incorrect", "AKIRA", resolver.resolve("NODE_NAME"));
verifyZeroInteractions(project);
}
/**
* Asserts that NODE_NAME works on the master computer, as the MasterComputer.getName() returns null.
*/
@Test public void assertMasterNodeNameIsResolved() {
when(computer.getName()).thenReturn("");
BuildVariableResolver resolver = new BuildVariableResolver(project, computer);
assertEquals("Variable resolution was incorrect", "MASTER", resolver.resolve("NODE_NAME"));
verifyZeroInteractions(project);
}
@Test public void assertNoComputeraDoesNotThrowNPEWhenResolvingNodeName() {
BuildVariableResolver resolver = new BuildVariableResolver(project);
assertNull("Variable resolution was incorrect", resolver.resolve("NODE_NAME"));
verifyZeroInteractions(project);
}
@Test public void assertBuildEnvVarIsResolved() throws Exception {
EnvVars map = new EnvVars();
map.put("BUILD_ID", "121212");
when(build.getProject()).thenReturn(project);
when(build.getEnvironment(TaskListener.NULL)).thenReturn(map);
BuildVariableResolver resolver = new BuildVariableResolver(build, computer);
assertEquals("Variable resolution was incorrect", "121212", resolver.resolve("BUILD_ID"));
verify(build).getEnvironment(TaskListener.NULL);
verifyZeroInteractions(project);
}
}