/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 2004-2013 Oracle and/or its affiliates. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
* and Distribution License("CDDL") (collectively, the "License"). You
* may not use this file except in compliance with the License. You can
* obtain a copy of the License at
* http://glassfish.java.net/public/CDDL+GPL_1_1.html
* or packager/legal/LICENSE.txt. See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each
* file and include the License file at packager/legal/LICENSE.txt.
*
* GPL Classpath Exception:
* Oracle designates this particular file as subject to the "Classpath"
* exception as provided by Oracle in the GPL Version 2 section of the License
* file that accompanied this code.
*
* Modifications:
* If applicable, add the following below the License Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyright [year] [name of copyright owner]"
*
* Contributor(s):
* If you wish your version of this file to be governed by only the CDDL or
* only the GPL Version 2, indicate your decision by adding "[Contributor]
* elects to include this software in this distribution under the [CDDL or GPL
* Version 2] license." If you don't indicate a single choice of license, a
* recipient has the option to distribute your version of this file under
* either the CDDL, the GPL Version 2 or to extend the choice of license to
* its licensees as provided above. However, if you add GPL Version 2 code
* and therefore, elected the GPL Version 2 license, then the option applies
* only if the new code is made subject to such option by the copyright
* holder.
*/
package testutil.benchmark;
//import com.sun.xml.ws.api.streaming.XMLStreamWriterFactory;
//import org.kohsuke.args4j.Argument;
//import org.kohsuke.args4j.CmdLineException;
//import org.kohsuke.args4j.CmdLineParser;
//import org.kohsuke.args4j.Option;
import javax.xml.stream.XMLStreamWriter;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
/**
* Benchmark test driver.
*
* <p>
* For historical reasons, many of the properties can be configured
* both from system properties and command line options.
*
* @author JAX-RPC RI Development Team
*/
public class BenchmarkTests {
// @Argument
// private List<String> tests = new ArrayList<String>();
//
// @Option(name="-l",usage="test the local transport")
// private boolean uselocal;
//
// private final PrintStream out = System.out;
//
// private XMLStreamWriter writer = null;
// private String version = "2.0";
//
// @Option(name="-p",usage="package name of the benchmark. either 'doclit' or 'rpclit'")
// private String testPackage = System.getProperty("package.prefix");
//
// @Option(name="-i",usage="number of iteration for the test")
// private int iterations = getIntProperty("iterations", 100);
//
// @Option(name="-w",usage="number of iteration for the warm up")
// private int warmup = getIntProperty("warmup",100);
//
// private String state = System.getProperty("state", "first");
//
// private final String classPrefix = "Echo";
// private final String classSuffix = "Benchmark";
// private final String xmlLog = System.getProperty("java.io.tmpdir") + System.getProperty("file.separator") + "jaxrpc-benchmark.xml";
// private final String htmlLog = System.getProperty("java.io.tmpdir") + System.getProperty("file.separator") + "jaxrpc-benchmark.html";
//
// public static void main(String[] args) throws Exception {
// System.exit(new BenchmarkTests().run(args));
// }
//
public BenchmarkTests() {
// String temp = System.getProperty("uselocal");
// uselocal = temp != null && temp.equals("true");
}
//
// public int run(String[] args) throws Exception {
// CmdLineParser p = new CmdLineParser(this);
// try {
// p.parseArgument(args);
// } catch (CmdLineException e) {
// System.err.println(e);
// p.printUsage(System.err);
// return -1;
// }
//
// if(testPackage==null) {
// System.err.println("-p option is mandatory");
// return -1;
// }
//
// // ugly workaround. test code refers to this system property
// // everywhere. If you are serious about the transport independence,
// // you should be able to set a custom transport without relying
// // on a system property! But unless that is fixed, we need this.
// System.setProperty("uselocal",Boolean.toString(uselocal));
//
// boolean first = state.equalsIgnoreCase("first");
// FileOutputStream fos = new FileOutputStream(xmlLog, !first);
// writer = XMLStreamWriterFactory.create(fos, "UTF-8");
// if (first) {
// writer.writeStartElement("benchmark");
// writeEnvironment(writer);
// }
// writer.writeStartElement(testPackage);
// writer.writeAttribute("jaxrpc-version", version);
// writer.writeAttribute("jdk-version", System.getProperty("java.vm.version"));
//
// // run the tests
// if(tests.isEmpty()) {
// System.err.println("No test to run");
// return -1;
// }
//
// for( String test : tests )
// invoke(test);
//
// writer.writeEndElement();
// writer.close();
// fos.close();
// boolean last = state.equalsIgnoreCase("last");
// if (last) {
// fos = new FileOutputStream(xmlLog, true);
// fos.write("</benchmark>".getBytes());
// fos.flush();
// fos.close();
// out.println("******* XML log generated in \"" + xmlLog + "\"");
// convertToHTML();
// }
//
// return 0;
// }
//
// private void invoke(String classType) throws Exception {
// if (classType.equals("\"\"")) {
// classType = "";
// }
// String className = "benchmark." + testPackage + ".client." + classPrefix + classType + classSuffix;
// Class classObject = Class.forName(className);
// Constructor ctor = classObject.getConstructor(String.class);
// Benchmark benchmark = (Benchmark)ctor.newInstance(className);
//
// double returnValue = run(benchmark,out);
//
// out.println(className + " : " + returnValue + " ns");
// writer.writeStartElement(classType.equals("") ? "All" : classType);
// writer.writeCharacters(String.valueOf(returnValue));
// writer.writeEndElement();
// cleanup();
// out.println();
// }
//
// /**
// * Run a {@link Benchmark} and returns the time it took to run.
// */
// public long run(Benchmark benchmark, PrintStream out) throws Exception {
// System.out.println("Iterations: " + iterations);
// System.out.println("Warmup: " + warmup);
// for (int i = 0; i < warmup; ++i) {
// benchmark.testOnce();
// }
//
// cleanup();
//
// long startTime = System.nanoTime();
// for (int i = 0; i < iterations; ++i) {
// benchmark.testOnce();
// }
// long endTime = System.nanoTime();
//
// long totalTime = endTime - startTime;
// return totalTime / iterations;
// }
//
// private void cleanup() throws InterruptedException {
// Runtime.getRuntime().gc();
// Thread.sleep(100);
// Runtime.getRuntime().gc();
// }
//
// private void convertToHTML()
// throws TransformerException,
// IOException {
// StreamSource xslSource = new StreamSource(new File(System.getProperty("benchmark.stylesheet")));
// Transformer trans = TransformerFactory.newInstance().newTransformer(xslSource);
// Properties props = new Properties();
// props.put(OutputKeys.OMIT_XML_DECLARATION, "yes");
// trans.setOutputProperties(props);
// trans.transform(new StreamSource(new File(xmlLog)), new StreamResult(new FileOutputStream(htmlLog)));
// out.println("******* Benchmark results are available in \"" + htmlLog + "\"");
// }
//
// private void writeEnvironment(XMLStreamWriter writer) throws Exception {
// writer.writeStartElement("environment");
//
// writer.writeStartElement("date");
// writer.writeCharacters(new Date().toString());
// writer.writeEndElement();
//
// writer.writeStartElement("os");
// writer.writeCharacters(System.getProperty("os.name") + " " +
// System.getProperty("os.arch") + " " +System.getProperty("os.version"));
// writer.writeEndElement();
//
// writer.writeStartElement("memory");
// writer.writeCharacters(""+Runtime.getRuntime().maxMemory());
// writer.writeEndElement();
//
// writer.writeStartElement("warmup");
// writer.writeCharacters(System.getProperty("warmup"));
// writer.writeEndElement();
//
// writer.writeStartElement("iterations");
// writer.writeCharacters(System.getProperty("iterations"));
// writer.writeEndElement();
//
// writer.writeStartElement("local-http");
// writer.writeCharacters(uselocal ? "Local" : "HTTP");
// writer.writeEndElement();
//
// writer.writeEndElement();
// }
//
// /**
// * Gets the int value from system property.
// */
// private static int getIntProperty(String key, int defaultValue) {
// if (System.getProperty(key) == null) {
// return defaultValue;
// } else
// return new Integer(System.getProperty(key));
// }
}