package betsy.common.timeouts.timeout;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.NoSuchElementException;
import betsy.common.tasks.FileTasks;
import betsy.common.timeouts.calibration.CalibrationTimeout;
import betsy.common.timeouts.calibration.CalibrationTimeoutRepository;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
/**
* @author Christoph Broeker
* @version 1.0
*/
public class TimeoutsTest {
private File properties;
private String engine;
private String step;
private Integer value;
@BeforeClass
public static void setUpClass() {
String transitionFolder = "transition_folder";
File properties = new File("timeout.properties");
if (properties.exists()){
FileTasks.mkdirs(Paths.get(transitionFolder));
FileTasks.copyFileIntoFolder(properties.toPath(), Paths.get(transitionFolder));
FileTasks.deleteFile(properties.toPath());
}
}
@AfterClass
public static void tearDownClass() {
File properties = new File("timeout.properties");
FileTasks.deleteFile(properties.toPath());
String transitionFolder = "transition_folder";
Path currentRelativePath = Paths.get("");
if(Files.exists(Paths.get(transitionFolder))){
FileTasks.copyFilesInFolderIntoOtherFolder(Paths.get(transitionFolder), currentRelativePath);
FileTasks.deleteDirectory(Paths.get(transitionFolder));
}
}
@Before
public void setUp() throws Exception {
properties = new File("timeout.properties");
engine = "Ode";
step = "deploy";
value = 20_000;
}
@After
public void tearDown() throws Exception {
engine = null;
step = null;
value = null;
Files.deleteIfExists(properties.toPath());
properties = null;
}
@Test
public void testConstructor() throws Exception {
Timeouts timeouts = new Timeouts();
HashMap<String, Timeout> timeoutHashMap = timeouts.getAllTimeouts();
assertEquals("The number should conform with the number of timeouts in method 'addtimeouts'", 54, timeoutHashMap.size());
assertEquals("The keys should be equal.", "Tomcat.startup", timeoutHashMap.get("Tomcat.startup").getKey());
}
@Test
public void testConstructorWithOwnTimeouts() throws Exception {
StringBuilder key = new StringBuilder().append(engine).append(".").append(step);
Timeout timeout = new Timeout(engine, step, value);
ArrayList<Timeout> timeoutList = new ArrayList<>();
timeoutList.add(timeout);
Timeouts timeouts = new Timeouts(timeoutList);
HashMap<String, Timeout> timeoutHashMap = timeouts.getAllTimeouts();
assertEquals("The sizes should be equal.", timeoutList.size(), timeoutHashMap.size());
assertEquals("The keys should be equal.", key.toString(), timeoutHashMap.get(key.toString()).getKey());
}
@Test
public void testConstructorWithOwnProperties() throws Exception {
FileTasks.deleteFile(properties.toPath());
Timeout timeout = new Timeout(engine, step, value);
CalibrationTimeoutRepository.addCalibrationTimeout(new CalibrationTimeout(timeout));
CalibrationTimeoutRepository.writeAllCalibrationTimeoutsToProperties();
Timeouts timeouts = new Timeouts(properties.getName());
timeouts.readTimeoutProperties();
assertEquals("The keys should be equal.", timeout.getKey(), timeouts.getTimeout(timeout.getKey()).getKey());
assertEquals("The timeouts in ms should be equal.", timeout.getTimeoutInMs(), timeouts.getTimeout(timeout.getKey()).getTimeoutInMs());
}
@Test
public void testConstructorWithOwnPropertiesTimeouts() throws Exception {
FileTasks.deleteFile(properties.toPath());
Integer timeToRepetition = 500;
Timeout timeout = new Timeout(engine, step, value, timeToRepetition);
CalibrationTimeoutRepository.addCalibrationTimeout(new CalibrationTimeout(timeout));
CalibrationTimeoutRepository.writeAllCalibrationTimeoutsToProperties();
Timeout timeoutTest = new Timeout(engine, step, value, timeToRepetition);
ArrayList<Timeout> timeoutList = new ArrayList<>();
timeoutList.add(timeoutTest);
Timeouts timeouts = new Timeouts(timeoutList, properties.getName());
timeouts.readTimeoutProperties();
assertEquals("The keys should be equal.", timeoutTest.getKey(), timeouts.getTimeout(timeoutTest.getKey()).getKey());
assertEquals("The timeouts in ms should be equal.", timeoutTest.getTimeoutInMs(), timeouts.getTimeout(timeoutTest.getKey()).getTimeoutInMs());
}
@Test
public void testGetHashMap() throws Exception {
Timeout timeout = new Timeout(engine, step, value);
ArrayList<Timeout> timeoutList = new ArrayList<>();
timeoutList.add(timeout);
Timeouts timeouts = new Timeouts(timeoutList);
HashMap<String, Timeout> timeoutHashMap = timeouts.getAllTimeouts();
assertEquals("The sizes should be equal.", timeoutList.size(), timeoutHashMap.size());
assertEquals("The timeouts should be equal.", timeout, timeoutHashMap.get(engine + "." + step));
}
@Test
public void testGetTimeout() throws Exception {
StringBuilder key = new StringBuilder().append(engine).append(".").append(step);
Timeout timeout = new Timeout(engine, step, value);
ArrayList<Timeout> timeoutList = new ArrayList<>();
timeoutList.add(timeout);
Timeouts timeouts = new Timeouts(timeoutList);
Timeout timeoutTest = timeouts.getTimeout(key.toString());
assertEquals("The keys should be equal.", key.toString(), timeoutTest.getKey());
}
@Test(expected = NoSuchElementException.class)
public void testGetTimeoutNotExists() throws Exception {
Timeout timeout = new Timeout(engine, step, value);
ArrayList<Timeout> timeoutList = new ArrayList<>();
timeoutList.add(timeout);
Timeouts timeouts = new Timeouts(timeoutList);
timeouts.getTimeout("glassfish.deploy");
}
@Test
public void testGetAllTimeouts() throws Exception {
Timeout timeout = new Timeout(engine, step, value);
ArrayList<Timeout> timeoutList = new ArrayList<>();
timeoutList.add(timeout);
Timeouts timeouts = new Timeouts(timeoutList);
HashMap<String, Timeout> timeoutHashMap = timeouts.getAllTimeouts();
assertEquals("The sizes should be equal.", timeoutList.size(), timeoutHashMap.size());
}
@Test
public void testSetTimeout() throws Exception {
Integer timeToRepetition = 500;
Timeout timeout = new Timeout(engine, step, value, timeToRepetition);
ArrayList<Timeout> timeoutList = new ArrayList<>();
timeoutList.add(timeout);
value = 30_000;
timeToRepetition = 5_000;
timeout.setValue(value);
timeout.setTimeToRepetition(timeToRepetition);
Timeouts timeouts = new Timeouts(timeoutList);
timeouts.setTimeout(timeout);
Timeout testTimeout = timeouts.getTimeout(timeout.getKey());
assertEquals("The values in ms should be equal.", value, testTimeout.getTimeoutInMs(), 0);
assertEquals("The timeToRepetitions should be equal.", timeToRepetition, testTimeout.getTimeToRepetitionInMs(), 0);
}
@Test(expected = NoSuchElementException.class)
public void testSetTimeoutNotExists() throws Exception {
Timeout timeout = new Timeout(engine, step, value);
ArrayList<Timeout> timeoutList = new ArrayList<>();
timeoutList.add(timeout);
Timeouts timeouts = new Timeouts(timeoutList);
Timeout timeoutTest = new Timeout("glassfish", "deploy", 20_000, 3_000);
timeouts.setTimeout(timeoutTest);
}
}