/******************************************************************************* * * Copyright (c) 2012 GigaSpaces Technologies Ltd. All rights reserved * * 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.cloudifysource.usm; import java.io.File; import java.lang.reflect.InvocationTargetException; import java.util.List; import javax.activation.UnsupportedDataTypeException; import junit.framework.Assert; import org.cloudifysource.domain.Service; import org.cloudifysource.dsl.internal.ServiceReader; import org.cloudifysource.usm.dsl.UserInterfaceConverter; import org.junit.Test; import org.openspaces.ui.BarLineChart; import org.openspaces.ui.Unit; public class UserInterfaceConverterTest { private static final int NOMBER_OF_NON_DEFAULT_WIDGET_GROUPS = 8; private static final int DEFAULT_NUM_OF_WIDGETS = 2; private static final int NUMBER_OF_METRIC_GROUPS_AS_DEFINED_IN_GROOVY = 2; private static final String OVERRIDDEN_MATRIC_AXISY_NAME = "overrriddenYAxisMetric"; private static final String OVERRIDDEN_MATRIC_AXISY_WIDGET_GROUP_NAME = OVERRIDDEN_MATRIC_AXISY_NAME + " default name"; private static final String EXISTING_WIDGET_TESTING_GROUP_NAME = "TestingWidgetGroup"; private static final String SERVICE_FILES_BASE_DIR = "src/test/resources/userInterfaceConversionTestFiles/"; private static final String NO_WIDGETS_SERVICE_FILE_PATH = SERVICE_FILES_BASE_DIR + "service_with_metrics_no_widgets.groovy"; private static final String SERVICE_WITH_WIDGETS_FILE_PATH = SERVICE_FILES_BASE_DIR + "service_with_metrics_and_widgets.groovy"; /** * Since no widgets were defined in the UserInterface POJO, * default ones should be created. * @throws Exception */ @Test public void testConversionWithDefaultWidgets() throws Exception { Service wigetlessServiceFile = ServiceReader.readService(new File(NO_WIDGETS_SERVICE_FILE_PATH)); org.openspaces.ui.UserInterface convertedUserInterface = getConvertedObject(wigetlessServiceFile); //assert all the groups in the groovy are accounted for. Assert.assertEquals("Expected number of metric groups was not met." + " found " + convertedUserInterface.getMetricGroups().size() + " expected " + NUMBER_OF_METRIC_GROUPS_AS_DEFINED_IN_GROOVY , convertedUserInterface.getMetricGroups().size(), NUMBER_OF_METRIC_GROUPS_AS_DEFINED_IN_GROOVY); //each metric should have a widget group containing 2 widgets int totalNumOfMetrics = getTotalNumberOfMetrics(convertedUserInterface.getMetricGroups()); Assert.assertEquals("Expected number of widget groups was not met." + " found " + convertedUserInterface.getWidgetGroups().size() + " expected " + totalNumOfMetrics , convertedUserInterface.getWidgetGroups().size(), totalNumOfMetrics); for (org.openspaces.ui.WidgetGroup widgetGroup : convertedUserInterface.getWidgetGroups()) { //each metric should have 2 widgets. assert name as-well Assert.assertEquals("Expected number of widgets per widget group was not met." + widgetGroup.getName() + " group has " + widgetGroup.getWidgets().size() + "widgets, expecting " + DEFAULT_NUM_OF_WIDGETS , widgetGroup.getWidgets().size(), DEFAULT_NUM_OF_WIDGETS); } //extract to method test overrides by metric def assertOverriddenMetricAxisYUnitAndDefaultValues(convertedUserInterface); for (org.openspaces.ui.MetricGroup metricGroup : convertedUserInterface.getMetricGroups()) { for (Object metric : metricGroup.getMetrics()) { Assert.assertTrue("Not all metrices in the converted UserInterface object are null", metric instanceof String); } } } /** * Since no widgets were defined in the UserInterface POJO, * default ones should be created. * @throws Exception */ @Test public void testConversionWithExistingWidgets() throws Exception { Service widgetlessServiceFile = ServiceReader.readService(new File(SERVICE_WITH_WIDGETS_FILE_PATH)); org.openspaces.ui.UserInterface convertedUserInterface = getConvertedObject(widgetlessServiceFile); //assert all the groups in the groovy are accounted for. Assert.assertEquals("Expected number of metrics was not met." + " Found " + convertedUserInterface.getMetricGroups().size() + " expecting " + NUMBER_OF_METRIC_GROUPS_AS_DEFINED_IN_GROOVY, convertedUserInterface.getMetricGroups().size(), NUMBER_OF_METRIC_GROUPS_AS_DEFINED_IN_GROOVY); //assert the original number of widgets defined was not overridden by the default. Assert.assertEquals("Expected number of widget groups was not met. " + " Found " + convertedUserInterface.getWidgetGroups().size() + " expecting " + NOMBER_OF_NON_DEFAULT_WIDGET_GROUPS, convertedUserInterface.getWidgetGroups().size(), NOMBER_OF_NON_DEFAULT_WIDGET_GROUPS); //assert metric override via metrics was not used. assertMetricOverrideNotUsed(convertedUserInterface); for (org.openspaces.ui.MetricGroup metricGroup : convertedUserInterface.getMetricGroups()) { for (Object metric : metricGroup.getMetrics()) { Assert.assertTrue("Not all metrices in the converted UserInterface object are null", metric instanceof String); } } } private org.openspaces.ui.UserInterface getConvertedObject(final Service wigetlessServiceFile) throws IllegalAccessException, InvocationTargetException, UnsupportedDataTypeException { // final UserInterface ui = wigetlessServiceFile.getUserInterface(); // final OpenspacesDomainAdapter adapter = new OpenspacesDomainAdapter(); // //convert to openspaces ui object // org.openspaces.ui.UserInterface convertUserInterfaceObject = adapter.createOpenspacesUIObject(ui); // //convert to allow default ui option UserInterfaceConverter converter = new UserInterfaceConverter(); return converter.convertUserInterface(wigetlessServiceFile.getUserInterface()); } private void assertMetricOverrideNotUsed( final org.openspaces.ui.UserInterface convertedUserInterface) { for (org.openspaces.ui.WidgetGroup widgetGroup : convertedUserInterface.getWidgetGroups()) { String widgetGroupName = widgetGroup.getName(); for (org.openspaces.ui.Widget widget : widgetGroup.getWidgets()) { if (widget instanceof BarLineChart) { if (widgetGroupName.equals(EXISTING_WIDGET_TESTING_GROUP_NAME)) { //assert axis was not overridden Assert.assertTrue("expecting axisY Unit not to be overridden", ((BarLineChart) widget).getAxisYUnit().equals(Unit.REGULAR)); } } } } } private void assertOverriddenMetricAxisYUnitAndDefaultValues( final org.openspaces.ui.UserInterface convertedUserInterface) { for (org.openspaces.ui.WidgetGroup widgetGroup : convertedUserInterface.getWidgetGroups()) { String widgetGroupName = widgetGroup.getName(); for (org.openspaces.ui.Widget widget : widgetGroup.getWidgets()) { if (widget instanceof BarLineChart) { if (widgetGroupName.equals(OVERRIDDEN_MATRIC_AXISY_WIDGET_GROUP_NAME)) { //assert axis was overridden Assert.assertTrue("expecting axisY Unit to be overridden", ((BarLineChart) widget).getAxisYUnit().equals(Unit.PERCENTAGE)); } else { //The default axisY unit Assert.assertTrue("expecting axisY contain the default axisYUnit value", ((BarLineChart) widget).getAxisYUnit().equals(Unit.REGULAR)); } } } } } private int getTotalNumberOfMetrics(final List<org.openspaces.ui.MetricGroup> list) { int totalNumberOfMetrics = 0; for (org.openspaces.ui.MetricGroup metricGroup : list) { totalNumberOfMetrics += metricGroup.getMetrics().size(); } return totalNumberOfMetrics; } }