Package org.jacoco.ant

Source Code of org.jacoco.ant.DumpTask

/*******************************************************************************
* Copyright (c) 2009, 2014 Mountainminds GmbH & Co. KG and Contributors
* 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:
*    Brock Janiczak - initial API and implementation
*   
*******************************************************************************/
package org.jacoco.ant;

import static java.lang.String.format;

import java.io.File;
import java.io.IOException;
import java.net.InetAddress;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
import org.jacoco.core.runtime.AgentOptions;
import org.jacoco.core.tools.ExecDumpClient;
import org.jacoco.core.tools.ExecFileLoader;

/**
* Ant task for remotely controlling an application that is running with the
* tcpserver output mode
*/
public class DumpTask extends Task {

  private boolean dump = true;
  private boolean reset = false;
  private File destfile = null;
  private String address = AgentOptions.DEFAULT_ADDRESS;
  private int port = AgentOptions.DEFAULT_PORT;
  private int retryCount = 10;
  private boolean append = true;

  /**
   * Sets the location of the execution data file to write. This parameter is
   * required when dump is <code>true</code>. Default is
   * <code>jacoco.exec</code>
   *
   * @param destfile
   *            Location to write execution data to
   */
  public void setDestfile(final File destfile) {
    this.destfile = destfile;
  }

  /**
   * IP Address or hostname to connect to. Defaults to <code>localhost</code>
   *
   * @param address
   *            IP Address or hostname to connect to
   */
  public void setAddress(final String address) {
    this.address = address;
  }

  /**
   * Port number to connect to. Default is <code>6300</code>
   *
   * @param port
   *            Port to connect to
   */
  public void setPort(final int port) {
    this.port = port;
  }

  /**
   * Number of retries which the goal will attempt to establish a connection.
   * This can be used to wait until the target JVM is successfully launched.
   *
   * @param retryCount
   *            number of retries
   */
  public void setRetryCount(final int retryCount) {
    this.retryCount = retryCount;
  }

  /**
   * <code>true</code> if the destination file it to be appended to.
   * <code>false</code> if the file is to be overwritten
   *
   * @param append
   *            <code>true</code> if the destination file should be appended
   *            to
   */
  public void setAppend(final boolean append) {
    this.append = append;
  }

  /**
   * Sets whether execution data should be downloaded from the remote host.
   * Defaults to <code>true</code>
   *
   * @param dump
   *            <code>true</code> to download execution data
   */
  public void setDump(final boolean dump) {
    this.dump = dump;
  }

  /**
   * Sets whether a reset command should be sent after the execution data has
   * been dumped. Defaults to <code>false</code>
   *
   * @param reset
   *            <code>true</code> to reset execution data
   */
  public void setReset(final boolean reset) {
    this.reset = reset;
  }

  @Override
  public void execute() throws BuildException {

    if (port <= 0) {
      throw new BuildException("Invalid port value", getLocation());
    }
    if (dump && destfile == null) {
      throw new BuildException(
          "Destination file is required when dumping execution data",
          getLocation());
    }

    final ExecDumpClient client = new ExecDumpClient() {
      @Override
      protected void onConnecting(final InetAddress address,
          final int port) {
        log(format("Connecting to %s:%s", address,
            Integer.valueOf(port)));
      }

      @Override
      protected void onConnectionFailure(final IOException exception) {
        log(exception.getMessage());
      }
    };
    client.setDump(dump);
    client.setReset(reset);
    client.setRetryCount(retryCount);

    try {
      final ExecFileLoader loader = client.dump(address, port);
      if (dump) {
        log(format("Dumping execution data to %s",
            destfile.getAbsolutePath()));
        loader.save(destfile, append);
      }
    } catch (final IOException e) {
      throw new BuildException("Unable to dump coverage data", e,
          getLocation());
    }
  }

}
TOP

Related Classes of org.jacoco.ant.DumpTask

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.