package org.ovirt.engine.core.bll.migration; import static org.junit.Assert.assertEquals; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import org.junit.Test; import org.ovirt.engine.core.common.migration.ConvergenceItem; import org.ovirt.engine.core.common.migration.ConvergenceItemWithStallingLimit; public class ConvergenceScheduleTest { private ConvergenceSchedule schedule = new ConvergenceSchedule(); @Test public void asMapEmpty() throws IOException { assertEquals(new ExpectedConvergence(), schedule.asMap()); } @Test public void asMapOneInit() throws IOException { schedule.addInitStep(new ConvergenceItem("action", 10)); assertEquals(new ExpectedConvergence().addInit("action", 10), schedule.asMap()); } @Test public void asMapTwoInits() throws IOException { schedule.addInitStep(new ConvergenceItem("action", 10)) .addInitStep(new ConvergenceItem("action2", 15)); assertEquals(new ExpectedConvergence().addInit("action", 10).addInit("action2", 15), schedule.asMap()); } @Test public void asMapOneConvItem() throws IOException { schedule.addStallingStep(new ConvergenceItemWithStallingLimit(8, "action", 10)); assertEquals(new ExpectedConvergence().addStalling(8, "action", 10), schedule.asMap()); } @Test public void asMapTwoConvItems() throws IOException { schedule.addStallingStep(new ConvergenceItemWithStallingLimit(8, "action", 10)) .addStallingStep(new ConvergenceItemWithStallingLimit(12, "action2", 12)); assertEquals(new ExpectedConvergence().addStalling(8, "action", 10).addStalling(12, "action2", 12), schedule.asMap()); } @Test public void asMapBoth() throws IOException { schedule.addInitStep(new ConvergenceItem("action", 10)) .addInitStep(new ConvergenceItem("action2", 15)) .addStallingStep(new ConvergenceItemWithStallingLimit(8, "action", 10)) .addStallingStep(new ConvergenceItemWithStallingLimit(12, "action2", 12)); Map<String, Object> expected = new ExpectedConvergence(). addInit("action", 10). addInit("action2", 15). addStalling(8, "action", 10). addStalling(12, "action2", 12); assertEquals(expected, schedule.asMap()); } private class ExpectedConvergence extends HashMap<String, Object> { private ExpectedConvergence() { put("init", new ArrayList<>()); put("stalling", new ArrayList<>()); } public ExpectedConvergence addInit(String name, Object... params) { ((List<Object>) get("init")).add(action(name, params)); return this; } public ExpectedConvergence addStalling(int limit, String name, Object... params) { Map<String, Object> withStalling = new HashMap<>(); withStalling.put("limit", limit); withStalling.put("action", action(name, params)); ((List<Object>) get("stalling")).add(withStalling); return this; } private Map<String, Object> action(String actionName, Object... actionParams) { Map<String, Object> action = new HashMap<>(); action.put("name", actionName); action.put("params", Arrays.asList(actionParams)); return action; } } }