/* * Copyright (C) 2009 eXo Platform SAS. * * This 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 2.1 of * the License, or (at your option) any later version. * * This software 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 software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.exoplatform.frameworks.ftpclient.multimulti; import junit.framework.TestCase; import org.exoplatform.frameworks.ftpclient.FtpConst; import org.exoplatform.frameworks.ftpclient.FtpTestConfig; import org.exoplatform.frameworks.ftpclient.Log; import org.exoplatform.frameworks.ftpclient.client.FtpClientSession; import org.exoplatform.frameworks.ftpclient.client.FtpClientSessionImpl; import org.exoplatform.frameworks.ftpclient.commands.CmdCwd; import org.exoplatform.frameworks.ftpclient.commands.CmdDele; import org.exoplatform.frameworks.ftpclient.commands.CmdMkd; import org.exoplatform.frameworks.ftpclient.commands.CmdPass; import org.exoplatform.frameworks.ftpclient.commands.CmdPasv; import org.exoplatform.frameworks.ftpclient.commands.CmdPwd; import org.exoplatform.frameworks.ftpclient.commands.CmdRetr; import org.exoplatform.frameworks.ftpclient.commands.CmdStor; import org.exoplatform.frameworks.ftpclient.commands.CmdSyst; import org.exoplatform.frameworks.ftpclient.commands.CmdUser; /** * Created by The eXo Platform SAS Author : Vitaly Guly gavrik-vetal@ukr.net/mail.ru * * @version $Id: $ */ public class TestAgent extends TestCase { public static final int SLEEP = 100; private Log log; private int agentId; private int itemsCount; private ClientThread clientThread; private boolean successed = false; /** * the name of the test case */ private String fName; public TestAgent(String name) { fName= name; } public TestAgent(int agentId, int itemsCount) { log = new Log("TestAgent[" + agentId + "]"); this.agentId = agentId; this.itemsCount = itemsCount; log.info("construct agent with ID [" + agentId + "]"); clientThread = new ClientThread(); clientThread.start(); } public boolean isAlive() { return clientThread.isAlive(); } public boolean isSuccessed() { return successed; } private class ClientThread extends Thread { private Log log = new Log("ClientThread[" + agentId + "]"); private FtpClientSession client; public ClientThread() { } public void run() { try { while (MultiThreadCrushTest.IsNeedWaitAll) { Thread.sleep(1000); } client = new FtpClientSessionImpl(FtpTestConfig.FTP_HOST, FtpTestConfig.FTP_PORT); if (!client.connect(60)) { return; } { CmdUser cmdUser = new CmdUser(FtpTestConfig.USER_ID); assertEquals(FtpConst.Replyes.REPLY_331, client.executeCommand(cmdUser)); } Thread.sleep(SLEEP); { CmdPass cmdPass = new CmdPass(FtpTestConfig.USER_PASS); assertEquals(FtpConst.Replyes.REPLY_230, client.executeCommand(cmdPass)); } Thread.sleep(SLEEP); { CmdSyst cmdSyst = new CmdSyst(); assertEquals(FtpConst.Replyes.REPLY_215, client.executeCommand(cmdSyst)); } Thread.sleep(SLEEP); { CmdPwd cmdPwd = new CmdPwd(); assertEquals(FtpConst.Replyes.REPLY_257, client.executeCommand(cmdPwd)); } Thread.sleep(SLEEP); { CmdCwd cmdCwd = new CmdCwd(FtpTestConfig.TEST_FOLDER); assertEquals(FtpConst.Replyes.REPLY_250, client.executeCommand(cmdCwd)); } Thread.sleep(SLEEP); { CmdPwd cmdPwd = new CmdPwd(); assertEquals(FtpConst.Replyes.REPLY_257, client.executeCommand(cmdPwd)); assertEquals(FtpTestConfig.TEST_FOLDER, cmdPwd.getCurrentPath()); } Thread.sleep(SLEEP); String folderName = "" + agentId; String folder1Name = folderName.substring(0, 1); log.info("FOLDER 1 NAME: [" + folder1Name + "]"); { CmdCwd cmdCwd = new CmdCwd(folder1Name); assertEquals(FtpConst.Replyes.REPLY_250, client.executeCommand(cmdCwd)); } Thread.sleep(SLEEP); String folder2Name = folderName.substring(1, 2); { CmdCwd cmdCwd = new CmdCwd(folder2Name); assertEquals(FtpConst.Replyes.REPLY_250, client.executeCommand(cmdCwd)); } Thread.sleep(SLEEP); { CmdMkd cmdMkd = new CmdMkd(folderName); assertEquals(FtpConst.Replyes.REPLY_257, client.executeCommand(cmdMkd, FtpConst.Replyes.REPLY_257, 3)); } Thread.sleep(SLEEP); { CmdCwd cmdCwd = new CmdCwd(folderName); assertEquals(FtpConst.Replyes.REPLY_250, client.executeCommand(cmdCwd)); } Thread.sleep(SLEEP); String folderPath = FtpTestConfig.TEST_FOLDER + "/" + folder1Name + "/" + folder2Name + "/" + folderName; log.info("FOLDER PATH: [" + folderPath + "]"); { CmdPwd cmdPwd = new CmdPwd(); assertEquals(FtpConst.Replyes.REPLY_257, client.executeCommand(cmdPwd)); assertEquals(folderPath, cmdPwd.getCurrentPath()); } Thread.sleep(SLEEP); for (int i1 = 0; i1 < itemsCount; i1++) { String tf1Name = "test_folder_" + i1; CmdMkd cmdMkd = new CmdMkd(tf1Name); assertEquals(FtpConst.Replyes.REPLY_257, client.executeCommand(cmdMkd, FtpConst.Replyes.REPLY_257, 3)); Thread.sleep(SLEEP); assertEquals(FtpConst.Replyes.REPLY_250, client.executeCommand(new CmdCwd(tf1Name))); Thread.sleep(SLEEP); for (int i2 = 0; i2 < itemsCount; i2++) { String tf2Name = "test_file_" + i2; int expectReply = 3; while (expectReply > 0) { int pasvReply = client.executeCommand(new CmdPasv(), FtpConst.Replyes.REPLY_227, 3); if (pasvReply == FtpConst.Replyes.REPLY_227) { // byte []data = ("TEST FILE CONTENT " + i2).getBytes(); byte[] data = new byte[20 * 1024]; CmdStor cmdStor = new CmdStor(tf2Name); cmdStor.setFileContent(data); int storReply = client.executeCommand(cmdStor); if (storReply == FtpConst.Replyes.REPLY_226) { break; } Thread.sleep(SLEEP); } Thread.sleep(SLEEP); expectReply--; } if (expectReply == 0) { fail(); } } assertEquals(FtpConst.Replyes.REPLY_250, client.executeCommand(new CmdCwd(".."))); Thread.sleep(SLEEP); } for (int i1 = 0; i1 < itemsCount; i1++) { String tf1Name = "test_folder_" + i1; assertEquals(FtpConst.Replyes.REPLY_250, client.executeCommand(new CmdCwd(tf1Name))); Thread.sleep(SLEEP); for (int i2 = 0; i2 < itemsCount; i2++) { String tf2Name = "test_file_" + i2; int expectReply = 3; while (expectReply > 0) { int pasvReply = client.executeCommand(new CmdPasv(), FtpConst.Replyes.REPLY_227, 3); if (pasvReply == FtpConst.Replyes.REPLY_227) { CmdRetr cmdRetr = new CmdRetr(tf2Name); int retrReply = client.executeCommand(cmdRetr); if (retrReply == FtpConst.Replyes.REPLY_226) { break; } } } if (expectReply == 0) { fail(); } Thread.sleep(SLEEP); } assertEquals(FtpConst.Replyes.REPLY_250, client.executeCommand(new CmdCwd(".."))); } Thread.sleep(SLEEP); { assertEquals(FtpConst.Replyes.REPLY_250, client.executeCommand(new CmdCwd(".."))); } Thread.sleep(SLEEP); { assertEquals(FtpConst.Replyes.REPLY_250, client.executeCommand(new CmdDele(folderName))); } Thread.sleep(SLEEP); client.close(); successed = true; } catch (Throwable exc) { log.info("Unhandled exception. " + exc.getMessage(), exc); } } } }