com.openshift.internal.client.ApplicationSSHSessionIntegrationTest.java Source code

Java tutorial

Introduction

Here is the source code for com.openshift.internal.client.ApplicationSSHSessionIntegrationTest.java

Source

/******************************************************************************* 
 * 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;
    }
}