/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.ivy.plugins.resolver;
import java.io.File;
import java.util.Arrays;
import java.util.GregorianCalendar;
import org.apache.ivy.core.event.EventManager;
import org.apache.ivy.core.module.descriptor.DefaultDependencyDescriptor;
import org.apache.ivy.core.module.descriptor.DependencyDescriptor;
import org.apache.ivy.core.module.id.ModuleRevisionId;
import org.apache.ivy.core.resolve.ResolveData;
import org.apache.ivy.core.resolve.ResolveEngine;
import org.apache.ivy.core.resolve.ResolveOptions;
import org.apache.ivy.core.resolve.ResolvedModuleRevision;
import org.apache.ivy.core.settings.IvySettings;
import org.apache.ivy.core.settings.XmlSettingsParser;
import org.apache.ivy.core.sort.SortEngine;
/**
* Test for DualResolver
*/
public class DualResolverTest extends AbstractDependencyResolverTest {
private IvySettings _settings;
private ResolveEngine _engine;
private ResolveData _data;
private File _cache;
protected void setUp() throws Exception {
_settings = new IvySettings();
_engine = new ResolveEngine(_settings, new EventManager(), new SortEngine(_settings));
_cache = new File("build/cache");
_data = new ResolveData(_engine, new ResolveOptions());
_cache.mkdirs();
_settings.setDefaultCache(_cache);
}
public void testFromConf() throws Exception {
new XmlSettingsParser(_settings).parse(DualResolverTest.class
.getResource("dualresolverconf.xml"));
DependencyResolver resolver = _settings.getResolver("dualok");
assertNotNull(resolver);
assertTrue(resolver instanceof DualResolver);
DualResolver dual = (DualResolver) resolver;
assertNotNull(dual.getIvyResolver());
assertEquals("ivy", dual.getIvyResolver().getName());
assertNotNull(dual.getArtifactResolver());
assertEquals("artifact", dual.getArtifactResolver().getName());
resolver = _settings.getResolver("dualnotenough");
assertNotNull(resolver);
assertTrue(resolver instanceof DualResolver);
dual = (DualResolver) resolver;
assertNotNull(dual.getIvyResolver());
assertNull(dual.getArtifactResolver());
}
public void testFromBadConf() throws Exception {
try {
new XmlSettingsParser(_settings).parse(DualResolverTest.class
.getResource("dualresolverconf-bad.xml"));
fail("bad dual resolver configuration should raise exception");
} catch (Exception ex) {
// ok -> bad conf has raised an exception
}
}
public void testBad() throws Exception {
DualResolver dual = new DualResolver();
dual.setIvyResolver(new IBiblioResolver());
DefaultDependencyDescriptor dd = new DefaultDependencyDescriptor(
ModuleRevisionId.newInstance("org", "mod", "rev"), false);
try {
dual.getDependency(dd, _data);
fail("bad dual resolver configuration should raise exception");
} catch (Exception ex) {
// ok -> should have raised an exception
}
}
public void testResolve() throws Exception {
DualResolver dual = new DualResolver();
MockResolver ivyResolver = MockResolver.buildMockResolver(_settings, "ivy", true,
new GregorianCalendar(2005, 1, 20).getTime());
MockResolver artifactResolver = MockResolver.buildMockResolver(_settings, "artifact",
false, new GregorianCalendar(2005, 1, 20).getTime());
dual.setIvyResolver(ivyResolver);
dual.setArtifactResolver(artifactResolver);
DefaultDependencyDescriptor dd = new DefaultDependencyDescriptor(
ModuleRevisionId.newInstance("org", "mod", "rev"), false);
ResolvedModuleRevision rmr = dual.getDependency(dd, _data);
assertNotNull(rmr);
assertEquals(dual, rmr.getArtifactResolver());
assertEquals(Arrays.asList(new DependencyDescriptor[] {dd}), ivyResolver.askedDeps);
assertTrue(artifactResolver.askedDeps.isEmpty());
}
public void testResolveFromArtifact() throws Exception {
DualResolver dual = new DualResolver();
MockResolver ivyResolver = MockResolver.buildMockResolver(_settings, "ivy", false,
new GregorianCalendar(2005, 1, 20).getTime());
MockResolver artifactResolver = MockResolver.buildMockResolver(_settings, "artifact", true,
new GregorianCalendar(2005, 1, 20).getTime());
dual.setIvyResolver(ivyResolver);
dual.setArtifactResolver(artifactResolver);
DefaultDependencyDescriptor dd = new DefaultDependencyDescriptor(
ModuleRevisionId.newInstance("org", "mod", "rev"), false);
ResolvedModuleRevision rmr = dual.getDependency(dd, _data);
assertNotNull(rmr);
assertEquals(artifactResolver, rmr.getResolver());
assertEquals(Arrays.asList(new DependencyDescriptor[] {dd}), ivyResolver.askedDeps);
assertEquals(Arrays.asList(new DependencyDescriptor[] {dd}), artifactResolver.askedDeps);
}
public void testResolveFail() throws Exception {
DualResolver dual = new DualResolver();
MockResolver ivyResolver = MockResolver.buildMockResolver(_settings, "ivy", false,
new GregorianCalendar(2005, 1, 20).getTime());
MockResolver artifactResolver = MockResolver.buildMockResolver(_settings, "artifact",
false, new GregorianCalendar(2005, 1, 20).getTime());
dual.setIvyResolver(ivyResolver);
dual.setArtifactResolver(artifactResolver);
DefaultDependencyDescriptor dd = new DefaultDependencyDescriptor(
ModuleRevisionId.newInstance("org", "mod", "rev"), false);
ResolvedModuleRevision rmr = dual.getDependency(dd, _data);
assertNull(rmr);
assertEquals(Arrays.asList(new DependencyDescriptor[] {dd}), ivyResolver.askedDeps);
assertEquals(Arrays.asList(new DependencyDescriptor[] {dd}), artifactResolver.askedDeps);
}
}