/** * Copyright 2013-2015 Seagate Technology LLC. * * This Source Code Form is subject to the terms of the Mozilla * Public License, v. 2.0. If a copy of the MPL was not * distributed with this file, You can obtain one at * https://mozilla.org/MP:/2.0/. * * This program is distributed in the hope that it will be useful, * but is provided AS-IS, WITHOUT ANY WARRANTY; including without * the implied warranty of MERCHANTABILITY, NON-INFRINGEMENT or * FITNESS FOR A PARTICULAR PURPOSE. See the Mozilla Public * License for more details. * * See www.openkinetic.org for more project information */ package com.seagate.kinetic; import java.io.File; import java.io.IOException; import kinetic.client.KineticException; import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; import com.leacox.process.FinalizedProcess; import com.leacox.process.FinalizedProcessBuilder; public class ForkedTestTarget extends AbstractIntegrationTestTarget { private final FinalizedProcess externalKineticServer; public ForkedTestTarget(boolean clearExistingDatabase, String serverRunnerPath, int port, int tlsPort) throws IOException, InterruptedException, KineticException { super("localhost", port, tlsPort); FinalizedProcessBuilder finalizedProcessBuilder = new FinalizedProcessBuilder("killall", "-9", "kineticd"); finalizedProcessBuilder.start().waitFor(10 * 1000); Thread.sleep(500); // Since the cluster version is checked before performing an ISE we need to manually remove // the file used to store the cluster version if (clearExistingDatabase) { final String workingDirectory = FilenameUtils.getFullPath(serverRunnerPath); final String clusterStorePath = FilenameUtils.concat(workingDirectory, "cluster_version"); FileUtils.deleteQuietly(new File(clusterStorePath)); } finalizedProcessBuilder = new FinalizedProcessBuilder(serverRunnerPath); finalizedProcessBuilder.directory(new File(".")); finalizedProcessBuilder.gobbleStreamsWithLogging(true); externalKineticServer = finalizedProcessBuilder.start(); waitForServerReady(); // The ForkedTestTarget only runs on x86. The x86 implementations' ISE is almost instant with small DBs so // it's OK to issue a kinetic ISE instead of using SSH if (clearExistingDatabase) { performISE(); } } public void shutdown() throws Exception { externalKineticServer.close(); } }