/******************************************************************************* * Copyright (c) 2016 Pivotal, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Pivotal, Inc. - initial API and implementation *******************************************************************************/ package org.springframework.ide.eclipse.boot.dash.test; import static org.apache.commons.lang.RandomStringUtils.randomAlphabetic; import static org.junit.Assert.fail; import java.util.HashSet; import java.util.Set; import org.cloudfoundry.doppler.LogMessage; import org.springframework.ide.eclipse.boot.dash.cloudfoundry.client.v2.DefaultClientRequestsV2; import org.springframework.ide.eclipse.boot.dash.cloudfoundry.console.IApplicationLogConsole; import org.springframework.ide.eclipse.boot.dash.model.AbstractDisposable; import org.springframework.ide.eclipse.editor.support.util.StringUtil; import org.springsource.ide.eclipse.commons.livexp.util.ExceptionUtil; import reactor.core.Cancellation; public class CloudFoundryApplicationHarness extends AbstractDisposable { private Set<String> ownedAppNames = new HashSet<>(); private DefaultClientRequestsV2 client; public CloudFoundryApplicationHarness(DefaultClientRequestsV2 client) { this.client = client; if (client!=null) { onDispose((d) -> { deleteOwnedApps(); }); } } public String randomAppName() throws Exception { String name = StringUtil.datestamp()+"-"+randomAlphabetic(10); ownedAppNames.add(name); streamOutput(name); return name; } private void streamOutput(String name) throws Exception { if (client!=null) { IApplicationLogConsole logConsole = new IApplicationLogConsole() { @Override public void onMessage(LogMessage log) { System.out.println("%"+name+"-out: "+log.getMessage()); } @Override public void onComplete() { System.out.println("%"+name+"-COMPLETE"); } @Override public void onError(Throwable exception) { System.out.println("%"+name+"-ERROR: "+ExceptionUtil.getMessage(exception)); } }; Cancellation logToken = client.streamLogs(name, logConsole); onDispose((d) -> { logToken.dispose(); }); } } protected void deleteOwnedApps() { System.out.println("owned app names: "+ownedAppNames); if (!ownedAppNames.isEmpty()) { try { for (String name : ownedAppNames) { try { System.out.println("delete owned app: "+name); this.client.deleteApplication(name); } catch (Exception e) { System.out.println("Delete failed: " +ExceptionUtil.getMessage(e)); // May get 404 or other 400 errors if it is alrready // gone so don't prevent other owned apps from being // deleted } } } catch (Exception e) { fail("failed to cleanup owned apps: " + e.getMessage()); } } } }