Package org.archive.wayback.resourceindex.distributed

Source Code of org.archive.wayback.resourceindex.distributed.AlphaPartitionedIndexTest

/*
*  This file is part of the Wayback archival access software
*   (http://archive-access.sourceforge.net/projects/wayback/).
*
*  Licensed to the Internet Archive (IA) by one or more individual
*  contributors.
*
*  The IA 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 org.archive.wayback.resourceindex.distributed;

import com.google.common.util.concurrent.Uninterruptibles;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.concurrent.TimeUnit;

import org.apache.commons.httpclient.URIException;
import org.archive.wayback.core.WaybackRequest;
import org.archive.wayback.exception.BadQueryException;
import org.archive.wayback.exception.ResourceIndexNotAvailableException;

import junit.framework.TestCase;

/**
*
*
* @author brad
* @version $Date$, $Revision$
*/
public class AlphaPartitionedIndexTest extends TestCase {

  private File rangeMapFile;
  private AlphaPartitionedIndex index = null;

  /*
   * @see TestCase#setUp()
   */
  protected void setUp() throws Exception {
    super.setUp();
    createRangeMapFile();
    index = new AlphaPartitionedIndex();
    index.setCheckInterval(1000);
    index.setMapPath(rangeMapFile.getAbsolutePath());
  }

  /*
   * @see TestCase#tearDown()
   */
  protected void tearDown() throws Exception {
    super.tearDown();
    rangeMapFile.delete();
  }

  /**
   * @throws Exception
   */
  public void testFindRange() throws Exception {
    testFindRange(index,"bam.com/","b");
    testFindRange(index,"banana.com/","c");
    testFindRange(index,"banana.net/","c");
    testFindRange(index,"banana.au/","b");
    testFindRange(index,"ape.com/","a");
    testFindRange(index,"apple.com/","b");
    testFindRange(index,"aardvark.com/","a");
    testFindRange(index,"dantheman.com/","d");
    testFindRange(index,"cool.com/","c");
    testFindRange(index,"cups.com/","d");
    testFindRange(index,"zoo.com/","d");
    testFindRange(index,"207.241.2.2/","a");
    testFindRange(index,"zztop.com/","d");
  }

  /**
   * @throws Exception
   */
  public void testGroupBalance() throws Exception {
    WaybackRequest r = new WaybackRequest();
    r.setRequestUrl(index.canonicalize("apple.com/"));
    RangeGroup g = index.getRangeGroupForRequest(r);
    assertEquals(g.getName(),"b");

        RangeMember b1 = g.members.get("b1");
    RangeMember b2 = g.members.get("b2");
    assertEquals(b1.getUrlBase(),"b1");
    assertEquals(b2.getUrlBase(),"b2");

    b1.noteConnectionStart();
    // b1 => 1
    // b2 => 0
    assertEquals(b2, g.findBestMember());
    b2.noteConnectionStart();
    // b1 => 1
    // b2 => 1
    b1.noteConnectionStart();
    // b1 => 2
    // b2 => 1
    assertEquals(b2, g.findBestMember());
    b1.noteConnectionSuccess();
    // b1 => 1
    // b2 => 1
    b1.noteConnectionStart();
    // b1 => 2
    // b2 => 1
    assertEquals(b2, g.findBestMember());
    b2.noteConnectionStart();
    // b1 => 2
    // b2 => 2
    b1.noteConnectionSuccess();
    // b1 => 1
    // b2 => 2
    assertEquals(b1, g.findBestMember());
    b1.noteConnectionStart();
    // b1 => 2
    // b2 => 2
    b1.noteConnectionStart();
    // b1 => 3
    // b2 => 2
    b2.noteConnectionSuccess();
    // b1 => 3
    // b2 => 1
    assertEquals(b2, g.findBestMember());
    g.findBestMember().noteConnectionStart();   
    // b1 => 3
    // b2 => 2
    assertEquals(b2, g.findBestMember());
    assertEquals(b2, g.findBestMember());
    g.findBestMember().noteConnectionStart();   
    // b1 => 3
    // b2 => 3
    b1.noteConnectionSuccess();
    // b1 => 2
    // b2 => 3
    assertEquals(b1, g.findBestMember());
    b1.noteConnectionFailure();
    // b1 => 1-X
    // b2 => 3
    assertEquals(b2, g.findBestMember());
    b2.noteConnectionStart();
    // b1 => 1-X
    // b2 => 4
    assertEquals(b2, g.findBestMember());
    b2.noteConnectionStart();
    // b1 => 1-X
    // b2 => 5
   
        Uninterruptibles.sleepUninterruptibly(1, TimeUnit.MILLISECONDS);
   
    b1.noteConnectionSuccess();
    // b1 => 0
    // b2 => 5
    assertEquals(b1, g.findBestMember());
    b1.noteConnectionStart();
    // b1 => 1
    // b2 => 5
    b1.noteConnectionStart();
    b1.noteConnectionStart();
    b1.noteConnectionStart();
    b1.noteConnectionStart();
    b1.noteConnectionStart();
    // b1 => 6
    // b2 => 5
    assertEquals(b2, g.findBestMember());
    b2.noteConnectionStart();
    // b1 => 6
    // b2 => 6
        assertEquals(6, b1.getWeight());
        assertEquals(6, b2.getWeight());
  }

  private void testFindRange(final AlphaPartitionedIndex apIndex,
      final String url, final String wantGroup) throws URIException,
      BadQueryException, ResourceIndexNotAvailableException {
    WaybackRequest r = new WaybackRequest();
    r.setRequestUrl(apIndex.canonicalize(url));
    RangeGroup g = apIndex.getRangeGroupForRequest(r);
    assertEquals(g.getName(),wantGroup);   
  }

  private void createRangeMapFile() throws IOException {
    rangeMapFile = File.createTempFile("range-map","tmp");
    FileWriter writer = new FileWriter(rangeMapFile);
    StringBuilder sb = new StringBuilder();
    sb.append("d cups.com/ zorro.com/ d1 d2\n");
    sb.append("b apple.com/ banana.com/ b1 b2\n");
    sb.append("a  apple.com/ a1 a2\n");
    sb.append("c banana.com/ cups.com/ c1 c2\n");
    writer.write(sb.toString());
    writer.close();
  }
}
TOP

Related Classes of org.archive.wayback.resourceindex.distributed.AlphaPartitionedIndexTest

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.