Author: rwinston
Date: Tue Feb 26 08:34:59 2008
New Revision: 631283

URL: http://svn.apache.org/viewvc?rev=631283&view=rev
Log:
Rename so tests are picked up

Added:
    
commons/proper/net/branches/NET_2_0/src/test/java/org/apache/commons/net/tftp/TFTPServerPathTest.java
    
commons/proper/net/branches/NET_2_0/src/test/java/org/apache/commons/net/tftp/TFTPTest.java
Removed:
    
commons/proper/net/branches/NET_2_0/src/test/java/org/apache/commons/net/tftp/TFTPServerPathTests.java
    
commons/proper/net/branches/NET_2_0/src/test/java/org/apache/commons/net/tftp/TFTPTests.java

Added: 
commons/proper/net/branches/NET_2_0/src/test/java/org/apache/commons/net/tftp/TFTPServerPathTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/net/branches/NET_2_0/src/test/java/org/apache/commons/net/tftp/TFTPServerPathTest.java?rev=631283&view=auto
==============================================================================
--- 
commons/proper/net/branches/NET_2_0/src/test/java/org/apache/commons/net/tftp/TFTPServerPathTest.java
 (added)
+++ 
commons/proper/net/branches/NET_2_0/src/test/java/org/apache/commons/net/tftp/TFTPServerPathTest.java
 Tue Feb 26 08:34:59 2008
@@ -0,0 +1,170 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.net.tftp;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import junit.framework.TestCase;
+
+/**
+ * Some basic tests to ensure that the TFTP Server is honoring its read/write 
mode, and preventing
+ * files from being read or written from outside of the assigned roots.
+ * 
+ * @author <A HREF="mailto:[EMAIL PROTECTED]">Dan Armbrust</A>
+ * 
+ */
+public class TFTPServerPathTest extends TestCase
+{
+       String filePrefix = "tftp-";
+       File serverDirectory = new File(System.getProperty("java.io.tmpdir"));
+
+       public void testReadOnly() throws IOException
+       {
+               // Start a read-only server
+               TFTPServer tftpS = new TFTPServer(serverDirectory, 
serverDirectory, 6900,
+                               TFTPServer.GET_ONLY, null, null);
+
+               // Create our TFTP instance to handle the file transfer.
+               TFTPClient tftp = new TFTPClient();
+               tftp.open();
+               tftp.setSoTimeout(2000);
+
+               // make a file to work with.
+               File file = new File(serverDirectory, filePrefix + 
"source.txt");
+               file.createNewFile();
+
+               // Read the file from the tftp server.
+               File out = new File(serverDirectory, filePrefix + "out");
+
+               // cleanup old failed runs
+               out.delete();
+               assertTrue("Couldn't clear output location", !out.exists());
+
+               FileOutputStream output = new FileOutputStream(out);
+
+               tftp.receiveFile(file.getName(), TFTP.BINARY_MODE, output, 
"localhost", 6900);
+               output.close();
+
+               assertTrue("file not created", out.exists());
+
+               out.delete();
+
+               FileInputStream fis = new FileInputStream(file);
+               try
+               {
+                       tftp.sendFile(out.getName(), TFTP.BINARY_MODE, fis, 
"localhost", 6900);
+                       fail("Server allowed write");
+               }
+               catch (IOException e)
+               {
+                       // expected path
+               }
+               fis.close();
+               file.delete();
+               tftpS.shutdown();
+       }
+
+       public void testWriteOnly() throws IOException
+       {
+               // Start a write-only server
+               TFTPServer tftpS = new TFTPServer(serverDirectory, 
serverDirectory, 6900,
+                               TFTPServer.PUT_ONLY, null, null);
+
+               // Create our TFTP instance to handle the file transfer.
+               TFTPClient tftp = new TFTPClient();
+               tftp.open();
+               tftp.setSoTimeout(2000);
+
+               // make a file to work with.
+               File file = new File(serverDirectory, filePrefix + 
"source.txt");
+               file.createNewFile();
+
+               File out = new File(serverDirectory, filePrefix + "out");
+
+               // cleanup old failed runs
+               out.delete();
+               assertTrue("Couldn't clear output location", !out.exists());
+
+               FileOutputStream output = new FileOutputStream(out);
+
+               try
+               {
+                       tftp.receiveFile(file.getName(), TFTP.BINARY_MODE, 
output, "localhost", 6900);
+                       fail("Server allowed read");
+               }
+               catch (IOException e)
+               {
+                       // expected path
+               }
+               output.close();
+               out.delete();
+
+               FileInputStream fis = new FileInputStream(file);
+               tftp.sendFile(out.getName(), TFTP.BINARY_MODE, fis, 
"localhost", 6900);
+
+               fis.close();
+
+               assertTrue("file not created", out.exists());
+
+               // cleanup
+               file.delete();
+               out.delete();
+               tftpS.shutdown();
+       }
+
+       public void testWriteOutsideHome() throws IOException
+       {
+               // Start a server
+               TFTPServer tftpS = new TFTPServer(serverDirectory, 
serverDirectory, 6900,
+                               TFTPServer.GET_AND_PUT, null, null);
+
+               // Create our TFTP instance to handle the file transfer.
+               TFTPClient tftp = new TFTPClient();
+               tftp.open();
+
+               File file = new File(serverDirectory, filePrefix + 
"source.txt");
+               file.createNewFile();
+
+               assertFalse("test construction error", new 
File(serverDirectory, "../foo").exists());
+
+               FileInputStream fis = new FileInputStream(file);
+               try
+               {
+                       tftp.sendFile("../foo", TFTP.BINARY_MODE, fis, 
"localhost", 6900);
+                       fail("Server allowed write!");
+               }
+               catch (IOException e)
+               {
+                       // expected path
+               }
+
+               fis.close();
+
+               assertFalse("file created when it should not have been",
+                               new File(serverDirectory, "../foo").exists());
+
+               // cleanup
+               file.delete();
+
+               tftpS.shutdown();
+       }
+       
+       
+}

Added: 
commons/proper/net/branches/NET_2_0/src/test/java/org/apache/commons/net/tftp/TFTPTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/net/branches/NET_2_0/src/test/java/org/apache/commons/net/tftp/TFTPTest.java?rev=631283&view=auto
==============================================================================
--- 
commons/proper/net/branches/NET_2_0/src/test/java/org/apache/commons/net/tftp/TFTPTest.java
 (added)
+++ 
commons/proper/net/branches/NET_2_0/src/test/java/org/apache/commons/net/tftp/TFTPTest.java
 Tue Feb 26 08:34:59 2008
@@ -0,0 +1,225 @@
+package org.apache.commons.net.tftp;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import junit.framework.TestCase;
+
+/**
+ * Test the TFTP Server and TFTP Client by creating some files in the system 
temp folder and then
+ * uploading and downloading them.
+ * 
+ * @author <A HREF="mailto:[EMAIL PROTECTED]">Dan Armbrust</A>
+ * 
+ */
+public class TFTPTest extends TestCase
+{
+       static TFTPServer tftpS;
+       static File serverDirectory = new 
File(System.getProperty("java.io.tmpdir"));
+       static String filePrefix = "tftp-";
+       static File[] files = new File[8];
+
+       static int testsLeftToRun = 6;
+
+       // only want to do this once...
+       static
+       {
+               try
+               {
+                       files[0] = createFile(new File(serverDirectory, 
filePrefix + "empty.txt"), 0);
+                       files[1] = createFile(new File(serverDirectory, 
filePrefix + "small.txt"), 1);
+                       files[2] = createFile(new File(serverDirectory, 
filePrefix + "511.txt"), 511);
+                       files[3] = createFile(new File(serverDirectory, 
filePrefix + "512.txt"), 512);
+                       files[4] = createFile(new File(serverDirectory, 
filePrefix + "513.txt"), 513);
+                       files[5] = createFile(new File(serverDirectory, 
filePrefix + "med.txt"), 1000 * 1024);
+                       files[6] = createFile(new File(serverDirectory, 
filePrefix + "big.txt"), 5000 * 1024);
+                       files[7] = createFile(new File(serverDirectory, 
filePrefix + "huge.txt"), 37000 * 1024);
+
+                       // Start the server
+                       tftpS = new TFTPServer(serverDirectory, 
serverDirectory, 6900, TFTPServer.GET_AND_PUT,
+                                       null, null);
+                       tftpS.setSocketTimeout(2000);
+               }
+               catch (IOException e)
+               {
+                       e.printStackTrace();
+               }
+
+       }
+
+       protected void tearDown() throws Exception
+       {
+               testsLeftToRun--;
+               if (testsLeftToRun <= 0)
+               {
+                       if (tftpS != null)
+                       {
+                               tftpS.shutdown();
+                       }
+                       for (int i = 0; i < files.length; i++)
+                       {
+                               files[i].delete();
+                       }
+               }
+               super.tearDown();
+       }
+
+       /*
+        * Create a file, size specified in bytes
+        */
+       private static File createFile(File file, int size) throws IOException
+       {
+               OutputStream os = new BufferedOutputStream(new 
FileOutputStream(file));
+               byte[] temp = "0".getBytes();
+               for (int i = 0; i < size; i++)
+               {
+                       os.write(temp);
+               }
+               os.close();
+               return file;
+       }
+
+       public void testTFTPBinaryDownloads() throws Exception
+       {
+               // test with the smaller files
+               for (int i = 0; i < 6; i++)
+               {
+                       testDownload(TFTP.BINARY_MODE, files[i]);
+               }
+       }
+
+       public void testASCIIDownloads() throws Exception
+       {
+               // test with the smaller files
+               for (int i = 0; i < 6; i++)
+               {
+                       testDownload(TFTP.ASCII_MODE, files[i]);
+               }
+       }
+
+       public void testTFTPBinaryUploads() throws Exception
+       {
+               // test with the smaller files
+               for (int i = 0; i < 6; i++)
+               {
+                       testUpload(TFTP.BINARY_MODE, files[i]);
+               }
+       }
+
+       public void testASCIIUploads() throws Exception
+       {
+               // test with the smaller files
+               for (int i = 0; i < 6; i++)
+               {
+                       testUpload(TFTP.ASCII_MODE, files[i]);
+               }
+       }
+
+       public void testHugeUploads() throws Exception
+       {
+               for (int i = 5; i < files.length; i++)
+               {
+                       testUpload(TFTP.BINARY_MODE, files[i]);
+               }
+       }
+
+       public void testHugeDownloads() throws Exception
+       {
+               // test with the smaller files
+               for (int i = 5; i < files.length; i++)
+               {
+                       testDownload(TFTP.BINARY_MODE, files[i]);
+               }
+       }
+
+       private void testDownload(int mode, File file) throws IOException
+       {
+               // Create our TFTP instance to handle the file transfer.
+               TFTPClient tftp = new TFTPClient();
+               tftp.open();
+               tftp.setSoTimeout(2000);
+
+               File out = new File(serverDirectory, filePrefix + "download");
+
+               // cleanup old failed runs
+               out.delete();
+               assertTrue("Couldn't clear output location", !out.exists());
+
+               FileOutputStream output = new FileOutputStream(out);
+
+               tftp.receiveFile(file.getName(), mode, output, "localhost", 
6900);
+               output.close();
+
+               assertTrue("file not created", out.exists());
+               assertTrue("files not identical on file " + file, 
filesIdentical(out, file));
+
+               // delete the downloaded file
+               out.delete();
+       }
+
+       private void testUpload(int mode, File file) throws Exception
+       {
+               // Create our TFTP instance to handle the file transfer.
+               TFTPClient tftp = new TFTPClient();
+               tftp.open();
+               tftp.setSoTimeout(2000);
+
+               File in = new File(serverDirectory, filePrefix + "upload");
+               // cleanup old failed runs
+               in.delete();
+               assertTrue("Couldn't clear output location", !in.exists());
+
+               FileInputStream fis = new FileInputStream(file);
+               tftp.sendFile(in.getName(), mode, fis, "localhost", 6900);
+               fis.close();
+
+               // need to give the server a bit of time to receive our last 
packet, and
+               // close out its file buffers, etc.
+               Thread.sleep(100);
+               assertTrue("file not created", in.exists());
+               assertTrue("files not identical on file " + file, 
filesIdentical(file, in));
+
+               in.delete();
+       }
+
+       private boolean filesIdentical(File a, File b) throws IOException
+       {
+               if (!a.exists() || !b.exists())
+               {
+                       return false;
+               }
+
+               if (a.length() != b.length())
+               {
+                       return false;
+               }
+
+               InputStream fisA = new BufferedInputStream(new 
FileInputStream(a));
+               InputStream fisB = new BufferedInputStream(new 
FileInputStream(b));
+
+               int aBit = fisA.read();
+               int bBit = fisB.read();
+
+               while (aBit != -1)
+               {
+                       if (aBit != bBit)
+                       {
+                               fisA.close();
+                               fisB.close();
+                               return false;
+                       }
+                       aBit = fisA.read();
+                       bBit = fisB.read();
+               }
+
+               fisA.close();
+               fisB.close();
+               return true;
+       }
+}


Reply via email to