blob: 345c1ad754632ff357ddd1712b00274f7236790c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2015 IBM 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.osgi.tests.bundles;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.osgi.container.ModuleCapability;
import org.eclipse.osgi.container.ModuleRevision;
import org.eclipse.osgi.tests.OSGiTestsActivator;
import org.osgi.framework.Bundle;
import org.osgi.framework.namespace.NativeNamespace;
import org.osgi.framework.wiring.BundleRevision;
public class NativeCodeBundleTests extends AbstractBundleTests {
public static Test suite() {
return new TestSuite(NativeCodeBundleTests.class);
}
public void testNativeCode01() throws Exception {
Bundle nativetestA1 = installer.installBundle("nativetest.a1");
nativetestA1.start();
nativetestA1.stop();
Object[] a1Results = simpleResults.getResults(1);
installer.updateBundle("nativetest.a1", "nativetest.a2");
nativetestA1.start();
nativetestA1.stop();
Object[] a2Results = simpleResults.getResults(1);
assertTrue("1.0", a1Results.length == 1);
assertTrue("1.1", a2Results.length == 1);
assertNotNull("1.2", a1Results[0]);
assertNotNull("1.3", a2Results[0]);
assertFalse("1.4", a1Results[0].equals(a2Results[0]));
}
public void testNativeCode02() throws Exception {
Bundle nativetestB1 = installer.installBundle("nativetest.b1");
nativetestB1.start();
nativetestB1.stop();
Object[] b1Results = simpleResults.getResults(1);
installer.updateBundle("nativetest.b1", "nativetest.b2");
nativetestB1.start();
nativetestB1.stop();
Object[] b2Results = simpleResults.getResults(1);
assertTrue("1.0", b1Results.length == 1);
assertTrue("1.1", b2Results.length == 1);
assertNotNull("1.2", b1Results[0]);
assertNotNull("1.3", b2Results[0]);
assertFalse("1.4", b1Results[0].equals(b2Results[0]));
}
public void testNativeCode03() throws Exception {
setNativeAttribute("nativecodetest", "1");
Bundle nativetestC = installer.installBundle("nativetest.c");
nativetestC.start();
nativetestC.stop();
Object[] results = simpleResults.getResults(1);
assertTrue("1.0", results.length == 1);
assertEquals("1.1", "libs.test1", getContent((String) results[0]));
}
public void testNativeCode04() throws Exception {
setNativeAttribute("nativecodetest", "unresolved");
Bundle nativetestC = installer.installBundle("nativetest.c");
installer.resolveBundles(new Bundle[] {nativetestC});
assertTrue("1.0", nativetestC.getState() == Bundle.INSTALLED);
}
public void testNativeCode05() throws Exception {
setNativeAttribute("nativecodetest", "2");
Bundle nativetestC = installer.installBundle("nativetest.c");
nativetestC.start();
nativetestC.stop();
Object[] results = simpleResults.getResults(1);
assertTrue("1.0", results.length == 1);
assertEquals("1.1", "libs.test3", getContent((String) results[0]));
}
public void testNativeCode06() throws Exception {
setNativeAttribute("nativecodetest", "3");
Bundle nativetestC = installer.installBundle("nativetest.c");
nativetestC.start();
nativetestC.stop();
Object[] results = simpleResults.getResults(1);
assertTrue("1.0", results.length == 1);
assertEquals("1.1", "libs.test2", getContent((String) results[0]));
}
public void testNativeCode07() throws Exception {
Bundle nativetestC = installer.installBundle("nativetest.d");
nativetestC.start();
nativetestC.stop();
Object[] results = simpleResults.getResults(1);
assertTrue("1.0", results.length == 1);
assertNull("1.1", results[0]);
}
public void testNativeCode08() throws Exception {
setNativeAttribute("nativecodetest", "4");
Bundle nativetestC = installer.installBundle("nativetest.c");
nativetestC.start();
nativetestC.stop();
Object[] results = simpleResults.getResults(1);
assertTrue("1.0", results.length == 1);
// will be null since the native path does not exist
assertNull("1.1", results[0]);
}
public void testNativeCode09() throws Exception {
setNativeAttribute("nativecodetest", "1");
Bundle nativetest = installer.installBundle("nativetest.e");
nativetest.start();
nativetest.stop();
Object[] results = simpleResults.getResults(1);
assertTrue("1.0", results.length == 1);
assertEquals("1.1", "libs.test1", getContent((String) results[0]));
}
private String getContent(String file) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
try {
return br.readLine();
} finally {
br.close();
}
}
private void setNativeAttribute(String key, String value) {
Bundle systemBundle = OSGiTestsActivator.getContext().getBundle(0);
ModuleRevision systemRevision = (ModuleRevision) systemBundle.adapt(BundleRevision.class);
ModuleCapability nativeCapability = systemRevision.getModuleCapabilities(NativeNamespace.NATIVE_NAMESPACE).get(0);
Map attrs = new HashMap(nativeCapability.getAttributes());
attrs.put(key, value);
nativeCapability.setTransientAttrs(attrs);
}
}