package io.lumify.test; import org.apache.accumulo.core.client.Connector; import org.apache.accumulo.core.security.Authorizations; import org.apache.accumulo.minicluster.MiniAccumuloCluster; import org.apache.accumulo.minicluster.MiniAccumuloConfig; import org.securegraph.accumulo.AccumuloGraphConfiguration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.util.HashMap; import java.util.Map; import java.util.Properties; public class TestAccumulo { private static final Logger LOGGER = LoggerFactory.getLogger(TestAccumulo.class); private static final String ACCUMULO_USERNAME = "root"; private static final String ACCUMULO_PASSWORD = "test"; private final Properties lumifyConfig; private File tempDir; private MiniAccumuloCluster accumulo; private AccumuloGraphConfiguration config; private Connector connector; public TestAccumulo(Properties config) { this.lumifyConfig = config; } public void startup() { try { tempDir = File.createTempFile("accumulo-test", Long.toString(System.nanoTime())); tempDir.delete(); tempDir.mkdir(); LOGGER.info("writing to: " + tempDir); LOGGER.info("Starting accumulo"); MiniAccumuloConfig miniAccumuloConfig = new MiniAccumuloConfig(tempDir, ACCUMULO_PASSWORD); accumulo = new MiniAccumuloCluster(miniAccumuloConfig); accumulo.start(); setLumifyProperties(); Map configMap = getConfig(); config = new AccumuloGraphConfiguration(configMap); connector = config.createConnector(); } catch (Exception e) { throw new RuntimeException(e); } } public void shutdown() { LOGGER.info("shutdown"); try { if (accumulo != null) { accumulo.stop(); } } catch (Exception e) { throw new RuntimeException(e); } finally { tempDir.delete(); config = null; accumulo = null; } } public void setAuthorizations(String user, String... auths) { try { connector.securityOperations().changeUserAuthorizations(user, new Authorizations(auths)); } catch (Exception e) { throw new RuntimeException(e); } } protected Map<String, Object> getConfig() { Map<String, Object> configMap = new HashMap<String, Object>(); configMap.put(AccumuloGraphConfiguration.ZOOKEEPER_SERVERS, accumulo.getZooKeepers()); configMap.put(AccumuloGraphConfiguration.ACCUMULO_INSTANCE_NAME, accumulo.getInstanceName()); configMap.put(AccumuloGraphConfiguration.ACCUMULO_USERNAME, ACCUMULO_USERNAME); configMap.put(AccumuloGraphConfiguration.ACCUMULO_PASSWORD, ACCUMULO_PASSWORD); configMap.put(AccumuloGraphConfiguration.AUTO_FLUSH, true); configMap.put(AccumuloGraphConfiguration.DATA_DIR, "/tmp/"); return configMap; } private void setLumifyProperties() { lumifyConfig.setProperty("bigtable.accumulo.instanceName", accumulo.getInstanceName()); lumifyConfig.setProperty("bigtable.accumulo.zookeeperServerNames", accumulo.getZooKeepers()); lumifyConfig.setProperty("graph.zookeeperServers", accumulo.getZooKeepers()); } }