private String writeExportedVariables( AbstractType type ) { StringBuilder sb = new StringBuilder(); for( Iterator<Map.Entry<String,ExportedVariable>> it=type.exportedVariables.entrySet().iterator(); it.hasNext(); ) { Map.Entry<String,ExportedVariable> entry = it.next(); sb.append( entry.getKey()); String variableValue = entry.getValue().getValue(); if( ! Utils.isEmptyOrWhitespaces( variableValue )) { sb.append( "=\"" ); sb.append( variableValue ); sb.append( "\"" ); } if( it.hasNext()) sb.append( ", " ); } return sb.toString(); }
String value = var.getValue().getValue(); if( localExportedVariables.containsKey( var.getKey())) localExportedVariables.put( var.getKey(), value );
String variableValue = entry.getValue().getValue(); if( result.containsKey( entry.getKey())) newVariables.put( entry.getKey(), variableValue );
@Test public void testParseExportedVariables_simpleListOfVariables() { Map<String,ExportedVariable> variables = VariableHelpers.parseExportedVariables( "key1 = value1, key2=value2 , key3 = value3 " ); Assert.assertEquals( 3, variables.size()); ExportedVariable var = variables.get( "key1" ); Assert.assertEquals( "value1", var.getValue()); Assert.assertFalse( var.isRandom()); var = variables.get( "key2" ); Assert.assertEquals( "value2", var.getValue()); Assert.assertFalse( var.isRandom()); var = variables.get( "key3" ); Assert.assertEquals( "value3", var.getValue()); Assert.assertFalse( var.isRandom()); }
@Test public void testParseExportedVariables_listWithMixedValues() { Map<String,ExportedVariable> variables = VariableHelpers.parseExportedVariables( "key1 = \"value1 is here\" , key2= value2, key3 = \"key33\", key4 = oops " ); Assert.assertEquals( 4, variables.size()); ExportedVariable var = variables.get( "key1" ); Assert.assertEquals( "value1 is here", var.getValue()); Assert.assertFalse( var.isRandom()); var = variables.get( "key2" ); Assert.assertEquals( "value2", var.getValue()); Assert.assertFalse( var.isRandom()); var = variables.get( "key3" ); Assert.assertEquals( "key33", var.getValue()); Assert.assertFalse( var.isRandom()); var = variables.get( "key4" ); Assert.assertEquals( "oops", var.getValue()); Assert.assertFalse( var.isRandom()); }
@Test public void testParseExportedVariables_variableWithComplexValue() { Map<String,ExportedVariable> variables = VariableHelpers.parseExportedVariables( "key1 = \"value1\"" ); Assert.assertEquals( 1, variables.size()); ExportedVariable var = variables.get( "key1" ); Assert.assertEquals( "value1", var.getValue()); Assert.assertFalse( var.isRandom()); variables = VariableHelpers.parseExportedVariables( " key1=\" value1 \" " ); Assert.assertEquals( 1, variables.size()); var = variables.get( "key1" ); Assert.assertEquals( " value1 ", var.getValue()); Assert.assertFalse( var.isRandom()); }
@Test public void testParseExportedVariables_listWithMixedValuesAndRandom() { Map<String,ExportedVariable> variables = VariableHelpers.parseExportedVariables( "key1 = \"value1 is here\" , random[port] key2= value2, key3 = \"key33\", key4 = oops " ); Assert.assertEquals( 4, variables.size()); ExportedVariable var = variables.get( "key1" ); Assert.assertEquals( "value1 is here", var.getValue()); Assert.assertFalse( var.isRandom()); var = variables.get( "key2" ); Assert.assertEquals( "value2", var.getValue()); Assert.assertTrue( var.isRandom()); Assert.assertEquals( RandomKind.PORT, var.getRandomKind()); var = variables.get( "key3" ); Assert.assertEquals( "key33", var.getValue()); Assert.assertFalse( var.isRandom()); var = variables.get( "key4" ); Assert.assertEquals( "oops", var.getValue()); Assert.assertFalse( var.isRandom()); } }
errors.add( new ModelError( RM_INVALID_RANDOM_KIND, component, unrecognized( exportedVariable.getRawKind()))); if( exportedVariable.getValue() != null ) errors.add( new ModelError( RM_NO_VALUE_FOR_RANDOM, component, variable( exportedVarName )));
@Test public void testLoadApplication_withCustomRoboconfVariables() throws Exception { File dir = TestUtils.findApplicationDirectory( "root-exporting-variables" ); Assert.assertTrue( dir.isDirectory()); ApplicationLoadResult alr = RuntimeModelIo.loadApplication( dir ); Assert.assertFalse( RoboconfErrorHelpers.containsCriticalErrors( alr.getLoadErrors())); Component appComponent = ComponentHelpers.findComponent( alr.getApplicationTemplate(), "App" ); Assert.assertNotNull( appComponent ); Assert.assertEquals( 5, appComponent.exportedVariables.size()); Assert.assertEquals( "$(ROBOCONF_INSTANCE_NAME)", appComponent.exportedVariables.get( "inst" ).getValue()); Assert.assertEquals( "$(ROBOCONF_INSTANCE_PATH)", appComponent.exportedVariables.get( "path" ).getValue()); Assert.assertEquals( "$(ROBOCONF_CLEAN_INSTANCE_PATH)", appComponent.exportedVariables.get( "clean_path" ).getValue()); Assert.assertEquals( "kikou $(ROBOCONF_CLEAN_REVERSED_INSTANCE_PATH)", appComponent.exportedVariables.get( "rev" ).getValue()); Assert.assertEquals( "$(ROBOCONF_COMPONENT_NAME)", appComponent.exportedVariables.get( "comp" ).getValue()); Instance appInstance = InstanceHelpers.findInstanceByPath( alr.getApplicationTemplate(), "/vm1/app" ); Assert.assertNotNull( appInstance ); Map<String,String> resolvedExportedVariables = InstanceHelpers.findAllExportedVariables( appInstance ); Assert.assertEquals( 5, appComponent.exportedVariables.size()); Assert.assertEquals( "app", resolvedExportedVariables.get( "App.inst" )); Assert.assertEquals( "/vm1/app", resolvedExportedVariables.get( "App.path" )); Assert.assertEquals( "vm1_app", resolvedExportedVariables.get( "App.clean_path" )); Assert.assertEquals( "kikou app_vm1", resolvedExportedVariables.get( "App.rev" )); Assert.assertEquals( "App", resolvedExportedVariables.get( "App.comp" )); }
@Test public void testComponentsWithInvalidRandomPorts() throws Exception { File f = TestUtils.findTestFile( "/configurations/invalid/component-with-invalid-random-port.graph" ); FromGraphDefinition fromDef = new FromGraphDefinition( f.getParentFile()); Graphs g = fromDef.buildGraphs( f ); Assert.assertEquals( 0, fromDef.getErrors().size()); Component comp2 = ComponentHelpers.findComponent( g, "comp2" ); Assert.assertNotNull( comp2 ); Assert.assertEquals( 3, comp2.exportedVariables.size()); Assert.assertNotNull( comp2.exportedVariables.get( "ip" )); Assert.assertNotNull( comp2.exportedVariables.get( "httpPort" )); Assert.assertNull( comp2.exportedVariables.get( "httpPort" ).getValue()); Assert.assertTrue( comp2.exportedVariables.get( "httpPort" ).isRandom()); Assert.assertEquals( RandomKind.PORT, comp2.exportedVariables.get( "httpPort" ).getRandomKind()); Assert.assertNotNull( comp2.exportedVariables.get( "ajpPort" )); Assert.assertNull( comp2.exportedVariables.get( "ajpPort" ).getValue()); Assert.assertTrue( comp2.exportedVariables.get( "ajpPort" ).isRandom()); Assert.assertNull( comp2.exportedVariables.get( "ajpPort" ).getRandomKind()); }
@Test public void testParseExportedVariables_simpleVariables() { Map<String,ExportedVariable> variables = VariableHelpers.parseExportedVariables( "key = value" ); Assert.assertEquals( 1, variables.size()); ExportedVariable var = variables.get( "key" ); Assert.assertEquals( "value", var.getValue()); Assert.assertFalse( var.isRandom()); variables = VariableHelpers.parseExportedVariables( "key=value" ); Assert.assertEquals( 1, variables.size()); var = variables.get( "key" ); Assert.assertEquals( "value", var.getValue()); Assert.assertFalse( var.isRandom()); variables = VariableHelpers.parseExportedVariables( "" ); Assert.assertEquals( 0, variables.size()); variables = VariableHelpers.parseExportedVariables( " " ); Assert.assertEquals( 0, variables.size()); variables = VariableHelpers.parseExportedVariables( "ip" ); Assert.assertEquals( 1, variables.size()); var = variables.get( "ip" ); Assert.assertNull( var.getValue()); Assert.assertFalse( var.isRandom()); }
@Test public void testExplodedExportsAndImports() throws Exception { File f = TestUtils.findTestFile( "/configurations/valid/only-component-4.graph" ); FromGraphDefinition fromDef = new FromGraphDefinition( f.getParentFile()); Graphs g = fromDef.buildGraphs( f ); Assert.assertEquals( 0, fromDef.getErrors().size()); Component tomcat = ComponentHelpers.findComponent( g, "tomcat" ); Assert.assertNotNull( tomcat ); Assert.assertEquals( 2, tomcat.exportedVariables.size()); Assert.assertNotNull( tomcat.exportedVariables.get( "db.port" )); Assert.assertEquals( "8080", tomcat.exportedVariables.get( "db.port" ).getValue()); Assert.assertNotNull( tomcat.exportedVariables.get( "db.ip" )); Assert.assertNull( tomcat.exportedVariables.get( "db.ip" ).getValue()); Component apache = ComponentHelpers.findComponent( g, "apache" ); Assert.assertNotNull( apache ); Assert.assertEquals( 2, apache.importedVariables.size()); Assert.assertNotNull( apache.importedVariables.get( "tomcat.port" )); Assert.assertTrue( apache.importedVariables.get( "tomcat.port" ).isOptional()); Assert.assertNotNull( apache.importedVariables.get( "tomcat.ip" )); Assert.assertFalse( apache.importedVariables.get( "tomcat.ip" ).isOptional()); }
@Test public void test_complexVariablesValues() throws Exception { File f = TestUtils.findTestFile( "/configurations/valid/component-with-complex-variables-values.graph" ); FromGraphDefinition fromDef = new FromGraphDefinition( f.getParentFile()); Graphs graphs = fromDef.buildGraphs( f ); Assert.assertEquals( 0, fromDef.getErrors().size()); Assert.assertEquals( 1, graphs.getRootComponents().size()); Component comp = graphs.getRootComponents().iterator().next(); Assert.assertEquals( 6, comp.exportedVariables.size()); ExportedVariable var = comp.exportedVariables.get( "key1" ); Assert.assertEquals( "value1", var.getValue()); Assert.assertFalse( var.isRandom()); var = comp.exportedVariables.get( "key2" ); Assert.assertEquals( "value2", var.getValue()); Assert.assertFalse( var.isRandom()); var = comp.exportedVariables.get( "key3" ); Assert.assertEquals( "this is key number 3", var.getValue()); Assert.assertFalse( var.isRandom()); var = comp.exportedVariables.get( "key4" ); Assert.assertEquals( "key4", var.getValue()); Assert.assertTrue( var.isRandom()); Assert.assertEquals( RandomKind.PORT, var.getRandomKind()); var = comp.exportedVariables.get( "key5" ); Assert.assertEquals( "key5", var.getValue()); Assert.assertFalse( var.isRandom()); var = comp.exportedVariables.get( "key6" ); Assert.assertEquals( " key; 6 ", var.getValue()); Assert.assertTrue( var.isRandom()); Assert.assertEquals( RandomKind.PORT, var.getRandomKind()); }
Assert.assertNull( comp1.exportedVariables.get( "port" ).getValue()); Assert.assertTrue( comp1.exportedVariables.get( "port" ).isRandom()); Assert.assertEquals( RandomKind.PORT, comp1.exportedVariables.get( "port" ).getRandomKind()); Assert.assertNull( comp2.exportedVariables.get( "httpPort" ).getValue()); Assert.assertTrue( comp2.exportedVariables.get( "httpPort" ).isRandom()); Assert.assertEquals( RandomKind.PORT, comp2.exportedVariables.get( "httpPort" ).getRandomKind()); Assert.assertNull( comp2.exportedVariables.get( "ajpPort" ).getValue()); Assert.assertTrue( comp2.exportedVariables.get( "ajpPort" ).isRandom()); Assert.assertEquals( RandomKind.PORT, comp2.exportedVariables.get( "ajpPort" ).getRandomKind()); Assert.assertEquals( "8959", comp3.exportedVariables.get( "ajpPort" ).getValue()); Assert.assertFalse( comp3.exportedVariables.get( "ajpPort" ).isRandom()); Assert.assertNull( comp3.exportedVariables.get( "ajpPort" ).getRandomKind());
Assert.assertEquals( 1, map.size()); Assert.assertTrue( map.containsKey( varName1 )); Assert.assertNull( map.get( varName1 ).getValue()); Assert.assertNull( map.get( varName1 ).getRandomKind()); Assert.assertFalse( map.get( varName1 ).isRandom()); map = ModelUtils.getExportedVariables( holder ); Assert.assertEquals( 1, map.size()); Assert.assertEquals( "5", map.get( varName1 ).getValue()); Assert.assertEquals( "5", map.get( varName1 ).getValue()); Assert.assertEquals( "5895", map.get( varName1 ).getValue()); Assert.assertTrue( map.containsKey( varName1 )); Assert.assertTrue( map.containsKey( varName2 )); Assert.assertNull( map.get( varName1 ).getValue()); Assert.assertNull( map.get( varName2 ).getValue()); Assert.assertEquals( 2, map.size()); Assert.assertTrue( map.containsKey( varName1 )); Assert.assertNull( map.get( varName1 ).getValue()); Assert.assertEquals( "587", map.get( varName2 ).getValue()); Assert.assertEquals( "abc", map.get( varName1 ).getValue()); Assert.assertEquals( "587", map.get( varName2 ).getValue()); Assert.assertEquals( 1, map.size()); Assert.assertTrue( map.containsKey( varName1 ));
Assert.assertNotNull( container1 ); Assert.assertNull( container1.getComponent().exportedVariables.get( "httpPort" ).getValue()); Assert.assertTrue( container1.getComponent().exportedVariables.get( "httpPort" ).isRandom()); Assert.assertEquals( RandomKind.PORT, container1.getComponent().exportedVariables.get( "httpPort" ).getRandomKind()); Assert.assertNull( container1.getComponent().exportedVariables.get( "ajpPort" ).getValue()); Assert.assertTrue( container1.getComponent().exportedVariables.get( "ajpPort" ).isRandom()); Assert.assertEquals( RandomKind.PORT, container1.getComponent().exportedVariables.get( "ajpPort" ).getRandomKind()); Assert.assertEquals( "test", container1.getComponent().exportedVariables.get( "config" ).getValue()); Assert.assertFalse( container1.getComponent().exportedVariables.get( "config" ).isRandom()); Assert.assertNull( container1.getComponent().exportedVariables.get( "config" ).getRandomKind()); Assert.assertNull( container1.getComponent().exportedVariables.get( "ip" ).getValue()); Assert.assertFalse( container1.getComponent().exportedVariables.get( "ip" ).isRandom()); Assert.assertNull( container1.getComponent().exportedVariables.get( "ip" ).getRandomKind()); Assert.assertNotNull( container2 ); Assert.assertNull( container2.getComponent().exportedVariables.get( "port" ).getValue()); Assert.assertTrue( container2.getComponent().exportedVariables.get( "port" ).isRandom()); Assert.assertEquals( RandomKind.PORT, container2.getComponent().exportedVariables.get( "port" ).getRandomKind()); Assert.assertNull( container2.getComponent().exportedVariables.get( "ip" ).getValue()); Assert.assertFalse( container2.getComponent().exportedVariables.get( "ip" ).isRandom()); Assert.assertNull( container2.getComponent().exportedVariables.get( "ip" ).getRandomKind());
Assert.assertEquals( readComponent.getName(), entry.getValue().getValue(), originalVar.getValue()); Assert.assertEquals( readComponent.getName(), entry.getValue().getRandomKind(), originalVar.getRandomKind()); Assert.assertEquals( readComponent.getName(), entry.getValue().isRandom(), originalVar.isRandom());
Assert.assertNull( child.getComponent().exportedVariables.get( "MySQL.port" )); Assert.assertNotNull( child.getComponent().exportedVariables.get( "port" )); Assert.assertNull( child.getComponent().exportedVariables.get( "port" ).getValue());