/* * Copyright 2015 Open Networking Laboratory * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.onlab.stc; import org.junit.Test; import org.onlab.stc.MonitorLayout.Box; import java.io.IOException; import static org.junit.Assert.assertEquals; import static org.onlab.stc.CompilerTest.getStream; import static org.onlab.stc.CompilerTest.stageTestResource; import static org.onlab.stc.MonitorLayout.SLOT_WIDTH; import static org.onlab.stc.Scenario.loadScenario; /** * Tests of the monitor layout functionality. */ public class MonitorLayoutTest { private MonitorLayout layout; private Compiler getCompiler(String name) throws IOException { stageTestResource(name); Scenario scenario = loadScenario(getStream(name)); Compiler compiler = new Compiler(scenario); compiler.compile(); return compiler; } @Test public void basic() throws IOException { layout = new MonitorLayout(getCompiler("layout-basic.xml")); validate(layout, null, 0, 1, 5, 2); validate(layout, "a", 1, 1, 1, 1, 1, -SLOT_WIDTH / 2); validate(layout, "b", 2, 2, 1, 1, 0, 0); validate(layout, "f", 3, 3, 1); validate(layout, "g", 1, 1, 4, 1, 1, SLOT_WIDTH / 2); validate(layout, "c", 2, 1, 1); validate(layout, "d", 3, 2, 1); validate(layout, "e", 4, 3, 1); } @Test public void basicNest() throws IOException { layout = new MonitorLayout(getCompiler("layout-basic-nest.xml")); validate(layout, null, 0, 1, 6, 2); validate(layout, "a", 1, 1, 1, 1, 1, -SLOT_WIDTH / 2); validate(layout, "b", 2, 2, 1); validate(layout, "f", 3, 3, 1); validate(layout, "g", 1, 1, 5, 1); validate(layout, "c", 2, 1, 1); validate(layout, "gg", 3, 2, 3, 1); validate(layout, "d", 4, 1, 1); validate(layout, "e", 5, 2, 1); } @Test public void staggeredDependencies() throws IOException { layout = new MonitorLayout(getCompiler("layout-staggered-dependencies.xml")); validate(layout, null, 0, 1, 7, 4); validate(layout, "a", 1, 1, 1, 1, 1, -SLOT_WIDTH - SLOT_WIDTH / 2); validate(layout, "aa", 1, 1, 1, 1, 1, -SLOT_WIDTH / 2); validate(layout, "b", 2, 2, 1); validate(layout, "f", 3, 3, 1); validate(layout, "g", 1, 1, 5, 2, 1, +SLOT_WIDTH / 2); validate(layout, "c", 2, 1, 1); validate(layout, "gg", 3, 2, 3, 2); validate(layout, "d", 4, 1, 1); validate(layout, "dd", 4, 1, 1); validate(layout, "e", 5, 2, 1); validate(layout, "i", 6, 6, 1); } @Test public void deepNext() throws IOException { layout = new MonitorLayout(getCompiler("layout-deep-nest.xml")); validate(layout, null, 0, 1, 7, 6); validate(layout, "a", 1, 1, 1); validate(layout, "aa", 1, 1, 1); validate(layout, "b", 2, 2, 1); validate(layout, "f", 3, 3, 1); validate(layout, "g", 1, 1, 5, 2); validate(layout, "c", 2, 1, 1); validate(layout, "gg", 3, 2, 3, 2); validate(layout, "d", 4, 1, 1); validate(layout, "dd", 4, 1, 1); validate(layout, "e", 5, 2, 1); validate(layout, "i", 6, 6, 1); validate(layout, "g1", 1, 1, 6, 2); validate(layout, "g2", 2, 1, 5, 2); validate(layout, "g3", 3, 1, 4, 2); validate(layout, "u", 4, 1, 1); validate(layout, "v", 4, 1, 1); validate(layout, "w", 5, 2, 1); validate(layout, "z", 6, 3, 1); } private void validate(MonitorLayout layout, String name, int absoluteTier, int tier, int depth, int breadth) { Box b = layout.get(name); assertEquals("incorrect absolute tier", absoluteTier, b.absoluteTier()); assertEquals("incorrect tier", tier, b.tier()); assertEquals("incorrect depth", depth, b.depth()); assertEquals("incorrect breadth", breadth, b.breadth()); } private void validate(MonitorLayout layout, String name, int absoluteTier, int tier, int depth, int breadth, int top, int center) { validate(layout, name, absoluteTier, tier, depth, breadth); Box b = layout.get(name); assertEquals("incorrect top", top, b.top()); assertEquals("incorrect center", center, b.center()); } private void validate(MonitorLayout layout, String name, int absoluteTier, int tier, int depth) { validate(layout, name, absoluteTier, tier, depth, 1); } }