Java tutorial
/*___INFO__MARK_BEGIN__*/ /************************************************************************* * * The Contents of this file are made available subject to the terms of * the Sun Industry Standards Source License Version 1.2 * * Sun Microsystems Inc., March, 2001 * * * Sun Industry Standards Source License Version 1.2 * ================================================= * The contents of this file are subject to the Sun Industry Standards * Source License Version 1.2 (the "License"); You may not use this file * except in compliance with the License. You may obtain a copy of the * License at http://gridengine.sunsource.net/Gridengine_SISSL_license.html * * Software provided under this License is provided on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. * See the License for the specific provisions governing your rights and * obligations concerning the Software. * * The Initial Developer of the Original Code is: Sun Microsystems, Inc. * * Copyright: 2009 by Sun Microsystems, Inc. * * All Rights Reserved. * ************************************************************************/ /*___INFO__MARK_END__*/ package com.sun.grid.herd; import com.sun.grid.jsv.JsvManager; import java.lang.reflect.Method; import java.math.BigInteger; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import junit.framework.TestCase; import org.apache.hadoop.hdfs.protocol.Block; import org.apache.hadoop.hdfs.protocol.DatanodeID; import org.apache.hadoop.hdfs.protocol.DatanodeInfo; import org.apache.hadoop.hdfs.protocol.LocatedBlock; /** * */ public class HerdJsvTest extends TestCase { public HerdJsvTest(String testName) { super(testName); } /** * Test of onStart method, of class HerdJsv. */ public void testOnStart() { System.out.println("onStart()"); JsvManager jsv = new JsvManager(); HerdJsv instance = new HerdJsv(); // This is really just a smoke test. The onStart() method doesn't // actually do anything. instance.onStart(jsv); } /** * Test of buildBlockRequests() method, of class HerdJsv. */ public void testBuildBlockRequests() throws Exception { System.out.println("buildBlockRequests()"); HerdJsv instance = new HerdJsv(); List<LocatedBlock> blocks = new ArrayList<LocatedBlock>(5); Map<String, String> expectedResult = new HashMap<String, String>(); Map result = null; long id1 = 0x1234567890abcdefL; long id2 = 0x0123456789abcdefL; long id3 = 0xfedcba0987654321L; long id4 = 0xfedcba9876543210L; long id5 = 0x0L; blocks.add(new LocatedBlock(new Block(id1), null)); blocks.add(new LocatedBlock(new Block(id2), null)); blocks.add(new LocatedBlock(new Block(id3), null)); blocks.add(new LocatedBlock(new Block(id4), null)); blocks.add(new LocatedBlock(new Block(id5), null)); expectedResult.put("hdfs_B12", "*34567890abcdef*"); expectedResult.put("hdfs_B01", "*23456789abcdef*"); expectedResult.put("hdfs_Bfe", "*dcba0987654321*dcba9876543210*"); expectedResult.put("hdfs_B00", "*00000000000000*"); result = (Map) callPrivateMethod(instance, "buildBlockRequests", new Class[] { Collection.class }, new Object[] { blocks }); assertEquals("The buildBlockRequests() method did not build the expected requests: ", expectedResult, result); blocks.clear(); blocks.add(new LocatedBlock(new Block(id3), null)); blocks.add(new LocatedBlock(new Block(id4), null)); expectedResult.clear(); expectedResult.put("hdfs_Bfe", "*dcba0987654321*dcba9876543210*"); result = (Map) callPrivateMethod(instance, "buildBlockRequests", new Class[] { Collection.class }, new Object[] { blocks }); assertEquals("The buildBlockRequests() method did not build the expected requests: ", expectedResult, result); blocks.clear(); blocks.add(new LocatedBlock(new Block(id3), null)); expectedResult.clear(); expectedResult.put("hdfs_Bfe", "*dcba0987654321*"); result = (Map) callPrivateMethod(instance, "buildBlockRequests", new Class[] { Collection.class }, new Object[] { blocks }); assertEquals("The buildBlockRequests() method did not build the expected requests: ", expectedResult, result); blocks.clear(); blocks.add(new LocatedBlock(null, null)); expectedResult.clear(); result = (Map) callPrivateMethod(instance, "buildBlockRequests", new Class[] { Collection.class }, new Object[] { blocks }); assertEquals("The buildBlockRequests() method did not build the expected requests: ", expectedResult, result); blocks.clear(); expectedResult.clear(); result = (Map) callPrivateMethod(instance, "buildBlockRequests", new Class[] { Collection.class }, new Object[] { blocks }); assertEquals("The buildBlockRequests() method did not build the expected requests: ", expectedResult, result); blocks = null; expectedResult.clear(); result = (Map) callPrivateMethod(instance, "buildBlockRequests", new Class[] { Collection.class }, new Object[] { blocks }); assertEquals("The buildBlockRequests() method did not build the expected requests: ", expectedResult, result); } /** * Test of toIdString() method, of class HerdJsv. */ public void testToIdString() throws Exception { System.out.println("toIdString()"); HerdJsv instance = new HerdJsv(); String expectedResult = "1234567890abcdef"; String result = null; result = (String) callPrivateMethod(instance, "toIdString", new Class[] { Long.TYPE }, new Object[] { Long.parseLong(expectedResult, 16) }); assertEquals("The toIdString() method did not return the correct id", expectedResult, result); expectedResult = "fedcba9876543210"; BigInteger interrum = new BigInteger(expectedResult, 16); interrum.subtract(new BigInteger("10000000000000000", 16)); result = (String) callPrivateMethod(instance, "toIdString", new Class[] { Long.TYPE }, new Object[] { new Long(interrum.longValue()) }); assertEquals("The toIdString() method did not return the correct id", expectedResult, result); expectedResult = "0123456789abcdef"; result = (String) callPrivateMethod(instance, "toIdString", new Class[] { Long.TYPE }, new Object[] { Long.parseLong(expectedResult, 16) }); assertEquals("The toIdString() method did not return the correct id", expectedResult, result); expectedResult = "0000000000000001"; result = (String) callPrivateMethod(instance, "toIdString", new Class[] { Long.TYPE }, new Object[] { Long.parseLong(expectedResult, 16) }); assertEquals("The toIdString() method did not return the correct id", expectedResult, result); } /** * Test of buildRackRequests() method, of class HerdJsv. */ public void testBuildRackRequests() throws Exception { System.out.println("buildRackRequests()"); HerdJsv instance = new HerdJsv(); List<LocatedBlock> blocks = new ArrayList<LocatedBlock>(5); Map<String, String> expectedResult = new HashMap<String, String>(); Map result = null; DatanodeInfo node1 = new DatanodeInfo(new DatanodeID("node1")); DatanodeInfo node2 = new DatanodeInfo(new DatanodeID("node2a")); DatanodeInfo node3 = new DatanodeInfo(new DatanodeID("node2b")); DatanodeInfo node4 = new DatanodeInfo(new DatanodeID("node4")); DatanodeInfo node5 = new DatanodeInfo(new DatanodeID("node5")); node1.setNetworkLocation("/rack1"); node2.setNetworkLocation("/rack2a"); node3.setNetworkLocation("/rack2b"); node4.setNetworkLocation("/rack4"); node5.setNetworkLocation("/rack5"); blocks.add(new LocatedBlock(null, new DatanodeInfo[] { node1, node2, node5 })); blocks.add(new LocatedBlock(null, new DatanodeInfo[] { node1, node2, node3 })); blocks.add(new LocatedBlock(null, new DatanodeInfo[] { node2, node3, node4 })); blocks.add(new LocatedBlock(null, new DatanodeInfo[] { node1, node4, node5 })); blocks.add(new LocatedBlock(null, new DatanodeInfo[] { node1, node3, node5 })); expectedResult.put("hdfs_R", "/rack1"); expectedResult.put("hdfs_r", "/rack1|/rack2a|/rack2b|/rack5|/rack4"); result = (Map) callPrivateMethod(instance, "buildRackRequests", new Class[] { Collection.class }, new Object[] { blocks }); assertEquals("The buildRackRequests() method did not build the expected requests: ", expectedResult, result); blocks.clear(); blocks.add(new LocatedBlock(null, new DatanodeInfo[] { node1, node2, node5 })); expectedResult.put("hdfs_R", "/rack1"); expectedResult.put("hdfs_r", "/rack1|/rack2a|/rack5"); result = (Map) callPrivateMethod(instance, "buildRackRequests", new Class[] { Collection.class }, new Object[] { blocks }); assertEquals("The buildRackRequests() method did not build the expected requests: ", expectedResult, result); blocks.clear(); blocks.add(new LocatedBlock(null, new DatanodeInfo[] { node1 })); blocks.add(new LocatedBlock(null, new DatanodeInfo[] { node3 })); blocks.add(new LocatedBlock(null, new DatanodeInfo[] { node5 })); expectedResult.put("hdfs_R", "/rack1"); expectedResult.put("hdfs_r", "/rack1|/rack2b|/rack5"); result = (Map) callPrivateMethod(instance, "buildRackRequests", new Class[] { Collection.class }, new Object[] { blocks }); assertEquals("The buildRackRequests() method did not build the expected requests: ", expectedResult, result); blocks.clear(); blocks.add(new LocatedBlock(null, new DatanodeInfo[] { node1 })); expectedResult.put("hdfs_R", "/rack1"); expectedResult.put("hdfs_r", "/rack1"); result = (Map) callPrivateMethod(instance, "buildRackRequests", new Class[] { Collection.class }, new Object[] { blocks }); assertEquals("The buildRackRequests() method did not build the expected requests: ", expectedResult, result); blocks.clear(); blocks.add(new LocatedBlock(null, new DatanodeInfo[] {})); expectedResult.clear(); result = (Map) callPrivateMethod(instance, "buildRackRequests", new Class[] { Collection.class }, new Object[] { blocks }); assertEquals("The buildRackRequests() method did not build the expected requests: ", expectedResult, result); blocks.clear(); blocks.add(new LocatedBlock(null, null)); expectedResult.clear(); result = (Map) callPrivateMethod(instance, "buildRackRequests", new Class[] { Collection.class }, new Object[] { blocks }); assertEquals("The buildRackRequests() method did not build the expected requests: ", expectedResult, result); blocks.clear(); expectedResult.clear(); result = (Map) callPrivateMethod(instance, "buildRackRequests", new Class[] { Collection.class }, new Object[] { blocks }); assertEquals("The buildRackRequests() method did not build the expected requests: ", expectedResult, result); blocks = null; expectedResult.clear(); result = (Map) callPrivateMethod(instance, "buildRackRequests", new Class[] { Collection.class }, new Object[] { blocks }); assertEquals("The buildRackRequests() method did not build the expected requests: ", expectedResult, result); } /** * Test of collateRacks() method, of class HerdJsv. */ public void testCollateRacks() throws Exception { System.out.println("collateRacks()"); HerdJsv instance = new HerdJsv(); List<LocatedBlock> blocks = new ArrayList<LocatedBlock>(5); Map<String, Integer> expectedResult = new HashMap<String, Integer>(); Map result = null; DatanodeInfo node1 = new DatanodeInfo(new DatanodeID("node1")); DatanodeInfo node2 = new DatanodeInfo(new DatanodeID("node2")); DatanodeInfo node3 = new DatanodeInfo(new DatanodeID("node3")); DatanodeInfo node4 = new DatanodeInfo(new DatanodeID("node4")); DatanodeInfo node5 = new DatanodeInfo(new DatanodeID("node5")); node1.setNetworkLocation("/rack1"); node2.setNetworkLocation("/rack2"); node3.setNetworkLocation("/rack3"); node4.setNetworkLocation("/rack4"); node5.setNetworkLocation("/rack5"); blocks.add(new LocatedBlock(null, new DatanodeInfo[] { node1, node2, node5 })); blocks.add(new LocatedBlock(null, new DatanodeInfo[] { node1, node2, node3 })); blocks.add(new LocatedBlock(null, new DatanodeInfo[] { node2, node3, node4 })); blocks.add(new LocatedBlock(null, new DatanodeInfo[] { node1, node4, node5 })); blocks.add(new LocatedBlock(null, new DatanodeInfo[] { node1, node3, node5 })); expectedResult.put("/rack1", 4); expectedResult.put("/rack2", 3); expectedResult.put("/rack3", 3); expectedResult.put("/rack4", 2); expectedResult.put("/rack5", 3); result = (Map) callPrivateMethod(instance, "collateRacks", new Class[] { Collection.class }, new Object[] { blocks }); assertEquals("The collateRacks() method did not count the racks correctly", expectedResult, result); blocks.clear(); blocks.add(new LocatedBlock(null, new DatanodeInfo[] { node1, node3, node5 })); expectedResult.clear(); expectedResult.put("/rack1", 1); expectedResult.put("/rack3", 1); expectedResult.put("/rack5", 1); result = (Map) callPrivateMethod(instance, "collateRacks", new Class[] { Collection.class }, new Object[] { blocks }); assertEquals("The collateRacks() method did not count the racks correctly", expectedResult, result); blocks.clear(); blocks.add(new LocatedBlock(null, new DatanodeInfo[] { node1 })); blocks.add(new LocatedBlock(null, new DatanodeInfo[] { node3 })); blocks.add(new LocatedBlock(null, new DatanodeInfo[] { node5 })); expectedResult.clear(); expectedResult.put("/rack1", 1); expectedResult.put("/rack3", 1); expectedResult.put("/rack5", 1); result = (Map) callPrivateMethod(instance, "collateRacks", new Class[] { Collection.class }, new Object[] { blocks }); assertEquals("The collateRacks() method did not count the racks correctly", expectedResult, result); blocks.clear(); blocks.add(new LocatedBlock(null, new DatanodeInfo[] { node1 })); expectedResult.clear(); expectedResult.put("/rack1", 1); result = (Map) callPrivateMethod(instance, "collateRacks", new Class[] { Collection.class }, new Object[] { blocks }); assertEquals("The collateRacks() method did not count the racks correctly", expectedResult, result); blocks.clear(); blocks.add(new LocatedBlock(null, new DatanodeInfo[] {})); expectedResult.clear(); result = (Map) callPrivateMethod(instance, "collateRacks", new Class[] { Collection.class }, new Object[] { blocks }); assertEquals("The collateRacks() method did not count the racks correctly", expectedResult, result); blocks.clear(); blocks.add(new LocatedBlock(null, null)); expectedResult.clear(); result = (Map) callPrivateMethod(instance, "collateRacks", new Class[] { Collection.class }, new Object[] { blocks }); assertEquals("The collateRacks() method did not count the racks correctly", expectedResult, result); blocks.clear(); expectedResult.clear(); result = (Map) callPrivateMethod(instance, "collateRacks", new Class[] { Collection.class }, new Object[] { blocks }); assertEquals("The collateRacks() method did not count the racks correctly", expectedResult, result); blocks = null; expectedResult.clear(); result = (Map) callPrivateMethod(instance, "collateRacks", new Class[] { Collection.class }, new Object[] { blocks }); assertEquals("The collateRacks() method did not count the racks correctly", expectedResult, result); } /** * Test of getSortedRacks() method, of class HerdJsv. */ public void testGetSortedRacks() throws Exception { System.out.println("getSortedRacks()"); HerdJsv instance = new HerdJsv(); Map<String, Integer> racks = new HashMap<String, Integer>(); List<String> expectedResult = new ArrayList<String>(5); List result = null; racks.put("rack4", 4); racks.put("rack2a", 2); racks.put("rack3", 3); racks.put("rack2b", 2); racks.put("rack1", 1); expectedResult.add("rack4"); expectedResult.add("rack3"); // Yes, these are intentionally in this order expectedResult.add("rack2a"); expectedResult.add("rack2b"); expectedResult.add("rack1"); result = (List) callPrivateMethod(instance, "getSortedRacks", new Class[] { Map.class }, new Object[] { racks }); assertEquals("The getSortedRacks() method did not sort the rack list correctly: ", expectedResult, result); racks.clear(); racks.put("rack1", 1); expectedResult.clear(); expectedResult.add("rack1"); result = (List) callPrivateMethod(instance, "getSortedRacks", new Class[] { Map.class }, new Object[] { racks }); assertEquals("The getSortedRacks() method did not handle a single-element rack list correctly: ", expectedResult, result); racks.clear(); expectedResult.clear(); result = (List) callPrivateMethod(instance, "getSortedRacks", new Class[] { Map.class }, new Object[] { racks }); assertEquals("The getSortedRacks() method did not handle a no-element rack list correctly: ", expectedResult, result); racks = null; expectedResult.clear(); result = (List) callPrivateMethod(instance, "getSortedRacks", new Class[] { Map.class }, new Object[] { racks }); assertEquals("The getSortedRacks() method did not handle a no-element rack list correctly: ", expectedResult, result); } /** * Test of verifyPath() method, of class HerdJsv. */ public void testVerifyPath() throws Exception { System.out.println("verifyPath()"); HerdJsv instance = new HerdJsv(); boolean result = (Boolean) callPrivateMethod(instance, "verifyPath", new Class[] { String.class }, new Object[] { "/valid/path" }); assertTrue("The verifyPath() method rejected a valid path", result); result = (Boolean) callPrivateMethod(instance, "verifyPath", new Class[] { String.class }, new Object[] { "/also/valid/path/" }); assertTrue("The verifyPath() method rejected a valid path", result); result = (Boolean) callPrivateMethod(instance, "verifyPath", new Class[] { String.class }, new Object[] { "/shortpath" }); assertTrue("The verifyPath() method rejected a valid path", result); result = (Boolean) callPrivateMethod(instance, "verifyPath", new Class[] { String.class }, new Object[] { "/" }); assertTrue("The verifyPath() method rejected a valid path", result); result = (Boolean) callPrivateMethod(instance, "verifyPath", new Class[] { String.class }, new Object[] { "invalid/path" }); assertFalse("The verifyPath() method rejected a valid path", result); result = (Boolean) callPrivateMethod(instance, "verifyPath", new Class[] { String.class }, new Object[] { "./also/invalid/path/" }); assertFalse("The verifyPath() method rejected a valid path", result); result = (Boolean) callPrivateMethod(instance, "verifyPath", new Class[] { String.class }, new Object[] { "hdfs:///also/invalid/path" }); assertFalse("The verifyPath() method rejected a valid path", result); result = (Boolean) callPrivateMethod(instance, "verifyPath", new Class[] { String.class }, new Object[] { "" }); assertFalse("The verifyPath() method rejected a valid path", result); result = (Boolean) callPrivateMethod(instance, "verifyPath", new Class[] { String.class }, new Object[] { null }); assertFalse("The verifyPath() method rejected a valid path", result); } private static Object callPrivateMethod(Object obj, String method, Class[] params, Object[] args) throws Exception { Object ret = null; Method m = obj.getClass().getDeclaredMethod(method, params); m.setAccessible(true); ret = m.invoke(obj, args); return ret; } }