package org.dcache.webadmin.model.dataaccess.impl;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import diskCacheV111.pools.PoolCostInfo;
import diskCacheV111.pools.PoolV2Mode;
import org.dcache.pool.classic.IoQueueManager;
import org.dcache.webadmin.model.businessobjects.Pool;
import org.dcache.webadmin.view.beans.PoolSpaceBean;
/**
* XML-Data Source for Unit Tests with standardized XML-Output.
* @author jans
*/
public class XMLDataGathererHelper {
public static final String POOL1_NAME = "myFirstPool";
public static final String POOL1_DOMAIN = "patrickxenvm02Domain";
public static final boolean IS_POOL1_ENABLED = true;
public static final long POOL1_FREE_SPACE = 2147367538;
public static final long POOL1_PRECIOUS_SPACE = 16110;
public static final long POOL1_TOTAL_SPACE = 2147483648L;
public static final long POOL1_USED_SPACE = 116110;
public static final long POOL1_REMOVABLE_SPACE = 100000;
private static final MoverQueue POOL1_MOVERS = new MoverQueue(0, 100, 0);
private static final MoverQueue POOL1_RESTORES = new MoverQueue(0, 100, 0);
private static final MoverQueue POOL1_STORES = new MoverQueue(0, 100, 0);
private static final MoverQueue POOL1_P2PSERVER = new MoverQueue(0, 100, 0);
private static final MoverQueue POOL1_P2PCLIENT = new MoverQueue(10, 10, 10);
public static final String POOL1_POOLGROUP1 = "default";
public static final List<String> POOL1_POOLGROUPS = Arrays.asList(POOL1_POOLGROUP1);
public static final String POOL2_NAME = "mySecondPool";
public static final String POOL2_DOMAIN = "mySecondPoolDomain";
public static final boolean IS_POOL2_ENABLED = false;
public static final long POOL2_FREE_SPACE = 0;
public static final long POOL2_PRECIOUS_SPACE = 0;
public static final long POOL2_TOTAL_SPACE = 0;
public static final long POOL2_USED_SPACE = 0;
public static final String DOOR1_NAME = "DCap-patrickxenvm02@dcap-patrickxenvm02Domain";
public static final String DOOR2_NAME = "DCap-gsi-patrickxenvm02@gsidcap-patrickxenvm02Domain";
public static final String DOOR3_NAME = "GFTP-patrickxenvm02@gridftp-patrickxenvm02Domain";
public static final String TESTCELL_NAME = POOL1_NAME;
public static final String TESTCELL_DOMAIN = POOL1_DOMAIN;
public static final String TESTCELL2_NAME = POOL2_NAME;
public static final String TESTCELL2_DOMAIN = POOL2_DOMAIN;
public static final String EMPTY_TESTCELL_NAME = "";
public static final String EMPTY_TESTCELL_DOMAIN = "";
public static final String LINKGROUP1_ID = "0";
public static final String LINKGROUP1_NAME = "dteam-linkGroup-Disk";
public static final String LINKGROUP1_TOTAL_SPACE = "8085024768";
public static final String LINKGROUP1_RESERVATION1_ID = "21";
public static final String RESERVATION1_TOTAL = "123456";
public static final String RESERVATION1_FQAN = "/dteam";
public static final String emptyXmlcontent = "";
public static final String poolsXmlcontent = "<?xml version=\"1.0\"?>" +
"<dCache xmlns=\"http://www.dcache.org/2008/01/Info\">" +
"<pools><pool name=\"" + POOL1_NAME + "\">" +
"<metric name=\"enabled\" type=\"boolean\">" + IS_POOL1_ENABLED + "</metric>" +
" <metric name=\"read-only\" type=\"boolean\">false</metric>" +
" <metric name=\"last-heartbeat\" type=\"integer\">4396</metric>" +
" <queues> <queue type=\"store\">" +
" <metric name=\"max-active\" type=\"integer\">" + POOL1_STORES.getMax() + "</metric>" +
" <metric name=\"queued\" type=\"integer\">" + POOL1_STORES.getQueued() + "</metric>" +
" <metric name=\"active\" type=\"integer\">" + POOL1_STORES.getActive() + "</metric>" +
" </queue>" +
" <queue type=\"mover\">" +
" <metric name=\"max-active\" type=\"integer\">" + POOL1_MOVERS.getMax() + "</metric>" +
" <metric name=\"queued\" type=\"integer\">" + POOL1_MOVERS.getQueued() + "</metric>" +
" <metric name=\"active\" type=\"integer\">" + POOL1_MOVERS.getActive() + "</metric>" +
" </queue> <queue type=\"restore\">" +
" <metric name=\"max-active\" type=\"integer\">" + POOL1_RESTORES.getMax() + "</metric>" +
" <metric name=\"queued\" type=\"integer\">" + POOL1_RESTORES.getQueued() + "</metric>" +
" <metric name=\"active\" type=\"integer\">" + POOL1_RESTORES.getActive() + "</metric>" +
" </queue> <queue type=\"p2p-clientqueue\">" +
" <metric name=\"max-active\" type=\"integer\">" + POOL1_P2PCLIENT.getMax() + "</metric>" +
" <metric name=\"queued\" type=\"integer\">" + POOL1_P2PCLIENT.getQueued() + "</metric>" +
" <metric name=\"active\" type=\"integer\">" + POOL1_P2PCLIENT.getActive() + "</metric>" +
" </queue> <queue type=\"p2p-queue\">" +
" <metric name=\"max-active\" type=\"integer\">" + POOL1_P2PSERVER.getMax() + "</metric>" +
" <metric name=\"queued\" type=\"integer\">" + POOL1_P2PSERVER.getQueued() + "</metric> " +
" <metric name=\"active\" type=\"integer\">" + POOL1_P2PSERVER.getActive() + "</metric>" +
" </queue> </queues> <space>" +
" <metric name=\"total\" type=\"integer\">" + POOL1_TOTAL_SPACE + "</metric>" +
" <metric name=\"free\" type=\"integer\">" + POOL1_FREE_SPACE + "</metric>" +
" <metric name=\"break-even\" type=\"float\">0.7</metric>" +
" <metric name=\"LRU-seconds\" type=\"integer\">1255516612</metric>" +
" <metric name=\"precious\" type=\"integer\">" + POOL1_PRECIOUS_SPACE + "</metric>" +
" <metric name=\"removable\" type=\"integer\">" + POOL1_REMOVABLE_SPACE + "</metric>" +
" <metric name=\"used\" type=\"integer\">" + POOL1_USED_SPACE + "</metric>" +
" <metric name=\"gap\" type=\"integer\">1048576</metric>" +
" </space> <poolgroups> <poolgroupref name=\"" + POOL1_POOLGROUP1 + "\"/>" +
" </poolgroups> </pool> </pools></dCache>";
public static final String poolGroupXmlcontent = "<?xml version=\"1.0\"?>" +
"<dCache xmlns=\"http://www.dcache.org/2008/01/Info\">" +
"<poolgroups>" +
" <poolgroup name=\"" + POOL1_POOLGROUP1 + "\">" +
" <links>" +
" <linkref name=\"default-link\"/>" +
" </links>" +
" <space>" +
" <metric name=\"total\" type=\"integer\">3221225472</metric>" +
" <metric name=\"free\" type=\"integer\">3221186835</metric>" +
" <metric name=\"removable\" type=\"integer\">0</metric>" +
" <metric name=\"precious\" type=\"integer\">38637</metric>" +
" <metric name=\"used\" type=\"integer\">38637</metric>" +
" </space>" +
" <pools>" +
" <poolref name=\"mySecondPool\"/>" +
"<poolref name=\"myFirstPool\"/>" +
" </pools> </poolgroup>" +
" <poolgroup name=\"ResilientPools\">" +
" <space>" +
" <metric name=\"total\" type=\"integer\">0</metric>" +
" <metric name=\"free\" type=\"integer\">0</metric>" +
" <metric name=\"precious\" type=\"integer\">0</metric>" +
" <metric name=\"removable\" type=\"integer\">0</metric>" +
" <metric name=\"used\" type=\"integer\">0</metric>" +
" </space>" +
" </poolgroup>" +
" </poolgroups>" +
"</dCache>";
public static final String doorsXmlcontent = "<?xml version=\"1.0\"?> " +
"<dCache xmlns=\"http://www.dcache.org/2008/01/Info\">" +
" <doors>" +
" <door name=\"" + DOOR1_NAME + "\">" +
" <metric name=\"port\" type=\"integer\">22125</metric>" +
" <metric name=\"update-time\" type=\"integer\">30000</metric>" +
" <protocol>" +
" <metric name=\"engine\" type=\"string\">diskCacheV111.doors.DCapDoor</metric>" +
" <metric name=\"family\" type=\"string\">dcap</metric>" +
" <metric name=\"version\" type=\"string\">1.3.0</metric>" +
" </protocol>" +
" <metric name=\"cell\" type=\"string\">DCap-patrickxenvm02</metric>" +
" <metric name=\"domain\" type=\"string\">dcap-patrickxenvm02Domain</metric>" +
" <interfaces>" +
" <interface name=\"patrickxenvm02.desy.de\">" +
" <metric name=\"address-type\" type=\"string\">IPv4</metric>" +
" <metric name=\"order\" type=\"integer\">1</metric>" +
" <metric name=\"address\" type=\"string\">131.169.72.127</metric>" +
" <metric name=\"name\" type=\"string\">patrickxenvm02.desy.de</metric>" +
" <metric name=\"FQDN\" type=\"string\">patrickxenvm02.desy.de</metric>" +
" </interface>" +
" </interfaces>" +
" <metric name=\"load\" type=\"float\">0.0</metric>" +
" </door>" +
" <door name=\"" + DOOR2_NAME + "\">" +
" <metric name=\"port\" type=\"integer\">22128</metric>" +
" <metric name=\"update-time\" type=\"integer\">120000</metric>" +
" <protocol>" +
" <metric name=\"engine\" type=\"string\">diskCacheV111.doors.DCapDoor</metric>" +
" <metric name=\"family\" type=\"string\">gsidcap</metric>" +
" <metric name=\"version\" type=\"string\">1.3.0</metric>" +
" </protocol>" +
" <metric name=\"cell\" type=\"string\">DCap-gsi-patrickxenvm02</metric>" +
" <metric name=\"domain\" type=\"string\">gsidcap-patrickxenvm02Domain</metric>" +
" <interfaces>" +
" <interface name=\"patrickxenvm02.desy.de\">" +
" <metric name=\"address-type\" type=\"string\">IPv4</metric>" +
" <metric name=\"order\" type=\"integer\">1</metric>" +
" <metric name=\"address\" type=\"string\">131.169.72.127</metric>" +
" <metric name=\"name\" type=\"string\">patrickxenvm02.desy.de</metric>" +
" <metric name=\"FQDN\" type=\"string\">patrickxenvm02.desy.de</metric>" +
" </interface>" +
" </interfaces>" +
" <metric name=\"load\" type=\"float\">0.0</metric>" +
" </door>" +
" <door name=\"" + DOOR3_NAME + "\">" +
" <metric name=\"port\" type=\"integer\">2811</metric>" +
" <metric name=\"update-time\" type=\"integer\">5000</metric>" +
" <protocol>" +
" <metric name=\"engine\" type=\"string\">diskCacheV111.doors.GsiFtpDoorV1</metric>" +
" <metric name=\"family\" type=\"string\">gsiftp</metric>" +
" <metric name=\"version\" type=\"string\">1.0.0</metric>" +
" </protocol>" +
" <metric name=\"cell\" type=\"string\">GFTP-patrickxenvm02</metric>" +
" <metric name=\"domain\" type=\"string\">gridftp-patrickxenvm02Domain</metric>" +
" <interfaces>" +
" <interface name=\"patrickxenvm02.desy.de\">" +
" <metric name=\"address-type\" type=\"string\">IPv4</metric>" +
" <metric name=\"order\" type=\"integer\">1</metric>" +
" <metric name=\"address\" type=\"string\">131.169.72.127</metric>" +
" <metric name=\"name\" type=\"string\">patrickxenvm02.desy.de</metric>" +
" <metric name=\"FQDN\" type=\"string\">patrickxenvm02.desy.de</metric>" +
" </interface> </interfaces>" +
" <metric name=\"load\" type=\"float\">0.0</metric> </door> </doors></dCache>";
public final static String LINKGROUPS_XML = "<?xml version=\"1.0\"?>" +
"<dCache xmlns=\"http://www.dcache.org/2008/01/Info\">" +
" <linkgroups>" +
" <linkgroup lgid=\"" + LINKGROUP1_ID + "\">" +
" <metric name=\"id\" type=\"string\">" + LINKGROUP1_ID + "</metric>" +
" <access-latency>" +
" <metric name=\"onlineAllowed\" type=\"boolean\">true</metric>" +
" <metric name=\"nearlineAllowed\" type=\"boolean\">true</metric>" +
" </access-latency>" +
" <metric name=\"name\" type=\"string\">" + LINKGROUP1_NAME + "</metric>" +
" <lastUpdated>" +
" <metric name=\"ISO-8601\" type=\"string\">2010-10-15T09:13Z</metric>" +
" <metric name=\"simple\" type=\"string\">Oct 15, 11:13:39 CEST</metric>" +
" <metric name=\"unix\" type=\"integer\">1287134019</metric>" +
" </lastUpdated>" +
" <retention-policy>" +
" <metric name=\"custodialAllowed\" type=\"boolean\">true</metric>" +
" <metric name=\"outputAllowed\" type=\"boolean\">true</metric>" +
" <metric name=\"replicaAllowed\" type=\"boolean\">true</metric>" +
" </retention-policy>" +
" <space>" +
" <metric name=\"total\" type=\"integer\">" + LINKGROUP1_TOTAL_SPACE + "</metric>" +
" <metric name=\"free\" type=\"integer\">3221186835</metric>" +
" <metric name=\"available\" type=\"integer\">3221186835</metric>" +
" <metric name=\"used\" type=\"integer\">0</metric>" +
" <metric name=\"reserved\" type=\"integer\">0</metric>" +
" </space>" +
" <authorisation>" +
" <authorised name=\"/desy:*\">" +
" <metric name=\"FQAN\" type=\"string\">/desy</metric>" +
" <metric name=\"role\" type=\"string\">*</metric>" +
" <metric name=\"group\" type=\"string\">/desy</metric>" +
" </authorised>" +
" <authorised name=\"/dteam:*\">" +
" <metric name=\"FQAN\" type=\"string\">/dteam</metric>" +
" <metric name=\"role\" type=\"string\">*</metric>" +
" <metric name=\"group\" type=\"string\">/dteam</metric>" +
" </authorised>" +
" <authorised name=\"dteam001:*\">" +
" <metric name=\"FQAN\" type=\"string\">dteam001</metric>" +
" <metric name=\"role\" type=\"string\">*</metric>" +
" <metric name=\"group\" type=\"string\">dteam001</metric>" +
" </authorised>" +
" <authorised name=\"cms001:*\">" +
" <metric name=\"FQAN\" type=\"string\">cms001</metric>" +
" <metric name=\"role\" type=\"string\">*</metric>" +
" <metric name=\"group\" type=\"string\">cms001</metric>" +
" </authorised>" +
" </authorisation>" +
" <reservations>" +
" <reservationref reservation-id=\"" + LINKGROUP1_RESERVATION1_ID + "\"/>" +
" </reservations>" +
" </linkgroup>" +
" </linkgroups>" +
"</dCache>";
public static final String RESERVATIONS_XML = "<?xml version=\"1.0\"?>" +
"<dCache xmlns=\"http://www.dcache.org/2008/01/Info\">" +
" <reservations>" +
" <reservation reservation-id=\"" + LINKGROUP1_RESERVATION1_ID + "\">" +
" <metric name=\"id\" type=\"string\">" + LINKGROUP1_RESERVATION1_ID + "</metric>" +
" <metric name=\"access-latency\" type=\"string\">ONLINE</metric>" +
" <created>" +
" <metric name=\"ISO-8601\" type=\"string\">2009-11-30T15:08Z</metric>" +
" <metric name=\"simple\" type=\"string\">Nov 30, 16:08:00 CET</metric>" +
" <metric name=\"unix\" type=\"integer\">1259593680</metric>" +
" </created>" +
" <metric name=\"description\" type=\"string\">Simple</metric>" +
" <metric name=\"state\" type=\"string\">RESERVED</metric>" +
" <metric name=\"retention-policy\" type=\"string\">REPLICA</metric>" +
" <space>" +
" <metric name=\"total\" type=\"integer\">" + RESERVATION1_TOTAL + "</metric>" +
" <metric name=\"free\" type=\"integer\">1024000</metric>" +
" <metric name=\"allocated\" type=\"integer\">0</metric>" +
" <metric name=\"used\" type=\"integer\">0</metric>" +
" </space>" +
" <authorisation>" +
" <metric name=\"FQAN\" type=\"string\">" + RESERVATION1_FQAN + "</metric>" +
" <metric name=\"group\" type=\"string\">/dteam</metric>" +
" </authorisation>" +
" <metric name=\"linkgroupref\" type=\"string\">" + LINKGROUP1_ID + "</metric>" +
" </reservation>" +
" </reservations>" +
"</dCache>";
public static Map<String, List<String>> getDomainsMap() {
Map<String, List<String>> domainsMap = Maps.newHashMap();
List<String> cellsOfPool1Domain = Lists.newArrayList();
cellsOfPool1Domain.add(POOL1_NAME);
domainsMap.put(POOL1_DOMAIN, cellsOfPool1Domain);
List<String> cellsOfPool2Domain = Lists.newArrayList();
cellsOfPool2Domain.add(POOL2_NAME);
domainsMap.put(POOL2_DOMAIN, cellsOfPool2Domain);
return domainsMap;
}
public static Set<Pool> getExpectedPools() {
Set<Pool> pools = new HashSet<>(2);
pools.add(createTestPool());
SelectionPoolHelper sPool = new SelectionPoolHelper();
sPool.setEnabled(IS_POOL2_ENABLED);
sPool.setPoolMode(new PoolV2Mode(PoolV2Mode.DISABLED_STRICT));
PoolCostInfo info = new PoolCostInfo(POOL2_NAME, IoQueueManager.DEFAULT_QUEUE);
info.setSpaceUsage(POOL2_TOTAL_SPACE, POOL2_FREE_SPACE, POOL2_PRECIOUS_SPACE,
0, POOL2_USED_SPACE);
Pool pool2 = new Pool(info, sPool);
pools.add(pool2);
return pools;
}
public static Pool getTestPool() {
return createTestPool();
}
private static Pool createTestPool() {
SelectionPoolHelper sPool = new SelectionPoolHelper();
sPool.setEnabled(IS_POOL1_ENABLED);
PoolCostInfo info = new PoolCostInfo(POOL1_NAME, IoQueueManager.DEFAULT_QUEUE);
info.setSpaceUsage(POOL1_TOTAL_SPACE, POOL1_FREE_SPACE, POOL1_PRECIOUS_SPACE,
POOL1_REMOVABLE_SPACE, POOL1_USED_SPACE);
info.setP2pClientQueueSizes(POOL1_P2PCLIENT._active,
POOL1_P2PCLIENT._max, POOL1_P2PCLIENT._queued);
info.setP2pServerQueueSizes(POOL1_P2PSERVER._active,
POOL1_P2PSERVER._max, POOL1_P2PSERVER._queued);
info.setQueueSizes(
POOL1_RESTORES._active,
POOL1_RESTORES._max, POOL1_RESTORES._queued,
POOL1_STORES._active,
POOL1_STORES._max, POOL1_STORES._queued);
info.addExtendedMoverQueueSizes(IoQueueManager.DEFAULT_QUEUE,
POOL1_MOVERS._active, POOL1_MOVERS._max, POOL1_MOVERS._queued, 0, 0);
Pool pool1 = new Pool(info, sPool);
return pool1;
}
public static List<PoolSpaceBean> createExpectedPoolBeans() {
List<PoolSpaceBean> poolBeans = new ArrayList(2);
PoolSpaceBean poolBean1 = new PoolSpaceBean();
poolBean1.setDomainName(POOL1_DOMAIN);
poolBean1.setEnabled(IS_POOL1_ENABLED);
poolBean1.setFreeSpace(POOL1_FREE_SPACE);
poolBean1.setName(POOL1_NAME);
poolBean1.setPreciousSpace(POOL1_PRECIOUS_SPACE);
poolBean1.setTotalSpace(POOL1_TOTAL_SPACE);
poolBean1.setUsedSpace(POOL1_USED_SPACE);
poolBeans.add(poolBean1);
PoolSpaceBean poolBean2 = new PoolSpaceBean();
poolBean2.setDomainName(POOL2_DOMAIN);
poolBean2.setEnabled(IS_POOL2_ENABLED);
poolBean2.setFreeSpace(POOL2_FREE_SPACE);
poolBean2.setName(POOL2_NAME);
poolBean2.setPreciousSpace(POOL2_PRECIOUS_SPACE);
poolBean2.setTotalSpace(POOL2_TOTAL_SPACE);
poolBean2.setUsedSpace(POOL2_USED_SPACE);
poolBeans.add(poolBean2);
Collections.sort(poolBeans);
return poolBeans;
}
public static Set<String> getExpectedDoorNames() {
Set<String> expectedDoors = new HashSet<>();
expectedDoors.add(DOOR1_NAME);
expectedDoors.add(DOOR2_NAME);
expectedDoors.add(DOOR3_NAME);
return expectedDoors;
}
public static Set<String> getAvailableIds() {
Set<String> ids = new HashSet<>();
ids.add(POOL1_NAME);
ids.add(POOL2_NAME);
return ids;
}
private static class MoverQueue {
private int _active;
private int _max;
private int _queued;
public MoverQueue(int active, int max, int queued) {
_active = active;
_max = max;
_queued = queued;
}
public int getActive() {
return _active;
}
public void setActive(int active) {
_active = active;
}
public int getMax() {
return _max;
}
public void setMax(int max) {
_max = max;
}
public int getQueued() {
return _queued;
}
public void setQueued(int queued) {
_queued = queued;
}
}
}