Package org.sonatype.nexus.plugins.rrb

Source Code of org.sonatype.nexus.plugins.rrb.MavenRepositoryReaderIT

/*
* Sonatype Nexus (TM) Open Source Version
* Copyright (c) 2007-2014 Sonatype, Inc.
* All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions.
*
* This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0,
* which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html.
*
* Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks
* of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the
* Eclipse Foundation. All other trademarks are the property of their respective owners.
*/
package org.sonatype.nexus.plugins.rrb;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.sonatype.nexus.proxy.repository.DefaultRemoteConnectionSettings;
import org.sonatype.nexus.proxy.repository.ProxyRepository;
import org.sonatype.nexus.proxy.repository.RemoteProxySettings;
import org.sonatype.nexus.proxy.storage.remote.DefaultRemoteStorageContext;
import org.sonatype.nexus.proxy.storage.remote.http.QueryStringBuilder;
import org.sonatype.sisu.litmus.testsupport.TestSupport;

import junit.framework.Assert;
import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.codehaus.plexus.util.StringUtils;
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.AbstractHandler;
import org.eclipse.jetty.server.nio.BlockingChannelConnector;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Mockito;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;


/**
* In this test we use example repo files that placed in the test resource catalogue To access these files locally via
* MavenRepositoryReader that requires the http-protocol we start a Jetty server
*
* @author bjorne
*/
public class MavenRepositoryReaderIT
    extends TestSupport
{
  MavenRepositoryReader reader; // The "class under test"

  Server server; // An embedded Jetty server

  String localUrl = "http://local"; // This URL doesn't matter for the tests

  String nameOfConnector; // This is the host:portnumber of the Jetty connector

  @Mock
  private QueryStringBuilder queryStringBuilder;

  @Mock
  private RemoteProxySettings remoteProxySettings;

  @Before
  public void setUp()
      throws Exception
  {
    HttpClient httpClient = new DefaultHttpClient();
    reader = new MavenRepositoryReader(httpClient, queryStringBuilder);

    // Create a Jetty server with a handler that returns the content of the
    // given target (i.e. an emulated html, S3Repo, etc, file from the test
    // resources)
    Handler handler = new AbstractHandler()
    {

      public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
          throws IOException, ServletException
      {
        String path = target;
        if (path.endsWith("/") && StringUtils.isNotEmpty(request.getParameter("prefix"))) {
          String prefix = request.getParameter("prefix");
          path = path + prefix.replaceAll("/", "-");
        }
        else if (target.endsWith("/")) {
          // might need welcome pages later.
          path += "root";
        }

        response.setStatus(HttpServletResponse.SC_OK);
        InputStream stream = this.getClass().getResourceAsStream(path);

        // added to make old tests work
        // we need to fall back to the file name that matches
        if (stream == null && path.endsWith("root")) {
          path = target;
          stream = this.getClass().getResourceAsStream(path);
        }

        if (stream == null) {
          System.out.println("Error handling: " + path);
        }

        StringBuilder result = new StringBuilder();
        BufferedReader reader = new BufferedReader(new InputStreamReader(stream));

        String line = null;
        while ((line = reader.readLine()) != null) {
          result.append(line).append(System.getProperty("line.separator"));
        }
        response.getWriter().println(result.toString());
        ((Request) request).setHandled(true);
      }
    };

    server = new Server();// We choose an arbitrary server port
    server.addConnector(new BlockingChannelConnector());
    server.setHandler(handler); // Assign the handler of incoming requests
    server.start();

    // After starting we must find out the host:port, so we know how to
    // connect to the server in the tests
    for (Connector connector : server.getConnectors()) {
      nameOfConnector = connector.getName();
      break; // We only need one connector name (and there should only be
      // one...)
    }
  }

  @After
  public void shutDown()
      throws Exception
  {
    server.stop();
  }

  /**
   * Auxiliary methods
   */
  private String getRemoteUrl() {
    return "http://" + nameOfConnector + "/";
  }

  private ProxyRepository getFakeProxyRepository(final String remoteUrl) {
    final ProxyRepository repository = Mockito.mock(ProxyRepository.class);
    Mockito.when(repository.getRemoteUrl()).thenReturn(remoteUrl);

    final DefaultRemoteStorageContext rsc = new DefaultRemoteStorageContext(null);
    rsc.setRemoteProxySettings(remoteProxySettings);
    rsc.setRemoteConnectionSettings(new DefaultRemoteConnectionSettings());
    Mockito.when(repository.getRemoteStorageContext()).thenReturn(rsc);

    return repository;
  }

  /**
   * First some tests of architypical test repos
   */
  @Test(timeout = 5000)
  public void testReadHtml() {
    List<RepositoryDirectory> result =
        reader.extract("htmlExample", localUrl, getFakeProxyRepository(getRemoteUrl()), "test");
    assertEquals(7, result.size());
  }

  @Test(timeout = 5000)
  public void testReadS3() {
    List<RepositoryDirectory> result =
        reader.extract("s3Example", localUrl, getFakeProxyRepository(getRemoteUrl()), "test");
    assertEquals(13, result.size());
  }

  @Test(timeout = 5000)
  public void testReadProtectedS3() {
    // Fetched from URI http://coova-dev.s3.amazonaws.com/mvn/
    // This S3 repo does _work_ (with maven and/or nexus proxying it), but it's setup (perms) does not allow
    // "public browsing".
    List<RepositoryDirectory> result =
        reader.extract("s3Example-foreign", localUrl,
            getFakeProxyRepository("http://coova-dev.s3.amazonaws.com/mvn/"), "test");
    assertEquals(0, result.size());
  }

  @Test(timeout = 5000)
  public void testReadArtifactory() {
    // In this test the format of the local URL is important
    localUrl =
        "http://localhost:8081/nexus/service/local/repositories/ArtyJavaNet/remotebrowser/http://repo.jfrog.org/artifactory/java.net";
    List<RepositoryDirectory> result =
        reader.extract("Artifactory.java.net.htm", localUrl, getFakeProxyRepository(getRemoteUrl()), "test");
    assertEquals(30, result.size());
  }

  /**
   * Below follows a set of tests of some typical existing repos. The respectively repo's top level is stored as a
   * file in the ordinary test resource catalog. Each file has a name indicating the repo it is taken from and an
   * extension with the date it was downloaded in the format YYYYMMDD.
   */

  @Test(timeout = 5000)
  public void testAmazon_20100118() {
    // Fetched from URI http://s3.amazonaws.com/maven.springframework.org
    List<RepositoryDirectory> result =
        reader.extract("/", localUrl, getFakeProxyRepository(getRemoteUrl() + "Amazon_20100118"), "test");
    assertEquals(997, result.size());

    for (RepositoryDirectory repositoryDirectory : result) {
      assertFalse(repositoryDirectory.getRelativePath().contains("prefix"));
      assertFalse(repositoryDirectory.getResourceURI().contains("prefix"));
    }
  }

  @Test(timeout = 5000)
  public void testAmazon_20110112_slashCom() {
    // Fetched from URI http://repository.springsource.com/?prifix=maven/bundles/release&delimiter=/
    // and http://repository.springsource.com/maven/bundles/release/com
    List<RepositoryDirectory> result =
        reader.extract("/com/", localUrl, getFakeProxyRepository(getRemoteUrl()
            + "Amazon_20110112/maven/bundles/release"), "test");
    assertEquals("Result: " + result, 1, result.size());

    RepositoryDirectory repositoryDirectory1 = result.get(0);
    Assert.assertFalse(repositoryDirectory1.isLeaf());
    Assert.assertEquals(localUrl + "/com/springsource/", repositoryDirectory1.getResourceURI());
    Assert.assertEquals("/com/springsource/", repositoryDirectory1.getRelativePath());
  }

  @Test
  // ( timeout = 5000 )
  public void testAmazon_20110112_slashRoot()
  {
    // Fetched from URI http://repository.springsource.com/?prifix=maven/bundles/release&delimiter=/
    // and http://repository.springsource.com/maven/bundles/release/
    List<RepositoryDirectory> result =
        reader.extract("/", localUrl,
            getFakeProxyRepository(getRemoteUrl() + "Amazon_20110112/maven/bundles/release"), "test");
    assertEquals("Result: " + result, 2, result.size());

    RepositoryDirectory repositoryDirectory1 = result.get(0);
    Assert.assertFalse(repositoryDirectory1.isLeaf());
    Assert.assertEquals(localUrl + "/com/", repositoryDirectory1.getResourceURI());
    Assert.assertEquals("/com/", repositoryDirectory1.getRelativePath());

    RepositoryDirectory repositoryDirectory2 = result.get(1);
    Assert.assertFalse(repositoryDirectory2.isLeaf());
    Assert.assertEquals(localUrl + "/org/", repositoryDirectory2.getResourceURI());
    Assert.assertEquals("/org/", repositoryDirectory2.getRelativePath());
  }

  @Test(timeout = 5000)
  public void testApache_Snapshots() {
    // Fetched from URI http://repository.apache.org/snapshots
    List<RepositoryDirectory> result =
        reader.extract("Apache_Snapshots_20100118", localUrl, getFakeProxyRepository(getRemoteUrl()), "test");
    assertEquals(9, result.size());
  }

  @Test(timeout = 5000)
  public void testCodehaus_Snapshots() {
    // Fetched from URI http://snapshots.repository.codehaus.org/
    List<RepositoryDirectory> result =
        reader.extract("Codehaus_Snapshots_20100118", localUrl, getFakeProxyRepository(getRemoteUrl()), "test");
    assertEquals(3, result.size());
  }

  @Test(timeout = 5000)
  public void testGoogle_Caja() {
    // Fetched from URI http://google-caja.googlecode.com/svn/maven
    List<RepositoryDirectory> result =
        reader.extract("Google_Caja_20100118", localUrl, getFakeProxyRepository(getRemoteUrl()), "test");
    assertEquals(3, result.size());
  }

  @Test(timeout = 5000)
  public void testGoogle_Oauth() {
    // Fetched from URI http://oauth.googlecode.com/svn/code/maven
    List<RepositoryDirectory> result =
        reader.extract("Google_Oauth_20100118", localUrl, getFakeProxyRepository(getRemoteUrl()), "test");
    assertEquals(4, result.size());
  }

  @Test(timeout = 5000)
  public void testJBoss_Maven_Release_Repository() {
    // Fetched from URI http://repository.jboss.org/maven2/
    List<RepositoryDirectory> result =
        reader.extract("JBoss_Maven_Release_Repository_20100118", localUrl, getFakeProxyRepository(getRemoteUrl()),
            "test");
    assertEquals(201, result.size());
  }

  @Test(timeout = 5000)
  public void testMaven_Central() {
    // Fetched from URI http://repo1.maven.org/maven2
    List<RepositoryDirectory> result =
        reader.extract("Maven_Central_20100118", localUrl, getFakeProxyRepository(getRemoteUrl()), "test");
    assertEquals(647, result.size());
  }

  @Test(timeout = 5000)
  public void testNexus_Repository_Manager() {
    // Fetched from URI http://repository.sonatype.org/content/groups/forge
    List<RepositoryDirectory> result =
        reader.extract("Nexus_Repository_Manager_20100118", localUrl, getFakeProxyRepository(getRemoteUrl()), "test");
    assertEquals(173, result.size());
  }

  @Test(timeout = 5000)
  public void testEviwares_Maven_repo() {
    // Fetched from URI http://www.eviware.com/repository/maven2/
    List<RepositoryDirectory> result =
        reader.extract("Eviwares_Maven_repo_20100118", localUrl, getFakeProxyRepository(getRemoteUrl()), "test");
    assertEquals(67, result.size());
  }

  @Test(timeout = 5000)
  public void testjavaNet_repo() {
    // Fetched from URI http://download.java.net/maven/1/
    List<RepositoryDirectory> result =
        reader.extract("java.net_repo_20100118", localUrl, getFakeProxyRepository(getRemoteUrl()), "test");
    assertEquals(94, result.size());
  }

  @Test(timeout = 5000)
  public void testCodehaus() {
    // Fetched from URI http://repository.codehaus.org/
    List<RepositoryDirectory> result =
        reader.extract("Codehaus_20100118", localUrl, getFakeProxyRepository(getRemoteUrl()), "test");
    assertEquals(5, result.size());
  }

  @Test(timeout = 5000)
  public void testjavaNet2() {
    // Fetched from URI http://download.java.net/maven/2/
    List<RepositoryDirectory> result =
        reader.extract("java.net2_20100118", localUrl, getFakeProxyRepository(getRemoteUrl()), "test");
    assertEquals(57, result.size());
  }

  @Test(timeout = 5000)
  public void testOpenIonaCom_Releases() {
    // Fetched from URI http://repo.open.iona.com/maven2/
    List<RepositoryDirectory> result =
        reader.extract("Open.iona.com_Releases_20100118", localUrl, getFakeProxyRepository(getRemoteUrl()), "test");
    assertEquals(8, result.size());
  }

    /*
    * @Test(timeout = 5000) public void testterracotta() { // Fetched from URI http://download.terracotta.org/maven2/
    * List<RepositoryDirectory> result = reader .extract(getURLForTestRepoResource("terracotta_20100118"), localUrl,
    * null, "test"); assertEquals(-1, result.size()); }
    */

  @Test(timeout = 5000)
  public void testSpringsource() {
    // Fetched from URI http://repository.springsource.com/
    List<RepositoryDirectory> result =
        reader.extract("Springsource_20100118", localUrl, getFakeProxyRepository(getRemoteUrl()), "test");
    assertEquals(995, result.size());
  }
}
TOP

Related Classes of org.sonatype.nexus.plugins.rrb.MavenRepositoryReaderIT

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.