package org.ow2.choreos.ee.nodes.cm;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import org.junit.Before;
import org.junit.Test;
import org.ow2.choreos.ee.nodes.cm.NodeUpdater;
import org.ow2.choreos.ee.nodes.cm.UpdateHandler;
import org.ow2.choreos.nodes.datamodel.CloudNode;
import org.ow2.choreos.utils.SshNotConnected;
import org.ow2.choreos.utils.SshUtil;
import org.ow2.choreos.utils.SshWaiter;
public class NodeUpdaterTest {
private CloudNode node;
private SshUtil ssh;
private SshWaiter waiter;
@Before
public void setUp() throws Exception {
setNode();
setSsh();
}
private void setNode() {
node = new CloudNode();
node.setIp("192.168.56.101");
node.setUser("ubuntu");
node.setPrivateKey("ubuntu.pem");
}
private void setSsh() throws SshNotConnected {
ssh = mock(SshUtil.class);
waiter = mock(SshWaiter.class);
when(waiter.waitSsh(anyString(), anyString(), anyString(), anyInt())).thenReturn(ssh);
}
@Test
public void shouldRunChefSolo() throws Exception {
NodeUpdater updater = new NodeUpdater(node);
updater.sshWaiter = waiter;
updater.update();
verify(ssh).runCommand(NodeUpdater.CHEF_SOLO_COMMAND);
}
@Test
public void shouldInvokeHandlers() throws Exception {
UpdateHandler h1 = mock(UpdateHandler.class);
UpdateHandler h2 = mock(UpdateHandler.class);
NodeUpdater updater = new NodeUpdater(node);
updater.sshWaiter = waiter;
updater.addHandler(h1);
updater.addHandler(h2);
updater.update();
verify(ssh).runCommand(NodeUpdater.CHEF_SOLO_COMMAND);
verify(h1).handle();
verify(h2).handle();
}
}