blob: 60b0012519e3b4d19843396e2b6cbe93c5575aff [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 flex.messaging.io.amf.validators;
import flex.messaging.config.ConfigMap;
import flex.messaging.io.MessageDeserializer;
import flex.messaging.io.SerializationContext;
import flex.messaging.io.amf.*;
import flex.messaging.validators.DeserializationValidator;
import macromedia.util.UnitTrace;
import org.junit.Assert;
import org.junit.Test;
import java.io.*;
import java.net.URI;
import java.net.URL;
public class AmfDeserializationValidatorTest {
@Test
public void testDeserializationValidator() {
deserializateRequest(null);
long duration1 = 0, duration2 = 0;
DeserializationValidator validator = new TestDeserializationValidator();
int n = 100; // Number of times to run the tests, use an even number.
for (int i = 0; i < n / 2; i++) {
long start1 = System.currentTimeMillis();
deserializateRequest(null);
duration1 += (System.currentTimeMillis() - start1);
long start2 = System.currentTimeMillis();
deserializateRequest(validator);
duration2 += (System.currentTimeMillis() - start2);
}
for (int i = 0; i < n / 2; i++) {
long start2 = System.currentTimeMillis();
deserializateRequest(validator);
duration2 += (System.currentTimeMillis() - start2);
long start1 = System.currentTimeMillis();
deserializateRequest(null);
duration1 += (System.currentTimeMillis() - start1);
}
if (UnitTrace.debug) // Print trace output.
{
System.out.println("AMF Deserialization Time w/o validator: " + duration1 + "ms");
System.out.println("AMF Deserialization Time w validator: " + duration2 + "ms");
}
}
private void deserializateRequest(DeserializationValidator validator) {
try {
// Find sample AMF data, or read the default file.
String sample = System.getProperty("AMF_SAMPLE_FILE");
if (sample == null || sample.length() < 1)
sample = "amf_request.xml";
URL resource = ClassLoader.getSystemResource(sample);
URI uri = new URI(resource.toString());
File testData = new File(uri.getPath());
String testDataLocation = testData.getCanonicalPath();
// Generate sample AMF request from the data file.
PipedOutputStream pout = new PipedOutputStream();
DataOutputStream dout = new DataOutputStream(pout);
DataInputStream din = new DataInputStream(new PipedInputStream(pout));
AmfTrace trace = new AmfTrace();
trace.startResponse("Serializing AMF/HTTP response");
MessageGenerator gen = new MessageGenerator();
gen.setDebugTrace(trace);
gen.setOutputStream(dout);
gen.parse(testDataLocation);
trace.endMessage();
trace.newLine();
// Create a deserializer for sample AMF request.
ActionContext context = new ActionContext();
ActionMessage message = new ActionMessage();
context.setRequestMessage(message);
SerializationContext dsContext = SerializationContext.getSerializationContext();
if (validator != null)
dsContext.setDeserializationValidator(validator);
MessageDeserializer deserializer = new AmfMessageDeserializer();
deserializer.initialize(dsContext, din, trace);
deserializer.readMessage(message, context);
trace.endMessage();
trace.newLine();
//if (UnitTrace.debug) // Print trace output.
// System.out.print(trace.toString());
} catch (Exception e) {
e.printStackTrace();
Assert.fail();
}
}
// A simple deserialization validator that simply returns true for all creation
// and assignments validations.
class TestDeserializationValidator implements DeserializationValidator {
public boolean validateAssignment(Object instance, int index, Object value) {
//System.out.println("validateAssign: [" + (instance == null? "null" : instance.getClass().getName()) + "," + index + "," + value + "]");
return true;
}
public boolean validateAssignment(Object instance, String propertyName, Object value) {
//System.out.println("validateAssign: [" + (instance == null? "null" : instance.getClass().getName()) + "," + propertyName + "," + value + "]");
return true;
}
public boolean validateCreation(Class<?> c) {
//System.out.println("validateCreate: " + (c == null? "null" : c.getName()));
return true;
}
public void initialize(String id, ConfigMap configMap) {
// No-op
}
}
}