Java tutorial
package com.orange.clara.cloud.servicedbdumper.acceptance; import com.orange.clara.cloud.servicedbdumper.Application; import com.orange.clara.cloud.servicedbdumper.exception.DatabaseExtractionException; import com.orange.clara.cloud.servicedbdumper.exception.ServiceKeyException; import com.orange.clara.cloud.servicedbdumper.model.DatabaseType; import org.cloudfoundry.community.servicebroker.exception.*; import org.junit.Before; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.boot.test.WebIntegrationTest; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.IfProfileValue; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Paths; import java.util.regex.Pattern; import java.util.stream.Stream; import static org.fest.assertions.Fail.fail; import static org.junit.Assume.assumeTrue; /** * Copyright (C) 2016 Orange * <p> * This software is distributed under the terms and conditions of the 'Apache-2.0' * license which can be found in the file 'LICENSE' in this package distribution * or at 'https://opensource.org/licenses/Apache-2.0'. * <p> * Author: Arthur Halet * Date: 25/05/2016 */ @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(Application.class) @WebIntegrationTest(randomPort = true) @ActiveProfiles({ "local", "integrationrealcf", "s3" }) @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS) @IfProfileValue(name = "test.groups", values = { "external-acceptance-tests" }) public class AcceptanceExternalTest extends AcceptanceLocalTest { @Value("${accept.cf.service.name.db.dumper:db-dumper-service-dev}") protected String serviceNameAcceptDbDumper; @Value("${accept.cf.service.plan.db.dumper:experimental}") protected String servicePlanAcceptDbDumper; @Override @Before public void init() throws DatabaseExtractionException { if (!this.isCfCliAvailableInPath()) { String skipMessage = "cf cli cannot be found in path please install it."; this.reportIntegration.setSkipped(true); this.reportIntegration.setSkippedReason(skipMessage); assumeTrue(skipMessage, false); } if (!this.isCfCliPluginAvailable()) { String skipMessage = "db-dumper cli plugin cannot be found please install from https://github.com/Orange-OpenSource/db-dumper-cli-plugin/releases."; this.reportIntegration.setSkipped(true); this.reportIntegration.setSkippedReason(skipMessage); assumeTrue(skipMessage, false); } super.init(); } @Override protected void loadBeforeAction() { String loginCfCommand = String.format("cf login -a %s -u %s -p %s -o %s -s %s --skip-ssl-validation", cloudControllerUrl, cfAdminUser, cfAdminPassword, org, space); try { this.runCommand(loginCfCommand.split(" ")); } catch (IOException | InterruptedException e) { fail(e.getMessage()); } super.loadBeforeAction(); } protected boolean isCfCliAvailableInPath() { String exec = "cf"; return Stream.of(System.getenv("PATH").split(Pattern.quote(File.pathSeparator))).map(Paths::get) .anyMatch(path -> Files.exists(path.resolve(exec))); } protected boolean isCfCliPluginAvailable() { Runtime rt = Runtime.getRuntime(); Process proc = null; try { proc = rt.exec(this.dbDumperCli()); proc.waitFor(); } catch (IOException | InterruptedException e) { return false; } int exitVal = proc.exitValue(); return exitVal == 0; } protected String dbDumperCli() { return "cf target-dump " + this.serviceNameAcceptDbDumper; } @Override protected void deleteServiceInstance(String instanceId) throws ServiceBrokerAsyncRequiredException, ServiceBrokerException { String command = String.format("cf delete-dump %s -f", instanceId); try { this.runCommand(command.split(" ")); } catch (IOException | InterruptedException e) { throw new ServiceBrokerException(e.getMessage(), e); } } @Override protected void createSourceDatabaseDump(DatabaseType databaseType) throws ServiceBrokerException, ServiceInstanceExistsException, ServiceBrokerAsyncRequiredException { String command = String.format("cf create-dump %s --plan %s", this.getDbParamsForDump(databaseType), this.servicePlanAcceptDbDumper); try { this.runCommand(command.split(" ")); } catch (IOException | InterruptedException e) { throw new ServiceBrokerException(e.getMessage(), e); } } @Override protected void createTargetDatabaseDump(DatabaseType databaseType) throws ServiceBrokerException, ServiceInstanceExistsException, ServiceBrokerAsyncRequiredException { String command = String.format("cf create-dump %s --plan %s", this.getDbParamsForRestore(databaseType), this.servicePlanAcceptDbDumper); try { this.runCommand(command.split(" ")); } catch (IOException | InterruptedException e) { throw new ServiceBrokerException(e.getMessage(), e); } } @Override protected void restoreSourceDatabaseDump(DatabaseType databaseType) throws ServiceBrokerException, ServiceInstanceExistsException, ServiceBrokerAsyncRequiredException, ServiceInstanceUpdateNotSupportedException, ServiceInstanceDoesNotExistException { String command = String.format("cf restore-dump %s --source-instance %s --recent --force", this.getDbParamsForRestore(databaseType), this.getDbParamsForDump(databaseType)); try { this.runCommand(command.split(" ")); } catch (IOException | InterruptedException e) { throw new ServiceBrokerException(e.getMessage(), e); } } @Override protected void loadServiceIds(DatabaseType databaseType) { this.serviceIdSource = this.getDbParamsForDump(databaseType); this.serviceIdTarget = this.getDbParamsForRestore(databaseType); } @Override protected InputStream getSourceStream(DatabaseType databaseType) throws DatabaseExtractionException, ServiceKeyException, IOException { String command = String.format("cf download-dump %s --recent --original --stdout", this.getDbParamsForDump(databaseType)); try { Process process = this.runCommandLine(command.split(" ")); return process.getInputStream(); } catch (InterruptedException e) { throw new IOException(e.getMessage(), e); } } @Override protected InputStream getTargetStream(DatabaseType databaseType) throws DatabaseExtractionException, ServiceKeyException, IOException { String command = String.format("cf download-dump %s --recent --original --stdout", this.getDbParamsForRestore(databaseType)); try { Process process = this.runCommandLine(command.split(" ")); return process.getInputStream(); } catch (InterruptedException e) { throw new IOException(e.getMessage(), e); } } }