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