mirror of https://github.com/apache/activemq.git
added base class for auto-generated test cases
git-svn-id: https://svn.apache.org/repos/asf/incubator/activemq/trunk@378481 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
83ec98be8a
commit
43112670da
|
@ -0,0 +1,216 @@
|
|||
/**
|
||||
*
|
||||
* Copyright 2005-2006 The Apache Software Foundation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.activemq.openwire;
|
||||
|
||||
import org.apache.activemq.command.ActiveMQDestination;
|
||||
import org.apache.activemq.command.ActiveMQQueue;
|
||||
import org.apache.activemq.command.ActiveMQTextMessage;
|
||||
import org.apache.activemq.command.BrokerId;
|
||||
import org.apache.activemq.command.BrokerInfo;
|
||||
import org.apache.activemq.command.ConnectionId;
|
||||
import org.apache.activemq.command.ConsumerId;
|
||||
import org.apache.activemq.command.DataStructure;
|
||||
import org.apache.activemq.command.LocalTransactionId;
|
||||
import org.apache.activemq.command.Message;
|
||||
import org.apache.activemq.command.MessageAck;
|
||||
import org.apache.activemq.command.MessageId;
|
||||
import org.apache.activemq.command.ProducerId;
|
||||
import org.apache.activemq.command.SessionId;
|
||||
import org.apache.activemq.command.TransactionId;
|
||||
import org.apache.activemq.openwire.v1.ActiveMQTextMessageTest;
|
||||
import org.apache.activemq.openwire.v1.BrokerInfoTest;
|
||||
import org.apache.activemq.openwire.v1.MessageAckTest;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.DataInputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.InputStream;
|
||||
import java.net.URI;
|
||||
import java.net.URL;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
public abstract class DataFileGeneratorTestSupport extends TestCase {
|
||||
|
||||
static final File moduleBaseDir;
|
||||
static final File controlDir;
|
||||
static final File classFileDir;
|
||||
private static Throwable singletonException = new Exception("shared exception");
|
||||
|
||||
static {
|
||||
File basedir = null;
|
||||
try {
|
||||
URL resource = DataFileGeneratorTestSupport.class.getResource("DataFileGeneratorTestSupport.class");
|
||||
URI baseURI = new URI(resource.toString()).resolve("../../../../..");
|
||||
basedir = new File(baseURI).getCanonicalFile();
|
||||
}
|
||||
catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
moduleBaseDir = basedir;
|
||||
controlDir = new File(moduleBaseDir, "src/test/resources/openwire-control");
|
||||
classFileDir = new File(moduleBaseDir, "src/test/java/org/activemq/openwire");
|
||||
}
|
||||
|
||||
private int counter;
|
||||
private OpenWireFormat openWireformat;
|
||||
|
||||
public void testControlFileIsValid() throws Exception {
|
||||
generateControlFile();
|
||||
assertControlFileIsEqual();
|
||||
}
|
||||
|
||||
public void XXX_testGenerateAndReParsingIsTheSame() throws Exception {
|
||||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
DataOutputStream ds = new DataOutputStream(buffer);
|
||||
Object expected = createObject();
|
||||
openWireformat.marshal(expected, ds);
|
||||
ds.close();
|
||||
|
||||
// now lets try parse it back again
|
||||
ByteArrayInputStream in = new ByteArrayInputStream(buffer.toByteArray());
|
||||
DataInputStream dis = new DataInputStream(in);
|
||||
Object actual = openWireformat.unmarshal(dis);
|
||||
|
||||
assertEquals("Objects should be equal", expected, actual);
|
||||
|
||||
// TODO generate a property based equality method?
|
||||
}
|
||||
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
openWireformat = createOpenWireFormat();
|
||||
}
|
||||
|
||||
public void generateControlFile() throws Exception {
|
||||
controlDir.mkdirs();
|
||||
File dataFile = new File(controlDir, getClass().getName() + ".bin");
|
||||
|
||||
FileOutputStream os = new FileOutputStream(dataFile);
|
||||
DataOutputStream ds = new DataOutputStream(os);
|
||||
openWireformat.marshal(createObject(), ds);
|
||||
ds.close();
|
||||
}
|
||||
|
||||
public InputStream generateInputStream() throws Exception {
|
||||
|
||||
ByteArrayOutputStream os = new ByteArrayOutputStream();
|
||||
DataOutputStream ds = new DataOutputStream(os);
|
||||
openWireformat.marshal(createObject(), ds);
|
||||
ds.close();
|
||||
|
||||
return new ByteArrayInputStream(os.toByteArray());
|
||||
}
|
||||
|
||||
public void assertControlFileIsEqual() throws Exception {
|
||||
File dataFile = new File(controlDir, getClass().getName() + ".bin");
|
||||
FileInputStream is1 = new FileInputStream(dataFile);
|
||||
int pos = 0;
|
||||
try {
|
||||
InputStream is2 = generateInputStream();
|
||||
int a = is1.read();
|
||||
int b = is2.read();
|
||||
pos++;
|
||||
assertEquals("Data does not match control file: " + dataFile + " at byte position " + pos, a, b);
|
||||
while (a >= 0 && b >= 0) {
|
||||
a = is1.read();
|
||||
b = is2.read();
|
||||
pos++;
|
||||
assertEquals("Data does not match control file: " + dataFile + " at byte position " + pos, a, b);
|
||||
}
|
||||
is2.close();
|
||||
}
|
||||
finally {
|
||||
is1.close();
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract Object createObject() throws Exception;
|
||||
|
||||
protected void populateObject(Object info) throws Exception {
|
||||
// empty method to allow derived classes to call super
|
||||
// to simplify generated code
|
||||
}
|
||||
|
||||
protected OpenWireFormat createOpenWireFormat() {
|
||||
OpenWireFormat wf = new OpenWireFormat();
|
||||
wf.setCacheEnabled(true);
|
||||
wf.setStackTraceEnabled(false);
|
||||
wf.setVersion(1);
|
||||
return wf;
|
||||
}
|
||||
|
||||
protected BrokerId createBrokerId(String text) {
|
||||
return new BrokerId(text);
|
||||
}
|
||||
|
||||
protected TransactionId createTransactionId(String string) {
|
||||
return new LocalTransactionId(createConnectionId(string), ++counter);
|
||||
}
|
||||
|
||||
protected ConnectionId createConnectionId(String string) {
|
||||
return new ConnectionId(string);
|
||||
}
|
||||
|
||||
protected SessionId createSessionId(String string) {
|
||||
return new SessionId(createConnectionId(string), ++counter);
|
||||
}
|
||||
|
||||
protected ProducerId createProducerId(String string) {
|
||||
return new ProducerId(createSessionId(string), ++counter);
|
||||
}
|
||||
|
||||
protected ConsumerId createConsumerId(String string) {
|
||||
return new ConsumerId(createSessionId(string), ++counter);
|
||||
}
|
||||
|
||||
protected MessageId createMessageId(String string) {
|
||||
return new MessageId(createProducerId(string), ++counter);
|
||||
}
|
||||
|
||||
protected ActiveMQDestination createActiveMQDestination(String string) {
|
||||
return new ActiveMQQueue(string);
|
||||
}
|
||||
|
||||
protected Message createMessage(String string) throws Exception {
|
||||
ActiveMQTextMessage message = (ActiveMQTextMessage) ActiveMQTextMessageTest.SINGLETON.createObject();
|
||||
message.setText(string);
|
||||
return message;
|
||||
}
|
||||
|
||||
protected BrokerInfo createBrokerInfo(String string) throws Exception {
|
||||
return (BrokerInfo) BrokerInfoTest.SINGLETON.createObject();
|
||||
}
|
||||
|
||||
protected MessageAck createMessageAck(String string) throws Exception {
|
||||
return (MessageAck) MessageAckTest.SINGLETON.createObject();
|
||||
}
|
||||
|
||||
protected DataStructure createDataStructure(String string) throws Exception {
|
||||
return createBrokerInfo(string);
|
||||
}
|
||||
|
||||
protected Throwable createThrowable(String string) {
|
||||
// we have issues with stack frames not being equal so share the same
|
||||
// exception each time
|
||||
return singletonException;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue