| /******************************************************************************* |
| * Copyright (c) 2008, 2011 IBM Corporation 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: |
| * IBM Corporation - initial API and implementation |
| * martin.kirst@s1998.tu-chemnitz.de - fixed and improved sort algorithm tests |
| *******************************************************************************/ |
| package org.eclipse.equinox.p2.tests.artifact.repository; |
| |
| import java.util.*; |
| import junit.framework.TestCase; |
| import org.eclipse.equinox.internal.p2.artifact.repository.MirrorSelector; |
| import org.eclipse.equinox.internal.p2.artifact.repository.MirrorSelector.MirrorInfo; |
| |
| /** |
| * |
| */ |
| public class MirrorSelectorTest extends TestCase { |
| |
| private List<MirrorInfo> originals; |
| |
| @Override |
| protected void setUp() throws Exception { |
| super.setUp(); |
| |
| // examples taken from real live. |
| // This is the expected order of mirrors, |
| // doesn't matter how often you're resorting ;-) |
| |
| originals = new ArrayList<MirrorSelector.MirrorInfo>(); |
| MirrorInfo mi = null; |
| |
| mi = new MirrorInfo("http://ftp.wh2.tu-dresden.de/pub/mirrors/eclipse/", 3); |
| mi.setBytesPerSecond(224906); |
| mi.incrementFailureCount(); |
| //mi.totalFailureCount = 1; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://ftp-stud.fht-esslingen.de/pub/Mirrors/eclipse/", 1); |
| mi.setBytesPerSecond(125868); |
| mi.incrementFailureCount(); |
| //mi.totalFailureCount = 1; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://mirror.netcologne.de/eclipse//", 0); |
| mi.setBytesPerSecond(199719); |
| mi.incrementFailureCount(); |
| mi.incrementFailureCount(); |
| //mi.totalFailureCount = 2; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://mirror.selfnet.de/eclipse/", 5); |
| mi.setBytesPerSecond(132379); |
| mi.incrementFailureCount(); |
| //mi.totalFailureCount = 1; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://mirror.switch.ch/eclipse/", 7); |
| mi.setBytesPerSecond(137107); |
| mi.incrementFailureCount(); |
| //mi.totalFailureCount = 1; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://www.rcp-vision.com/eclipse/eclipseMirror/", 8); |
| mi.setBytesPerSecond(128472); |
| mi.incrementFailureCount(); |
| //mi.totalFailureCount = 1; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://eclipse.mirror.garr.it/mirrors/eclipse//", 10); |
| mi.setBytesPerSecond(129359); |
| mi.incrementFailureCount(); |
| mi.incrementFailureCount(); |
| //mi.totalFailureCount = 2; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://ftp.roedu.net/pub/mirrors/eclipse.org/", 6); |
| mi.setBytesPerSecond(59587); |
| mi.incrementFailureCount(); |
| //mi.totalFailureCount = 1; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://giano.com.dist.unige.it/eclipse/", 9); |
| mi.setBytesPerSecond(85624); |
| mi.incrementFailureCount(); |
| //mi.totalFailureCount = 1; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://ftp.roedu.net/mirrors/eclipse.org//", 19); |
| mi.setBytesPerSecond(149572); |
| mi.incrementFailureCount(); |
| mi.incrementFailureCount(); |
| //mi.totalFailureCount = 2; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://ftp.ing.umu.se/mirror/eclipse/", 18); |
| mi.setBytesPerSecond(105858); |
| mi.incrementFailureCount(); |
| //mi.totalFailureCount = 1; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://mirrors.fe.up.pt/pub/eclipse//", 15); |
| mi.setBytesPerSecond(67202); |
| mi.incrementFailureCount(); |
| //mi.totalFailureCount = 1; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://ftp.heanet.ie/pub/eclipse//", 17); |
| mi.setBytesPerSecond(68067); |
| mi.incrementFailureCount(); |
| //mi.totalFailureCount = 1; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://ftp.sh.cvut.cz/MIRRORS/eclipse/", 21); |
| mi.setBytesPerSecond(73659); |
| mi.incrementFailureCount(); |
| //mi.totalFailureCount = 1; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://ftp.man.poznan.pl/eclipse/", 22); |
| mi.setBytesPerSecond(73446); |
| mi.incrementFailureCount(); |
| //mi.totalFailureCount = 1; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://eclipse.dcc.fc.up.pt/", 16); |
| mi.setBytesPerSecond(45175); |
| mi.incrementFailureCount(); |
| //mi.totalFailureCount = 1; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://eclipse.nordnet.fi/eclipse/", 23); |
| mi.setBytesPerSecond(61443); |
| mi.incrementFailureCount(); |
| //mi.totalFailureCount = 1; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://www.gtlib.gatech.edu/pub/eclipse/", 26); |
| mi.setBytesPerSecond(57637); |
| mi.incrementFailureCount(); |
| //mi.totalFailureCount = 1; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://ftp.osuosl.org/pub/eclipse//", 28); |
| mi.setBytesPerSecond(35928); |
| mi.incrementFailureCount(); |
| //mi.totalFailureCount = 1; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://mirrors.med.harvard.edu/eclipse//", 32); |
| mi.setBytesPerSecond(40683); |
| //mi.totalFailureCount = 0; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://mirrors.ibiblio.org/pub/mirrors/eclipse/", 31); |
| mi.setBytesPerSecond(34207); |
| mi.incrementFailureCount(); |
| mi.incrementFailureCount(); |
| //mi.totalFailureCount = 2; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://ftp.ussg.iu.edu/eclipse/", 33); |
| mi.setBytesPerSecond(31402); |
| mi.incrementFailureCount(); |
| //mi.totalFailureCount = 1; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://mirrors.xmission.com/eclipse/", 29); |
| mi.setBytesPerSecond(24147); |
| mi.incrementFailureCount(); |
| //mi.totalFailureCount = 1; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://ftp.osuosl.org/pub/eclipse/", 34); |
| mi.setBytesPerSecond(-1); |
| //mi.totalFailureCount = 0; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://www.ftp.saix.net/Eclipse//", 40); |
| mi.setBytesPerSecond(-1); |
| //mi.totalFailureCount = 0; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://ftp.daum.net/eclipse/", 41); |
| mi.setBytesPerSecond(-1); |
| //mi.totalFailureCount = 0; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://eclipse.stu.edu.tw/", 43); |
| mi.setBytesPerSecond(-1); |
| //mi.totalFailureCount = 0; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://eclipse.stu.edu.tw/", 44); |
| mi.setBytesPerSecond(-1); |
| //mi.totalFailureCount = 0; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://ftp.kaist.ac.kr/eclipse/", 45); |
| mi.setBytesPerSecond(-1); |
| //mi.totalFailureCount = 0; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://eclipse.stu.edu.tw//", 46); |
| mi.setBytesPerSecond(-1); |
| //mi.totalFailureCount = 0; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://ftp.tsukuba.wide.ad.jp/software/eclipse//", 47); |
| mi.setBytesPerSecond(-1); |
| //mi.totalFailureCount = 0; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://mirror.neu.edu.cn/eclipse/", 50); |
| mi.setBytesPerSecond(-1); |
| //mi.totalFailureCount = 0; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://mirror.bit.edu.cn/eclipse/", 51); |
| mi.setBytesPerSecond(-1); |
| //mi.totalFailureCount = 0; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://ftp.cs.pu.edu.tw/pub/eclipse/", 52); |
| mi.setBytesPerSecond(-1); |
| //mi.totalFailureCount = 0; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://ftp.neu.edu.cn/mirrors/eclipse/", 53); |
| mi.setBytesPerSecond(-1); |
| //mi.totalFailureCount = 0; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://download.actuatechina.com/eclipse/", 54); |
| mi.setBytesPerSecond(-1); |
| //mi.totalFailureCount = 0; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://linorg.usp.br/eclipse/", 57); |
| mi.setBytesPerSecond(-1); |
| //mi.totalFailureCount = 0; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://eclipse.c3sl.ufpr.br/", 59); |
| mi.setBytesPerSecond(-1); |
| //mi.totalFailureCount = 0; |
| originals.add(mi); |
| |
| mi = new MirrorInfo("http://download.eclipse.org/", 61); |
| mi.setBytesPerSecond(-1); |
| //mi.totalFailureCount = 0; |
| originals.add(mi); |
| |
| } |
| |
| public void testSorting() { |
| |
| long maxBytesPerSecond = 0; |
| for (MirrorInfo x : originals) { |
| maxBytesPerSecond = Math.max(maxBytesPerSecond, x.getBytesPerSecond()); |
| } |
| |
| MirrorSelector.MirrorInfoComparator comparator = new MirrorSelector.MirrorInfoComparator(maxBytesPerSecond, 0, 0); |
| |
| // do 1000 tries of randomize and new sort |
| // the result should always be the same |
| // This way we hopefully get sure, that contract of Comparator#compareTo |
| // is fulfilled. |
| for (int x = 0; x < 1000; x++) { |
| ArrayList<MirrorInfo> templist = new ArrayList<MirrorInfo>(originals); |
| Collections.shuffle(templist); |
| MirrorInfo[] mirrors = templist.toArray(new MirrorInfo[originals.size()]); |
| Arrays.sort(mirrors, comparator); |
| assertList(originals, mirrors); |
| /* |
| * ================================================================ |
| * |
| * Because of |
| * Bug 317785 - Synchronization problem in mirror selection |
| * |
| * We need an implementation of TimSort for this test. |
| * But because of incompatibility of EPL and GPL, the TimSort |
| * algorithm was removed. |
| * Instead, this test relies on the fact, that a proper implementation |
| * of Comparator will always compute the same result. |
| * When this test case runs within a JVM7, it will automatically |
| * use the new TimSort algorithm. |
| * ================================================================ |
| */ |
| } |
| |
| } |
| |
| public void testComparatorZeros() { |
| |
| MirrorSelector.MirrorInfoComparator comparator = new MirrorSelector.MirrorInfoComparator(0, 0, 0); |
| |
| assertEquals("equals", comparator.compare(originals.get(0), originals.get(0)), 0); |
| assertEquals("equals", comparator.compare(originals.get(1), originals.get(1)), 0); |
| |
| } |
| |
| /** |
| * @param originallist |
| * @param mirrors |
| */ |
| private void assertList(List<MirrorInfo> originallist, MirrorInfo[] mirrors) { |
| assertEquals("length", originallist.size(), mirrors.length); |
| for (int i = 0; i < originallist.size(); i++) { |
| assertEquals("equal mirror_" + i, originallist.get(i), mirrors[i]); |
| } |
| } |
| |
| } |