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();
}
}