1 /******************************************************************************* 2 * Copyright (c) 2008, 2017 IBM Corporation and others. 3 * 4 * This program and the accompanying materials 5 * are made available under the terms of the Eclipse Public License 2.0 6 * which accompanies this distribution, and is available at 7 * https://www.eclipse.org/legal/epl-2.0/ 8 * 9 * SPDX-License-Identifier: EPL-2.0 10 * 11 * Contributors: 12 * IBM Corporation - initial API and implementation 13 *******************************************************************************/ 14 package org.eclipse.equinox.p2.tests.extensionlocation; 15 16 import java.io.File; 17 import java.io.IOException; 18 import java.net.*; 19 import org.eclipse.core.runtime.FileLocator; 20 import org.eclipse.equinox.internal.p2.extensionlocation.Constants; 21 import org.eclipse.equinox.internal.p2.extensionlocation.ExtensionLocationArtifactRepositoryFactory; 22 import org.eclipse.equinox.p2.core.ProvisionException; 23 import org.eclipse.equinox.p2.repository.IRepositoryManager; 24 import org.eclipse.equinox.p2.repository.artifact.IArtifactRepository; 25 import org.eclipse.equinox.p2.tests.AbstractProvisioningTest; 26 import org.eclipse.equinox.p2.tests.TestActivator; 27 28 public class ExtensionLocationArtifactRepositoryFactoryTest extends AbstractProvisioningTest { 29 30 private File tempDirectory; 31 private ExtensionLocationArtifactRepositoryFactory factory; 32 ExtensionLocationArtifactRepositoryFactoryTest(String name)33 public ExtensionLocationArtifactRepositoryFactoryTest(String name) { 34 super(name); 35 } 36 37 @Override tearDown()38 protected void tearDown() throws Exception { 39 delete(tempDirectory); 40 super.tearDown(); 41 } 42 43 @Override setUp()44 protected void setUp() throws Exception { 45 super.setUp(); 46 String tempDir = System.getProperty("java.io.tmpdir"); 47 tempDirectory = new File(tempDir, "extensionlocationtest"); 48 delete(tempDirectory); 49 tempDirectory.mkdirs(); 50 factory = new ExtensionLocationArtifactRepositoryFactory(); 51 factory.setAgent(getAgent()); 52 } 53 getFile(String path)54 public static File getFile(String path) throws IOException { 55 URL fileURL = TestActivator.getContext().getBundle().getEntry(path); 56 return new File(FileLocator.toFileURL(fileURL).getPath()); 57 } 58 testNonFileURL()59 public void testNonFileURL() { 60 try { 61 URI nonFileURL = new URI("http://www.eclipse.org"); 62 factory.load(nonFileURL, 0, getMonitor()); 63 fail("0.1"); 64 } catch (ProvisionException e) { 65 assertEquals("0.5", ProvisionException.REPOSITORY_NOT_FOUND, e.getStatus().getCode()); 66 } catch (URISyntaxException e) { 67 fail("0.99", e); 68 } 69 } 70 testNonExistentFile()71 public void testNonExistentFile() { 72 File directory = new File(tempDirectory, "nonexistent"); 73 delete(directory); 74 try { 75 factory.load(directory.toURI(), 0, getMonitor()); 76 fail("0.1"); 77 } catch (ProvisionException e) { 78 assertEquals("0.5", ProvisionException.REPOSITORY_NOT_FOUND, e.getStatus().getCode()); 79 } 80 } 81 testNotDirectory()82 public void testNotDirectory() { 83 File file = new File(tempDirectory, "exists.file"); 84 try { 85 file.createNewFile(); 86 factory.load(file.toURI(), 0, getMonitor()); 87 fail("0.1"); 88 } catch (ProvisionException e) { 89 assertEquals("0.5", ProvisionException.REPOSITORY_NOT_FOUND, e.getStatus().getCode()); 90 } catch (MalformedURLException e) { 91 fail("0.99", e); 92 } catch (IOException e) { 93 fail("0.100", e); 94 } 95 } 96 testNoFeatureOrPluginsDirectory()97 public void testNoFeatureOrPluginsDirectory() { 98 File directory = new File(tempDirectory, "exists"); 99 directory.mkdirs(); 100 try { 101 factory.load(directory.toURI(), 0, getMonitor()); 102 } catch (ProvisionException e) { 103 if (e.getStatus().getCode() == ProvisionException.REPOSITORY_NOT_FOUND) 104 return; 105 } 106 fail("1.0"); 107 } 108 testEmptyFeatureAndPluginsDirectory()109 public void testEmptyFeatureAndPluginsDirectory() { 110 File directory = new File(tempDirectory, "exists"); 111 directory.mkdirs(); 112 new File(directory, "plugins").mkdir(); 113 new File(directory, "features").mkdir(); 114 try { 115 factory.load(directory.toURI(), 0, getMonitor()); 116 } catch (ProvisionException e) { 117 fail("0.1", e); 118 } 119 } 120 testEmptyFeaturesDirectory()121 public void testEmptyFeaturesDirectory() { 122 File directory = new File(tempDirectory, "exists"); 123 directory.mkdirs(); 124 new File(directory, "features").mkdir(); 125 try { 126 factory.load(directory.toURI(), 0, getMonitor()); 127 } catch (ProvisionException e) { 128 fail("0.1", e); 129 } 130 } 131 testEmptyPluginsDirectory()132 public void testEmptyPluginsDirectory() { 133 File directory = new File(tempDirectory, "exists"); 134 directory.mkdirs(); 135 new File(directory, "plugins").mkdir(); 136 try { 137 factory.load(directory.toURI(), 0, getMonitor()); 138 } catch (ProvisionException e) { 139 fail("0.1", e); 140 } 141 } 142 testEclipseBaseEmptyFeatureAndPluginsDirectory()143 public void testEclipseBaseEmptyFeatureAndPluginsDirectory() { 144 File directory = new File(tempDirectory, "exists"); 145 directory.mkdirs(); 146 File eclipseDirectory = new File(directory, "eclipse"); 147 eclipseDirectory.mkdir(); 148 new File(eclipseDirectory, "plugins").mkdir(); 149 new File(eclipseDirectory, "features").mkdir(); 150 try { 151 factory.load(directory.toURI(), 0, getMonitor()); 152 } catch (ProvisionException e) { 153 fail("0.1", e); 154 } 155 } 156 testNotEclipseBaseEmptyFeatureAndPluginsDirectory()157 public void testNotEclipseBaseEmptyFeatureAndPluginsDirectory() { 158 File directory = new File(tempDirectory, "exists"); 159 directory.mkdirs(); 160 File eclipseDirectory = new File(directory, "noteclipse"); 161 eclipseDirectory.mkdir(); 162 new File(eclipseDirectory, "plugins").mkdir(); 163 new File(eclipseDirectory, "features").mkdir(); 164 try { 165 factory.load(directory.toURI(), 0, getMonitor()); 166 } catch (ProvisionException e) { 167 if (e.getStatus().getCode() == ProvisionException.REPOSITORY_NOT_FOUND) 168 return; 169 } 170 fail("1.0"); 171 } 172 testNormalFeaturesandPluginsDirectory()173 public void testNormalFeaturesandPluginsDirectory() { 174 File directory = new File(tempDirectory, "exists"); 175 directory.mkdirs(); 176 copy("1.0", getTestData("1.1", "/testData/extensionlocation"), directory); 177 URI location = directory.toURI(); 178 try { 179 IArtifactRepository repo = factory.load(location, 0, getMonitor()); 180 if (getArtifactKeyCount(repo) != 2) 181 fail("2.1"); 182 } catch (ProvisionException ex) { 183 fail("2.0"); 184 } 185 } 186 testNormalFeaturesDirectory()187 public void testNormalFeaturesDirectory() { 188 File directory = new File(tempDirectory, "exists/features"); 189 directory.mkdirs(); 190 File features = new File(directory, "features"); 191 features.mkdir(); 192 copy("1.0", getTestData("1.1", "/testData/extensionlocation/features"), features); 193 URI location = directory.toURI(); 194 try { 195 IArtifactRepository repo = factory.load(location, 0, getMonitor()); 196 if (getArtifactKeyCount(repo) != 1) 197 fail("2.1"); 198 } catch (ProvisionException ex) { 199 fail("2.0"); 200 } 201 } 202 testNormalPluginsDirectory()203 public void testNormalPluginsDirectory() { 204 File directory = new File(tempDirectory, "exists/plugins"); 205 directory.mkdirs(); 206 File plugins = new File(directory, "plugins"); 207 plugins.mkdir(); 208 copy("1.0", getTestData("1.1", "/testData/extensionlocation/plugins"), plugins); 209 URI location = directory.toURI(); 210 try { 211 IArtifactRepository repo = factory.load(location, 0, getMonitor()); 212 if (getArtifactKeyCount(repo) != 1) 213 fail("2.1"); 214 } catch (ProvisionException ex) { 215 fail("2.0"); 216 } 217 } 218 testEclipseBaseNormalFeaturesandPluginsDirectory()219 public void testEclipseBaseNormalFeaturesandPluginsDirectory() { 220 File directory = new File(tempDirectory, "exists"); 221 directory.mkdirs(); 222 File eclipseDirectory = new File(directory, "eclipse"); 223 copy("1.1", getTestData("1.1", "/testData/extensionlocation"), eclipseDirectory); 224 try { 225 IArtifactRepository repo = factory.load(directory.toURI(), 0, getMonitor()); 226 if (getArtifactKeyCount(repo) != 2) 227 fail("1.0"); 228 } catch (ProvisionException e) { 229 fail("0.5", e); 230 } 231 } 232 testEclipseBaseModifiableRepository()233 public void testEclipseBaseModifiableRepository() { 234 File directory = new File(tempDirectory, "exists"); 235 directory.mkdirs(); 236 File eclipseDirectory = new File(directory, "eclipse"); 237 copy("1.1", getTestData("1.1", "/testData/extensionlocation"), eclipseDirectory); 238 try { 239 IArtifactRepository repo = factory.load(directory.toURI(), IRepositoryManager.REPOSITORY_HINT_MODIFIABLE, getMonitor()); 240 assertNull("1.0", repo); 241 } catch (ProvisionException e) { 242 fail("0.5", e); 243 } 244 } 245 testUpdateSiteXMLURL()246 public void testUpdateSiteXMLURL() { 247 File site = getTestData("0.1", "/testData/updatesite/site"); 248 try { 249 factory.load(site.toURI(), 0, getMonitor()); 250 } catch (ProvisionException e) { 251 if (e.getStatus().getCode() == ProvisionException.REPOSITORY_NOT_FOUND) 252 return; 253 } 254 fail("1.0"); 255 } 256 testXXXSiteXXXXMLURL()257 public void testXXXSiteXXXXMLURL() { 258 File site = getTestData("0.1", "/testData/updatesite/xxxsitexxx"); 259 try { 260 factory.load(site.toURI(), 0, getMonitor()); 261 } catch (ProvisionException e) { 262 if (e.getStatus().getCode() == ProvisionException.REPOSITORY_NOT_FOUND) 263 return; 264 } 265 fail("1.0"); 266 } 267 testArtifactsXMLFeaturesandPluginsDirectory()268 public void testArtifactsXMLFeaturesandPluginsDirectory() throws IOException { 269 File directory = new File(tempDirectory, "exists"); 270 directory.mkdirs(); 271 File artifactsXML = new File(directory, "artifacts.xml"); 272 artifactsXML.createNewFile(); 273 274 copy("1.0", getTestData("1.1", "/testData/extensionlocation"), directory); 275 URI location = directory.toURI(); 276 try { 277 factory.load(location, 0, getMonitor()); 278 } catch (ProvisionException e) { 279 if (e.getStatus().getCode() == ProvisionException.REPOSITORY_NOT_FOUND) 280 return; 281 } 282 fail("1.0"); 283 } 284 testArtifactsXMLFeaturesandPluginsDirectoryWithExtensionLocation()285 public void testArtifactsXMLFeaturesandPluginsDirectoryWithExtensionLocation() throws IOException { 286 File directory = new File(tempDirectory, "exists"); 287 directory.mkdirs(); 288 File artifactsXML = new File(directory, "artifacts.xml"); 289 artifactsXML.createNewFile(); 290 291 copy("1.0", getTestData("1.1", "/testData/extensionlocation"), directory); 292 File extensionLocation = new File(tempDirectory.getAbsolutePath() + Constants.EXTENSION_LOCATION); 293 URI location = extensionLocation.toURI(); 294 try { 295 factory.load(location, 0, getMonitor()); 296 } catch (ProvisionException e) { 297 if (e.getStatus().getCode() == ProvisionException.REPOSITORY_NOT_FOUND) 298 return; 299 } 300 fail("1.0"); 301 } 302 testContentXMLFeaturesandPluginsDirectory()303 public void testContentXMLFeaturesandPluginsDirectory() throws IOException { 304 File directory = new File(tempDirectory, "exists"); 305 directory.mkdirs(); 306 File contentXML = new File(directory, "content.xml"); 307 contentXML.createNewFile(); 308 309 copy("1.0", getTestData("1.1", "/testData/extensionlocation"), directory); 310 URI location = directory.toURI(); 311 try { 312 factory.load(location, 0, getMonitor()); 313 } catch (ProvisionException e) { 314 if (e.getStatus().getCode() == ProvisionException.REPOSITORY_NOT_FOUND) 315 return; 316 } 317 fail("1.0"); 318 } 319 testCompositeArtifactsXMLFeaturesandPluginsDirectory()320 public void testCompositeArtifactsXMLFeaturesandPluginsDirectory() throws IOException { 321 File directory = new File(tempDirectory, "exists"); 322 directory.mkdirs(); 323 File compositeArtifactsXML = new File(directory, "compositeArtifacts.xml"); 324 compositeArtifactsXML.createNewFile(); 325 326 copy("1.0", getTestData("1.1", "/testData/extensionlocation"), directory); 327 URI location = directory.toURI(); 328 try { 329 factory.load(location, 0, getMonitor()); 330 } catch (ProvisionException e) { 331 if (e.getStatus().getCode() == ProvisionException.REPOSITORY_NOT_FOUND) 332 return; 333 } 334 fail("1.0"); 335 } 336 testCompositeContentXMLFeaturesandPluginsDirectory()337 public void testCompositeContentXMLFeaturesandPluginsDirectory() throws IOException { 338 File directory = new File(tempDirectory, "exists"); 339 directory.mkdirs(); 340 File compositeContentXML = new File(directory, "compositeContent.xml"); 341 compositeContentXML.createNewFile(); 342 343 copy("1.0", getTestData("1.1", "/testData/extensionlocation"), directory); 344 URI location = directory.toURI(); 345 try { 346 factory.load(location, 0, getMonitor()); 347 } catch (ProvisionException e) { 348 if (e.getStatus().getCode() == ProvisionException.REPOSITORY_NOT_FOUND) 349 return; 350 } 351 fail("1.0"); 352 } 353 } 354