Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/StatsTest.java')
-rw-r--r--bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/StatsTest.java176
1 files changed, 176 insertions, 0 deletions
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/StatsTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/StatsTest.java
new file mode 100644
index 000000000..be7ef817e
--- /dev/null
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/StatsTest.java
@@ -0,0 +1,176 @@
+/*******************************************************************************
+ * Copyright (c) 2012 WindRiver Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.p2.tests.artifact.repository;
+
+import java.io.*;
+import java.net.URI;
+import java.util.*;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.equinox.internal.p2.artifact.repository.MirrorRequest;
+import org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository;
+import org.eclipse.equinox.internal.p2.director.ProfileChangeRequest;
+import org.eclipse.equinox.internal.p2.engine.Profile;
+import org.eclipse.equinox.internal.p2.metadata.ArtifactKey;
+import org.eclipse.equinox.internal.p2.repository.AuthenticationFailedException;
+import org.eclipse.equinox.internal.p2.repository.Transport;
+import org.eclipse.equinox.p2.engine.*;
+import org.eclipse.equinox.p2.metadata.*;
+import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription;
+import org.eclipse.equinox.p2.planner.IPlanner;
+import org.eclipse.equinox.p2.query.QueryUtil;
+import org.eclipse.equinox.p2.repository.IRepository;
+import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor;
+import org.eclipse.equinox.p2.repository.artifact.IArtifactRepositoryManager;
+import org.eclipse.equinox.p2.repository.artifact.spi.ArtifactDescriptor;
+import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository;
+import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager;
+import org.eclipse.equinox.p2.tests.AbstractProvisioningTest;
+import org.eclipse.equinox.p2.tests.testserver.helper.AbstractTestServerClientCase;
+import org.eclipse.equinox.spi.p2.publisher.PublisherHelper;
+
+public class StatsTest extends AbstractTestServerClientCase {
+
+ private File repositoryFile;
+ private URI repositoryURI;
+ private SimpleArtifactRepository sourceRepo;
+ private File targetLocation;
+ private SimpleArtifactRepository targetRepository;
+ private URI statsURL;
+ private IMetadataRepository metaRepo;
+ private File testInstall;
+
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ IArtifactRepositoryManager artifactRepositoryManager = (IArtifactRepositoryManager) getAgent().getService(IArtifactRepositoryManager.SERVICE_NAME);
+ String tempDir = System.getProperty("java.io.tmpdir");
+ repositoryFile = new File(tempDir, "SimpleArtifactRepositoryTest");
+ AbstractProvisioningTest.delete(repositoryFile);
+ repositoryURI = repositoryFile.toURI();
+ Map properties = new HashMap();
+ properties.put(IRepository.PROP_COMPRESSED, "true");
+ statsURL = URI.create(getBaseURL() + "/stats");
+ properties.put("p2.statsURI", statsURL.toString());
+ sourceRepo = (SimpleArtifactRepository) artifactRepositoryManager.createRepository(repositoryURI, "artifact name", IArtifactRepositoryManager.TYPE_SIMPLE_REPOSITORY, properties);
+
+ IArtifactDescriptor[] descriptors = new IArtifactDescriptor[2];
+ IArtifactKey key = PublisherHelper.createBinaryArtifactKey("testKeyId", Version.create("1.2.3"));
+ descriptors[0] = PublisherHelper.createArtifactDescriptor(key, null);
+ ((ArtifactDescriptor) descriptors[0]).setProperty("download.stats", "testKeyId");
+ key = PublisherHelper.createBinaryArtifactKey("testKeyId2", Version.create("1.2.3"));
+ descriptors[1] = PublisherHelper.createArtifactDescriptor(key, null);
+ ((ArtifactDescriptor) descriptors[1]).setProperty("download.stats", "testKeyId2");
+ sourceRepo.addDescriptors(descriptors, null);
+
+ IMetadataRepositoryManager manager = (IMetadataRepositoryManager) getAgent().getService(IMetadataRepositoryManager.SERVICE_NAME);
+ properties = new HashMap();
+ properties.put(IRepository.PROP_COMPRESSED, "true");
+ metaRepo = manager.createRepository(repositoryURI, "TestRepo", IMetadataRepositoryManager.TYPE_SIMPLE_REPOSITORY, properties);
+
+ InstallableUnitDescription descriptor = new MetadataFactory.InstallableUnitDescription();
+ descriptor.setId("testIuId");
+ descriptor.setVersion(Version.create("1.0.0"));
+ descriptor.setArtifacts(new IArtifactKey[] {key});
+ Collection providedCaps = new ArrayList();
+ providedCaps.add(MetadataFactory.createProvidedCapability(IInstallableUnit.NAMESPACE_IU_ID, descriptor.getId(), descriptor.getVersion()));
+ descriptor.addProvidedCapabilities(providedCaps);
+ descriptor.setMetaRequirements(new IRequirement[] {MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, descriptor.getId(), new VersionRange(descriptor.getVersion(), true, Version.MAX_VERSION, false), null, false, false)});
+ descriptor.setTouchpointType(PublisherHelper.TOUCHPOINT_NATIVE);
+ IInstallableUnit iu = MetadataFactory.createInstallableUnit(descriptor);
+ metaRepo.addInstallableUnits(Arrays.asList(iu));
+
+ for (int i = 0; i < descriptors.length; i++) {
+ File artifactFile = new File(sourceRepo.getLocation(descriptors[i]));
+ artifactFile.getParentFile().mkdirs();
+ assertTrue("Failed to create binary artifact file.", artifactFile.createNewFile());
+ }
+
+ targetLocation = File.createTempFile("target", ".repo");
+ AbstractProvisioningTest.delete(targetLocation);
+ targetLocation.mkdirs();
+ targetRepository = new SimpleArtifactRepository(getAgent(), "TargetRepo", targetLocation.toURI(), null);
+ }
+
+ @Override
+ public void tearDown() throws Exception {
+ super.tearDown();
+ //repository location is not used by all tests
+ if (repositoryURI != null) {
+ ((IArtifactRepositoryManager) getAgent().getService(IArtifactRepositoryManager.SERVICE_NAME)).removeRepository(repositoryURI);
+ ((IMetadataRepositoryManager) getAgent().getService(IMetadataRepositoryManager.SERVICE_NAME)).removeRepository(repositoryURI);
+ repositoryURI = null;
+ }
+ if (repositoryFile != null) {
+ AbstractProvisioningTest.delete(repositoryFile);
+ repositoryFile = null;
+ }
+ if (targetLocation != null) {
+ ((IArtifactRepositoryManager) getAgent().getService(IArtifactRepositoryManager.SERVICE_NAME)).removeRepository(targetLocation.toURI());
+ AbstractProvisioningTest.delete(targetLocation);
+ targetLocation = null;
+ }
+ if (testInstall != null) {
+ AbstractProvisioningTest.delete(testInstall);
+ testInstall = null;
+ }
+ }
+
+ public void testCustomizedDownloadStats() throws CoreException, IOException {
+ IArtifactKey key = new ArtifactKey(PublisherHelper.BINARY_ARTIFACT_CLASSIFIER, "testKeyId", Version.parseVersion("1.2.3"));
+ MirrorRequest request = new MirrorRequest(key, targetRepository, null, null, (Transport) getAgent().getService(Transport.SERVICE_NAME), "package=test");
+ request.perform(sourceRepo, new NullProgressMonitor());
+ assertTrue("Failed on mirroring artifact.", request.getResult().isOK());
+
+ checkStatsResult("test download number: 1");
+ }
+
+ protected void checkStatsResult(final String checkpoint) throws FileNotFoundException, CoreException, AuthenticationFailedException, IOException {
+ final Transport transport = (Transport) getAgent().getService(Transport.SERVICE_NAME);
+ BufferedReader statsResult = new BufferedReader(new InputStreamReader(transport.stream(statsURL, null)));
+ try {
+ String line = statsResult.readLine();
+ while (line != null) {
+ if (line.startsWith(checkpoint))
+ return;
+ line = statsResult.readLine();
+ }
+ fail("Didn't get expected stats result.");
+ } finally {
+ statsResult.close();
+ }
+ }
+
+ public void testDownloadStatsWhileInstall() throws AuthenticationFailedException, FileNotFoundException, CoreException, IOException {
+ IProfileRegistry registry = (IProfileRegistry) getAgent().getService(IProfileRegistry.SERVICE_NAME);
+ final String profileName = "downloadStats";
+ Map properties = new HashMap();
+ properties.put(IProfile.PROP_STATS_PARAMETERS, "os=linux&ws=gtk&package=jee");
+ String tempDir = System.getProperty("java.io.tmpdir");
+ testInstall = new File(tempDir, "statsTestInstall");
+ testInstall.mkdirs();
+ properties.put(IProfile.PROP_INSTALL_FOLDER, testInstall.toString());
+ Profile profile = (Profile) registry.addProfile(profileName, properties);
+ ProfileChangeRequest req = new ProfileChangeRequest(profile);
+ req.addInstallableUnits(metaRepo.query(QueryUtil.ALL_UNITS, null).toArray(IInstallableUnit.class));
+ IPlanner planner = (IPlanner) getAgent().getService(IPlanner.SERVICE_NAME);
+ ProvisioningContext context = new ProvisioningContext(getAgent());
+ context.setArtifactRepositories(new URI[] {repositoryURI});
+ context.setMetadataRepositories(new URI[] {repositoryURI});
+ IProvisioningPlan plan = planner.getProvisioningPlan(req, context, null);
+ IEngine engine = (IEngine) getAgent().getService(IEngine.SERVICE_NAME);
+ assertTrue("Failed on install test iu.", engine.perform(plan, null).isOK());
+ profile = (Profile) registry.getProfile(profileName);
+ assertEquals("Didn't install iu.", 1, profile.query(QueryUtil.ALL_UNITS, null).toUnmodifiableSet().size());
+ registry.removeProfile(profileName);
+ checkStatsResult("jee download number: 1");
+ }
+}

Back to the top