Return-Path: X-Original-To: apmail-hadoop-hdfs-commits-archive@minotaur.apache.org Delivered-To: apmail-hadoop-hdfs-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 809847E97 for ; Sat, 23 Jul 2011 00:22:33 +0000 (UTC) Received: (qmail 81590 invoked by uid 500); 23 Jul 2011 00:22:33 -0000 Delivered-To: apmail-hadoop-hdfs-commits-archive@hadoop.apache.org Received: (qmail 81509 invoked by uid 500); 23 Jul 2011 00:22:32 -0000 Mailing-List: contact hdfs-commits-help@hadoop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: hdfs-dev@hadoop.apache.org Delivered-To: mailing list hdfs-commits@hadoop.apache.org Received: (qmail 81501 invoked by uid 99); 23 Jul 2011 00:22:31 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 23 Jul 2011 00:22:31 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 23 Jul 2011 00:22:30 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id D756823888BD; Sat, 23 Jul 2011 00:22:09 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1149770 - in /hadoop/common/trunk/hdfs: CHANGES.txt src/test/hdfs/org/apache/hadoop/hdfs/TestByteRangeInputStream.java src/test/hdfs/org/apache/hadoop/hdfs/server/namenode/TestStreamFile.java Date: Sat, 23 Jul 2011 00:22:09 -0000 To: hdfs-commits@hadoop.apache.org From: shv@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20110723002209.D756823888BD@eris.apache.org> Author: shv Date: Sat Jul 23 00:22:08 2011 New Revision: 1149770 URL: http://svn.apache.org/viewvc?rev=1149770&view=rev Log: HDFS-2116. Use Mokito in TestStreamFile and TestByteRangeInputStream. Contributed by Plamen Jeliazkov. Modified: hadoop/common/trunk/hdfs/CHANGES.txt hadoop/common/trunk/hdfs/src/test/hdfs/org/apache/hadoop/hdfs/TestByteRangeInputStream.java hadoop/common/trunk/hdfs/src/test/hdfs/org/apache/hadoop/hdfs/server/namenode/TestStreamFile.java Modified: hadoop/common/trunk/hdfs/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hdfs/CHANGES.txt?rev=1149770&r1=1149769&r2=1149770&view=diff ============================================================================== --- hadoop/common/trunk/hdfs/CHANGES.txt (original) +++ hadoop/common/trunk/hdfs/CHANGES.txt Sat Jul 23 00:22:08 2011 @@ -586,7 +586,10 @@ Trunk (unreleased changes) HDFS-2167. Move dnsToSwitchMapping and hostsReader from FSNamesystem to DatanodeManager. (szetszwo) - + + HDFS-2116. Use Mokito in TestStreamFile and TestByteRangeInputStream. + (Plamen Jeliazkov via shv) + OPTIMIZATIONS HDFS-1458. Improve checkpoint performance by avoiding unnecessary image Modified: hadoop/common/trunk/hdfs/src/test/hdfs/org/apache/hadoop/hdfs/TestByteRangeInputStream.java URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hdfs/src/test/hdfs/org/apache/hadoop/hdfs/TestByteRangeInputStream.java?rev=1149770&r1=1149769&r2=1149770&view=diff ============================================================================== --- hadoop/common/trunk/hdfs/src/test/hdfs/org/apache/hadoop/hdfs/TestByteRangeInputStream.java (original) +++ hadoop/common/trunk/hdfs/src/test/hdfs/org/apache/hadoop/hdfs/TestByteRangeInputStream.java Sat Jul 23 00:22:08 2011 @@ -17,25 +17,30 @@ */ package org.apache.hadoop.hdfs; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.fail; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; -import java.net.MalformedURLException; import java.net.URL; -import org.apache.hadoop.hdfs.ByteRangeInputStream; import org.apache.hadoop.hdfs.ByteRangeInputStream.URLOpener; - import org.junit.Test; -import static org.junit.Assert.*; class MockHttpURLConnection extends HttpURLConnection { - MockURL m; - - public MockHttpURLConnection(URL u, MockURL m) { - super(u); - this.m = m; + private int responseCode = -1; + URL m; + + public MockHttpURLConnection(URL u) { + super(u); + m = u; } public boolean usingProxy(){ @@ -46,7 +51,6 @@ class MockHttpURLConnection extends Http } public void connect() throws IOException { - m.setMsg("Connect: "+url+", Range: "+getRequestProperty("Range")); } public InputStream getInputStream() throws IOException { @@ -64,8 +68,8 @@ class MockHttpURLConnection extends Http } public int getResponseCode() { - if (m.responseCode != -1) { - return m.responseCode; + if (responseCode != -1) { + return responseCode; } else { if (getRequestProperty("Range") == null) { return 200; @@ -74,89 +78,67 @@ class MockHttpURLConnection extends Http } } } - -} -class MockURL extends URLOpener { - String msg; - public int responseCode = -1; - - public MockURL(URL u) { - super(u); + public void setResponseCode(int resCode) { + responseCode = resCode; } - public MockURL(String s) throws MalformedURLException { - this(new URL(s)); - } - - public HttpURLConnection openConnection() throws IOException { - return new MockHttpURLConnection(url, this); - } - - public void setMsg(String s) { - msg = s; - } - - public String getMsg() { - return msg; - } } public class TestByteRangeInputStream { @Test - public void testByteRange() throws IOException, InterruptedException { - MockURL o = new MockURL("http://test/"); - MockURL r = new MockURL((URL)null); - ByteRangeInputStream is = new ByteRangeInputStream(o, r); + public void testByteRange() throws IOException { + URLOpener ospy = spy(new URLOpener(new URL("http://test/"))); + doReturn(new MockHttpURLConnection(ospy.getURL())).when(ospy) + .openConnection(); + URLOpener rspy = spy(new URLOpener((URL) null)); + doReturn(new MockHttpURLConnection(rspy.getURL())).when(rspy) + .openConnection(); + ByteRangeInputStream is = new ByteRangeInputStream(ospy, rspy); assertEquals("getPos wrong", 0, is.getPos()); is.read(); - assertEquals("Initial call made incorrectly", - "Connect: http://test/, Range: null", - o.getMsg()); + assertNull("Initial call made incorrectly (Range Check)", ospy + .openConnection().getRequestProperty("Range")); assertEquals("getPos should be 1 after reading one byte", 1, is.getPos()); - o.setMsg(null); - is.read(); assertEquals("getPos should be 2 after reading two bytes", 2, is.getPos()); - assertNull("No additional connections should have been made (no seek)", - o.getMsg()); + // No additional connections should have been made (no seek) + + rspy.setURL(new URL("http://resolvedurl/")); - r.setMsg(null); - r.setURL(new URL("http://resolvedurl/")); - is.seek(100); is.read(); - assertEquals("Seek to 100 bytes made incorrectly", - "Connect: http://resolvedurl/, Range: bytes=100-", - r.getMsg()); + assertEquals("Seek to 100 bytes made incorrectly (Range Check)", + "bytes=100-", rspy.openConnection().getRequestProperty("Range")); - assertEquals("getPos should be 101 after reading one byte", 101, is.getPos()); + assertEquals("getPos should be 101 after reading one byte", 101, + is.getPos()); - r.setMsg(null); + verify(rspy, times(2)).openConnection(); is.seek(101); is.read(); - assertNull("Seek to 101 should not result in another request", r.getMsg()); + verify(rspy, times(2)).openConnection(); + + // Seek to 101 should not result in another request" - r.setMsg(null); is.seek(2500); is.read(); - assertEquals("Seek to 2500 bytes made incorrectly", - "Connect: http://resolvedurl/, Range: bytes=2500-", - r.getMsg()); + assertEquals("Seek to 2500 bytes made incorrectly (Range Check)", + "bytes=2500-", rspy.openConnection().getRequestProperty("Range")); - r.responseCode = 200; + ((MockHttpURLConnection) rspy.openConnection()).setResponseCode(200); is.seek(500); try { @@ -168,7 +150,7 @@ public class TestByteRangeInputStream { "HTTP_PARTIAL expected, received 200", e.getMessage()); } - r.responseCode = 206; + ((MockHttpURLConnection) rspy.openConnection()).setResponseCode(206); is.seek(0); try { Modified: hadoop/common/trunk/hdfs/src/test/hdfs/org/apache/hadoop/hdfs/server/namenode/TestStreamFile.java URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hdfs/src/test/hdfs/org/apache/hadoop/hdfs/server/namenode/TestStreamFile.java?rev=1149770&r1=1149769&r2=1149770&view=diff ============================================================================== --- hadoop/common/trunk/hdfs/src/test/hdfs/org/apache/hadoop/hdfs/server/namenode/TestStreamFile.java (original) +++ hadoop/common/trunk/hdfs/src/test/hdfs/org/apache/hadoop/hdfs/server/namenode/TestStreamFile.java Sat Jul 23 00:22:08 2011 @@ -18,6 +18,9 @@ package org.apache.hadoop.hdfs.server.namenode; import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; @@ -32,9 +35,6 @@ import javax.servlet.ServletOutputStream import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.junit.Test; -import static org.junit.Assert.*; - import org.apache.hadoop.fs.FSInputStream; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; @@ -43,6 +43,7 @@ import org.apache.hadoop.hdfs.DFSInputSt import org.apache.hadoop.hdfs.HdfsConfiguration; import org.apache.hadoop.hdfs.MiniDFSCluster; import org.apache.hadoop.hdfs.server.common.JspHelper; +import org.junit.Test; import org.mockito.Mockito; import org.mortbay.jetty.InclusiveByteRange; @@ -65,137 +66,10 @@ class MockFSInputStream extends FSInputS public long getPos() throws IOException { return currentPos; } - - public boolean seekToNewSource(long targetPos) throws IOException { - return false; - } -} - - -class MockHttpServletResponse implements HttpServletResponse { - - private int status = -1; - - public MockHttpServletResponse() { - } - - public int getStatus() { - return status; - } - - - public void setStatus(int sc) { - status = sc; - } - - @Deprecated - public void setStatus(int sc, java.lang.String sm) { - } - - public void addIntHeader(String name, int value) { - } - public void setIntHeader(String name, int value) { - } - - public void addHeader(String name, String value) { - } - - public void setHeader(String name, String value) { - } - - public void addDateHeader(java.lang.String name, long date) { - } - - public void setDateHeader(java.lang.String name, long date) { - } - - public void sendRedirect(java.lang.String location) { - } - - public void sendError(int e) { - } - - public void sendError(int a, java.lang.String b) { - } - - @Deprecated - public String encodeRedirectUrl(java.lang.String a) { - return null; - } - - @Deprecated - public String encodeUrl(java.lang.String url) { - return null; - } - - public String encodeRedirectURL(java.lang.String url) { - return null; - } - - @Deprecated - public String encodeURL(java.lang.String url) { - return null; - } - - public boolean containsHeader(java.lang.String name) { - return false; - } - - public void addCookie(javax.servlet.http.Cookie cookie) { - } - - public java.util.Locale getLocale() { - return null; - } - - public void setLocale(java.util.Locale loc) { - } - - public void reset() { - } - - public boolean isCommitted() { + public boolean seekToNewSource(long targetPos) throws IOException { return false; } - - public void resetBuffer() { - } - - public void flushBuffer() { - } - - public int getBufferSize() { - return 0; - } - - public void setBufferSize(int size) { - } - - public void setContentType(java.lang.String type) { - } - - public void setContentLength(int len) { - } - - public void setCharacterEncoding(java.lang.String charset) { - } - - public java.io.PrintWriter getWriter() { - return null; - } - - public javax.servlet.ServletOutputStream getOutputStream() { - return null; - } - - public java.lang.String getContentType() { - return null; - } - - public java.lang.String getCharacterEncoding() { - return null; - } } @@ -235,7 +109,7 @@ public class TestStreamFile { } @Test - public void testWriteTo() throws IOException, InterruptedException { + public void testWriteTo() throws IOException { FSInputStream fsin = new MockFSInputStream(); ByteArrayOutputStream os = new ByteArrayOutputStream(); @@ -272,45 +146,50 @@ public class TestStreamFile { } @Test - public void testSendPartialData() throws IOException, InterruptedException { + public void testSendPartialData() throws IOException { FSInputStream in = new MockFSInputStream(); ByteArrayOutputStream os = new ByteArrayOutputStream(); // test if multiple ranges, then 416 { List ranges = strToRanges("0-,10-300", 500); - MockHttpServletResponse response = new MockHttpServletResponse(); + HttpServletResponse response = Mockito.mock(HttpServletResponse.class); StreamFile.sendPartialData(in, os, response, 500, ranges); - assertEquals("Multiple ranges should result in a 416 error", - 416, response.getStatus()); + + // Multiple ranges should result in a 416 error + Mockito.verify(response).setStatus(416); } // test if no ranges, then 416 { os.reset(); - MockHttpServletResponse response = new MockHttpServletResponse(); + HttpServletResponse response = Mockito.mock(HttpServletResponse.class); StreamFile.sendPartialData(in, os, response, 500, null); - assertEquals("No ranges should result in a 416 error", - 416, response.getStatus()); + + // No ranges should result in a 416 error + Mockito.verify(response).setStatus(416); } // test if invalid single range (out of bounds), then 416 { List ranges = strToRanges("600-800", 500); - MockHttpServletResponse response = new MockHttpServletResponse(); + HttpServletResponse response = Mockito.mock(HttpServletResponse.class); StreamFile.sendPartialData(in, os, response, 500, ranges); - assertEquals("Single (but invalid) range should result in a 416", - 416, response.getStatus()); + + // Single (but invalid) range should result in a 416 + Mockito.verify(response).setStatus(416); } // test if one (valid) range, then 206 { List ranges = strToRanges("100-300", 500); - MockHttpServletResponse response = new MockHttpServletResponse(); + HttpServletResponse response = Mockito.mock(HttpServletResponse.class); StreamFile.sendPartialData(in, os, response, 500, ranges); - assertEquals("Single (valid) range should result in a 206", - 206, response.getStatus()); + + // Single (valid) range should result in a 206 + Mockito.verify(response).setStatus(206); + assertArrayEquals("Byte range from 100-300", getOutputArray(100, 201), os.toByteArray()); @@ -380,8 +259,7 @@ public class TestStreamFile { } } - private void setUpForDoGetTest(MiniDFSCluster cluster, Path testFile) - throws IOException { + private void setUpForDoGetTest(MiniDFSCluster cluster, Path testFile) { Mockito.doReturn(CONF).when(mockServletContext).getAttribute( JspHelper.CURRENT_CONF);