/*
* Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.test.runner.api;
import static com.google.common.collect.Lists.newArrayList;
import static org.hamcrest.Matchers.arrayWithSize;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.not;
import static org.hamcrest.Matchers.nullValue;
import static org.junit.Assert.assertThat;
import static org.mockito.Matchers.anyObject;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.mule.runtime.module.extension.internal.loader.java.DefaultJavaExtensionModelLoader;
import org.mule.test.heisenberg.extension.HeisenbergExtension;
import org.mule.test.petstore.extension.PetStoreConnector;
import com.google.common.io.PatternFilenameFilter;
import java.io.File;
import java.util.Optional;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
public class ExtensionPluginMetadataGeneratorTestCase {
private static final String META_INF = "META-INF";
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
private Artifact heisenbergPlugin = new DefaultArtifact("org.mule.tests:mule-heisenberg-extension:1.0-SNAPSHOT");
private Artifact petStorePlugin = new DefaultArtifact("org.mule.tests:mule-petstore-extension:1.0-SNAPSHOT");
private DependencyResolver depResolver;
private ExtensionPluginMetadataGenerator generator;
@Before
public void before() throws Exception {
depResolver = mock(DependencyResolver.class);
ExtensionModelLoaderFinder finder = mock(ExtensionModelLoaderFinder.class);
when(finder.findLoaderByProperty(anyObject(), anyObject())).thenReturn(Optional.of(new DefaultJavaExtensionModelLoader()));
generator = new ExtensionPluginMetadataGenerator(temporaryFolder.newFolder(), finder);
}
@Test
public void scanningClassPathShouldNotIncludeSpringStuff() {
Class scanned = generator.scanForExtensionAnnotatedClasses(heisenbergPlugin, newArrayList(this.getClass()
.getProtectionDomain()
.getCodeSource()
.getLocation()));
assertThat(scanned, is(nullValue()));
}
@Test
public void generateExtensionManifestForTwoExtensionsInDifferentFolders() {
File heisenbergPluginFolder = generator.generateExtensionResources(heisenbergPlugin, HeisenbergExtension.class, depResolver);
File petStorePluginFolder = generator.generateExtensionResources(petStorePlugin, PetStoreConnector.class, depResolver);
assertThat(heisenbergPluginFolder, not(equalTo(petStorePluginFolder)));
}
@Test
public void generateExtensionMetadataForTwoExtensionsInDifferentFolders() throws Exception {
File heisenbergPluginFolder = generator.generateExtensionResources(heisenbergPlugin, HeisenbergExtension.class, depResolver);
File petStorePluginFolder = generator.generateExtensionResources(petStorePlugin, PetStoreConnector.class, depResolver);
generator.generateDslResources();
assertThat(listFiles(heisenbergPluginFolder, "heisenberg.xsd"), arrayWithSize(1));
assertThat(listFiles(heisenbergPluginFolder, "petstore.xsd"), arrayWithSize(0));
assertThat(listFiles(petStorePluginFolder, "heisenberg.xsd"), arrayWithSize(0));
assertThat(listFiles(petStorePluginFolder, "petstore.xsd"), arrayWithSize(1));
}
private String[] listFiles(File pluginResourcesFolder, String pattern) {
return new File(pluginResourcesFolder, META_INF).list(new PatternFilenameFilter(pattern));
}
}