Author: not
Date: Mon Dec 7 11:32:47 2009
New Revision: 887889
URL: http://svn.apache.org/viewvc?rev=887889&view=rev
Log:
ARIES-52 improvements to manifest tests and bug fixes for parsing
Added:
incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/utils/ApplicationMetadataImplTest.java
incubator/aries/trunk/application/application-utils/src/test/resources/META-INF/APPLICATION2.MF
incubator/aries/trunk/application/application-utils/src/test/resources/META-INF/APPLICATION3.MF
Modified:
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/ApplicationMetadataManager.java
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ApplicationMetadataImpl.java
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ApplicationMetadataManagerImpl.java
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ApplicationMetadataManagerServiceImpl.java
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ContentImpl.java
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/ManifestProcessor.java
incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/utils/ManifestProcessorTest.java
Modified:
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/ApplicationMetadataManager.java
URL:
http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/ApplicationMetadataManager.java?rev=887889&r1=887888&r2=887889&view=diff
==============================================================================
---
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/ApplicationMetadataManager.java
(original)
+++
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/ApplicationMetadataManager.java
Mon Dec 7 11:32:47 2009
@@ -40,6 +40,8 @@
* @throws IOException if an IOException occurs reading from the stream.
*/
public ApplicationMetadata parseApplication(InputStream in) throws
IOException;
+ public Content parseContent(String content);
+ public VersionRange parseVersionRange(String versionRange);
/**
* Create the application metadata from the provided Manifest. This is
provided
* so application metadata can be created from within the JVM. When reading
@@ -71,4 +73,13 @@
* @return true if the application was registered, false otherwise.
*/
public boolean registerApplication(ApplicationMetadata app);
+
+ /**
+ * This method is used to remove a previously registered application. An
+ * application can only be removed by the bundle that registered the
application.
+ *
+ * @param app the application to remove.
+ * @return true if the application was removed, false otherwise.
+ */
+ public boolean unregisterApplication(ApplicationMetadata app);
}
\ No newline at end of file
Modified:
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ApplicationMetadataImpl.java
URL:
http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ApplicationMetadataImpl.java?rev=887889&r1=887888&r2=887889&view=diff
==============================================================================
---
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ApplicationMetadataImpl.java
(original)
+++
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ApplicationMetadataImpl.java
Mon Dec 7 11:32:47 2009
@@ -40,11 +40,12 @@
* Implementation of ApplicationMetadata and DeploymentMetadata
*
*/
-public class ApplicationMetadataImpl implements ApplicationMetadata
+public final class ApplicationMetadataImpl implements ApplicationMetadata
{
private String appSymbolicName;
private Version appVersion;
private String appName;
+ private String appScope;
private List<Content> appContents;
private List<ServiceDeclaration> importServices;
private List<ServiceDeclaration> exportServices;
@@ -66,15 +67,15 @@
* setup the application metadata from the appManifest
* @param appManifest application.mf manifest
*/
- private void setup(Manifest appManifest) {
-
-
+ private void setup(Manifest appManifest)
+ {
Map<String, String> appMap = readManifestIntoMap(appManifest);
// configure the appSymbolicName and appVersion
- this.appSymbolicName =
appMap.get(AppConstants.APPLICATION_SYMBOLIC_NAME).trim();
- this.appVersion = new
Version(appMap.get(AppConstants.APPLICATION_VERSION).trim());
+ this.appSymbolicName = appMap.get(AppConstants.APPLICATION_SYMBOLIC_NAME);
+ this.appVersion = new
Version(appMap.get(AppConstants.APPLICATION_VERSION));
this.appName = appMap.get(AppConstants.APPLICATION_NAME);
+ this.appScope = this.appSymbolicName + "_" + this.appVersion.toString();
if (this.appSymbolicName == null || this.appVersion == null) {
throw new IllegalArgumentException("Failed to create
ApplicationMetadataImpl object from Manifest " + appManifest);
@@ -143,11 +144,29 @@
return this.appVersion;
}
- public String getApplicationName() {
+ public String getApplicationName()
+ {
return this.appName;
}
- public String getApplicationScope() {
- return this.appSymbolicName + "_" + this.appVersion.toString();
+ public String getApplicationScope()
+ {
+ return appScope;
+ }
+
+ public boolean equals(Object other)
+ {
+ if (other == this) return true;
+ if (other == null) return false;
+ if (other instanceof ApplicationMetadataImpl) {
+ return appScope.equals(((ApplicationMetadataImpl)other).appScope);
+ }
+
+ return false;
+ }
+
+ public int hashCode()
+ {
+ return appScope.hashCode();
}
-}
+}
\ No newline at end of file
Modified:
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ApplicationMetadataManagerImpl.java
URL:
http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ApplicationMetadataManagerImpl.java?rev=887889&r1=887888&r2=887889&view=diff
==============================================================================
---
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ApplicationMetadataManagerImpl.java
(original)
+++
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ApplicationMetadataManagerImpl.java
Mon Dec 7 11:32:47 2009
@@ -26,6 +26,8 @@
import org.apache.aries.application.ApplicationMetadata;
import org.apache.aries.application.ApplicationMetadataManager;
+import org.apache.aries.application.Content;
+import org.apache.aries.application.VersionRange;
import org.apache.aries.application.utils.manifest.ManifestProcessor;
import org.osgi.framework.Version;
@@ -56,9 +58,7 @@
public boolean registerApplication(ApplicationMetadata app)
{
- String key = app.getApplicationSymbolicName() + "_" +
app.getApplicationVersion();
-
- ApplicationMetadata existingApp = applications.putIfAbsent(key, app);
+ ApplicationMetadata existingApp =
applications.putIfAbsent(app.getApplicationScope(), app);
return existingApp == null;
}
@@ -68,16 +68,19 @@
return new ApplicationMetadataImpl(man);
}
- /**
- * This method is called by the service facade to remove applications when
- * the client bundle releases the service. It is not public.
- *
- * @param app the application to remove.
- */
- public void removeApplication(ApplicationMetadata app)
+ public boolean unregisterApplication(ApplicationMetadata app)
+ {
+ return applications.remove(app.getApplicationScope()) != null;
+ }
+
+ public Content parseContent(String content)
+ {
+ return new ContentImpl(content);
+ }
+
+ public VersionRange parseVersionRange(String versionRange)
{
- String key = app.getApplicationSymbolicName() + "_" +
app.getApplicationVersion();
- applications.remove(key);
+ return new VersionRangeImpl(versionRange);
}
}
\ No newline at end of file
Modified:
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ApplicationMetadataManagerServiceImpl.java
URL:
http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ApplicationMetadataManagerServiceImpl.java?rev=887889&r1=887888&r2=887889&view=diff
==============================================================================
---
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ApplicationMetadataManagerServiceImpl.java
(original)
+++
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ApplicationMetadataManagerServiceImpl.java
Mon Dec 7 11:32:47 2009
@@ -20,12 +20,17 @@
import java.io.IOException;
import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashSet;
+import java.util.Set;
import java.util.jar.Manifest;
import org.apache.aries.application.ApplicationMetadata;
import org.apache.aries.application.ApplicationMetadataManager;
+import org.apache.aries.application.Content;
+import org.apache.aries.application.VersionRange;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.ServiceFactory;
+import org.osgi.framework.ServiceRegistration;
import org.osgi.framework.Version;
/**
@@ -33,61 +38,103 @@
* remove registered applications when the requesting bundle releases the
service.
* There is one instance of this class per requesting bundle.
*/
-public class ApplicationMetadataManagerServiceImpl implements
ApplicationMetadataManager
+public class ApplicationMetadataManagerServiceImpl implements ServiceFactory
{
- /** The core application metadata manager */
- private ApplicationMetadataManagerImpl manager;
- /** A list of all applications registered via this service instance */
- private List<ApplicationMetadata> appMetaData = new
ArrayList<ApplicationMetadata>();
+ private static class RealApplicationMetadataManagerServiceImpl implements
ApplicationMetadataManager
+ {
+ /** The core application metadata manager */
+ private ApplicationMetadataManager manager;
+ /** A list of all applications registered via this service instance */
+ private Set<ApplicationMetadata> appMetaData = new
HashSet<ApplicationMetadata>();
+
+ public
RealApplicationMetadataManagerServiceImpl(ApplicationMetadataManager man)
+ {
+ manager = man;
+ }
+
+ public ApplicationMetadata getApplication(String applicationSymbolicName,
Version version)
+ {
+ return manager.getApplication(applicationSymbolicName, version);
+ }
+
+ public ApplicationMetadata parseApplication(InputStream in) throws
IOException
+ {
+ return manager.parseApplication(in);
+ }
+
+ public ApplicationMetadata createApplication(Manifest man)
+ {
+ return manager.createApplication(man);
+ }
+
+ public boolean registerApplication(ApplicationMetadata app)
+ {
+ if (manager.registerApplication(app)) {
+ synchronized (appMetaData) {
+ appMetaData.add(app);
+ }
+ return true;
+ }
+ return false;
+ }
+
+ public boolean unregisterApplication(ApplicationMetadata app)
+ {
+ boolean remove = false;
+ synchronized (appMetaData) {
+ remove = appMetaData.contains(app);
+ }
+
+ if (remove) return manager.unregisterApplication(app);
+
+ return false;
+ }
+
+ /**
+ * This method is called by blueprint when the calling bundle releases the
+ * service. It removes all the registered applications from the core
manager.
+ */
+ public void close()
+ {
+ synchronized (appMetaData) {
+ for (ApplicationMetadata app : appMetaData) {
+ manager.unregisterApplication(app);
+ }
+
+ appMetaData.clear();
+ }
+ }
+
+ public Content parseContent(String content)
+ {
+ return manager.parseContent(content);
+ }
+ public VersionRange parseVersionRange(String versionRange)
+ {
+ return manager.parseVersionRange(versionRange);
+ }
+ }
+
+ private ApplicationMetadataManager manager;
+
/**
* Called by blueprint.
*
* @param appManager the core app metadata manager.
*/
- public void setManager(ApplicationMetadataManagerImpl appManager)
+ public void setManager(ApplicationMetadataManager appManager)
{
manager = appManager;
}
- public ApplicationMetadata getApplication(String applicationSymbolicName,
Version version)
+ public Object getService(Bundle bundle, ServiceRegistration registration)
{
- return manager.getApplication(applicationSymbolicName, version);
+ return new RealApplicationMetadataManagerServiceImpl(manager);
}
- public ApplicationMetadata parseApplication(InputStream in) throws
IOException
+ public void ungetService(Bundle bundle, ServiceRegistration registration,
Object service)
{
- return manager.parseApplication(in);
- }
-
- public ApplicationMetadata createApplication(Manifest man)
- {
- return manager.createApplication(man);
- }
-
- public boolean registerApplication(ApplicationMetadata app)
- {
- if (manager.registerApplication(app)) {
- synchronized (appMetaData) {
- appMetaData.add(app);
- }
- return true;
- }
- return false;
- }
-
- /**
- * This method is called by blueprint when the calling bundle releases the
- * service. It removes all the registered applications from the core manager.
- */
- public void close()
- {
- synchronized (appMetaData) {
- for (ApplicationMetadata app : appMetaData) {
- manager.removeApplication(app);
- }
-
- appMetaData.clear();
- }
+ ((RealApplicationMetadataManagerServiceImpl)service).close();
}
}
\ No newline at end of file
Modified:
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ContentImpl.java
URL:
http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ContentImpl.java?rev=887889&r1=887888&r2=887889&view=diff
==============================================================================
---
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ContentImpl.java
(original)
+++
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/impl/ContentImpl.java
Mon Dec 7 11:32:47 2009
@@ -24,13 +24,15 @@
import org.apache.aries.application.Content;
import org.apache.aries.application.VersionRange;
+import org.apache.aries.application.utils.AppConstants;
+import org.osgi.framework.Constants;
/**
* Implementation of Content
*
*/
-public class ContentImpl implements Content
+public final class ContentImpl implements Content
{
private String content;
private String contentName;
@@ -46,6 +48,10 @@
this.attributes = new HashMap<String, String>();
this.directives = new HashMap<String, String>();
setup(content, this.attributes, this.directives);
+
+ if (!!!attributes.containsKey(Constants.VERSION_ATTRIBUTE)) {
+ attributes.put(Constants.VERSION_ATTRIBUTE,
AppConstants.DEFAULT_VERSION);
+ }
}
public String getContent() {
@@ -100,6 +106,34 @@
return vi;
}
+ @Override
+ public String toString()
+ {
+ return content;
+ }
+
+ @Override
+ public boolean equals(Object other)
+ {
+ if (other == this) return true;
+ if (other == null) return false;
+
+ if (other instanceof ContentImpl) {
+ ContentImpl otherContent = (ContentImpl)other;
+ return contentName.equals(otherContent.contentName) &&
+ attributes.equals(otherContent.attributes) &&
+ directives.equals(otherContent.directives);
+ }
+
+ return false;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return contentName.hashCode();
+ }
+
/**
* setup attributes and directives from the Application-Content or
Import-Package
* @param content
@@ -110,7 +144,7 @@
{
String[] tokens = content.split(";");
if (tokens.length < 1) {
- throw new IllegalArgumentException("Invalid header split: " + content);
+ throw new IllegalArgumentException("Invalid content: " + content);
}
this.contentName = tokens[0].trim();
for (int i = 1; i < tokens.length; i++) {
Modified:
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/ManifestProcessor.java
URL:
http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/ManifestProcessor.java?rev=887889&r1=887888&r2=887889&view=diff
==============================================================================
---
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/ManifestProcessor.java
(original)
+++
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/ManifestProcessor.java
Mon Dec 7 11:32:47 2009
@@ -87,50 +87,40 @@
String namedAttribute = null;
- while ((line = reader.readLine()) != null) {
- String trimmedLine = line.trim();
+ do {
+ line = reader.readLine();
+
// if we get a blank line skip to the next one
- if (trimmedLine.length() == 0) continue;
- if (line.charAt(0) == ' ' && attribute != null) {
+ if (line != null && line.trim().length() == 0) continue;
+ if (line != null && line.charAt(0) == ' ' && attribute != null) {
// we have a continuation line, so add to the builder, ignoring the
// first character
- attribute.append(trimmedLine);
+ attribute.append(line.trim());
} else if (attribute == null) {
- attribute = new StringBuilder(trimmedLine);
+ attribute = new StringBuilder(line.trim());
} else if (attribute != null) {
// We have fully parsed an attribute
- namedAttribute = setAttribute(man, namedAttribute, attribute);
+ int index = attribute.indexOf(":");
+ String attributeName = attribute.substring(0, index).trim();
+ // TODO cope with index + 1 being after the end of attribute
+ String attributeValue = attribute.substring(index + 1).trim();
- attribute = new StringBuilder(trimmedLine);
- }
- }
-
- if (attribute != null) {
- setAttribute(man, namedAttribute, attribute);
- }
-
- return man;
- }
-
- private static String setAttribute(Manifest man, String namedAttribute,
StringBuilder attribute)
- {
- int index = attribute.indexOf(":");
- String attributeName = attribute.substring(0, index).trim();
- // TODO cope with index + 1 being after the end of attribute
- String attributeValue = attribute.substring(index + 1).trim();
-
- if ("Name".equals(attributeName)) {
- man.getEntries().put(attributeValue, new Attributes());
- namedAttribute = attributeValue;
- } else {
- if (namedAttribute == null) {
- man.getMainAttributes().put(new Attributes.Name(attributeName),
attributeValue);
+ if ("Name".equals(attributeName)) {
+ man.getEntries().put(attributeValue, new Attributes());
+ namedAttribute = attributeValue;
} else {
- man.getAttributes(namedAttribute).put(new
Attributes.Name(attributeName), attributeValue);
+ if (namedAttribute == null) {
+ man.getMainAttributes().put(new Attributes.Name(attributeName),
attributeValue);
+ } else {
+ man.getAttributes(namedAttribute).put(new
Attributes.Name(attributeName), attributeValue);
+ }
}
+
+ if (line != null) attribute = new StringBuilder(line.trim());
}
-
- return namedAttribute;
+ } while (line != null);
+
+ return man;
}
/**
Added:
incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/utils/ApplicationMetadataImplTest.java
URL:
http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/utils/ApplicationMetadataImplTest.java?rev=887889&view=auto
==============================================================================
---
incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/utils/ApplicationMetadataImplTest.java
(added)
+++
incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/utils/ApplicationMetadataImplTest.java
Mon Dec 7 11:32:47 2009
@@ -0,0 +1,38 @@
+/*
+ * IBM Confidential
+ *
+ * OCO Source Materials
+ *
+ * Copyright IBM Corp. 2009
+ *
+ * The source code for this program is not published or other-
+ * wise divested of its trade secrets, irrespective of what has
+ * been deposited with the U.S. Copyright Office.
+ *
+ * Change activity:
+ *
+ * Issue Date Name Description
+ * ----------- ----------- -------- ------------------------------------
+ */
+package org.apache.aries.application.utils;
+
+import java.io.IOException;
+
+import junit.framework.Assert;
+
+import org.apache.aries.application.ApplicationMetadata;
+import org.apache.aries.application.ApplicationMetadataManager;
+import org.apache.aries.application.impl.ApplicationMetadataManagerImpl;
+import org.junit.Test;
+
+public class ApplicationMetadataImplTest
+{
+ @Test
+ public void testBasicMetadataCreation() throws IOException
+ {
+ ApplicationMetadataManager manager = new ApplicationMetadataManagerImpl();
+ ApplicationMetadata app =
manager.parseApplication(getClass().getResourceAsStream("/META-INF/APPLICATION.MF"));
+
+ Assert.assertEquals("Travel Reservation", app.getApplicationName());
+ }
+}
\ No newline at end of file
Modified:
incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/utils/ManifestProcessorTest.java
URL:
http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/utils/ManifestProcessorTest.java?rev=887889&r1=887888&r2=887889&view=diff
==============================================================================
---
incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/utils/ManifestProcessorTest.java
(original)
+++
incubator/aries/trunk/application/application-utils/src/test/java/org/apache/aries/application/utils/ManifestProcessorTest.java
Mon Dec 7 11:32:47 2009
@@ -18,75 +18,30 @@
*/
package org.apache.aries.application.utils;
-import static org.apache.aries.application.utils.AppConstants.APPLICATION_MF;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.PrintWriter;
+import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.jar.Manifest;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.osgi.framework.Version;
-
import org.apache.aries.application.ApplicationMetadata;
import org.apache.aries.application.Content;
import org.apache.aries.application.VersionRange;
import org.apache.aries.application.impl.ApplicationMetadataManagerImpl;
import org.apache.aries.application.utils.manifest.ManifestProcessor;
+import org.junit.Test;
+import org.osgi.framework.Version;
public class ManifestProcessorTest
{
- private static Map<String,String> pairs = null;
-
- @Before
- public void setUp() throws Exception{
-
- //enforce ordering of the keys
- String[] keys = new String[]{
- "Manifest-Version",
- "Application-ManifestVersion",
- "Application-Name",
- "Application-SymbolicName",
- "Application-Version",
- "Application-Content",
- "Export-Package",
- "Import-Package",
- "Application-Services"
- };
-
- String [] values = new String[]{
- "1.0",
- "1.0",
- "Travel Reservation",
- "com.travel.reservation",
- "1.2",
-
"com.travel.reservation.web;version=\"[1.1.0,1.2.0)\",com.travel.reservation.business",
- "com.travel.reservation.api;version=1.2",
-
"com.travel.flight.api;version=\"[2.1.1,3.0.0)\",com.travel.rail.api;version=\"[1.0.0,2.0.0)\"",
- "services.xml"
- };
-
- //the values of the manifest
- //intentionally include a couple of long lines
- pairs = new HashMap<String, String>();
- int i = 0;
- for (String key : keys){
- pairs.put(key, values[i]);
- i++;
- }
- }
-
+ private String appName = "Travel Reservation";
+
/**
* Check a simple manifest can be read.
* @throws Exception
@@ -94,49 +49,77 @@
@Test
public void testSimpleManifest() throws Exception
{
- Manifest mf = new
Manifest(getClass().getClassLoader().getResourceAsStream("META-INF/APPLICATION.MF"));
- checkManifest(mf);
+ //the values of the manifest
+ //intentionally include a couple of long lines
+ Map<String, String> pairs = new HashMap<String, String>();
+ pairs.put("Manifest-Version", "1.0");
+ pairs.put("Application-ManifestVersion", "1.0");
+ pairs.put("Application-Name", appName );
+ pairs.put("Application-SymbolicName", "com.travel.reservation");
+ pairs.put("Application-Version", "1.2");
+ pairs.put("Application-Content",
"com.travel.reservation.web;version=\"[1.1.0,1.2.0)\",com.travel.reservation.business");
+ pairs.put("Export-Package", "com.travel.reservation.api;version=1.2");
+ pairs.put("Import-Package",
"com.travel.flight.api;version=\"[2.1.1,3.0.0)\",com.travel.rail.api;version=\"[1.0.0,2.0.0)\"");
+ pairs.put("Application-Services", "services.xml");
+
+ InputStream in =
getClass().getClassLoader().getResourceAsStream("META-INF/APPLICATION.MF");
+ Manifest mf = new Manifest(in);
+ Map<String, String> map = ManifestProcessor.readManifestIntoMap(mf);
+ assertNotNull(map);
+
+ //check all the expected keys and values
+ for (String key : pairs.keySet()){
+ assertTrue("Key: " + key + " was not found",map.containsKey(key));
+ String value = map.get(key);
+ assertNotNull("Value was not present for key: " + key ,value);
+ assertEquals("Value was not correct for key: " + key
,pairs.get(key),value);
+ }
+ //check there aren't any extra entries in the map that weren't expected
+ assertEquals("The maps did not match",pairs,map);
}
/**
- * Check a simple manifest can be parsed.
- * @throws Exception
+ * Check metadata can be extracted from a simple manifest.
*/
@Test
- public void testParseManifest() throws Exception
- {
- Manifest mf =
ManifestProcessor.parseManifest(getClass().getClassLoader().getResourceAsStream("META-INF/APPLICATION.MF"));
- checkManifest(mf);
- }
-
- private void checkManifest(Manifest mf) throws Exception
+ public void testManifestMetadata() throws Exception
{
- Map<String, String> map = ManifestProcessor.readManifestIntoMap(mf);
- assertNotNull(map);
+ ApplicationMetadataManagerImpl manager = new
ApplicationMetadataManagerImpl();
+ InputStream in =
getClass().getClassLoader().getResourceAsStream("META-INF/APPLICATION.MF");
+ ApplicationMetadata am = manager.parseApplication(in);
+ assertNotNull(am);
+
+ assertEquals(am.getApplicationName(),appName);
- assertEquals("Unexpected number of manifest entires", pairs.size(),
map.size());
-
- //check all the expected keys and values
- for (String key : pairs.keySet()){
- assertTrue("Key: " + key + " was not found",map.containsKey(key));
- String value = map.get(key);
- assertNotNull("Value was not present for key: " + key ,value);
- assertEquals("Value was not correct for key: " + key
,pairs.get(key),value);
- }
- //check there aren't any extra entries in the map that weren't expected
- assertEquals("The maps did not match",pairs,map);
+
//"com.travel.reservation.web;version=\"[1.1.0,1.2.0)\",com.travel.reservation.business",
+ List<Content> contents = am.getApplicationContents();
+ for (Content content : contents){
+ if ("com.travel.reservation.web".equals(content.getContentName())){
+ VersionRange vr = content.getVersion();
+ assertEquals(vr.getMinimumVersion(),new Version("1.1.0"));
+ assertEquals(vr.getMaximumVersion(),new Version("1.2.0"));
+ } else
if("com.travel.reservation.business".equals(content.getContentName())){
+ VersionRange vr = content.getVersion();
+ assertEquals(new Version(0,0,0), vr.getMinimumVersion());
+ } else
+ fail("Unexepcted content name " + content.getContentName());
+ }
}
+
/**
- * Check metadata can be extracted from a simple manifest.
+ * Check metadata can be extracted from a manifest that uses multiple lines
+ * for a single manifest attribute.
*/
@Test
- public void testManifestMetadata() throws Exception
+ public void testManifestMetadataWithMultiLineEntries() throws Exception
{
ApplicationMetadataManagerImpl manager = new
ApplicationMetadataManagerImpl();
- ApplicationMetadata am =
manager.parseApplication(getClass().getClassLoader().getResourceAsStream("META-INF/APPLICATION.MF"));
+
+ InputStream in =
getClass().getClassLoader().getResourceAsStream("META-INF/APPLICATION2.MF");
+
+ ApplicationMetadata am = manager.parseApplication(in);
assertNotNull(am);
- String appName = pairs.get("Application-Name");
assertEquals(am.getApplicationName(),appName);
//"com.travel.reservation.web;version=\"[1.1.0,1.2.0)\",com.travel.reservation.business",
@@ -148,9 +131,23 @@
assertEquals(vr.getMaximumVersion(),new Version("1.2.0"));
} else
if("com.travel.reservation.business".equals(content.getContentName())){
VersionRange vr = content.getVersion();
- assertNull(vr);
+ assertEquals(new Version(0,0,0), vr.getMinimumVersion());
} else
fail("Unexepcted content name " + content.getContentName());
}
}
+
+ @Test
+ public void testManifestWithoutEndingInNewLine() throws Exception
+ {
+ ApplicationMetadataManagerImpl manager = new
ApplicationMetadataManagerImpl();
+
+ InputStream in =
getClass().getClassLoader().getResourceAsStream("META-INF/APPLICATION3.MF");
+
+ ApplicationMetadata am = manager.parseApplication(in);
+ assertNotNull(am);
+
+ assertEquals("Wrong number of bundles are in the application", 1,
am.getApplicationContents().size());
+ assertEquals("Wrong bundle name",
"org.apache.aries.applications.test.bundle",
am.getApplicationContents().get(0).getContentName());
+ }
}
\ No newline at end of file
Added:
incubator/aries/trunk/application/application-utils/src/test/resources/META-INF/APPLICATION2.MF
URL:
http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/test/resources/META-INF/APPLICATION2.MF?rev=887889&view=auto
==============================================================================
---
incubator/aries/trunk/application/application-utils/src/test/resources/META-INF/APPLICATION2.MF
(added)
+++
incubator/aries/trunk/application/application-utils/src/test/resources/META-INF/APPLICATION2.MF
Mon Dec 7 11:32:47 2009
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Application-ManifestVersion: 1.0
+Application-Name: Travel Reservation
+Application-SymbolicName: com.travel.reservation
+Application-Version: 1.2
+Application-Content: com.travel.reservation.web;version="[1.1.0,1.2.0)",
+ com.travel.reservation.business,
+Export-Package: com.travel.reservation.api;version=1.2
+Import-Package: com.travel.flight.api;version="[2.1.1,3.0.0)",
+ com.travel.rail.api;version="[1.0.0,2.0.0)",
+ com.travel.credit.api;version="[2.1.0,2.1.0]",
+ com.travel.hotel.api;version="[1.5.0,2.0.0)"
+Application-Services: services.xml
Added:
incubator/aries/trunk/application/application-utils/src/test/resources/META-INF/APPLICATION3.MF
URL:
http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/test/resources/META-INF/APPLICATION3.MF?rev=887889&view=auto
==============================================================================
---
incubator/aries/trunk/application/application-utils/src/test/resources/META-INF/APPLICATION3.MF
(added)
+++
incubator/aries/trunk/application/application-utils/src/test/resources/META-INF/APPLICATION3.MF
Mon Dec 7 11:32:47 2009
@@ -0,0 +1,3 @@
+Application-SymbolicName: org.apache.aries.applications.test.app
+Application-Version: 1.4.0
+Application-Content: org.apache.aries.applications.test.bundle