/*
* Copyright (c) 2014 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.auth;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.apache.zookeeper.data.Stat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.emc.storageos.coordinator.client.service.DistributedDataManager;
import com.emc.storageos.coordinator.common.impl.ZkConnection;
import org.apache.curator.framework.api.CuratorListener;
import org.apache.curator.framework.state.ConnectionStateListener;
/**
* Stub DistributedDataManager class for use with unit tests
*/
public class TestDistributedDataManager implements DistributedDataManager {
private static final Logger _log = LoggerFactory.getLogger(TestDistributedDataManager.class);
private ZkConnection _zkConnection = null;
private String _basePath;
private long _maxNodes;
private Map<String, Object> _dataMap = new HashMap<String, Object>();
public TestDistributedDataManager(ZkConnection zkConnection, String basePath, long maxNodes) {
_zkConnection = zkConnection;
if (StringUtils.isEmpty(basePath) || !basePath.startsWith("/") ||
(basePath.length() < 2) || basePath.endsWith("/")) {
throw new IllegalArgumentException("basePath must be at least 2 characters long and start with (but not end with) /");
}
_basePath = basePath;
_maxNodes = maxNodes;
_log.info("{}: Manager constructed with node limit of {}", _basePath, _maxNodes);
}
@Override
public void setListener(CuratorListener listener) throws Exception {
// TODO Auto-generated method stub
}
@Override
public void setConnectionStateListener(ConnectionStateListener listener)
throws Exception {
// TODO Auto-generated method stub
}
@Override
public Stat checkExists(String path) throws Exception {
// TODO Auto-generated method stub
return null;
}
@Override
public void createNode(String path, boolean watch) throws Exception {
// Nothing to do here
}
@Override
public void close() {
// Nothing to do here
}
@Override
public void removeNode(String path) throws Exception {
_dataMap.remove(path);
}
@Override
public void removeNode(String path, boolean recursive) throws Exception {
_dataMap.remove(path);
}
@Override
public void putData(String path, Object data) throws Exception {
_dataMap.put(path, data);
}
@Override
public Object getData(String path, boolean watch) throws Exception {
return _dataMap.get(path);
}
/*
* (non-Javadoc)
*
* @see com.emc.storageos.coordinator.client.service.DistributedDataManager#getChildren(java.lang.String)
*/
@Override
public List<String> getChildren(String path) throws Exception {
// We need to return only ClientIP portion of the entries excluding the _basePath
Set<String> entries = _dataMap.keySet();
List<String> list = new ArrayList<String>();
for (String str : entries) {
list.add(str.replaceFirst(_basePath + "/", ""));
}
return list;
}
}