001: /**
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */package org.apache.geronimo.kernel.config;
017:
018: import java.io.ByteArrayInputStream;
019: import java.io.ByteArrayOutputStream;
020: import java.io.IOException;
021:
022: import java.util.Collections;
023: import java.util.List;
024:
025: import javax.xml.namespace.QName;
026:
027: import junit.framework.TestCase;
028:
029: import org.apache.geronimo.gbean.AbstractName;
030: import org.apache.geronimo.gbean.AbstractNameQuery;
031: import org.apache.geronimo.gbean.GBeanData;
032: import org.apache.geronimo.kernel.Jsr77Naming;
033: import org.apache.geronimo.kernel.MockGBean;
034: import org.apache.geronimo.kernel.config.xstream.XStreamConfigurationMarshaler;
035: import org.apache.geronimo.kernel.repository.Artifact;
036:
037: /**
038: * @version $Rev: 604588 $ $Date: 2007-12-16 01:41:36 -0800 (Sun, 16 Dec 2007) $
039: */
040: public class ConfigurationUtilTest extends TestCase {
041: private XStreamConfigurationMarshaler xstreamConfigurationMarshaler = new XStreamConfigurationMarshaler();
042: private SerializedConfigurationMarshaler serializedConfigurationMarshaler = new SerializedConfigurationMarshaler();
043: private static Artifact artifact3 = new Artifact("test", "3",
044: "3.3", "bar");
045: private static final Jsr77Naming naming = new Jsr77Naming();
046:
047: public void test() throws Exception {
048: ConfigurationData configurationData = createConfigurationData(serializedConfigurationMarshaler);
049: ConfigurationData data = copy(configurationData,
050: serializedConfigurationMarshaler,
051: serializedConfigurationMarshaler);
052: assertEquals(data, configurationData);
053:
054: configurationData = createConfigurationData(xstreamConfigurationMarshaler);
055: ByteArrayOutputStream out = new ByteArrayOutputStream();
056: xstreamConfigurationMarshaler.writeConfigurationData(
057: configurationData, out);
058: data = copy(configurationData, xstreamConfigurationMarshaler,
059: xstreamConfigurationMarshaler);
060: assertEquals(data, configurationData);
061:
062: configurationData = createConfigurationData(serializedConfigurationMarshaler);
063: data = copy(configurationData,
064: serializedConfigurationMarshaler,
065: xstreamConfigurationMarshaler);
066: assertEquals(data, configurationData);
067:
068: configurationData = createConfigurationData(xstreamConfigurationMarshaler);
069: data = copy(configurationData, xstreamConfigurationMarshaler,
070: serializedConfigurationMarshaler);
071: assertEquals(data, configurationData);
072: }
073:
074: private void assertEquals(ConfigurationData data,
075: ConfigurationData configurationData)
076: throws InvalidConfigException {
077: List gbeans;
078: gbeans = data.getGBeans(getClass().getClassLoader());
079: assertEquals(configurationData.getId(), data.getId());
080: ConfigurationData data3 = (ConfigurationData) data
081: .getChildConfigurations().get("testmodule");
082: gbeans = data3.getGBeans(getClass().getClassLoader());
083: assertEquals(new QName("namespaceURI", "localPart"),
084: ((GBeanData) gbeans.get(0)).getAttribute("someObject"));
085: }
086:
087: private static ConfigurationData copy(
088: ConfigurationData configurationData,
089: ConfigurationMarshaler writer, ConfigurationMarshaler reader)
090: throws IOException, ClassNotFoundException {
091: ByteArrayOutputStream out = new ByteArrayOutputStream();
092: writer.writeConfigurationData(configurationData, out);
093: ByteArrayInputStream in = new ByteArrayInputStream(out
094: .toByteArray());
095: ConfigurationData data = reader.readConfigurationData(in);
096: return data;
097: }
098:
099: private static ConfigurationData createConfigurationData(
100: ConfigurationMarshaler marshaler) throws Exception {
101: Artifact artifact1 = new Artifact("test", "1", "1.1", "bar");
102: ConfigurationData configurationData = new ConfigurationData(
103: artifact1, naming, marshaler
104: .newGBeanState(Collections.EMPTY_SET));
105:
106: GBeanData mockBean1 = configurationData.addGBean(
107: "MyMockGMBean1", MockGBean.getGBeanInfo());
108: AbstractName gbeanName1 = mockBean1.getAbstractName();
109: mockBean1.setAttribute("value", "1234");
110: mockBean1.setAttribute("name", "child");
111: mockBean1.setAttribute("finalInt", new Integer(1));
112:
113: GBeanData mockBean2 = configurationData.addGBean(
114: "MyMockGMBean2", MockGBean.getGBeanInfo());
115: mockBean2.setAttribute("value", "5678");
116: mockBean2.setAttribute("name", "Parent");
117: mockBean2.setAttribute("finalInt", new Integer(3));
118: mockBean2.setAttribute("someObject", new GBeanData(gbeanName1,
119: MockGBean.getGBeanInfo()));
120: mockBean2.setReferencePattern("MockEndpoint", gbeanName1);
121: mockBean2.setReferencePattern("EndpointCollection",
122: new AbstractNameQuery(gbeanName1, MockGBean
123: .getGBeanInfo().getInterfaces()));
124:
125: ConfigurationData childConfigurationData = new ConfigurationData(
126: artifact3, naming, marshaler
127: .newGBeanState(Collections.EMPTY_SET));
128: configurationData.addChildConfiguration("testmodule",
129: childConfigurationData);
130: GBeanData childConfigurationGBean = childConfigurationData
131: .addGBean("ChildConfigurationGBean", MockGBean
132: .getGBeanInfo());
133: childConfigurationGBean.setAttribute("name", "foo");
134: childConfigurationGBean.setAttribute("someObject", new QName(
135: "namespaceURI", "localPart"));
136:
137: return configurationData;
138: }
139: }
|