blob: 0d765ae21b79e77d74d5d4e7fab99fa6ebe660ba [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2011-2012, EBM WebSourcing
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* EBM WebSourcing - initial API and implementation
*******************************************************************************/
package org.eclipse.bpel.common.wsdl.importhelpers;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.Collection;
import java.util.Map;
import java.util.UUID;
import junit.framework.Assert;
import org.eclipse.bpel.common.wsdl.parsers.WsdlParser;
import org.eclipse.emf.common.util.URI;
import org.eclipse.wst.wsdl.Definition;
import org.junit.Test;
/**
* Tests the WSDL importer helper (import and update).
* @author Vincent Zurczak - EBM WebSourcing
*/
public class WsdlImportHelperTest {
/**
* Tests the import of a simple WSDL 1.1.
* @throws Exception
*/
@Test
public void testWsdlImport1() throws Exception {
File tmpDir = new File( System.getProperty( "java.io.tmpdir" ), UUID.randomUUID().toString());
Assert.assertTrue( tmpDir.mkdir());
try {
URL url = getClass().getResource( "/wsdls/test1/tuxDroid.wsdl" );
Map<String,File> map = new WsdlImportHelper().importWsdlOrXsdAndDependencies( tmpDir, url.toString());
Assert.assertEquals( map.size(), 1 );
Assert.assertEquals( tmpDir.listFiles().length, 1 );
File f = map.values().iterator().next();
Assert.assertNotNull( f );
Assert.assertEquals( f.getName(), "tuxDroid.wsdl" );
testWsdlParsing( f, 1 );
} finally {
deleteFilesRecursively( tmpDir );
Assert.assertFalse( tmpDir.exists());
}
}
/**
* Tests the import of a simple WSDL 1.1 with name conflict.
* @throws Exception
*/
@Test
public void testWsdlImport2() throws Exception {
File tmpDir = new File( System.getProperty( "java.io.tmpdir" ), UUID.randomUUID().toString());
Assert.assertTrue( tmpDir.mkdir());
try {
// First import: OK
URL url = getClass().getResource( "/wsdls/test1/tuxDroid.wsdl" );
Map<String,File> map = new WsdlImportHelper().importWsdlOrXsdAndDependencies( tmpDir, url.toString());
Assert.assertEquals( map.size(), 1 );
File f = map.values().iterator().next();
Assert.assertNotNull( f );
Assert.assertEquals( f.getName(), "tuxDroid.wsdl" );
testWsdlParsing( f, 1 );
// Second import: should be renamed
map = new WsdlImportHelper().importWsdlOrXsdAndDependencies( tmpDir, url.toString());
Assert.assertEquals( map.size(), 1 );
Assert.assertEquals( tmpDir.listFiles().length, 2 );
f = map.values().iterator().next();
Assert.assertNotNull( f );
Assert.assertNotSame( f.getName(), "tuxDroid.wsdl" );
testWsdlParsing( f, 1 );
} finally {
deleteFilesRecursively( tmpDir );
Assert.assertFalse( tmpDir.exists());
}
}
/**
* Tests the import of a simple WSDL 2.0.
* @throws Exception
*/
@Test
public void testWsdlImport3() throws Exception {
File tmpDir = new File( System.getProperty( "java.io.tmpdir" ), UUID.randomUUID().toString());
Assert.assertTrue( tmpDir.mkdir());
try {
URL url = getClass().getResource( "/wsdls/test2/testwsdl20.wsdl" );
Map<String,File> map = new WsdlImportHelper().importWsdlOrXsdAndDependencies( tmpDir, url.toString());
Assert.assertEquals( map.size(), 1 );
Assert.assertEquals( tmpDir.listFiles().length, 1 );
File f = map.values().iterator().next();
Assert.assertNotNull( f );
Assert.assertEquals( f.getName(), "testwsdl20.wsdl" );
} finally {
deleteFilesRecursively( tmpDir );
Assert.assertFalse( tmpDir.exists());
}
}
/**
* Tests the import of a WSDL 1.1 which imports a XSD (same level).
* @throws Exception
*/
@Test
public void testWsdlImport4() throws Exception {
File tmpDir = new File( System.getProperty( "java.io.tmpdir" ), UUID.randomUUID().toString());
Assert.assertTrue( tmpDir.mkdir());
try {
URL url = getClass().getResource( "/wsdls/test3/To.wsdl" );
Map<String,File> map = new WsdlImportHelper().importWsdlOrXsdAndDependencies( tmpDir, url.toString());
Assert.assertEquals( map.size(), 2 );
Assert.assertEquals( tmpDir.listFiles().length, 2 );
File f = map.get( url.toString());
Assert.assertNotNull( f );
testWsdlParsing( f, 1 );
} finally {
deleteFilesRecursively( tmpDir );
Assert.assertFalse( tmpDir.exists());
}
}
/**
* Tests the import of a WSDL 1.1 which imports a XSD (1 sub-level).
* @throws Exception
*/
@Test
public void testWsdlImport5() throws Exception {
File tmpDir = new File( System.getProperty( "java.io.tmpdir" ), UUID.randomUUID().toString());
Assert.assertTrue( tmpDir.mkdir());
try {
URL url = getClass().getResource( "/wsdls/test4/To.wsdl" );
Map<String,File> map = new WsdlImportHelper().importWsdlOrXsdAndDependencies( tmpDir, url.toString());
Assert.assertEquals( map.size(), 2 );
Assert.assertEquals( tmpDir.listFiles().length, 2 );
File level1Dir = new File( tmpDir, "level1" );
Assert.assertTrue( level1Dir.exists());
Assert.assertEquals( level1Dir.listFiles().length, 1 );
File f = map.get( url.toString());
Assert.assertNotNull( f );
testWsdlParsing( f, 1 );
} finally {
deleteFilesRecursively( tmpDir );
Assert.assertFalse( tmpDir.exists());
}
}
/**
* Tests the import of a WSDL 1.1 which imports a XSD (2 sub-levels).
* @throws Exception
*/
@Test
public void testWsdlImport6() throws Exception {
File tmpDir = new File( System.getProperty( "java.io.tmpdir" ), UUID.randomUUID().toString());
Assert.assertTrue( tmpDir.mkdir());
try {
URL url = getClass().getResource( "/wsdls/test5/To.wsdl" );
Map<String,File> map = new WsdlImportHelper().importWsdlOrXsdAndDependencies( tmpDir, url.toString());
Assert.assertEquals( map.size(), 2 );
Assert.assertEquals( tmpDir.listFiles().length, 2 );
File level2Dir = new File( tmpDir, "level1/level2" );
Assert.assertTrue( level2Dir.exists());
Assert.assertEquals( level2Dir.listFiles().length, 1 );
Assert.assertEquals( level2Dir.getParentFile().listFiles().length, 1 );
File f = map.get( url.toString());
Assert.assertNotNull( f );
testWsdlParsing( f, 1 );
} finally {
deleteFilesRecursively( tmpDir );
Assert.assertFalse( tmpDir.exists());
}
}
/**
* Tests the import of a WSDL 1.1 which imports several XSD (2 sub-levels).
* <p>
* And to limit the number of tests, these two XSDs import each other.
* This way, we can test the support of loops in the imports.
* </p>
*
* @throws Exception
*/
@Test
public void testWsdlImport7() throws Exception {
File tmpDir = new File( System.getProperty( "java.io.tmpdir" ), UUID.randomUUID().toString());
Assert.assertTrue( tmpDir.mkdir());
try {
URL url = getClass().getResource( "/wsdls/test6/To.wsdl" );
Map<String,File> map = new WsdlImportHelper().importWsdlOrXsdAndDependencies( tmpDir, url.toString());
Assert.assertEquals( map.size(), 3 );
Assert.assertEquals( tmpDir.listFiles().length, 2 );
File level2Dir = new File( tmpDir, "level1/level2" );
Assert.assertTrue( level2Dir.exists());
Assert.assertEquals( level2Dir.listFiles().length, 1 );
Assert.assertEquals( level2Dir.getParentFile().listFiles().length, 2 );
File f = map.get( url.toString());
Assert.assertNotNull( f );
testWsdlParsing( f, 1 );
} finally {
deleteFilesRecursively( tmpDir );
Assert.assertFalse( tmpDir.exists());
}
}
/**
* Tests the import of a XSD with an import of another XSD (upper-level => the import will be relocated).
* @throws Exception
*/
@Test
public void testWsdlImport8() throws Exception {
File tmpDir = new File( System.getProperty( "java.io.tmpdir" ), UUID.randomUUID().toString());
Assert.assertTrue( tmpDir.mkdir());
try {
URL url = getClass().getResource( "/wsdls/test6/level1/level2/To_schema1.xsd" );
Map<String,File> map = new WsdlImportHelper().importWsdlOrXsdAndDependencies( tmpDir, url.toString());
Assert.assertEquals( map.size(), 2 );
Assert.assertEquals( tmpDir.listFiles().length, 2 );
File relocatedDir = new File( tmpDir, WsdlImportHelper.RELOCATED_DIRECTORY );
Assert.assertTrue( relocatedDir.exists());
Assert.assertEquals( relocatedDir.listFiles().length, 1 );
} finally {
deleteFilesRecursively( tmpDir );
Assert.assertFalse( tmpDir.exists());
}
}
/**
* Tests the import of a XSD with an import of another XSD (sub-level).
* @throws Exception
*/
@Test
public void testWsdlImport9() throws Exception {
File tmpDir = new File( System.getProperty( "java.io.tmpdir" ), UUID.randomUUID().toString());
Assert.assertTrue( tmpDir.mkdir());
try {
URL url = getClass().getResource( "/wsdls/test6/level1/To_schema2.xsd" );
Map<String,File> map = new WsdlImportHelper().importWsdlOrXsdAndDependencies( tmpDir, url.toString());
Assert.assertEquals( map.size(), 2 );
Assert.assertEquals( tmpDir.listFiles().length, 2 );
File level2Dir = new File( tmpDir, "level2" );
Assert.assertTrue( level2Dir.exists());
Assert.assertEquals( level2Dir.listFiles().length, 1 );
} finally {
deleteFilesRecursively( tmpDir );
Assert.assertFalse( tmpDir.exists());
}
}
/**
* Tests a WSDL 1.1 which imports a WSDL and a XML schema (same level).
* @throws Exception
*/
@Test
public void testWsdlImport10() throws Exception {
File tmpDir = new File( System.getProperty( "java.io.tmpdir" ), UUID.randomUUID().toString());
Assert.assertTrue( tmpDir.mkdir());
try {
URL url = getClass().getResource( "/wsdls/test7/ToConcrete.wsdl" );
Map<String,File> map = new WsdlImportHelper().importWsdlOrXsdAndDependencies( tmpDir, url.toString());
Assert.assertEquals( map.size(), 3 );
Assert.assertEquals( tmpDir.listFiles().length, 3 );
File f = map.get( url.toString());
Assert.assertNotNull( f );
Assert.assertEquals( f.getName(), "ToConcrete.wsdl" );
testWsdlParsing( f, 2 );
} finally {
deleteFilesRecursively( tmpDir );
Assert.assertFalse( tmpDir.exists());
}
}
/**
* Tests a WSDL 1.1 which imports a WSDL and a XML schema (same level).
* <p>
* There is a cyclic import in the WSDL.
* </p>
*
* @throws Exception
*/
@Test
public void testWsdlImport11() throws Exception {
File tmpDir = new File( System.getProperty( "java.io.tmpdir" ), UUID.randomUUID().toString());
Assert.assertTrue( tmpDir.mkdir());
try {
URL url = getClass().getResource( "/wsdls/test8/ToConcrete.wsdl" );
Map<String,File> map = new WsdlImportHelper().importWsdlOrXsdAndDependencies( tmpDir, url.toString());
Assert.assertEquals( map.size(), 3 );
Assert.assertEquals( tmpDir.listFiles().length, 3 );
File f = map.get( url.toString());
Assert.assertNotNull( f );
Assert.assertEquals( f.getName(), "ToConcrete.wsdl" );
testWsdlParsing( f, 2 );
for( File ff : map.values()) {
int index = ff.getName().lastIndexOf( '.' );
Assert.assertTrue( index != -1 );
String ext = ff.getName().substring( index ).toLowerCase();
assertTrue( ".wsdl".equals( ext ) || ".xsd".equals( ext ));
}
} finally {
deleteFilesRecursively( tmpDir );
Assert.assertFalse( tmpDir.exists());
}
}
/**
* Tests a WSDL 1.1 which imports a XML schema defined in the same file.
* <p>
* It means the WSDL has two <i>types</i> elements but with a different target name space.
* </p>
*
* @throws Exception
*/
@Test
public void testWsdlImport12() throws Exception {
File tmpDir = new File( System.getProperty( "java.io.tmpdir" ), UUID.randomUUID().toString());
Assert.assertTrue( tmpDir.mkdir());
try {
URL url = getClass().getResource( "/wsdls/test9/GetQuantityAndSendOrder.wsdl" );
Map<String,File> map = new WsdlImportHelper().importWsdlOrXsdAndDependencies( tmpDir, url.toString());
Assert.assertEquals( map.size(), 1 );
Assert.assertEquals( tmpDir.listFiles().length, 1 );
File f = map.get( url.toString());
Assert.assertNotNull( f );
Assert.assertEquals( f.getName(), "GetQuantityAndSendOrder.wsdl" );
testWsdlParsing( f, 1 );
} finally {
deleteFilesRecursively( tmpDir );
Assert.assertFalse( tmpDir.exists());
}
}
/**
* Tests a WSDL 1.1 on a remote server (renaming test).
* @throws Exception
*/
@Test
public void testWsdlImport13() throws Exception {
File tmpDir = new File( System.getProperty( "java.io.tmpdir" ), UUID.randomUUID().toString());
Assert.assertTrue( tmpDir.mkdir());
try {
URL url = new URL( "http://footballpool.dataaccess.eu/data/info.wso?WSDL" );
Map<String,File> map = new WsdlImportHelper().importWsdlOrXsdAndDependencies( tmpDir, url.toString());
Assert.assertEquals( map.size(), 1 );
Assert.assertEquals( tmpDir.listFiles().length, 1 );
File f = map.get( url.toString());
Assert.assertNotNull( f );
Assert.assertEquals( f.getName(), "info-wso.wsdl" );
testWsdlParsing( f, 1 );
} finally {
deleteFilesRecursively( tmpDir );
Assert.assertFalse( tmpDir.exists());
}
}
/**
* Deletes files recursively.
* @param files the files to delete
* @throws IOException if a file could not be deleted
*/
private static void deleteFilesRecursively( File... files ) throws IOException {
if( files == null )
return;
for( File file : files ) {
if( file.exists()) {
if( file.isDirectory())
deleteFilesRecursively( file.listFiles());
if( ! file.delete())
throw new IOException( file.getAbsolutePath() + " could not be deleted." );
}
}
}
/**
* Tests the parsing of an imported WSDL.
* @param wsdlUrl the WSDL URL
* @param expectedNumberOfDefinitions the number of definitions, including those found from import declarations
*/
private static void testWsdlParsing( File wsdlFile, int expectedNumberOfDefinitions ) {
// Parse the imported WSDL
URI emfUri = URI.createFileURI( wsdlFile.getAbsolutePath());
Definition def = WsdlParser.loadWsdlDefinition( emfUri, WsdlParser.createBasicResourceSetForWsdl());
Assert.assertNotNull( def );
// Check the imports
Collection<Definition> definitions = WsdlParser.loadAllWsdlDefinitions( emfUri, WsdlParser.createBasicResourceSetForWsdl());
Assert.assertEquals( definitions.size(), expectedNumberOfDefinitions );
}
}