Package com.openshift.internal.client

Source Code of com.openshift.internal.client.ApplicationSSHSessionIntegrationTest

/*******************************************************************************
* Copyright (c) 2014 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package com.openshift.internal.client;

import static org.fest.assertions.Assertions.assertThat;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.List;
import java.util.zip.GZIPInputStream;

import org.apache.commons.compress.archivers.ArchiveException;
import org.apache.commons.compress.compressors.CompressorException;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.openshift.client.DeploymentTypes;
import com.openshift.client.IApplication;
import com.openshift.client.IDomain;
import com.openshift.client.IUser;
import com.openshift.client.utils.ApplicationAssert;
import com.openshift.client.utils.ApplicationTestUtils;
import com.openshift.client.utils.DomainTestUtils;
import com.openshift.client.utils.FileUtils;
import com.openshift.client.utils.SSHKeyTestUtils;
import com.openshift.client.utils.StringUtils;
import com.openshift.client.utils.TarFileTestUtils;
import com.openshift.client.utils.TestConnectionBuilder;
import com.openshift.internal.client.utils.StreamUtils;

/**
* @author Andre Dietisheim
*/
public class ApplicationSSHSessionIntegrationTest extends TestTimer {

  private static IUser user;

  private IApplication application;
  private Session session;

  @BeforeClass
  public static void createSSHKeys() throws IOException, JSchException {
    user = new TestConnectionBuilder().defaultCredentials().disableSSLCertificateChecks().create().getUser();
    SSHKeyTestUtils.addTestKeyToOpenShift(user);
  }

  @Before
  public void setUp() throws Exception {
    IDomain domain = DomainTestUtils.ensureHasDomain(user);
    this.application = ApplicationTestUtils.getOrCreateApplication(domain);
    this.session = createSSHSession(application.getSshUrl());
  }

  @After
  public void tearDown() {
    this.session.disconnect();
  }

  @Test
  public void shouldSaveDeploymentSnapshot() throws IOException, CompressorException {
    // pre-conditions
    File snapshotFile = FileUtils.createRandomTempFile(".tar.gz");
    FileOutputStream snapshotFileOut = new FileOutputStream(snapshotFile);

    // operations
    InputStream in = new ApplicationSSHSession(application, session).saveDeploymentSnapshot();
    writeTo(in, snapshotFileOut);

    // verifications
    List<String> allPaths = TarFileTestUtils.getAllPaths(new FileInputStream(snapshotFile));
    assertThat(allPaths).contains("./build-dependencies/", "./dependencies/", "./repo/");
    assertThat(allPaths).excludes("./git/");
  }

  @Test
  public void shouldRestoreDeploymentSnapshot() throws IOException {
    // pre-conditions
    File snapshotFile = FileUtils.createRandomTempFile(".tar.gz");
    ApplicationSSHSession applicationSession = new ApplicationSSHSession(application, session);
    InputStream snapshot = applicationSession.saveDeploymentSnapshot();
    writeTo(snapshot, new FileOutputStream(snapshotFile));
    String title = StringUtils.createRandomString();
    File newArchive = TarFileTestUtils.fakeReplaceFile(
        "index.php", "<html><body><h1>" + title + "</h1></body></html>", new FileInputStream(snapshotFile));
    assertThat(newArchive).isNotNull();
    assertThat(newArchive.length()).isGreaterThan(0);
    application.setDeploymentType(DeploymentTypes.binary());
   
    // operations
    InputStream restoreOutput = applicationSession.restoreDeploymentSnapshot(new FileInputStream(newArchive), true);
    StreamUtils.writeTo(restoreOutput, System.out);

    // verifications
    new ApplicationAssert(application).pageContains("", title);
  }

  @Test
  public void shouldRestoreFullSnapshot() throws IOException, ArchiveException, CompressorException {
    // pre-conditions
    File snapshotFile = FileUtils.createRandomTempFile(".tar.gz");
    FileOutputStream snapshotFileOut = new FileOutputStream(snapshotFile);
    ApplicationSSHSession applicationSession = new ApplicationSSHSession(application, session);
    InputStream in = applicationSession.saveFullSnapshot();
    writeTo(in, snapshotFileOut);
    assertThat(snapshotFile.length()).isGreaterThan(0);
   
    String title = StringUtils.createRandomString();
    File newArchive = TarFileTestUtils.fakeReplaceFile(
        "index.php", "<html><body><h1>" + title + "</h1></body></html>", new FileInputStream(snapshotFile));
    assertThat(newArchive).isNotNull();
    assertThat(newArchive.length()).isGreaterThan(0);
   
    // operations
    InputStream restoreResponse =
        applicationSession.restoreFullSnapshot(new FileInputStream(newArchive), true);
    StreamUtils.writeTo(restoreResponse, System.out);
   
    // verification
    new ApplicationAssert(application).pageContains("", title);
  }

  @Test
  public void shouldSaveFullSnapshot() throws IOException {
    // pre-conditions
    File snapshotFile = FileUtils.createRandomTempFile(".tar.gz");
    FileOutputStream snapshotFileOut = new FileOutputStream(snapshotFile);

    // operations
    // use gzip inputStream to assert valid gzip file
    InputStream in = new GZIPInputStream(
        new ApplicationSSHSession(application, session).saveFullSnapshot());
    writeTo(in, snapshotFileOut);
    // verifications
    assertThat(snapshotFile.length()).isGreaterThan(0);
  }

  private void writeTo(InputStream inputStream, FileOutputStream fileOut) throws IOException {
    try {
      StreamUtils.writeTo(inputStream, fileOut);
    } finally {
      StreamUtils.close(inputStream);
      fileOut.flush();
      StreamUtils.close(fileOut);
    }
  }

  private Session createSSHSession(String sshUrl) throws JSchException, URISyntaxException {
    JSch.setConfig("StrictHostKeyChecking", "no");
    JSch jsch = new JSch();
    jsch.addIdentity(SSHKeyTestUtils.SSH_TEST_PRIVATEKEY, SSHKeyTestUtils.DEFAULT_PASSPHRASE);
    URI sshUri = new URI(sshUrl);
    Session session = jsch.getSession(sshUri.getUserInfo(), sshUri.getHost());
    session.connect();
    return session;
  }
}
TOP

Related Classes of com.openshift.internal.client.ApplicationSSHSessionIntegrationTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.