package jenkins.model;
import hudson.ExtensionList;
import hudson.cli.CLICommand;
import hudson.cli.CLICommandInvoker;
import hudson.cli.CreateNodeCommand;
import hudson.cli.DeleteNodeCommand;
import hudson.cli.GetNodeCommand;
import hudson.cli.UpdateNodeCommand;
import hudson.model.Node;
import hudson.slaves.DumbSlave;
import org.apache.tools.ant.filters.StringInputStream;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.jvnet.hudson.test.JenkinsRule;
import static org.mockito.Mockito.*;
public class NodeListenerTest {
@Rule public JenkinsRule j = new JenkinsRule();
private NodeListener mock;
@Before
public void setUp() {
mock = mock(NodeListener.class);
ExtensionList.lookup(NodeListener.class).add(mock);
}
@Test
public void crud() throws Exception {
DumbSlave slave = j.createSlave();
String xml = cli(new GetNodeCommand()).invokeWithArgs(slave.getNodeName()).stdout();
cli(new UpdateNodeCommand()).withStdin(new StringInputStream(xml)).invokeWithArgs(slave.getNodeName());
cli(new DeleteNodeCommand()).invokeWithArgs(slave.getNodeName());
cli(new CreateNodeCommand()).withStdin(new StringInputStream(xml)).invokeWithArgs("replica");
j.jenkins.getComputer("replica").doDoDelete();
verify(mock, times(2)).onCreated(any(Node.class));
verify(mock, times(1)).onUpdated(any(Node.class), any(Node.class));
verify(mock, times(2)).onDeleted(any(Node.class));
verifyNoMoreInteractions(mock);
}
private CLICommandInvoker cli(CLICommand cmd) {
return new CLICommandInvoker(j, cmd);
}
}