Package org.eclipse.ecf.tests.filetransfer

Source Code of org.eclipse.ecf.tests.filetransfer.URLRetrieveTest

/****************************************************************************
* Copyright (c) 2004 Composent, Inc., and others.
* 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:
*    Composent, Inc. - initial API and implementation
*****************************************************************************/

package org.eclipse.ecf.tests.filetransfer;

import java.io.File;
import java.io.IOException;
import java.net.ConnectException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map;

import org.apache.commons.httpclient.server.HttpRequestHandler;
import org.apache.commons.httpclient.server.ResponseWriter;
import org.apache.commons.httpclient.server.SimpleHttpServer;
import org.apache.commons.httpclient.server.SimpleHttpServerConnection;
import org.apache.commons.httpclient.server.SimpleRequest;
import org.eclipse.ecf.filetransfer.IFileTransferListener;
import org.eclipse.ecf.filetransfer.events.IFileTransferConnectStartEvent;
import org.eclipse.ecf.filetransfer.events.IIncomingFileTransferReceiveDataEvent;
import org.eclipse.ecf.filetransfer.events.IIncomingFileTransferReceiveStartEvent;
import org.eclipse.ecf.filetransfer.identity.IFileID;
import org.eclipse.ecf.internal.tests.filetransfer.httpserver.SimpleServer;

public class URLRetrieveTest extends AbstractRetrieveTestCase {

  public static final String HTTP_RETRIEVE = "http://www.eclipse.org/ecf/ip_log.html";
  public static final String HTTP_RETRIEVE1 = "http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops/R-3.4.2-200902111700/jarprocessor.jar&url=http://ftp.osuosl.org/pub/eclipse/eclipse/downloads/drops/R-3.6.1-201009090800/jarprocessor.jar&mirror_id=272";
  public static final String HTTP_RETRIEVE_PORT = "http://www.eclipse.org:80/ecf/ip_log.html";
  private static final String HTTP_RETRIEVE_HOST_ONLY = "http://www.google.com";

  public static final String HTTPS_RETRIEVE = "https://www.verisign.com";
  public static final String HTTP_404_FAIL_RETRIEVE = "http://www.google.com/googleliciousafdasdfasdfasdf";
  public static final String HTTP_BAD_URL = "http:ddasdf12121212";
  public static final String HTTP_MALFORMED_URL = "http://malformed:-1";
  public static final String HTTP_RETRIEVE_NON_CANONICAL_URL = "http://www.eclipse.org:80///ecf////ip_log.html";
 
  private static final String FTP_RETRIEVE = "ftp://ftp.osuosl.org/pub/eclipse/rt/ecf/3.6.1/org.eclipse.ecf.sdk_3.6.1.v20130605-1748.zip";
 
  // See bug 237936
  private static final String BUG_237936_URL = "http://www.eclipse.org/downloads/download.php?file=/webtools/updates/site.xml&format=xml&countryCode=us&timeZone=-5&responseType=xml";

  File tmpFile = null;
  private SimpleServer server;

  /*
   * (non-Javadoc)
   *
   * @see junit.framework.TestCase#setUp()
   */
  protected void setUp() throws Exception {
    super.setUp();
    tmpFile = File.createTempFile("ECFTest", "");
    server = new SimpleServer(getName());
    SimpleHttpServer simple = server.getSimpleHttpServer();
    simple.setRequestHandler(new HttpRequestHandler() {

      public boolean processRequest(SimpleHttpServerConnection conn,
          SimpleRequest request) throws IOException {
        trace("Responding to request "
            + request.getRequestLine());
        ResponseWriter w = conn.getWriter();
        writeLines(w, new String[] { "HTTP/1.0 200 OK",
            "Content-Length: 2",
            "Content-Type: text/plain; charset=UTF-8", "" });
        w.flush();
        for (int i = 0; i < 2; i++) {
          w.write("x");
        }
        w.flush();
        conn.setKeepAlive(true);
        return true;
      }

    });
  }

  /*
   * (non-Javadoc)
   *
   * @see junit.framework.TestCase#tearDown()
   */
  protected void tearDown() throws Exception {
    super.tearDown();
    if (server != null) {
      server.shutdown();
    }
    server = null;
    if (tmpFile != null)
      tmpFile.delete();
    tmpFile = null;
  }
 
 
  /* (non-Javadoc)
   * @see org.eclipse.ecf.tests.filetransfer.AbstractRetrieveTestCase#handleStartConnectEvent(org.eclipse.ecf.filetransfer.events.IFileTransferConnectStartEvent)
   */
  protected void handleStartConnectEvent(IFileTransferConnectStartEvent event) {
    super.handleStartConnectEvent(event);
  }

  /* (non-Javadoc)
   * @see org.eclipse.ecf.tests.filetransfer.AbstractRetrieveTestCase#handleStartEvent(org.eclipse.ecf.filetransfer.events.IIncomingFileTransferReceiveStartEvent)
   */
  protected void handleStartEvent(IIncomingFileTransferReceiveStartEvent event) {
    super.handleStartEvent(event);
    assertNotNull(event.getFileID());
    assertNotNull(event.getFileID().getFilename());
    Map responseHeaders = event.getResponseHeaders();
    assertNotNull(responseHeaders);
    trace("responseHeaders="+responseHeaders);
    try {
      incomingFileTransfer = event.receive(tmpFile);
    } catch (final IOException e) {
      fail(e.getLocalizedMessage());
    }
  }

 
  protected void testReceive(String url) throws Exception {
    assertNotNull(retrieveAdapter);
    final IFileTransferListener listener = createFileTransferListener();
    final IFileID fileID = createFileID(new URL(url));
    retrieveAdapter.sendRetrieveRequest(fileID, listener, null);

    waitForDone(360000);

    assertHasEvent(startEvents, IIncomingFileTransferReceiveStartEvent.class);
    assertHasMoreThanEventCount(dataEvents, IIncomingFileTransferReceiveDataEvent.class, 0);
    assertDoneOK();

    assertTrue(tmpFile.exists());
    assertTrue(tmpFile.length() > 0);
  }

  protected void testReceiveFails(String url) throws Exception {
    assertNotNull(retrieveAdapter);
    final IFileTransferListener listener = createFileTransferListener();
    try {
      final IFileID fileID = createFileID(new URL(url));
      retrieveAdapter.sendRetrieveRequest(fileID, listener, null);
    } catch (Exception e) {
      e.printStackTrace();
      fail(e.toString());
    }

    waitForDone(10000);

    assertHasNoEvent(startEvents, IIncomingFileTransferReceiveStartEvent.class);
    assertHasNoEvent(dataEvents, IIncomingFileTransferReceiveDataEvent.class);
    assertHasDoneEvent();
  }

  public void testReceiveFile() throws Exception {
    //addProxy("composent.com",3129,"foo\\bar","password");
    testReceive(HTTP_RETRIEVE);
  }

  public void testReceiveFile1() throws Exception {
    //addProxy("composent.com",3129,"foo\\bar","password");
    testReceive(HTTP_RETRIEVE1);
  }

  public void testReceiveHostOnly() throws Exception {
    //addProxy("composent.com",3129,"foo\\bar","password");
    testReceive(HTTP_RETRIEVE_HOST_ONLY);
  }
 
  public void testReceiveFilePort() throws Exception {
    testReceive(HTTP_RETRIEVE_PORT);
  }
 
  private static void writeLines(ResponseWriter w, String[] lines)
      throws IOException {
    for (int i = 0; i < lines.length; i++) {
      w.println(lines[i]);
    }
  }
 

  public void testReceiveFilePort2() throws Exception {
    String url = server.getServerURL();
    assertTrue(url, url.matches("\\Ahttp://localhost:[0-9]+\\Z"));
    testReceive(url);
  }

  public void testReceiveFilePort3() throws Exception {
    String url = server.getServerURL() + "/";
    assertTrue(url, url.matches("\\Ahttp://localhost:[0-9]+/\\Z"));
    testReceive(url);
  }
 
  public void testReceiveFilePort4() throws Exception {
    String url = server.getServerURL() + "/index.html";
    assertTrue(url, url.matches("\\Ahttp://localhost:[0-9]+/index.html\\Z"));
    testReceive(url);
  }

  public void testReceiveNonCanonicalURLPath() throws Exception {
    //addProxy("composent.com",3129,"foo\\bar","password");
    testReceive(HTTP_RETRIEVE_NON_CANONICAL_URL);
  }

  public void testReceiveNonCanonicalURLPathLocalHost() throws Exception {
    String url = server.getServerURL() + "//foo";
    assertTrue(url, url.matches("\\Ahttp://localhost:[0-9]+//foo\\Z"));
    testReceive(url);
  }

  public void testFTPReceiveFile() throws Exception {
    testReceive(FTP_RETRIEVE);
  }
 
  public void testHttpsReceiveFile() throws Exception {
    testReceive(HTTPS_RETRIEVE);
  }

  public void testFailedReceive() throws Exception {
    try {
      testReceiveFails(HTTP_404_FAIL_RETRIEVE);
      assertDoneExceptionAfterServerResponse(HttpURLConnection.HTTP_NOT_FOUND);
    } catch (final Exception e) {
      e.printStackTrace();
      fail(e.toString());
    }
  }
 
  public void testRetrieveBadURL() throws Exception {
    try {
      testReceiveFails(HTTP_BAD_URL);
      assertDoneExceptionBeforeServerResponse(ConnectException.class);
    } catch (final Exception e) {
      e.printStackTrace();
      fail(e.toString());
    }
  }

  public void testReceiveGzip() throws Exception {
    testReceive(BUG_237936_URL);
  }

  public static final String HTTP_RETRIEVE_GZFILE = "http://download.eclipse.org/eclipse/updates/3.4/plugins/javax.servlet.jsp_2.0.0.v200806031607.jar.pack.gz";
  public static final String HTTP_RETRIEVE_GZFILE_MIRROR = "http://mirrors.xmission.com/eclipse/eclipse/updates/3.4//plugins/javax.servlet.jsp_2.0.0.v200806031607.jar.pack.gz";

  public void testReceiveGzipWithGZFile() throws Exception {
    tmpFile = File.createTempFile("foo", "something.pack.gz");
    testReceive(HTTP_RETRIEVE_GZFILE);
    if (tmpFile != null) {
      System.out.println(tmpFile.length());
      assertTrue("4.0", tmpFile.length() < 50000);
    }
  }
 
  public void testReceiveGzipWithGZFileFromMirror() throws Exception {
    tmpFile = File.createTempFile("foo", "something.pack.gz");
    testReceive(HTTP_RETRIEVE_GZFILE_MIRROR);
    if (tmpFile != null) {
      System.out.println(tmpFile.length());
      assertTrue("4.0", tmpFile.length() < 50000);
    }
  }
 
}
TOP

Related Classes of org.eclipse.ecf.tests.filetransfer.URLRetrieveTest

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.