summaryrefslogblamecommitdiffstats
path: root/src/test/java/org/openslx/imagemaster/AppTest.java
blob: 291206b8ba478135ca7dce962ba42da829ca62ec (plain) (tree)
1
2
3
4
5
6
7
8
9
10

                                



                                 
                                


                      



                                 


                                            




                                                  
                                                           
                                                      
                                                               
                                                              

                                                        
                                                
 


                            

                                
 


































                                                                        
                                 





















                                                                                                
                                 








                                                                                                 
                                                  



                                                                                                    



                                                   
                                                                






                                                                            

                                                                                         
                                                                                                     
















                                                                                                                                         
                                                                                           
                                                                                                        

                                         

                                                                                                 

                                         

                                                                             
                                                          




                                                                            
                                         
                                                                          
                           
                                                        


                                                               
                                                           
                                                            
                                 
                         







                                       
 
package org.openslx.imagemaster;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ConnectException;
import java.net.SocketException;
import java.util.Date;
import java.util.UUID;

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.openslx.imagemaster.thrift.iface.FtpCredentials;
import org.openslx.imagemaster.thrift.iface.ImageData;
import org.openslx.imagemaster.thrift.iface.ImageServer.Client;
import org.openslx.imagemaster.thrift.iface.ServerSessionData;
import org.openslx.imagemaster.thrift.iface.SessionData;
import org.openslx.imagemaster.thrift.iface.UserInfo;
import org.openslx.imagemaster.util.Sha512Crypt;

/**
 * Unit test for simple App.
 */
public class AppTest
		extends TestCase
{

	/**
	 * Create the test case
	 * 
	 * @param testName name of the test case
	 */
	public AppTest(String testName)
	{
		super( testName );
	}

	/**
	 * @return the suite of tests being tested
	 */
	public static Test suite()
	{
		return new TestSuite( AppTest.class );
	}

	/**
	 * Rigourous Test :-)
	 */
	public void testApp()
	{
		assertTrue( true );
	}

	/**
	 * Test the authentication
	 * 
	 * @throws TException
	 */
	public void testAuthentication() throws TException
	{
		TTransport transport = new TSocket( "localhost", 9090 );
		transport.open();

		TProtocol protocol = new TBinaryProtocol( transport );
		Client client = new Client( protocol );

		assertTrue( "Could not ping server", client.ping() );

		SessionData sessionData = client.authenticate( "ns202", "xxxxxxxxxxxx" );
		UserInfo userInfo = client.getUserFromToken( sessionData.getAuthToken() );
		System.out.println( "User info: " + userInfo );
		System.out.println( "Server address from MySQL: " + sessionData.serverAddress );
	}

	/**
	 * Test the server authentication and FTP Upload.
	 * 
	 * @throws TException
	 * @throws IOException
	 * @throws SocketException
	 */
	public void testServerAuth() throws TException, SocketException, IOException
	{
		TTransport transport = new TSocket( "localhost", 9090 );
		transport.open();

		TProtocol protocol = new TBinaryProtocol( transport );
		Client client = new Client( protocol );

		assertTrue( "Could not ping server", client.ping() );

		String stringToEncrypt = client.startServerAuthentication( "Test Organization" );
		System.out.println( "Authentication started. Got string: " + stringToEncrypt );

		String response = stringToEncrypt;

		ServerSessionData data = client.serverAuthenticate( "Test Organization", response );
		System.out.println( "Authenticated and got sid: '" + data.getSessionId() + "'" );

		// Create ImageData
		int version = 1;
		String imageName = "maschine.vmkd";
		UUID uuid = UUID.randomUUID();
		int imageCreateTime = (int)new Date().getTime();
		int imageUpdateTime = imageCreateTime;
		String imageOwner = "ns202";
		String contentOperatingSystem = "win7";
		boolean statusIsValid = true;
		boolean statusIsDeleted = false;
		String imageShortDescrption = "EIN SUPER TOLLES IMAGE!";
		String imageLongDescription = "Lorem ipsum dolor sit amet.";

		ImageData imageData = new ImageData( uuid.toString(), version, imageName,
				imageCreateTime, imageUpdateTime, imageOwner, contentOperatingSystem,
				statusIsValid, statusIsDeleted, imageShortDescrption, imageLongDescription );

		System.out.println( "Created imageData" );

		FtpCredentials ftpCredentials = client.submitImage( data.sessionId, imageData );
		System.out.println( "Got FTP credentials. User: " + ftpCredentials.username + ", password: " + ftpCredentials.password );

		FTPClient FtpClient = new FTPClient();
		String host = "localhost";
		int port = 2221;
		String user = ftpCredentials.username;
		String password = ftpCredentials.password;
		String fileName = "/home/nils/file_to_upload.bin";

		try {
			FtpClient.connect( host, port );
			System.out.println( "Connected to " + host + ":" + port + ". Reply code: " + FtpClient.getReplyCode() );
			if ( !FTPReply.isPositiveCompletion( FtpClient.getReplyCode() ) ) {
				ConnectException ce = new ConnectException( "No positive reply code." );
				throw ce;
			}
			if ( !FtpClient.login( user, password ) ) {
				ConnectException ce = new ConnectException( "Could not login." );
				throw ce;
			}
			System.out.println( "Logged in with user: " + user );
			FtpClient.setFileType( FTP.BINARY_FILE_TYPE );
			FtpClient.enterLocalPassiveMode();
			System.out.println( "Entered PASSIVE MODE" );
			InputStream input = new FileInputStream( fileName );
			System.out.print( "Starting file upload ... " );
			FtpClient.storeFile( "xcvb.vmdk", input );
			System.out.println( "done." );
			FtpClient.noop();
			client.finshedUpload( data.sessionId, imageData );
		} finally {
			if ( FtpClient.isConnected() ) {
				try {
					FtpClient.logout();
					FtpClient.disconnect();
				} catch ( IOException e ) {
					e.printStackTrace();
				}
			}
		}

	}

	public void testSha512_Crypt()
	{
		Sha512Crypt.selfTest();
	}
}