/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF 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.apache.usergrid.tools; import org.apache.commons.lang.RandomStringUtils; import org.apache.usergrid.ServiceITSetup; import org.apache.usergrid.ServiceITSetupImpl; import org.junit.ClassRule; import org.apache.usergrid.services.AbstractServiceIT; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.io.FileFilter; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import org.apache.usergrid.StressTest; /** * TODO: better test, this is really just a smoke test. */ public class ExportAppTest extends AbstractServiceIT { static final Logger logger = LoggerFactory.getLogger( ExportAppTest.class ); int NUM_COLLECTIONS = 10; int NUM_ENTITIES = 50; int NUM_CONNECTIONS = 3; @ClassRule public static ServiceITSetup setup = new ServiceITSetupImpl(); @org.junit.Test public void testBasicOperation() throws Exception { String rand = RandomStringUtils.randomAlphanumeric( 10 ); // create app with some data String orgName = "org_" + rand; String appName = "app_" + rand; String userName = "user_" + rand; ExportDataCreator creator = new ExportDataCreator(); creator.startTool( new String[] { "-organization", orgName, "-application", appName, "-username", userName, "-users", "10", "-collections", "5", "-host", "localhost:9160", "-eshost", "localhost:9200", "-escluster", "elasticsearch", "-ugcluster","usergrid" }, false); long start = System.currentTimeMillis(); // export app to a directory String directoryName = "target/export" + rand; ExportApp exportApp = new ExportApp(); exportApp.startTool( new String[] { "-application", orgName + "/" + appName, "-writeThreads", "100", "-host", "localhost:9160", "-eshost", "localhost:9200", "-escluster", "elasticsearch", "-outputDir", directoryName, "-ugcluster","usergrid" }, false ); logger.info( "100 read and 100 write threads = " + (System.currentTimeMillis() - start) / 1000 + "s" ); // check that we got the expected number of export files File exportDir = new File(directoryName); assertTrue( getFileCount( exportDir, "entities" ) > 0 ); assertTrue( getFileCount( exportDir, "connections" ) > 0 ); assertTrue( getFileCount( exportDir, "entities" ) <= 100 ); assertTrue( getFileCount( exportDir, "connections" ) <= 100 ); File exportDir1 = new File(directoryName + "1"); exportApp.startTool( new String[] { "-application", orgName + "/" + appName, "-writeThreads", "1", "-host", "localhost:9160", "-eshost", "localhost:9200", "-escluster", "elasticsearch", "-outputDir", directoryName + "1", "-ugcluster","usergrid" }, false ); logger.info( "1 thread time = " + (System.currentTimeMillis() - start) / 1000 + "s" ); assertEquals( 1, getFileCount( exportDir1, "entities" )); assertEquals( 1, getFileCount( exportDir1, "connections" )); } private static int getFileCount(File exportDir, final String ext ) { return exportDir.listFiles( new FileFilter() { @Override public boolean accept(File pathname) { return pathname.getAbsolutePath().endsWith("." + ext); } } ).length; } }