/** * Copyright 2015-2017 Linagora, Université Joseph Fourier, Floralis * * The present code is developed in the scope of the joint LINAGORA - * Université Joseph Fourier - Floralis research program and is designated * as a "Result" pursuant to the terms and conditions of the LINAGORA * - Université Joseph Fourier - Floralis research program. Each copyright * holder of Results enumerated here above fully & independently holds complete * ownership of the complete Intellectual Property rights applicable to the whole * of said Results, and may freely exploit it in any manner which does not infringe * the moral rights of the other copyright holders. * * 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 net.roboconf.dm.internal.utils; import java.io.File; import java.util.Map; import org.junit.Assert; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; import net.roboconf.core.Constants; import net.roboconf.core.internal.tests.TestApplication; import net.roboconf.core.model.RuntimeModelIo.InstancesLoadResult; import net.roboconf.core.model.beans.Application; import net.roboconf.core.model.beans.ApplicationTemplate; import net.roboconf.core.model.beans.Instance; import net.roboconf.core.model.beans.Instance.InstanceStatus; import net.roboconf.core.model.helpers.InstanceHelpers; import net.roboconf.dm.management.ManagedApplication; /** * @author Vincent Zurczak - Linagora */ public class ConfigurationUtilsTest { @Rule public TemporaryFolder folder = new TemporaryFolder(); private File dir; @Before public void resetConfiguration() throws Exception { this.dir = this.folder.newFolder(); } @Test public void testRestoreInstances_empty() throws Exception { TestApplication app = new TestApplication(); app.setDirectory( ConfigurationUtils.findApplicationDirectory( app.getName(), this.dir )); ManagedApplication ma = new ManagedApplication( app ); InstancesLoadResult ilr = ConfigurationUtils.restoreInstances( ma ); Assert.assertEquals( 0, ilr.getLoadErrors().size()); Assert.assertEquals( 0, ilr.getRootInstances().size()); } @Test public void testSaveAndRestoreInstances() throws Exception { // Save... TestApplication app = new TestApplication(); app.getMySqlVm().status( InstanceStatus.DEPLOYED_STARTED ); app.getMySqlVm().data.put( Instance.IP_ADDRESS, "192.168.1.12" ); app.getMySqlVm().data.put( Instance.MACHINE_ID, "xx45s5s645" ); app.getMySql().status( InstanceStatus.DEPLOYED_STOPPED ); app.getMySqlVm().data.put( Instance.APPLICATION_NAME, app.getName()); app.getTomcatVm().data.put( Instance.APPLICATION_NAME, app.getName()); app.setDirectory( ConfigurationUtils.findApplicationDirectory( app.getName(), this.dir )); ManagedApplication ma = new ManagedApplication( app ); ConfigurationUtils.saveInstances( ma ); // ... and restore... InstancesLoadResult ilr = ConfigurationUtils.restoreInstances( ma ); Assert.assertEquals( 0, ilr.getLoadErrors().size()); Application restoredApp = new Application( "test", null ); restoredApp.getRootInstances().addAll( ilr.getRootInstances()); // ... before comparing... Assert.assertEquals( app.getRootInstances().size(), restoredApp.getRootInstances().size()); Assert.assertEquals( InstanceHelpers.getAllInstances( app ).size(), InstanceHelpers.getAllInstances( restoredApp ).size()); for( Instance restoredInst : InstanceHelpers.getAllInstances( restoredApp )) { Instance inst = InstanceHelpers.findInstanceByPath( app, InstanceHelpers.computeInstancePath( restoredInst )); Assert.assertNotNull( inst ); Assert.assertEquals( inst.getName(), restoredInst.getName()); Assert.assertEquals( inst.channels, restoredInst.channels ); Assert.assertEquals( inst.getStatus(), restoredInst.getStatus()); Assert.assertEquals( inst.getComponent(), restoredInst.getComponent()); Assert.assertEquals( inst.overriddenExports.size(), restoredInst.overriddenExports.size()); Assert.assertEquals( inst.data.size(), restoredInst.data.size()); for( Map.Entry<String,String> entry : restoredInst.data.entrySet()) { Assert.assertTrue( inst.data.containsKey( entry.getKey())); Assert.assertEquals( inst.data.get( entry.getKey()), entry.getValue()); } } } @Test public void testFindTemplateDirectory() { File configurationDirectory = new File( "somewhere" ); ApplicationTemplate tpl = new ApplicationTemplate( "test" ); Assert.assertEquals( "test", ConfigurationUtils.findTemplateDirectory( tpl, configurationDirectory ).getName()); tpl.setQualifier( "v2" ); Assert.assertEquals( "test - v2", ConfigurationUtils.findTemplateDirectory( tpl, configurationDirectory ).getName()); } @Test public void testFindIcon_app() throws Exception { File configDir = this.folder.newFolder(); File appDir = ConfigurationUtils.findApplicationDirectory( "app", configDir ); File descDir = new File( appDir, Constants.PROJECT_DIR_DESC ); Assert.assertTrue( descDir.mkdirs()); File trickFile = new File( descDir, "directory.jpg" ); Assert.assertTrue( trickFile.mkdirs()); Assert.assertNull( ConfigurationUtils.findIcon( "app", null, configDir )); File singleJpgFile = new File( descDir, "whatever.jpg" ); Assert.assertTrue( singleJpgFile.createNewFile()); Assert.assertEquals( singleJpgFile, ConfigurationUtils.findIcon( "app", null, configDir )); File defaultFile = new File( descDir, "application.sVg" ); Assert.assertTrue( defaultFile.createNewFile()); Assert.assertEquals( defaultFile, ConfigurationUtils.findIcon( "app", null, configDir )); Assert.assertEquals( defaultFile, ConfigurationUtils.findIcon( "app", "", configDir )); } @Test public void testFindIcon_tpl() throws Exception { File configDir = this.folder.newFolder(); ApplicationTemplate tpl = new ApplicationTemplate( "app" ).qualifier( "v1" ); File appDir = ConfigurationUtils.findTemplateDirectory( tpl, configDir ); File descDir = new File( appDir, Constants.PROJECT_DIR_DESC ); Assert.assertTrue( descDir.mkdirs()); File trickFile = new File( descDir, "file.txt" ); Assert.assertTrue( trickFile.createNewFile()); Assert.assertNull( ConfigurationUtils.findIcon( "app", "v1", configDir )); File singleJpgFile = new File( descDir, "whatever.jpg" ); Assert.assertTrue( singleJpgFile.createNewFile()); Assert.assertEquals( singleJpgFile, ConfigurationUtils.findIcon( "app", "v1", configDir )); File defaultFile = new File( descDir, "application.sVg" ); Assert.assertTrue( defaultFile.createNewFile()); Assert.assertEquals( defaultFile, ConfigurationUtils.findIcon( "app", "v1", configDir )); Assert.assertNull( ConfigurationUtils.findIcon( "app", "", configDir )); Assert.assertNull( ConfigurationUtils.findIcon( "app", "v2", configDir )); } @Test public void testFindIcon_nullConfigDirectory() throws Exception { // In case we try to get an icon while the DM is reconfigured Assert.assertNull( ConfigurationUtils.findIcon( "app", "v1", null )); } @Test public void testLoadAndSaveApplicationBindings() throws Exception { File dir = this.folder.newFolder(); Application app = new TestApplication(); app.setDirectory( dir ); Assert.assertEquals( 0, app.getApplicationBindings().size()); ConfigurationUtils.loadApplicationBindings( app ); Assert.assertEquals( 0, app.getApplicationBindings().size()); app.bindWithApplication( "a1", "v11" ); app.bindWithApplication( "a1", "v11" ); app.bindWithApplication( "a1", "v12" ); app.bindWithApplication( "a2", "v2" ); ConfigurationUtils.saveApplicationBindings( app ); app = new TestApplication(); app.setDirectory( dir ); ConfigurationUtils.loadApplicationBindings( app ); Assert.assertEquals( 2, app.getApplicationBindings().size()); Assert.assertEquals( 2, app.getApplicationBindings().get( "a1" ).size()); Assert.assertEquals( 1, app.getApplicationBindings().get( "a2" ).size()); Assert.assertTrue( app.getApplicationBindings().get( "a1" ).contains( "v11" )); Assert.assertTrue( app.getApplicationBindings().get( "a1" ).contains( "v12" )); Assert.assertTrue( app.getApplicationBindings().get( "a2" ).contains( "v2" )); } }