/* * Copyright 2016 the original author or authors. * * This file is part of HotswapAgent. * * HotswapAgent is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 2 of the License, or (at your * option) any later version. * * HotswapAgent is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General * Public License for more details. * * You should have received a copy of the GNU General Public License along * with HotswapAgent. If not, see http://www.gnu.org/licenses/. */ package org.hotswap.agent.versions.matcher; import static org.junit.Assert.*; import java.io.IOException; import java.util.Collections; import java.util.HashSet; import java.util.Set; import org.hotswap.agent.annotation.Manifest; import org.hotswap.agent.annotation.Maven; import org.hotswap.agent.annotation.Name; import org.hotswap.agent.annotation.Versions; import org.hotswap.agent.versions.DeploymentInfo; import org.hotswap.agent.versions.ManifestInfo; import org.hotswap.agent.versions.MavenInfo; import org.hotswap.agent.versions.VersionMatchResult; import org.junit.Test; public class ManifestMatcherTest { /** 2016-04-19 10:50:30,770 ERROR [stderr] (MSC service thread 1-3) META-INF/maven/* /pom.properties FOUND: 2016-04-19 10:50:30,770 ERROR [stderr] (MSC service thread 1-3) [class path resource [META-INF/maven/org.apache.myfaces.core/myfaces-impl/pom.properties], class path resource [META-INF/maven/org.apache.myfaces.core.internal/myfaces-impl-shared/pom.properties]] 2016-04-19 10:50:30,770 ERROR [stderr] (MSC service thread 1-3) RESOURCE:class org.hotswap.agent.util.spring.io.loader.DefaultResourceLoader$ClassPathContextResource-->class path resource [META-INF/maven/org.apache.myfaces.core/myfaces-impl/pom.properties]----pom.properties 2016-04-19 10:50:30,770 ERROR [stderr] (MSC service thread 1-3) RESOURCE:class org.hotswap.agent.util.spring.io.loader.DefaultResourceLoader$ClassPathContextResource-->class path resource [META-INF/maven/org.apache.myfaces.core.internal/myfaces-impl-shared/pom.properties]----pom.properties 2016-04-19 10:50:30,772 ERROR [stderr] (MSC service thread 1-3) ARTIFACT_INFO:ArtifactInfo [maven=[MavenInfo [groupId=org.apache.myfaces.core, artifactId=myfaces-impl, version=2.2.9], MavenInfo [groupId=org.apache.myfaces.core.internal, artifactId=myfaces-impl-shared, version=2.2.9]], manifest=ManifestInfo [java.util.jar.Manifest@4fe5d570]] 2016-04-19 10:50:30,773 ERROR [stderr] (MSC service thread 1-3) PLUGIN_INFO:FAILED ---> AbstractMatcher [matchers=[MavenMatcher [groupId=org.apache.myfaces.core, artifactId=myfaces-api, includes=VersionRange [recommendedVersion=null, restrictions=[[2.2,)]], excludes=null], MavenMatcher [groupId=org.apache.myfaces.core, artifactId=myfaces-impl, includes=VersionRange [recommendedVersion=null, restrictions=[[2.2,)]], excludes=null], ManifestMatcher [properties={Bundle-Version=jh}, includes=VersionRange [recommendedVersion=null, restrictions=[[2.2,)]], excludes=null]], shouldApply=true] 201 * @throws IOException */ @Test public void testMatches() throws IOException { Set<MavenInfo> maven = new HashSet<MavenInfo>(); ManifestInfo manifest = new ManifestInfo(new java.util.jar.Manifest(this.getClass().getResourceAsStream("/org/hotswap/agent/versions/matcher/TEST.MF"))); DeploymentInfo info = new DeploymentInfo(maven, Collections.singleton(manifest)); System.err.println(info); PluginMatcher p = new PluginMatcher(MatchingPlugin.class); System.err.println(p); assertEquals("Matching",VersionMatchResult.MATCHED, p.matches(info)); } @Test public void testMatchesManifestEmptyLine() throws IOException { Set<MavenInfo> maven = new HashSet<MavenInfo>(); ManifestInfo manifest = new ManifestInfo(new java.util.jar.Manifest(this.getClass().getResourceAsStream("/org/hotswap/agent/versions/matcher/TEST_EMPTYLINE.MF"))); DeploymentInfo info = new DeploymentInfo(maven, Collections.singleton(manifest)); System.err.println(info); PluginMatcher p = new PluginMatcher(MatchingPlugin2.class); System.err.println(p); assertEquals("Matching",VersionMatchResult.MATCHED, p.matches(info)); } @Test public void testFails() throws IOException { Set<MavenInfo> maven = new HashSet<MavenInfo>(); ManifestInfo manifest = new ManifestInfo(new java.util.jar.Manifest(this.getClass().getResourceAsStream("/org/hotswap/agent/versions/matcher/TEST.MF"))); DeploymentInfo info = new DeploymentInfo(maven, Collections.singleton(manifest)); System.err.println(info); PluginMatcher p = new PluginMatcher(NotMatchingPlugin.class); assertEquals("Not Matching",VersionMatchResult.REJECTED, p.matches(info)); } @Test public void testFailedEmptyArtifactInfo() throws IOException { Set<MavenInfo> maven = new HashSet<MavenInfo>(); ManifestInfo manifest = new ManifestInfo(null); DeploymentInfo info = new DeploymentInfo(maven, Collections.singleton(manifest)); System.err.println(info); PluginMatcher p = new PluginMatcher(NotMatchingPlugin.class); assertEquals("Failed Matching",VersionMatchResult.REJECTED, p.matches(info)); } @Test public void testSkippedEmpty2() throws IOException { Set<MavenInfo> maven = new HashSet<MavenInfo>(); ManifestInfo manifest = new ManifestInfo(null); DeploymentInfo info = new DeploymentInfo(maven, Collections.singleton(manifest)); System.err.println(info); PluginMatcher p = new PluginMatcher(PluginMatcherTest.class); assertEquals("Skipped Matching",VersionMatchResult.SKIPPED, p.matches(info)); } @Test public void testSkipped() throws IOException { Set<MavenInfo> maven = new HashSet<MavenInfo>(); ManifestInfo manifest = new ManifestInfo(new java.util.jar.Manifest(this.getClass().getResourceAsStream("/org/hotswap/agent/versions/matcher/TEST.MF"))); DeploymentInfo info = new DeploymentInfo(maven, Collections.singleton(manifest)); System.err.println(info); PluginMatcher p = new PluginMatcher(PluginMatcherTest.class); assertEquals("Skipped Matching",VersionMatchResult.SKIPPED, p.matches(info)); } @Versions(// maven = { // @Maven(value = "[2.2,)", artifactId = "myfaces-api", groupId = "org.apache.myfaces.core"), // @Maven(value = "[2.2,)", artifactId = "myfaces-impl", groupId = "org.apache.myfaces.core")// }, // manifest = { // @Manifest(names = { @Name(key = Name.BundleSymbolicName, value = "org.apache.myfaces.core.impl"), @Name(key=Name.ImplementationVendor, value="The.*Apache.*Software.*Foundation") }, value = "[2.2,)")// }) private static class MatchingPlugin { } @Versions( manifest = { @Manifest(value="[2.0,)",versionName = Name.SpecificationVersion, names={ @Name(key=Name.ImplementationTitle,value="javax.el"), @Name(key=Name.ImplementationVendor, value="Apache.*Software.*Foundation") }) } ) private static class MatchingPlugin2 { } @Versions(// maven = { // @Maven(value = "[3.2,)", artifactId = "myfaces-api", groupId = "org.apache.myfaces.core"), // @Maven(value = "[3.2,)", artifactId = "myfaces-impl", groupId = "org.apache.myfaces.core")// }, // manifest = { // @Manifest(names = { @Name(key = Name.BundleSymbolicName, value = " org.apache.myfaces.core.impl") }, value = "[3.2,)")// }) private static class NotMatchingPlugin { } }