| /* |
| * 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.core; |
| |
| import java.io.File; |
| import java.io.IOException; |
| import java.util.Date; |
| import java.util.Random; |
| |
| import org.apache.ivy.Ivy; |
| import org.apache.ivy.TestHelper; |
| import org.apache.ivy.core.module.descriptor.DefaultDependencyDescriptor; |
| import org.apache.ivy.core.module.descriptor.DefaultModuleDescriptor; |
| import org.apache.ivy.core.module.id.ModuleRevisionId; |
| import org.apache.ivy.core.report.ResolveReport; |
| import org.apache.ivy.core.resolve.ResolveOptions; |
| import org.apache.ivy.plugins.parser.xml.XmlModuleDescriptorWriter; |
| import org.apache.ivy.plugins.resolver.FileSystemResolver; |
| import org.apache.ivy.util.FileUtil; |
| import org.apache.tools.ant.Project; |
| import org.apache.tools.ant.taskdefs.Delete; |
| |
| /** |
| * Not a Junit test, performance depends on the machine on which the test is run... |
| */ |
| public class TestPerformance { |
| private static final String PATTERN = "build/test/perf/[module]/[artifact]-[revision].[ext]"; |
| |
| private final Ivy ivy; |
| |
| public TestPerformance() throws Exception { |
| ivy = new Ivy(); |
| FileSystemResolver resolver = new FileSystemResolver(); |
| resolver.setName("def"); |
| resolver.setSettings(ivy.getSettings()); |
| |
| resolver.addIvyPattern(PATTERN); |
| resolver.addArtifactPattern(PATTERN); |
| |
| ivy.getSettings().addResolver(resolver); |
| ivy.getSettings().setDefaultResolver("def"); |
| } |
| |
| protected void setUp() throws Exception { |
| TestHelper.createCache(); |
| } |
| |
| protected void tearDown() throws Exception { |
| TestHelper.cleanCache(); |
| } |
| |
| private void cleanRepo() { |
| Delete del = new Delete(); |
| del.setProject(new Project()); |
| del.setDir(new File("build/test/perf")); |
| del.execute(); |
| } |
| |
| private void generateModules(int nbModules, int minDependencies, int maxDependencies, |
| int minVersions, int maxVersions) throws IOException { |
| int nb = 0; |
| int curDep = 1; |
| int varDeps = maxDependencies - minDependencies; |
| int varVersions = maxVersions - minVersions; |
| Random r = new Random(System.currentTimeMillis()); |
| |
| while (nb < nbModules) { |
| int deps = minDependencies + r.nextInt(varDeps + 1); |
| int versions = minVersions + r.nextInt(varVersions + 1); |
| |
| int prevCurDep = curDep; |
| for (int ver = 0; ver < versions; ver++) { |
| DefaultModuleDescriptor md = new DefaultModuleDescriptor( |
| ModuleRevisionId.newInstance("apache", "mod" + nb, "1." + ver), |
| "integration", new Date()); |
| |
| curDep = prevCurDep; |
| for (int i = 0; i < deps && curDep < nbModules; i++) { |
| int d; |
| if (i % 2 == 1) { |
| d = nb + i; |
| if (d >= prevCurDep) { |
| d = curDep; |
| curDep++; |
| } |
| } else { |
| d = curDep; |
| curDep++; |
| } |
| DefaultDependencyDescriptor dd = new DefaultDependencyDescriptor( |
| md, |
| ModuleRevisionId.newInstance("apache", "mod" + d, "latest.integration"), |
| false, false, true); |
| dd.addDependencyConfiguration("default", "default"); |
| md.addDependency(dd); |
| } |
| XmlModuleDescriptorWriter.write(md, new File("build/test/perf/mod" + nb + "/ivy-1." |
| + ver + ".xml")); |
| FileUtil.copy(new File("test/repositories/1/org1/mod1.1/jars/mod1.1-1.0.jar"), |
| new File("build/test/perf/mod" + nb + "/mod" + nb + "-1." + ver + ".jar"), null); |
| } |
| nb++; |
| } |
| } |
| |
| public void testPerfs() throws Exception { |
| generateModules(70, 2, 5, 2, 15); |
| |
| long start = System.currentTimeMillis(); |
| ResolveReport report = ivy.resolve(new File("build/test/perf/mod0/ivy-1.0.xml"), |
| getResolveOptions(new String[] {"*"}).setRevision("1.0")); |
| long end = System.currentTimeMillis(); |
| System.out.println("resolve " + report.getConfigurationReport("default").getNodesNumber() |
| + " modules took " + (end - start) + " ms"); |
| |
| cleanRepo(); |
| } |
| |
| private ResolveOptions getResolveOptions(String[] confs) { |
| return new ResolveOptions().setConfs(confs); |
| } |
| |
| public static void main(String[] args) throws Exception { |
| TestPerformance t = new TestPerformance(); |
| t.setUp(); |
| t.testPerfs(); |
| t.tearDown(); |
| } |
| } |