Skip to content

Commit

Permalink
Add some more tests to the ftp module
Browse files Browse the repository at this point in the history
  • Loading branch information
mgoellnitz committed Mar 30, 2016
1 parent 489bbf4 commit 04b52bc
Show file tree
Hide file tree
Showing 6 changed files with 263 additions and 58 deletions.
9 changes: 3 additions & 6 deletions core/test/mock-content.xml
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,7 @@ public class GroovyTest {
<id>CodeResource:8</id>
<annotation>org.tangram.example.Container</annotation>
<mimeType>application/x-groovy</mimeType>
<codeText>
package org.tangram.test
<codeText>package org.tangram.test

import javax.inject.Singleton

Expand All @@ -53,8 +52,7 @@ public class GroovyAnnotatedTest {
<id>CodeResource:10</id>
<annotation>org.tangram.link.LinkHandler</annotation>
<mimeType>application/x-groovy</mimeType>
<codeText>
package org.tangram.test
<codeText>package org.tangram.test

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
Expand Down Expand Up @@ -82,8 +80,7 @@ public class GroovyLinkHandlerTest implements LinkHandler {
<id>CodeResource:12</id>
<annotation>org.tangram.content.Content</annotation>
<mimeType>application/x-groovy</mimeType>
<codeText>
package org.tangram.test
<codeText>package org.tangram.test

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
Expand Down
113 changes: 113 additions & 0 deletions ftp/test/org/tangram/ftp/test/FtpTestHelper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
/*
*
* Copyright 2016 Martin Goellnitz
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.tangram.ftp.test;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.InetAddress;
import java.net.Socket;
import java.util.List;
import java.util.Map;
import org.mockftpserver.core.command.AbstractTrackingCommandHandler;
import org.mockftpserver.core.command.Command;
import org.mockito.Mockito;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.tangram.components.test.GenericCodeResourceCacheTest;
import org.tangram.content.CodeResourceCache;
import org.tangram.ftp.TangramFtpServer;
import org.tangram.mock.MockMutableBeanFactory;


/**
* Helper class for ftp test.
*
* provides common mock implementations for ftp handler tests.
*/
public class FtpTestHelper {

private static final Logger LOG = LoggerFactory.getLogger(FtpTestHelper.class);

private final String command;

private final byte[] bytes;

private final Map<String, AbstractTrackingCommandHandler> commands;

private final ByteArrayOutputStream output = new ByteArrayOutputStream();


/**
* Create a new helper instance.
*
* @param commandName Internal name from Commands class of MockFtpServer
* @throws UnsupportedEncodingException should only happen if UTF-8 is not available on your system
* @throws FileNotFoundException thrown when the default xml mock content file cannot be read
*/
public FtpTestHelper(String commandName) throws UnsupportedEncodingException, FileNotFoundException {
command = commandName;
bytes = (commandName.toLowerCase()+"\r\n").getBytes("UTF-8");
MockMutableBeanFactory beanFactory = new MockMutableBeanFactory();
CodeResourceCache codeCache = new GenericCodeResourceCacheTest().getInstance();
TangramFtpServer ftpServer = new TangramFtpServer(beanFactory, codeCache);
commands = ftpServer.getCommands();
} // ()


public Map<String, AbstractTrackingCommandHandler> getCommands() {
return commands;
} // getCommands()


public AbstractTrackingCommandHandler getHandler() throws FileNotFoundException {
return commands.get(command);
} // getHandler()


public Command getCommand(List<String> params) {
return new Command(command, params);
} // getCommand()


public Socket getSocket() throws IOException {
Socket socket = Mockito.mock(Socket.class);
ByteArrayInputStream input = new ByteArrayInputStream(bytes);
InetAddress me = InetAddress.getByName("localhost");
Mockito.when(socket.getInetAddress()).thenReturn(me);
Mockito.when(socket.getLocalAddress()).thenReturn(me);
Mockito.when(socket.getOutputStream()).thenReturn(output);
Mockito.when(socket.getInputStream()).thenReturn(input);
return socket;
} // getSocket()


/**
* Get output collected via the data socket.
*
* @return UTF-8 string representation of the output
* @throws UnsupportedEncodingException onyl thrown if your system doesn't know UTF-8
*/
public String getOutput() throws UnsupportedEncodingException {
return new String(output.toByteArray(), "UTF-8");
} // getOutput()

} // FtpTestHelper()
30 changes: 5 additions & 25 deletions ftp/test/org/tangram/ftp/test/ListFtpCommandHandlerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,26 +19,16 @@
package org.tangram.ftp.test;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.StringReader;
import java.net.InetAddress;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.mockftpserver.core.command.AbstractTrackingCommandHandler;
import org.mockftpserver.core.command.Command;
import org.mockftpserver.core.command.CommandNames;
import org.mockito.Mockito;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.tangram.components.test.GenericCodeResourceCacheTest;
import org.tangram.content.CodeResourceCache;
import org.tangram.ftp.ListFtpCommandHandler;
import org.tangram.ftp.SessionHelper;
import org.tangram.ftp.TangramFtpServer;
import org.tangram.mock.MockMutableBeanFactory;
import org.testng.Assert;
import org.testng.annotations.Test;

Expand All @@ -53,22 +43,12 @@ public class ListFtpCommandHandlerTest {

@Test
public void testListFtpCommandHandler() throws Exception {
MockMutableBeanFactory beanFactory = new MockMutableBeanFactory();
CodeResourceCache codeCache = new GenericCodeResourceCacheTest().getInstance();
TangramFtpServer ftpServer = new TangramFtpServer(beanFactory, codeCache);
Map<String, AbstractTrackingCommandHandler> commands = ftpServer.getCommands();
ListFtpCommandHandler listFtpCommandHandler = (ListFtpCommandHandler) commands.get(CommandNames.LIST);
FtpTestHelper helper = new FtpTestHelper(CommandNames.LIST);
ListFtpCommandHandler listFtpCommandHandler = (ListFtpCommandHandler) helper.getHandler();
List<String> params = new ArrayList<>();
Command command = new Command(CommandNames.LIST, params);
Socket socket = Mockito.mock(Socket.class);
ByteArrayOutputStream output = new ByteArrayOutputStream();
ByteArrayInputStream input = new ByteArrayInputStream("list\r\n".getBytes("UTF-8"));
InetAddress me = InetAddress.getByName("localhost");
Mockito.when(socket.getInetAddress()).thenReturn(me);
Mockito.when(socket.getLocalAddress()).thenReturn(me);
Mockito.when(socket.getOutputStream()).thenReturn(output);
Mockito.when(socket.getInputStream()).thenReturn(input);
MockSession session = new MockSession(socket, commands);
Command command = helper.getCommand(params);
Socket socket = helper.getSocket();
MockSession session = new MockSession(socket, helper.getCommands());
LOG.debug("testListFtpCommandHandler() run");
Thread t = new Thread(session);
t.start();
Expand Down
34 changes: 7 additions & 27 deletions ftp/test/org/tangram/ftp/test/PassFtpCommandHandlerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,25 +18,15 @@
*/
package org.tangram.ftp.test;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.mockftpserver.core.command.AbstractTrackingCommandHandler;
import org.mockftpserver.core.command.Command;
import org.mockftpserver.core.command.CommandNames;
import org.mockito.Mockito;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.tangram.components.test.GenericCodeResourceCacheTest;
import org.tangram.content.CodeResourceCache;
import org.tangram.ftp.PassFtpCommandHandler;
import org.tangram.ftp.SessionHelper;
import org.tangram.ftp.TangramFtpServer;
import org.tangram.mock.MockMutableBeanFactory;
import org.testng.Assert;
import org.testng.annotations.Test;

Expand All @@ -51,35 +41,25 @@ public class PassFtpCommandHandlerTest {

@Test
public void testPassFtpCommandHandler() throws Exception {
MockMutableBeanFactory beanFactory = new MockMutableBeanFactory();
CodeResourceCache codeCache = new GenericCodeResourceCacheTest().getInstance();
TangramFtpServer ftpServer = new TangramFtpServer(beanFactory, codeCache);
Map<String, AbstractTrackingCommandHandler> commands = ftpServer.getCommands();
PassFtpCommandHandler listFtpCommandHandler = (PassFtpCommandHandler) commands.get(CommandNames.PASS);
FtpTestHelper helper = new FtpTestHelper(CommandNames.PASS);
PassFtpCommandHandler passFtpCommandHandler = (PassFtpCommandHandler)helper.getHandler();
List<String> params = new ArrayList<>();
params.add("testpassword");
Command command = new Command(CommandNames.LIST, params);
Socket socket = Mockito.mock(Socket.class);
ByteArrayOutputStream output = new ByteArrayOutputStream();
ByteArrayInputStream input = new ByteArrayInputStream("pass\r\n".getBytes("UTF-8"));
InetAddress me = InetAddress.getByName("localhost");
Mockito.when(socket.getInetAddress()).thenReturn(me);
Mockito.when(socket.getLocalAddress()).thenReturn(me);
Mockito.when(socket.getOutputStream()).thenReturn(output);
Mockito.when(socket.getInputStream()).thenReturn(input);
MockSession session = new MockSession(socket, commands);
Command command = helper.getCommand(params);
Socket socket = helper.getSocket();
MockSession session = new MockSession(socket, helper.getCommands());
LOG.debug("testListFtpCommandHandler() run");
Thread t = new Thread(session);
t.start();
Thread.sleep(100);
LOG.debug("testListFtpCommandHandler() list");
session.setAttribute(SessionHelper.USER, "testuser");
listFtpCommandHandler.handleCommand(command, session);
passFtpCommandHandler.handleCommand(command, session);
LOG.debug("testListFtpCommandHandler() close");
session.close();
LOG.debug("testListFtpCommandHandler() join");
t.join(5000);
String result = new String(output.toByteArray(), "UTF-8");
String result = helper.getOutput();
Assert.assertTrue(result.length()>32, "Not enough output read for correct result.");
result = result.substring(result.length()-30, result.length()-2);
Assert.assertEquals(result, "230 User logged in, proceed.", "Error login response.");
Expand Down
68 changes: 68 additions & 0 deletions ftp/test/org/tangram/ftp/test/RetrFtpCommandHandlerTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
/*
*
* Copyright 2016 Martin Goellnitz
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.tangram.ftp.test;

import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import org.mockftpserver.core.command.Command;
import org.mockftpserver.core.command.CommandNames;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.tangram.ftp.RetrFtpCommandHandler;
import org.tangram.ftp.SessionHelper;
import org.testng.Assert;
import org.testng.annotations.Test;


/**
* Test aspects of the ftp command handler for retrieving.
*/
public class RetrFtpCommandHandlerTest {

private static final Logger LOG = LoggerFactory.getLogger(RetrFtpCommandHandlerTest.class);


@Test
public void testRetrFtpCommandHandler() throws Exception {
FtpTestHelper helper = new FtpTestHelper(CommandNames.RETR);
RetrFtpCommandHandler retrFtpCommandHandler = (RetrFtpCommandHandler) helper.getHandler();

List<String> params = new ArrayList<>();
params.add("org.tangram.link.LinkHandler.groovy");
Command command = helper.getCommand(params);
Socket socket = helper.getSocket();
MockSession session = new MockSession(socket, helper.getCommands());
LOG.debug("testListFtpCommandHandler() run");
Thread t = new Thread(session);
t.start();
Thread.sleep(100);
LOG.debug("testListFtpCommandHandler() list");
session.setAttribute(SessionHelper.CURRENT_DIR, "/groovy");
retrFtpCommandHandler.handleCommand(command, session);
LOG.debug("testListFtpCommandHandler() close");
session.close();
LOG.debug("testListFtpCommandHandler() join");
t.join(5000);
String content = session.getContent();
Assert.assertEquals(content.length(), 564, "Unexpected file content received.");
Assert.assertEquals(content.indexOf("package org.tangram.test"), 0, "Unexpected file content received.");
} // testRetrFtpCommandHandler()

} // RetrFtpCommandHandlerTest
Loading

0 comments on commit 04b52bc

Please sign in to comment.