IVY-1474 : Ivy Bintray resolver (Thanks to Evgeny Goldin)
Project: http://git-wip-us.apache.org/repos/asf/ant-ivy/repo Commit: http://git-wip-us.apache.org/repos/asf/ant-ivy/commit/79cb7c62 Tree: http://git-wip-us.apache.org/repos/asf/ant-ivy/tree/79cb7c62 Diff: http://git-wip-us.apache.org/repos/asf/ant-ivy/diff/79cb7c62 Branch: refs/heads/2.4.x Commit: 79cb7c6270b37ee529336e61bd085176d7fd2ce5 Parents: 9651c29 Author: Nicolas LaleveÌe <[email protected]> Authored: Sat Dec 13 16:36:17 2014 +0100 Committer: Nicolas LaleveÌe <[email protected]> Committed: Sat Dec 13 16:39:42 2014 +0100 ---------------------------------------------------------------------- doc/release-notes.html | 3 + doc/resolver/bintray.html | 69 +++++ doc/toc.json | 7 + src/example/bintray/build.xml | 23 ++ src/example/bintray/ivy.xml | 31 +++ src/example/bintray/ivysettings.xml | 37 +++ .../apache/ivy/core/settings/typedef.properties | 1 + .../ivy/plugins/resolver/BintrayResolver.java | 81 ++++++ .../plugins/resolver/BintrayResolverTest.java | 261 +++++++++++++++++++ 9 files changed, 513 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/79cb7c62/doc/release-notes.html ---------------------------------------------------------------------- diff --git a/doc/release-notes.html b/doc/release-notes.html index 32647b0..c01f090 100644 --- a/doc/release-notes.html +++ b/doc/release-notes.html @@ -38,6 +38,7 @@ configurability, and tight integration with Apache Ant. Key features of this 2.4.0 release are * some new Ant tasks * improved OSGI support +* a Bintray resolver * numerous bug fixes as documented in Jira and in the release notes You can download this 2.4.0 release at: @@ -66,6 +67,7 @@ List of changes since Ivy 2.3.0: - NEW: Agent authentication for SSH and SFTP transports (IVY-1421) - NEW: New OSGi resolver 'osgi-agg': a chain resolver dedicated to better handle OSGi dependencies - NEW: Add support for "packed" artifacts: .pack.gz bundles in an OSGi P2 repository for instance +- NEW: Ivy Bintray resolver (IVY-1474) (Thanks to Evgeny Goldin) - IMPROVEMENT: Generate POMs with /xsd/maven-4.0.0.xsd reference instead of old /maven-v4_0_0.xsd (IVY-1491) (thanks to Hervé Boutemy) - IMPROVEMENT: Add support for packed jar within an OSGi bundle @@ -160,6 +162,7 @@ Here is the list of people who have contributed source code and documentation up <li>Jacob Grydholt Jensen</li> <li>John Gibson</li> <li>Mitch Gitman</li> +<li>Evgeny Goldin</li> <li>Scott Goldstein</li> <li>Pierre Hägnestrand</li> <li>Scott Hebert</li> http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/79cb7c62/doc/resolver/bintray.html ---------------------------------------------------------------------- diff --git a/doc/resolver/bintray.html b/doc/resolver/bintray.html new file mode 100644 index 0000000..aa5236b --- /dev/null +++ b/doc/resolver/bintray.html @@ -0,0 +1,69 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<!-- + 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. +--> +<html> +<head> + <script type="text/javascript">var xookiConfig = {level: 1};</script> + <script type="text/javascript" src="../xooki/xooki.js"></script> +</head> +<body> + <textarea id="xooki-source"> +<table class="resolver"> +<tr><td class="title">Tag</td><td class="value">bintray</td></tr> +<tr><td class="title">Handle latest</td><td class="value">yes, at least if the repository server is apache based</td></tr> +<tr><td class="title">Handle publish</td><td class="value">no</td></tr> +</table> + +<span class="tagdoc" id="ivysettings.resolvers.ibiblio">This resolver uses Bintray DaaS (Distribution as a Service) platform to retrieve artifacts.</span> + +<h1>Attributes</h1> +<table class="ivy-attributes"> +<thead> + <tr><th class="ivy-att">Attribute</th><th class="ivy-att-desc">Description</th><th class="ivy-att-req">Required</th></tr> +</thead> +<tbody> + <tr><td>subject</td><td>Bintray username of a repository owner.</td> + <td>No, defaults to JCenter</td></tr> + <tr><td>repo</td><td>User's repository name.</td> + <td>No, defaults to JCenter</td></tr> +</tbody> +</table> + +<h1>Examples</h1> +<code type="xml"> +<bintray /> +</code> + +A default, defines a <a href="https://bintray.com/bintray/jcenter">JCenter</a> (http://jcenter.bintray.com/) resolver. +In most circumstances you won't need any other resolvers as JCenter is already a super-set of many other repositories, including Maven Central. + +<hr/> + +<code type="xml"> +<bintray subject="dsowerby" repo="maven"/> +<bintray subject="igelgrun" repo="batrak"/> +</code> + +Defines two resolvers to use a <a href="https://bintray.com/dsowerby/maven">repository</a> "maven" of user "dsowerby" (https://dl.bintray.com/dsowerby/maven/) +and <a href="https://bintray.com/igelgrun/batrak">repository</a> "batrak" of user "igelgrun" (https://dl.bintray.com/igelgrun/batrak/). +</textarea> +<script type="text/javascript">xooki.postProcess();</script> +</body> +</html> + http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/79cb7c62/doc/toc.json ---------------------------------------------------------------------- diff --git a/doc/toc.json b/doc/toc.json index bff771f..55a0f21 100644 --- a/doc/toc.json +++ b/doc/toc.json @@ -409,6 +409,13 @@ "children": [ ] + }, + { + "id":"resolver/bintray", + "title":"Bintray Resolver", + "children": [ + + ] } ] }, http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/79cb7c62/src/example/bintray/build.xml ---------------------------------------------------------------------- diff --git a/src/example/bintray/build.xml b/src/example/bintray/build.xml new file mode 100644 index 0000000..c82359e --- /dev/null +++ b/src/example/bintray/build.xml @@ -0,0 +1,23 @@ +<!-- + 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. +--> +<project xmlns:ivy="antlib:org.apache.ivy.ant" name="ivy-bintray-example" default="retrieve"> + <target name="retrieve"> + <ivy:retrieve /> + </target> +</project> http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/79cb7c62/src/example/bintray/ivy.xml ---------------------------------------------------------------------- diff --git a/src/example/bintray/ivy.xml b/src/example/bintray/ivy.xml new file mode 100644 index 0000000..120a43b --- /dev/null +++ b/src/example/bintray/ivy.xml @@ -0,0 +1,31 @@ +<!-- + 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. +--> +<ivy-module version="2.0"> + <info organisation="org.apache" module="hello-ivy"/> + <dependencies> + <!-- https://jcenter.bintray.com/ --> + <dependency org="org.jfrog.artifactory.client" name="artifactory-cli" rev="1.0" /> + <dependency org="org.jfrog.artifactory.client" name="artifactory-cli" rev="1.0" /> + <dependency org="org.jfrog" name="build-info-api" rev="1.3.1" /> + <!-- https://dl.bintray.com/dsowerby/maven/ --> + <dependency org="uk.q3c.krail" name="krail" rev="0.7.0" /> + <!-- https://dl.bintray.com/igelgrun/batrak/ --> + <dependency org="igel.batrak" name="batrak-core" rev="0.1" /> + </dependencies> +</ivy-module> http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/79cb7c62/src/example/bintray/ivysettings.xml ---------------------------------------------------------------------- diff --git a/src/example/bintray/ivysettings.xml b/src/example/bintray/ivysettings.xml new file mode 100644 index 0000000..15adc16 --- /dev/null +++ b/src/example/bintray/ivysettings.xml @@ -0,0 +1,37 @@ +<!-- + 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. +--> +<ivysettings> + <settings defaultResolver="chain"/> + <resolvers> + <chain name="chain"> + + <!-- https://jcenter.bintray.com/ --> + <bintray /> + + <!-- https://bintray.com/dsowerby/maven --> + <!-- https://dl.bintray.com/dsowerby/maven/ --> + <bintray subject="dsowerby" repo="maven"/> + + <!-- https://bintray.com/igelgrun/batrak --> + <!-- https://dl.bintray.com/igelgrun/batrak/ --> + <bintray subject="igelgrun" repo="batrak"/> + + </chain> + </resolvers> +</ivysettings> http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/79cb7c62/src/java/org/apache/ivy/core/settings/typedef.properties ---------------------------------------------------------------------- diff --git a/src/java/org/apache/ivy/core/settings/typedef.properties b/src/java/org/apache/ivy/core/settings/typedef.properties index 230b928..ba140d2 100644 --- a/src/java/org/apache/ivy/core/settings/typedef.properties +++ b/src/java/org/apache/ivy/core/settings/typedef.properties @@ -19,6 +19,7 @@ filesystem = org.apache.ivy.plugins.resolver.FileSystemResolver chain = org.apache.ivy.plugins.resolver.ChainResolver ibiblio = org.apache.ivy.plugins.resolver.IBiblioResolver +bintray = org.apache.ivy.plugins.resolver.BintrayResolver url = org.apache.ivy.plugins.resolver.URLResolver dual = org.apache.ivy.plugins.resolver.DualResolver ivyrep = org.apache.ivy.plugins.resolver.IvyRepResolver http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/79cb7c62/src/java/org/apache/ivy/plugins/resolver/BintrayResolver.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/ivy/plugins/resolver/BintrayResolver.java b/src/java/org/apache/ivy/plugins/resolver/BintrayResolver.java new file mode 100644 index 0000000..c8d7b26 --- /dev/null +++ b/src/java/org/apache/ivy/plugins/resolver/BintrayResolver.java @@ -0,0 +1,81 @@ +/* + * 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; + +/** + * BintrayResolver is a resolver which can be used to resolve dependencies found in the Bintray + * artifacts repository. + */ +@SuppressWarnings("ClassTooDeepInInheritanceTree") +public class BintrayResolver extends IBiblioResolver { + + private static final String JCENTER = "https://jcenter.bintray.com/"; + + private static final String DL_BINTRAY = "https://dl.bintray.com/"; + + private static final String DEFAULT_NAME = "bintray/jcenter"; + + private String subject; + + private String repo; + + private boolean isNameUpdatable; // Whether resolver's name was not originally specified and can + // be updated. + + public BintrayResolver() { + setRoot(JCENTER); + updateName(DEFAULT_NAME); + setM2compatible(true); + setUsepoms(true); + setUseMavenMetadata(true); + } + + public void setSubject(String subject) { + this.subject = subject; + updateRoot(); + } + + public void setRepo(String repo) { + this.repo = repo; + updateRoot(); + } + + @SuppressWarnings("MethodWithMultipleReturnPoints") + private void updateRoot() { + if (isEmpty(subject) || isEmpty(repo)) { + return; + } + + setRoot(String.format("%s%s/%s/", DL_BINTRAY, subject, repo)); + updateName(String.format("bintray/%s/%s", subject, repo)); + } + + private void updateName(String defaultName) { + if (isEmpty(defaultName)) { + throw new IllegalArgumentException("Default resolver name must not be null or empty"); + } + if (isEmpty(getName()) || isNameUpdatable) { + isNameUpdatable = true; + setName(defaultName); + } + } + + private boolean isEmpty(String s) { + return ((s == null) || (s.trim().length() < 1)); + } +} http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/79cb7c62/test/java/org/apache/ivy/plugins/resolver/BintrayResolverTest.java ---------------------------------------------------------------------- diff --git a/test/java/org/apache/ivy/plugins/resolver/BintrayResolverTest.java b/test/java/org/apache/ivy/plugins/resolver/BintrayResolverTest.java new file mode 100644 index 0000000..fdcf9ae --- /dev/null +++ b/test/java/org/apache/ivy/plugins/resolver/BintrayResolverTest.java @@ -0,0 +1,261 @@ +/* + * 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 org.apache.ivy.core.IvyContext; +import org.apache.ivy.core.event.EventManager; +import org.apache.ivy.core.module.descriptor.Artifact; +import org.apache.ivy.core.module.descriptor.DefaultArtifact; +import org.apache.ivy.core.module.descriptor.DefaultDependencyDescriptor; +import org.apache.ivy.core.module.descriptor.DefaultIncludeRule; +import org.apache.ivy.core.module.id.ArtifactId; +import org.apache.ivy.core.module.id.ModuleRevisionId; +import org.apache.ivy.core.report.ArtifactDownloadReport; +import org.apache.ivy.core.report.DownloadReport; +import org.apache.ivy.core.report.DownloadStatus; +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.sort.SortEngine; +import org.apache.ivy.plugins.matcher.ExactPatternMatcher; +import org.apache.ivy.util.MockMessageLogger; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.taskdefs.Delete; + +public class BintrayResolverTest extends AbstractDependencyResolverTest { + + private IvySettings _settings; + + private ResolveEngine _engine; + + private ResolveData _data; + + private File _cache; + + @Override + 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); + } + + @Override + protected void tearDown() throws Exception { + Delete del = new Delete(); + del.setProject(new Project()); + del.setDir(_cache); + del.execute(); + } + + public void testDefaults() { + BintrayResolver resolver = new BintrayResolver(); + assertEquals("https://jcenter.bintray.com/", resolver.getRoot()); + assertEquals("bintray/jcenter", resolver.getName()); + } + + public void testDefaultsWithName() { + BintrayResolver resolver = new BintrayResolver(); + resolver.setName("TestName"); + assertEquals("https://jcenter.bintray.com/", resolver.getRoot()); + assertEquals("TestName", resolver.getName()); + } + + public void testSubjectOnly() { + BintrayResolver resolver = new BintrayResolver(); + resolver.setSubject("jfrog"); + assertEquals("https://jcenter.bintray.com/", resolver.getRoot()); + assertEquals("bintray/jcenter", resolver.getName()); + } + + public void testRepoOnly() { + BintrayResolver resolver = new BintrayResolver(); + resolver.setRepo("jfrog-jars"); + assertEquals("https://jcenter.bintray.com/", resolver.getRoot()); + assertEquals("bintray/jcenter", resolver.getName()); + } + + public void testSubjectOnlyWithName() { + BintrayResolver resolver = new BintrayResolver(); + resolver.setSubject("jfrog"); + resolver.setName("TestName"); + assertEquals("https://jcenter.bintray.com/", resolver.getRoot()); + assertEquals("TestName", resolver.getName()); + } + + public void testRepoOnlyWithName() { + BintrayResolver resolver = new BintrayResolver(); + resolver.setRepo("jfrog-jars"); + resolver.setName("TestName"); + assertEquals("https://jcenter.bintray.com/", resolver.getRoot()); + assertEquals("TestName", resolver.getName()); + } + + public void testSubjectAndRepo() { + BintrayResolver resolver = new BintrayResolver(); + resolver.setSubject("jfrog"); + resolver.setRepo("jfrog-jars"); + assertEquals("https://dl.bintray.com/jfrog/jfrog-jars/", resolver.getRoot()); + assertEquals("bintray/jfrog/jfrog-jars", resolver.getName()); + } + + public void testSubjectAndRepoWithName() { + BintrayResolver resolver = new BintrayResolver(); + resolver.setSubject("jfrog"); + resolver.setRepo("jfrog-jars"); + resolver.setName("TestName"); + assertEquals("https://dl.bintray.com/jfrog/jfrog-jars/", resolver.getRoot()); + assertEquals("TestName", resolver.getName()); + } + + public void testBintray() throws Exception { + + BintrayResolver resolver = new BintrayResolver(); + resolver.setSettings(_settings); + ModuleRevisionId mrid = ModuleRevisionId + .newInstance("org.apache.ant", "ant-antunit", "1.2"); + ResolvedModuleRevision rmr = resolver.getDependency(new DefaultDependencyDescriptor(mrid, + false), _data); + assertNotNull(rmr); + assertEquals(mrid, rmr.getId()); + + DefaultArtifact artifact = new DefaultArtifact(mrid, rmr.getPublicationDate(), + "ant-antunit", "jar", "jar"); + DownloadReport report = resolver.download(new Artifact[] {artifact}, downloadOptions()); + assertNotNull(report); + + assertEquals(1, report.getArtifactsReports().length); + + ArtifactDownloadReport ar = report.getArtifactReport(artifact); + assertNotNull(ar); + + assertEquals(artifact, ar.getArtifact()); + assertEquals(DownloadStatus.SUCCESSFUL, ar.getDownloadStatus()); + + // test to ask to download again, should use cache + report = resolver.download(new Artifact[] {artifact}, downloadOptions()); + assertNotNull(report); + + assertEquals(1, report.getArtifactsReports().length); + + ar = report.getArtifactReport(artifact); + assertNotNull(ar); + + assertEquals(artifact, ar.getArtifact()); + assertEquals(DownloadStatus.NO, ar.getDownloadStatus()); + } + + public void testErrorReport() throws Exception { + BintrayResolver resolver = new BintrayResolver(); + resolver.setSubject("unknown"); + resolver.setRepo("unknown"); + resolver.setName("test"); + resolver.setM2compatible(true); + resolver.setSettings(_settings); + assertEquals("test", resolver.getName()); + + MockMessageLogger mockMessageImpl = new MockMessageLogger(); + IvyContext.getContext().getIvy().getLoggerEngine().setDefaultLogger(mockMessageImpl); + + ModuleRevisionId mrid = ModuleRevisionId.newInstance("org.apache", "commons-fileupload", + "1.0"); + ResolvedModuleRevision rmr = resolver.getDependency(new DefaultDependencyDescriptor(mrid, + false), _data); + assertNull(rmr); + + mockMessageImpl + .assertLogContains("trying https://dl.bintray.com/unknown/unknown/org/apache/commons-fileupload/1.0/commons-fileupload-1.0.jar"); + mockMessageImpl + .assertLogContains("tried https://dl.bintray.com/unknown/unknown/org/apache/commons-fileupload/1.0/commons-fileupload-1.0.jar"); + } + + public void testBintrayArtifacts() throws Exception { + BintrayResolver resolver = new BintrayResolver(); + resolver.setName("test"); + resolver.setSettings(_settings); + assertEquals("test", resolver.getName()); + + ModuleRevisionId mrid = ModuleRevisionId + .newInstance("org.apache.ant", "ant-antunit", "1.2"); + DefaultDependencyDescriptor dd = new DefaultDependencyDescriptor(mrid, false); + dd.addIncludeRule("default", new DefaultIncludeRule(new ArtifactId(mrid.getModuleId(), + "ant-antunit", "javadoc", "jar"), ExactPatternMatcher.INSTANCE, null)); + dd.addIncludeRule("default", new DefaultIncludeRule(new ArtifactId(mrid.getModuleId(), + "ant-antunit", "sources", "jar"), ExactPatternMatcher.INSTANCE, null)); + ResolvedModuleRevision rmr = resolver.getDependency(dd, _data); + assertNotNull(rmr); + assertEquals(mrid, rmr.getId()); + + DefaultArtifact profiler = new DefaultArtifact(mrid, rmr.getPublicationDate(), + "ant-antunit", "javadoc", "jar"); + DefaultArtifact trace = new DefaultArtifact(mrid, rmr.getPublicationDate(), "ant-antunit", + "sources", "jar"); + DownloadReport report = resolver.download(new Artifact[] {profiler, trace}, + downloadOptions()); + assertNotNull(report); + + assertEquals(2, report.getArtifactsReports().length); + + ArtifactDownloadReport ar = report.getArtifactReport(profiler); + assertNotNull(ar); + + assertEquals(profiler, ar.getArtifact()); + assertEquals(DownloadStatus.SUCCESSFUL, ar.getDownloadStatus()); + + ar = report.getArtifactReport(trace); + assertNotNull(ar); + + assertEquals(trace, ar.getArtifact()); + assertEquals(DownloadStatus.SUCCESSFUL, ar.getDownloadStatus()); + + // test to ask to download again, should use cache + report = resolver.download(new Artifact[] {profiler, trace}, downloadOptions()); + assertNotNull(report); + + assertEquals(2, report.getArtifactsReports().length); + + ar = report.getArtifactReport(profiler); + assertNotNull(ar); + + assertEquals(profiler, ar.getArtifact()); + assertEquals(DownloadStatus.NO, ar.getDownloadStatus()); + + ar = report.getArtifactReport(trace); + assertNotNull(ar); + + assertEquals(trace, ar.getArtifact()); + assertEquals(DownloadStatus.NO, ar.getDownloadStatus()); + } + + public void testUnknown() throws Exception { + BintrayResolver resolver = new BintrayResolver(); + resolver.setName("test"); + resolver.setSettings(_settings); + + assertNull(resolver.getDependency( + new DefaultDependencyDescriptor(ModuleRevisionId.newInstance("unknown", "unknown", + "1.0"), false), _data)); + } + +}
