blob: f4bdbb44f6c8b6ff2c547bfe51c632845ffd6e0c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2013 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.equinox.cm.test;
import java.io.IOException;
import java.lang.reflect.Array;
import java.util.*;
import junit.framework.TestCase;
import org.osgi.framework.Constants;
import org.osgi.framework.ServiceReference;
import org.osgi.service.cm.Configuration;
import org.osgi.service.cm.ConfigurationAdmin;
public class ConfigurationDictionaryTest extends TestCase {
private ConfigurationAdmin cm;
private ServiceReference reference;
public ConfigurationDictionaryTest(String name) {
super(name);
}
protected void setUp() throws Exception {
Activator.getBundle("org.eclipse.equinox.cm").start();
reference = Activator.getBundleContext().getServiceReference(ConfigurationAdmin.class.getName());
cm = (ConfigurationAdmin) Activator.getBundleContext().getService(reference);
}
protected void tearDown() throws Exception {
Activator.getBundleContext().ungetService(reference);
Activator.getBundle("org.eclipse.equinox.cm").stop();
}
public void testGoodConfigProperties() throws Exception {
Configuration config = cm.getConfiguration("test");
config.update();
Dictionary dict = config.getProperties();
try {
dict.put("1", new String("x"));
dict.put("2", new Integer(1));
dict.put("3", new Long(1));
dict.put("4", new Float(1));
dict.put("5", new Double(1));
dict.put("6", new Byte((byte) 1));
dict.put("7", new Short((short) 1));
dict.put("8", new Character('a'));
dict.put("9", Boolean.TRUE);
dict.put("10", new String[] {"x"});
dict.put("11", new Integer[] {new Integer(1)});
dict.put("12", new Long[] {new Long(1)});
dict.put("13", new Float[] {new Float(1)});
dict.put("14", new Double[] {new Double(1)});
dict.put("15", new Byte[] {new Byte((byte) 1)});
dict.put("16", new Short[] {new Short((short) 1)});
dict.put("17", new Character[] {new Character('a')});
dict.put("18", new Boolean[] {Boolean.TRUE});
dict.put("19", new int[] {1});
dict.put("20", new long[] {1});
dict.put("21", new float[] {1});
dict.put("22", new double[] {1});
dict.put("23", new byte[] {1});
dict.put("24", new short[] {1});
dict.put("25", new char[] {'a'});
dict.put("26", new boolean[] {true});
dict.put("27", new Vector());
Vector v = new Vector();
v.add(new String("x"));
v.add(new Integer(1));
v.add(new Long(1));
v.add(new Float(1));
v.add(new Double(1));
v.add(new Byte((byte) 1));
v.add(new Short((short) 1));
v.add(new Character('a'));
v.add(Boolean.TRUE);
dict.put("28", v);
Collection c = new ArrayList();
c.add(new String("x"));
c.add(new Integer(1));
c.add(new Long(1));
c.add(new Float(1));
c.add(new Double(1));
c.add(new Byte((byte) 1));
c.add(new Short((short) 1));
c.add(new Character('a'));
c.add(Boolean.TRUE);
dict.put("29", c);
} catch (IllegalArgumentException e) {
fail(e.getMessage());
}
config.update(dict);
Dictionary dict2 = config.getProperties();
assertTrue(dict.size() == dict2.size());
Enumeration keys = dict.keys();
while (keys.hasMoreElements()) {
String key = (String) keys.nextElement();
Object value1 = dict.get(key);
Class class1 = value1.getClass();
Object value2 = dict2.get(key);
Class class2 = value2.getClass();
if (value1.getClass().isArray()) {
assertTrue(class1 == class2);
assertTrue(class1.getComponentType() == class2.getComponentType());
int arrayLength1 = Array.getLength(value1);
int arrayLength2 = Array.getLength(value1);
assertTrue(arrayLength1 == arrayLength2);
if (value1 instanceof Object[])
assertTrue(Arrays.asList((Object[]) value1).containsAll(Arrays.asList((Object[]) value2)));
} else if (value1 instanceof Collection) {
Collection c1 = (Collection) value1;
Collection c2 = (Collection) value2;
assertTrue(c1.size() == c2.size());
assertTrue(c1.containsAll(c2));
} else
assertEquals(value1, value2);
}
config.delete();
}
public void testNullKey() throws Exception {
Configuration config = cm.getConfiguration("test2");
config.update();
Dictionary dict = config.getProperties();
try {
dict.put(null, "x");
} catch (NullPointerException e) {
return;
} finally {
config.delete();
}
fail();
}
public void testNullValue() throws Exception {
Configuration config = cm.getConfiguration("test2");
config.update();
Dictionary dict = config.getProperties();
try {
dict.put("x", null);
} catch (NullPointerException e) {
return;
} finally {
config.delete();
}
fail();
}
public void testObjectValue() throws Exception {
Configuration config = cm.getConfiguration("test2");
config.update();
Dictionary dict = config.getProperties();
try {
dict.put("x", new Object());
} catch (IllegalArgumentException e) {
return;
} finally {
config.delete();
}
fail();
}
public void testObjectArray() throws Exception {
Configuration config = cm.getConfiguration("test2");
config.update();
Dictionary dict = config.getProperties();
try {
dict.put("x", new Object[] {new Object()});
} catch (IllegalArgumentException e) {
return;
} finally {
config.delete();
}
fail();
}
public void testObjectVector() throws Exception {
Configuration config = cm.getConfiguration("test2");
config.update();
Dictionary dict = config.getProperties();
try {
Vector v = new Vector();
v.add(new Object());
dict.put("x", v);
} catch (IllegalArgumentException e) {
return;
} finally {
config.delete();
}
fail();
}
public void testObjectCollection() throws Exception {
Configuration config = cm.getConfiguration("test2");
config.update();
Dictionary dict = config.getProperties();
try {
Collection c = new ArrayList();
c.add(new Object());
dict.put("x", c);
} catch (IllegalArgumentException e) {
return;
} finally {
config.delete();
}
fail();
}
public void testPutGetCustomCollection() throws Exception {
Configuration config = cm.getConfiguration("test2");
config.update();
Dictionary dict = config.getProperties();
try {
Collection c = new ArrayList() {
private static final long serialVersionUID = 1L;
};
dict.put("x", c);
config.update(dict);
} catch (IOException e) {
fail();
} finally {
config.delete();
}
}
public void testGet() throws Exception {
Configuration config = cm.getConfiguration("test2");
config.update();
Dictionary dict = config.getProperties();
try {
assertTrue(null != dict.get(Constants.SERVICE_PID));
} finally {
config.delete();
}
}
public void testGetNull() throws Exception {
Configuration config = cm.getConfiguration("test2");
config.update();
Dictionary dict = config.getProperties();
try {
dict.get(null);
} catch (NullPointerException e) {
return;
} finally {
config.delete();
}
fail();
}
public void testRemove() throws Exception {
Configuration config = cm.getConfiguration("test2");
config.update();
Dictionary dict = config.getProperties();
try {
assertFalse(dict.isEmpty());
assertTrue(null != dict.remove(Constants.SERVICE_PID));
assertTrue(dict.isEmpty());
} finally {
config.delete();
}
}
public void testRemoveNull() throws Exception {
Configuration config = cm.getConfiguration("test2");
config.update();
Dictionary dict = config.getProperties();
try {
dict.remove(null);
} catch (NullPointerException e) {
return;
} finally {
config.delete();
}
fail();
}
}