Modified: hadoop/common/branches/branch-1-win/src/test/system/java/org/apache/hadoop/mapred/TestLinuxTaskControllerOtherUser.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1-win/src/test/system/java/org/apache/hadoop/mapred/TestLinuxTaskControllerOtherUser.java?rev=1397436&r1=1397435&r2=1397436&view=diff ============================================================================== --- hadoop/common/branches/branch-1-win/src/test/system/java/org/apache/hadoop/mapred/TestLinuxTaskControllerOtherUser.java (original) +++ hadoop/common/branches/branch-1-win/src/test/system/java/org/apache/hadoop/mapred/TestLinuxTaskControllerOtherUser.java Fri Oct 12 04:50:05 2012 @@ -1,125 +1,125 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.hadoop.mapred; - -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.AfterClass; -import org.junit.Test; -import java.io.IOException; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.hadoop.conf.Configuration; -import org.apache.hadoop.mapreduce.test.system.MRCluster; -import org.apache.hadoop.mapreduce.test.system.JTProtocol; -import org.apache.hadoop.mapreduce.test.system.JTClient; -import org.apache.hadoop.examples.SleepJob; -import org.apache.hadoop.fs.Path; -import org.apache.hadoop.fs.FileSystem; -import org.apache.hadoop.security.UserGroupInformation; -import java.security.PrivilegedExceptionAction; - -/** - * Verifying the job submissions with original user and other user - * with Linux task Controller.Original user should succeed and other - * user should not. - */ -public class TestLinuxTaskControllerOtherUser { - private static final Log LOG = LogFactory. - getLog(TestLinuxTaskControllerOtherUser.class); - private static MRCluster cluster = null; - private static JobClient jobClient = null; - private static JTProtocol remoteJTClient = null; - private static JTClient jtClient = null; - private static Configuration conf = new Configuration(); - private static UserGroupInformation proxyUGI = null; - private static Path inputDir = new Path("input"); - private static Path outputDir = new Path("output"); - - @BeforeClass - public static void before() throws Exception { - cluster = MRCluster.createCluster(conf); - cluster.setUp(); - jtClient = cluster.getJTClient(); - jobClient = jtClient.getClient(); - remoteJTClient = cluster.getJTClient().getProxy(); - conf = remoteJTClient.getDaemonConf(); - } - - @AfterClass - public static void after() throws Exception { - cluster.tearDown(); - cleanup(inputDir, conf); - cleanup(outputDir, conf); - } - - /** - * Submit a Sleep Job with a diferent user id and verify it failure - * @param none - * @return void - */ - @Test - public void testSubmitJobDifferentUserJobClient() throws Exception { - UserGroupInformation ugi = UserGroupInformation.getLoginUser(); - LOG.info("LoginUser:" + ugi); - if (conf.get("mapred.task.tracker.task-controller"). - equals("org.apache.hadoop.mapred.LinuxTaskController")) { - //Changing the User name - proxyUGI = UserGroupInformation.createRemoteUser( - "hadoop1"); - - SleepJob job = new SleepJob(); - job.setConf(conf); - final JobConf jobConf = job.setupJobConf(2, 1, 2000, 2000, 100, 100); - String error = null; - RunningJob runJob = null; - //Getting the jobClient with the changed remote user and - //then submit the command. - try { - final JobClient jClient = - proxyUGI.doAs(new PrivilegedExceptionAction<JobClient>() { - public JobClient run() throws IOException { - return new JobClient(jobConf); - } - }); - - runJob = proxyUGI.doAs( - new PrivilegedExceptionAction<RunningJob>() { - public RunningJob run() throws IOException { - return jClient.submitJob(jobConf); - } - }); - } catch (Exception e) {error = e.toString();} - //A error is expected to be thrown - if (error.indexOf("No valid credentials provided") != -1) { - LOG.info("e's value is :" + error); - } else { - Assert.fail("Some unknown error is thrown :" + error); - } - Assert.assertNull("Job is still running", runJob); - } - } - - //Cleanup directories in dfs. - private static void cleanup(Path dir, Configuration conf) - throws IOException { - FileSystem fs = dir.getFileSystem(conf); - fs.delete(dir, true); - } -} +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.hadoop.mapred; + +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.AfterClass; +import org.junit.Test; +import java.io.IOException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.mapreduce.test.system.MRCluster; +import org.apache.hadoop.mapreduce.test.system.JTProtocol; +import org.apache.hadoop.mapreduce.test.system.JTClient; +import org.apache.hadoop.examples.SleepJob; +import org.apache.hadoop.fs.Path; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.security.UserGroupInformation; +import java.security.PrivilegedExceptionAction; + +/** + * Verifying the job submissions with original user and other user + * with Linux task Controller.Original user should succeed and other + * user should not. + */ +public class TestLinuxTaskControllerOtherUser { + private static final Log LOG = LogFactory. + getLog(TestLinuxTaskControllerOtherUser.class); + private static MRCluster cluster = null; + private static JobClient jobClient = null; + private static JTProtocol remoteJTClient = null; + private static JTClient jtClient = null; + private static Configuration conf = new Configuration(); + private static UserGroupInformation proxyUGI = null; + private static Path inputDir = new Path("input"); + private static Path outputDir = new Path("output"); + + @BeforeClass + public static void before() throws Exception { + cluster = MRCluster.createCluster(conf); + cluster.setUp(); + jtClient = cluster.getJTClient(); + jobClient = jtClient.getClient(); + remoteJTClient = cluster.getJTClient().getProxy(); + conf = remoteJTClient.getDaemonConf(); + } + + @AfterClass + public static void after() throws Exception { + cluster.tearDown(); + cleanup(inputDir, conf); + cleanup(outputDir, conf); + } + + /** + * Submit a Sleep Job with a diferent user id and verify it failure + * @param none + * @return void + */ + @Test + public void testSubmitJobDifferentUserJobClient() throws Exception { + UserGroupInformation ugi = UserGroupInformation.getLoginUser(); + LOG.info("LoginUser:" + ugi); + if (conf.get("mapred.task.tracker.task-controller"). + equals("org.apache.hadoop.mapred.LinuxTaskController")) { + //Changing the User name + proxyUGI = UserGroupInformation.createRemoteUser( + "hadoop1"); + + SleepJob job = new SleepJob(); + job.setConf(conf); + final JobConf jobConf = job.setupJobConf(2, 1, 2000, 2000, 100, 100); + String error = null; + RunningJob runJob = null; + //Getting the jobClient with the changed remote user and + //then submit the command. + try { + final JobClient jClient = + proxyUGI.doAs(new PrivilegedExceptionAction<JobClient>() { + public JobClient run() throws IOException { + return new JobClient(jobConf); + } + }); + + runJob = proxyUGI.doAs( + new PrivilegedExceptionAction<RunningJob>() { + public RunningJob run() throws IOException { + return jClient.submitJob(jobConf); + } + }); + } catch (Exception e) {error = e.toString();} + //A error is expected to be thrown + if (error.indexOf("No valid credentials provided") != -1) { + LOG.info("e's value is :" + error); + } else { + Assert.fail("Some unknown error is thrown :" + error); + } + Assert.assertNull("Job is still running", runJob); + } + } + + //Cleanup directories in dfs. + private static void cleanup(Path dir, Configuration conf) + throws IOException { + FileSystem fs = dir.getFileSystem(conf); + fs.delete(dir, true); + } +}
Modified: hadoop/common/branches/branch-1-win/src/test/system/java/org/apache/hadoop/mapred/TestLostTaskTracker.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1-win/src/test/system/java/org/apache/hadoop/mapred/TestLostTaskTracker.java?rev=1397436&r1=1397435&r2=1397436&view=diff ============================================================================== --- hadoop/common/branches/branch-1-win/src/test/system/java/org/apache/hadoop/mapred/TestLostTaskTracker.java (original) +++ hadoop/common/branches/branch-1-win/src/test/system/java/org/apache/hadoop/mapred/TestLostTaskTracker.java Fri Oct 12 04:50:05 2012 @@ -1,258 +1,258 @@ -package org.apache.hadoop.mapred; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.hadoop.conf.Configuration; -import org.apache.hadoop.examples.SleepJob; -import org.apache.hadoop.fs.FileSystem; -import org.apache.hadoop.fs.Path; -import org.apache.hadoop.fs.permission.FsAction; -import org.apache.hadoop.fs.permission.FsPermission; -import org.apache.hadoop.mapreduce.test.system.JTProtocol; -import org.apache.hadoop.mapreduce.test.system.JobInfo; -import org.apache.hadoop.mapreduce.test.system.MRCluster; -import org.apache.hadoop.mapreduce.test.system.JTClient; -import org.apache.hadoop.mapreduce.test.system.TTClient; -import org.apache.hadoop.mapreduce.test.system.TTProtocol; -import org.apache.hadoop.mapreduce.test.system.TaskInfo; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.AfterClass; -import org.junit.Test; - -import java.io.DataOutputStream; -import java.io.IOException; -import java.util.Hashtable; - -public class TestLostTaskTracker { - private static final Log LOG = LogFactory - .getLog(TestLostTaskTracker.class); - private static MRCluster cluster; - private static Configuration conf = new Configuration(); - private static Path inputDir = new Path("input"); - private static Path outputDir = new Path("output"); - private static String confFile = "mapred-site.xml"; - private JTProtocol wovenClient = null; - private JobID jID = null; - private JobInfo jInfo = null; - private JTClient jtClient = null; - - @BeforeClass - public static void before() throws Exception { - String [] expExcludeList = {"java.net.ConnectException", - "java.io.IOException"}; - cluster = MRCluster.createCluster(conf); - cluster.setExcludeExpList(expExcludeList); - cluster.setUp(); - Hashtable<String,Object> prop = new Hashtable<String,Object>(); - prop.put("mapred.tasktracker.expiry.interval",30000L); - prop.put("mapreduce.job.complete.cancel.delegation.tokens",false); - cluster.restartClusterWithNewConfig(prop, confFile); - UtilsForTests.waitFor(1000); - conf = cluster.getJTClient().getProxy().getDaemonConf(); - createInput(inputDir, conf); - } - - @AfterClass - public static void after() throws Exception { - cleanup(inputDir, conf); - cleanup(outputDir, conf); - cluster.tearDown(); - cluster.restart(); - } - /** - * Verify the job status whether it is succeed or not when - * lost task tracker is alive before the timeout. - * @throws IOException if an I/O error occurs. - */ - @Test - public void testJobStatusOfLostTaskTracker1() throws - Exception{ - String testName = "LTT1"; - setupJobAndRun(); - JobStatus jStatus = verifyLostTaskTrackerJobStatus(testName); - Assert.assertEquals("Job has not been succeeded...", - JobStatus.SUCCEEDED, jStatus.getRunState()); - } - - /** - * Verify the job status whether it is succeeded or not when - * the lost task trackers time out for all four attempts of a task. - * @throws IOException if an I/O error occurs. - */ - @Test - public void testJobStatusOfLostTracker2() throws - Exception { - String testName = "LTT2"; - setupJobAndRun(); - JobStatus jStatus = verifyLostTaskTrackerJobStatus(testName); - Assert.assertEquals("Job has not been failed...", - JobStatus.SUCCEEDED, jStatus.getRunState()); - } - - private void setupJobAndRun() throws IOException { - SleepJob job = new SleepJob(); - job.setConf(conf); - conf = job.setupJobConf(3, 1, 60000, 100, 60000, 100); - JobConf jobConf = new JobConf(conf); - cleanup(outputDir, conf); - jtClient = cluster.getJTClient(); - JobClient client = jtClient.getClient(); - wovenClient = cluster.getJTClient().getProxy(); - RunningJob runJob = client.submitJob(jobConf); - jID = runJob.getID(); - jInfo = wovenClient.getJobInfo(jID); - Assert.assertNotNull("Job information is null",jInfo); - Assert.assertTrue("Job has not been started for 1 min.", - jtClient.isJobStarted(jID)); - JobStatus jobStatus = jInfo.getStatus(); - // Make sure that job should run and completes 40%. - while (jobStatus.getRunState() != JobStatus.RUNNING && - jobStatus.mapProgress() < 0.4f) { - UtilsForTests.waitFor(100); - jobStatus = wovenClient.getJobInfo(jID).getStatus(); - } - } - - private JobStatus verifyLostTaskTrackerJobStatus(String testName) - throws IOException{ - TaskInfo taskInfo = null; - TaskID tID = null; - String[] taskTrackers = null; - TaskInfo[] taskInfos = wovenClient.getTaskInfo(jID); - for (TaskInfo taskinfo : taskInfos) { - if (!taskinfo.isSetupOrCleanup()) { - taskInfo = taskinfo; - break; - } - } - Assert.assertTrue("Task has not been started for 1 min.", - jtClient.isTaskStarted(taskInfo)); - tID = TaskID.downgrade(taskInfo.getTaskID()); - TTClient ttClient = getTTClientIns(taskInfo); - int counter = 0; - while (counter < 30) { - if (ttClient != null) { - break; - }else{ - taskInfo = wovenClient.getTaskInfo(taskInfo.getTaskID()); - ttClient = getTTClientIns(taskInfo); - } - counter ++; - } - Assert.assertNotNull("TaskTracker has not been found",ttClient); - if (testName.equals("LTT1")) { - ttClient.kill(); - waitForTTStop(ttClient); - UtilsForTests.waitFor(20000); - ttClient.start(); - waitForTTStart(ttClient); - } else { - int index = 0 ; - while(index++ < 4 ) { - ttClient.kill(); - waitForTTStop(ttClient); - UtilsForTests.waitFor(40000); - ttClient.start(); - waitForTTStart(ttClient); - taskInfo = wovenClient.getTaskInfo(taskInfo.getTaskID()); - ttClient = getTTClientIns(taskInfo); - counter = 0; - while (counter < 30) { - if (ttClient != null) { - break; - }else{ - taskInfo = wovenClient.getTaskInfo(taskInfo.getTaskID()); - ttClient = getTTClientIns(taskInfo); - } - counter ++; - } - Assert.assertNotNull("TaskTracker has not been found",ttClient); - LOG.info("Task killed attempts:" + - taskInfo.numKilledAttempts()); - } - Assert.assertEquals("Task killed attempts are not matched ", - 4, taskInfo.numKilledAttempts()); - } - LOG.info("Waiting till the job is completed..."); - while (!jInfo.getStatus().isJobComplete()) { - UtilsForTests.waitFor(1000); - jInfo = wovenClient.getJobInfo(jID); - } - return jInfo.getStatus(); - } - - private TTClient getTTClientIns(TaskInfo taskInfo) throws IOException{ - String [] taskTrackers = taskInfo.getTaskTrackers(); - int counter = 0; - TTClient ttClient = null; - while (counter < 60) { - if (taskTrackers.length != 0) { - break; - } - UtilsForTests.waitFor(100); - taskInfo = wovenClient.getTaskInfo(taskInfo.getTaskID()); - taskTrackers = taskInfo.getTaskTrackers(); - counter ++; - } - if ( taskTrackers.length != 0) { - String hostName = taskTrackers[0].split("_")[1]; - hostName = hostName.split(":")[0]; - ttClient = cluster.getTTClient(hostName); - } - return ttClient; - } - private void waitForTTStart(TTClient ttClient) throws - IOException { - LOG.debug(ttClient.getHostName() + " is waiting to come up."); - while (true) { - try { - ttClient.ping(); - LOG.info("TaskTracker : " + ttClient.getHostName() + " is pinging..."); - break; - } catch (Exception exp) { - LOG.debug(ttClient.getHostName() + " is waiting to come up."); - UtilsForTests.waitFor(10000); - } - } - } - - private void waitForTTStop(TTClient ttClient) throws - IOException { - LOG.info("Waiting for Tasktracker:" + ttClient.getHostName() - + " to stop....."); - while (true) { - try { - ttClient.ping(); - LOG.debug(ttClient.getHostName() +" is waiting state to stop."); - UtilsForTests.waitFor(10000); - } catch (Exception exp) { - LOG.info("TaskTracker : " + ttClient.getHostName() + " is stopped..."); - break; - } - } - } - - private static void cleanup(Path dir, Configuration conf) throws - IOException { - FileSystem fs = dir.getFileSystem(conf); - fs.delete(dir, true); - } - - private static void createInput(Path inDir, Configuration conf) throws - IOException { - String input = "Hadoop is framework for data intensive distributed " - + "applications.\nHadoop enables applications to" - + " work with thousands of nodes."; - FileSystem fs = inDir.getFileSystem(conf); - if (!fs.mkdirs(inDir)) { - throw new IOException("Failed to create the input directory:" - + inDir.toString()); - } - fs.setPermission(inDir, new FsPermission(FsAction.ALL, - FsAction.ALL, FsAction.ALL)); - DataOutputStream file = fs.create(new Path(inDir, "data.txt")); - file.writeBytes(input); - file.close(); - } -} +package org.apache.hadoop.mapred; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.examples.SleepJob; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.Path; +import org.apache.hadoop.fs.permission.FsAction; +import org.apache.hadoop.fs.permission.FsPermission; +import org.apache.hadoop.mapreduce.test.system.JTProtocol; +import org.apache.hadoop.mapreduce.test.system.JobInfo; +import org.apache.hadoop.mapreduce.test.system.MRCluster; +import org.apache.hadoop.mapreduce.test.system.JTClient; +import org.apache.hadoop.mapreduce.test.system.TTClient; +import org.apache.hadoop.mapreduce.test.system.TTProtocol; +import org.apache.hadoop.mapreduce.test.system.TaskInfo; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.AfterClass; +import org.junit.Test; + +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.Hashtable; + +public class TestLostTaskTracker { + private static final Log LOG = LogFactory + .getLog(TestLostTaskTracker.class); + private static MRCluster cluster; + private static Configuration conf = new Configuration(); + private static Path inputDir = new Path("input"); + private static Path outputDir = new Path("output"); + private static String confFile = "mapred-site.xml"; + private JTProtocol wovenClient = null; + private JobID jID = null; + private JobInfo jInfo = null; + private JTClient jtClient = null; + + @BeforeClass + public static void before() throws Exception { + String [] expExcludeList = {"java.net.ConnectException", + "java.io.IOException"}; + cluster = MRCluster.createCluster(conf); + cluster.setExcludeExpList(expExcludeList); + cluster.setUp(); + Hashtable<String,Object> prop = new Hashtable<String,Object>(); + prop.put("mapred.tasktracker.expiry.interval",30000L); + prop.put("mapreduce.job.complete.cancel.delegation.tokens",false); + cluster.restartClusterWithNewConfig(prop, confFile); + UtilsForTests.waitFor(1000); + conf = cluster.getJTClient().getProxy().getDaemonConf(); + createInput(inputDir, conf); + } + + @AfterClass + public static void after() throws Exception { + cleanup(inputDir, conf); + cleanup(outputDir, conf); + cluster.tearDown(); + cluster.restart(); + } + /** + * Verify the job status whether it is succeed or not when + * lost task tracker is alive before the timeout. + * @throws IOException if an I/O error occurs. + */ + @Test + public void testJobStatusOfLostTaskTracker1() throws + Exception{ + String testName = "LTT1"; + setupJobAndRun(); + JobStatus jStatus = verifyLostTaskTrackerJobStatus(testName); + Assert.assertEquals("Job has not been succeeded...", + JobStatus.SUCCEEDED, jStatus.getRunState()); + } + + /** + * Verify the job status whether it is succeeded or not when + * the lost task trackers time out for all four attempts of a task. + * @throws IOException if an I/O error occurs. + */ + @Test + public void testJobStatusOfLostTracker2() throws + Exception { + String testName = "LTT2"; + setupJobAndRun(); + JobStatus jStatus = verifyLostTaskTrackerJobStatus(testName); + Assert.assertEquals("Job has not been failed...", + JobStatus.SUCCEEDED, jStatus.getRunState()); + } + + private void setupJobAndRun() throws IOException { + SleepJob job = new SleepJob(); + job.setConf(conf); + conf = job.setupJobConf(3, 1, 60000, 100, 60000, 100); + JobConf jobConf = new JobConf(conf); + cleanup(outputDir, conf); + jtClient = cluster.getJTClient(); + JobClient client = jtClient.getClient(); + wovenClient = cluster.getJTClient().getProxy(); + RunningJob runJob = client.submitJob(jobConf); + jID = runJob.getID(); + jInfo = wovenClient.getJobInfo(jID); + Assert.assertNotNull("Job information is null",jInfo); + Assert.assertTrue("Job has not been started for 1 min.", + jtClient.isJobStarted(jID)); + JobStatus jobStatus = jInfo.getStatus(); + // Make sure that job should run and completes 40%. + while (jobStatus.getRunState() != JobStatus.RUNNING && + jobStatus.mapProgress() < 0.4f) { + UtilsForTests.waitFor(100); + jobStatus = wovenClient.getJobInfo(jID).getStatus(); + } + } + + private JobStatus verifyLostTaskTrackerJobStatus(String testName) + throws IOException{ + TaskInfo taskInfo = null; + TaskID tID = null; + String[] taskTrackers = null; + TaskInfo[] taskInfos = wovenClient.getTaskInfo(jID); + for (TaskInfo taskinfo : taskInfos) { + if (!taskinfo.isSetupOrCleanup()) { + taskInfo = taskinfo; + break; + } + } + Assert.assertTrue("Task has not been started for 1 min.", + jtClient.isTaskStarted(taskInfo)); + tID = TaskID.downgrade(taskInfo.getTaskID()); + TTClient ttClient = getTTClientIns(taskInfo); + int counter = 0; + while (counter < 30) { + if (ttClient != null) { + break; + }else{ + taskInfo = wovenClient.getTaskInfo(taskInfo.getTaskID()); + ttClient = getTTClientIns(taskInfo); + } + counter ++; + } + Assert.assertNotNull("TaskTracker has not been found",ttClient); + if (testName.equals("LTT1")) { + ttClient.kill(); + waitForTTStop(ttClient); + UtilsForTests.waitFor(20000); + ttClient.start(); + waitForTTStart(ttClient); + } else { + int index = 0 ; + while(index++ < 4 ) { + ttClient.kill(); + waitForTTStop(ttClient); + UtilsForTests.waitFor(40000); + ttClient.start(); + waitForTTStart(ttClient); + taskInfo = wovenClient.getTaskInfo(taskInfo.getTaskID()); + ttClient = getTTClientIns(taskInfo); + counter = 0; + while (counter < 30) { + if (ttClient != null) { + break; + }else{ + taskInfo = wovenClient.getTaskInfo(taskInfo.getTaskID()); + ttClient = getTTClientIns(taskInfo); + } + counter ++; + } + Assert.assertNotNull("TaskTracker has not been found",ttClient); + LOG.info("Task killed attempts:" + + taskInfo.numKilledAttempts()); + } + Assert.assertEquals("Task killed attempts are not matched ", + 4, taskInfo.numKilledAttempts()); + } + LOG.info("Waiting till the job is completed..."); + while (!jInfo.getStatus().isJobComplete()) { + UtilsForTests.waitFor(1000); + jInfo = wovenClient.getJobInfo(jID); + } + return jInfo.getStatus(); + } + + private TTClient getTTClientIns(TaskInfo taskInfo) throws IOException{ + String [] taskTrackers = taskInfo.getTaskTrackers(); + int counter = 0; + TTClient ttClient = null; + while (counter < 60) { + if (taskTrackers.length != 0) { + break; + } + UtilsForTests.waitFor(100); + taskInfo = wovenClient.getTaskInfo(taskInfo.getTaskID()); + taskTrackers = taskInfo.getTaskTrackers(); + counter ++; + } + if ( taskTrackers.length != 0) { + String hostName = taskTrackers[0].split("_")[1]; + hostName = hostName.split(":")[0]; + ttClient = cluster.getTTClient(hostName); + } + return ttClient; + } + private void waitForTTStart(TTClient ttClient) throws + IOException { + LOG.debug(ttClient.getHostName() + " is waiting to come up."); + while (true) { + try { + ttClient.ping(); + LOG.info("TaskTracker : " + ttClient.getHostName() + " is pinging..."); + break; + } catch (Exception exp) { + LOG.debug(ttClient.getHostName() + " is waiting to come up."); + UtilsForTests.waitFor(10000); + } + } + } + + private void waitForTTStop(TTClient ttClient) throws + IOException { + LOG.info("Waiting for Tasktracker:" + ttClient.getHostName() + + " to stop....."); + while (true) { + try { + ttClient.ping(); + LOG.debug(ttClient.getHostName() +" is waiting state to stop."); + UtilsForTests.waitFor(10000); + } catch (Exception exp) { + LOG.info("TaskTracker : " + ttClient.getHostName() + " is stopped..."); + break; + } + } + } + + private static void cleanup(Path dir, Configuration conf) throws + IOException { + FileSystem fs = dir.getFileSystem(conf); + fs.delete(dir, true); + } + + private static void createInput(Path inDir, Configuration conf) throws + IOException { + String input = "Hadoop is framework for data intensive distributed " + + "applications.\nHadoop enables applications to" + + " work with thousands of nodes."; + FileSystem fs = inDir.getFileSystem(conf); + if (!fs.mkdirs(inDir)) { + throw new IOException("Failed to create the input directory:" + + inDir.toString()); + } + fs.setPermission(inDir, new FsPermission(FsAction.ALL, + FsAction.ALL, FsAction.ALL)); + DataOutputStream file = fs.create(new Path(inDir, "data.txt")); + file.writeBytes(input); + file.close(); + } +} Modified: hadoop/common/branches/branch-1-win/src/winutils/tests/test-all.bat URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1-win/src/winutils/tests/test-all.bat?rev=1397436&r1=1397435&r2=1397436&view=diff ============================================================================== --- hadoop/common/branches/branch-1-win/src/winutils/tests/test-all.bat (original) +++ hadoop/common/branches/branch-1-win/src/winutils/tests/test-all.bat Fri Oct 12 04:50:05 2012 @@ -1,19 +1,19 @@ -:: Licensed to the Apache Software Foundation (ASF) under one or more -:: contributor license agreements. See the NOTICE file distributed with this -:: work for additional information regarding copyright ownership. The ASF -:: licenses this file to you 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. -:: -@echo off -call test-winutils-basics -call test-winutils-chown -call test-winutils-chmod +:: Licensed to the Apache Software Foundation (ASF) under one or more +:: contributor license agreements. See the NOTICE file distributed with this +:: work for additional information regarding copyright ownership. The ASF +:: licenses this file to you 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. +:: +@echo off +call test-winutils-basics +call test-winutils-chown +call test-winutils-chmod Modified: hadoop/common/branches/branch-1-win/src/winutils/tests/test-winutils-basics.bat URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1-win/src/winutils/tests/test-winutils-basics.bat?rev=1397436&r1=1397435&r2=1397436&view=diff ============================================================================== --- hadoop/common/branches/branch-1-win/src/winutils/tests/test-winutils-basics.bat (original) +++ hadoop/common/branches/branch-1-win/src/winutils/tests/test-winutils-basics.bat Fri Oct 12 04:50:05 2012 @@ -1,95 +1,95 @@ -:: Licensed to the Apache Software Foundation (ASF) under one or more -:: contributor license agreements. See the NOTICE file distributed with this -:: work for additional information regarding copyright ownership. The ASF -:: licenses this file to you 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. -:: -@echo off -echo Test most basic security settings are working -setlocal -set WINUTILS="%HADOOP_HOME%\bin\winutils.exe" -set TESTDIR=winutils-test - -:: Setup test directory -:: -if not exist %TESTDIR% md %TESTDIR% -pushd %TESTDIR% - -:: Test cases -:: -echo Test case 1: -:: - Create a file. -:: - Change mode to 377 so owner does not have read permission. -:: - Verify the owner truly does not have the permissions to read. -if exist a goto Failure -type NUL>a -%WINUTILS% chmod 377 a -if not %ERRORLEVEL% == 0 goto Failure -type a -if %ERRORLEVEL% == 0 goto Failure -del a -if not %ERRORLEVEL% == 0 goto Failure -echo passed. - -echo Test case 2: -:: - Create a file. -:: - Change mode to 577 so owner does not have write permission. -:: - Verify the owner truly does not have the permissions to write. -if exist a goto Failure -type NUL>a -%WINUTILS% chmod 577 a -if not %ERRORLEVEL% == 0 goto Failure -cmd /C "echo a>>a" -if %ERRORLEVEL% == 0 goto Failure -del a -if not %ERRORLEVEL% == 0 goto Failure -echo passed. - -echo Test case 3: -:: - Copy WINUTILS to a new executable file, a.exe. -:: - Change mode to 677 so owner does not have execute permission. -:: - Verify the owner truly does not have the permissions to execute the file. -if exist a.exe goto Failure -copy %WINUTILS% a.exe >NUL -%WINUTILS% chmod 677 a.exe -if not %ERRORLEVEL% == 0 goto Failure -.\a.exe ls -if %ERRORLEVEL% == 0 goto Failure -del a.exe -if not %ERRORLEVEL% == 0 goto Failure -echo passed. - - -:: Cleanup -:: -popd -rd %TESTDIR% -goto Success - - -:: ----------------------------------------------------------------------------- -:: -- Function section starts below here -:: ----------------------------------------------------------------------------- - -:: Failure -:: - Report test failure -:: -:Failure -echo Test failed. -exit /B 1 - -:: Success -:: - Report test success -:: -:Success -echo Test succeeded. -exit /B 0 +:: Licensed to the Apache Software Foundation (ASF) under one or more +:: contributor license agreements. See the NOTICE file distributed with this +:: work for additional information regarding copyright ownership. The ASF +:: licenses this file to you 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. +:: +@echo off +echo Test most basic security settings are working +setlocal +set WINUTILS="%HADOOP_HOME%\bin\winutils.exe" +set TESTDIR=winutils-test + +:: Setup test directory +:: +if not exist %TESTDIR% md %TESTDIR% +pushd %TESTDIR% + +:: Test cases +:: +echo Test case 1: +:: - Create a file. +:: - Change mode to 377 so owner does not have read permission. +:: - Verify the owner truly does not have the permissions to read. +if exist a goto Failure +type NUL>a +%WINUTILS% chmod 377 a +if not %ERRORLEVEL% == 0 goto Failure +type a +if %ERRORLEVEL% == 0 goto Failure +del a +if not %ERRORLEVEL% == 0 goto Failure +echo passed. + +echo Test case 2: +:: - Create a file. +:: - Change mode to 577 so owner does not have write permission. +:: - Verify the owner truly does not have the permissions to write. +if exist a goto Failure +type NUL>a +%WINUTILS% chmod 577 a +if not %ERRORLEVEL% == 0 goto Failure +cmd /C "echo a>>a" +if %ERRORLEVEL% == 0 goto Failure +del a +if not %ERRORLEVEL% == 0 goto Failure +echo passed. + +echo Test case 3: +:: - Copy WINUTILS to a new executable file, a.exe. +:: - Change mode to 677 so owner does not have execute permission. +:: - Verify the owner truly does not have the permissions to execute the file. +if exist a.exe goto Failure +copy %WINUTILS% a.exe >NUL +%WINUTILS% chmod 677 a.exe +if not %ERRORLEVEL% == 0 goto Failure +.\a.exe ls +if %ERRORLEVEL% == 0 goto Failure +del a.exe +if not %ERRORLEVEL% == 0 goto Failure +echo passed. + + +:: Cleanup +:: +popd +rd %TESTDIR% +goto Success + + +:: ----------------------------------------------------------------------------- +:: -- Function section starts below here +:: ----------------------------------------------------------------------------- + +:: Failure +:: - Report test failure +:: +:Failure +echo Test failed. +exit /B 1 + +:: Success +:: - Report test success +:: +:Success +echo Test succeeded. +exit /B 0 Modified: hadoop/common/branches/branch-1-win/src/winutils/tests/test-winutils-chmod.bat URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1-win/src/winutils/tests/test-winutils-chmod.bat?rev=1397436&r1=1397435&r2=1397436&view=diff ============================================================================== --- hadoop/common/branches/branch-1-win/src/winutils/tests/test-winutils-chmod.bat (original) +++ hadoop/common/branches/branch-1-win/src/winutils/tests/test-winutils-chmod.bat Fri Oct 12 04:50:05 2012 @@ -1,174 +1,174 @@ -:: Licensed to the Apache Software Foundation (ASF) under one or more -:: contributor license agreements. See the NOTICE file distributed with this -:: work for additional information regarding copyright ownership. The ASF -:: licenses this file to you 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. -:: -@echo off -echo Test various chmod operations -setlocal -set WINUTILS="%HADOOP_HOME%\bin\winutils.exe" -set TESTDIR=winutils-test - -:: Setup test directory -:: -if not exist %TESTDIR% md %TESTDIR% -pushd %TESTDIR% - -:: Test cases -:: -echo Test case 1: -call:TestChmod "7" "------rwx" -if %ERRORLEVEL% neq 0 goto Failure -echo passed. - -echo Test case 2: -call:TestChmod "70" "---rwx---" -if %ERRORLEVEL% neq 0 goto Failure -echo passed. - -echo Test case 3: -call:TestChmod "u-x,g+r,o=g" "rw-r--r--" -if %ERRORLEVEL% neq 0 goto Failure -echo passed. - -echo Test case 4: -call:TestChmod "u-x,g+rw" "rw-rw----" -if %ERRORLEVEL% neq 0 goto Failure -echo passed. - -echo Test case 5: -call:TestChmod "u-x,g+rwx-x,o=u" "rw-rw-rw-" -if %ERRORLEVEL% neq 0 goto Failure -echo passed. - -echo Test case 6: -call:TestChmodR "755" "rwxr-xr-x" "rwxr-xr-x" -if %ERRORLEVEL% neq 0 goto Failure -echo passed. - -echo Test case 7: -call:TestChmodR "u-x,g+r,o=g" "rw-r--r--" "rw-r--r--" -if %ERRORLEVEL% neq 0 goto Failure -echo passed. - -echo Test case 8: -call:TestChmodR "u-x,g+rw" "rw-rw----" "rw-rw----" -if %ERRORLEVEL% neq 0 goto Failure -echo passed. - -echo Test case 9: -call:TestChmodR "u-x,g+rwx-x,o=u" "rw-rw-rw-" "rw-rw-rw-" -if %ERRORLEVEL% neq 0 goto Failure -echo passed. - -echo Test case 10: -call:TestChmodR "a+rX" "rw-r--r--" "rwxr-xr-x" -if %ERRORLEVEL% neq 0 goto Failure -echo passed. - -echo Test case 11: -call:TestChmod "+" "rwx------" -if %ERRORLEVEL% neq 0 goto Failure -echo passed. - -:: Cleanup -:: -popd -rd %TESTDIR% -goto Success - - -:: ----------------------------------------------------------------------------- -:: -- Function section starts below here -:: ----------------------------------------------------------------------------- - - -:: TestChmod -:: - Test 'chmod' mode or octal mode string of a single file -:: - The new permission will be compared with the expected result -:: -:TestChmod :: [mode|octal mode] [expected permission] -if exist a exit /B 1 -type NUL>a -%WINUTILS% chmod 700 a -%WINUTILS% chmod %~1 a -call:CmpPerm "a" %~2 -if not %ERRORLEVEL% == 0 exit /B 1 -del a -exit /B 0 - - -:: TestChmodR -:: - Test 'chmod' mode or octal mode string with recursive option -:: - The new permission will be compared with the expected results -:: - The permissions could be different due to 'X' in mode string -:: -:TestChmodR :: [mode|octal mode] [expected permission] [expected permission x] -if exist a exit /B 1 -md a -%WINUTILS% chmod 700 a -type NUL>a\a -%WINUTILS% chmod 600 a\a -md a\b -%WINUTILS% chmod 700 a\b -md a\b\a -%WINUTILS% chmod 700 a\b\a -type NUL>a\b\b -%WINUTILS% chmod 600 a\b\b -type NUL>a\b\x -%WINUTILS% chmod u+x a\b\x - -%WINUTILS% chmod -R %~1 a - -call:CmpPerm "a" %~3 -if not %ERRORLEVEL% == 0 exit /B 1 -call:CmpPerm "a\a" %~2 -if not %ERRORLEVEL% == 0 exit /B 1 -call:CmpPerm "a\b" %~3 -if not %ERRORLEVEL% == 0 exit /B 1 -call:CmpPerm "a\b\a" %~3 -if not %ERRORLEVEL% == 0 exit /B 1 -call:CmpPerm "a\b\b" %~2 -if not %ERRORLEVEL% == 0 exit /B 1 -call:CmpPerm "a\b\x" %~3 -if not %ERRORLEVEL% == 0 exit /B 1 - -rd /S /Q a -exit /B 0 - - -:: CmpPerm -:: - Compare file permission against given permission -:: - Use 'ls' to get the new permission -:: - Exit with errorlevel > 0 on failure -:: -:CmpPerm :: [file] [perm] -for /F "tokens=1" %%A in ('call %WINUTILS% ls %~1') do set PERM=%%A -if not %ERRORLEVEL% == 0 exit /B 1 -if not %PERM:~-9%==%~2 exit /B 1 -exit /B 0 - - -:: Failure -:: - Report test failure -:: -:Failure -echo Test failed. -exit /B 1 - -:: Success -:: - Report test success -:: -:Success -echo Test succeeded. -exit /B 0 +:: Licensed to the Apache Software Foundation (ASF) under one or more +:: contributor license agreements. See the NOTICE file distributed with this +:: work for additional information regarding copyright ownership. The ASF +:: licenses this file to you 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. +:: +@echo off +echo Test various chmod operations +setlocal +set WINUTILS="%HADOOP_HOME%\bin\winutils.exe" +set TESTDIR=winutils-test + +:: Setup test directory +:: +if not exist %TESTDIR% md %TESTDIR% +pushd %TESTDIR% + +:: Test cases +:: +echo Test case 1: +call:TestChmod "7" "------rwx" +if %ERRORLEVEL% neq 0 goto Failure +echo passed. + +echo Test case 2: +call:TestChmod "70" "---rwx---" +if %ERRORLEVEL% neq 0 goto Failure +echo passed. + +echo Test case 3: +call:TestChmod "u-x,g+r,o=g" "rw-r--r--" +if %ERRORLEVEL% neq 0 goto Failure +echo passed. + +echo Test case 4: +call:TestChmod "u-x,g+rw" "rw-rw----" +if %ERRORLEVEL% neq 0 goto Failure +echo passed. + +echo Test case 5: +call:TestChmod "u-x,g+rwx-x,o=u" "rw-rw-rw-" +if %ERRORLEVEL% neq 0 goto Failure +echo passed. + +echo Test case 6: +call:TestChmodR "755" "rwxr-xr-x" "rwxr-xr-x" +if %ERRORLEVEL% neq 0 goto Failure +echo passed. + +echo Test case 7: +call:TestChmodR "u-x,g+r,o=g" "rw-r--r--" "rw-r--r--" +if %ERRORLEVEL% neq 0 goto Failure +echo passed. + +echo Test case 8: +call:TestChmodR "u-x,g+rw" "rw-rw----" "rw-rw----" +if %ERRORLEVEL% neq 0 goto Failure +echo passed. + +echo Test case 9: +call:TestChmodR "u-x,g+rwx-x,o=u" "rw-rw-rw-" "rw-rw-rw-" +if %ERRORLEVEL% neq 0 goto Failure +echo passed. + +echo Test case 10: +call:TestChmodR "a+rX" "rw-r--r--" "rwxr-xr-x" +if %ERRORLEVEL% neq 0 goto Failure +echo passed. + +echo Test case 11: +call:TestChmod "+" "rwx------" +if %ERRORLEVEL% neq 0 goto Failure +echo passed. + +:: Cleanup +:: +popd +rd %TESTDIR% +goto Success + + +:: ----------------------------------------------------------------------------- +:: -- Function section starts below here +:: ----------------------------------------------------------------------------- + + +:: TestChmod +:: - Test 'chmod' mode or octal mode string of a single file +:: - The new permission will be compared with the expected result +:: +:TestChmod :: [mode|octal mode] [expected permission] +if exist a exit /B 1 +type NUL>a +%WINUTILS% chmod 700 a +%WINUTILS% chmod %~1 a +call:CmpPerm "a" %~2 +if not %ERRORLEVEL% == 0 exit /B 1 +del a +exit /B 0 + + +:: TestChmodR +:: - Test 'chmod' mode or octal mode string with recursive option +:: - The new permission will be compared with the expected results +:: - The permissions could be different due to 'X' in mode string +:: +:TestChmodR :: [mode|octal mode] [expected permission] [expected permission x] +if exist a exit /B 1 +md a +%WINUTILS% chmod 700 a +type NUL>a\a +%WINUTILS% chmod 600 a\a +md a\b +%WINUTILS% chmod 700 a\b +md a\b\a +%WINUTILS% chmod 700 a\b\a +type NUL>a\b\b +%WINUTILS% chmod 600 a\b\b +type NUL>a\b\x +%WINUTILS% chmod u+x a\b\x + +%WINUTILS% chmod -R %~1 a + +call:CmpPerm "a" %~3 +if not %ERRORLEVEL% == 0 exit /B 1 +call:CmpPerm "a\a" %~2 +if not %ERRORLEVEL% == 0 exit /B 1 +call:CmpPerm "a\b" %~3 +if not %ERRORLEVEL% == 0 exit /B 1 +call:CmpPerm "a\b\a" %~3 +if not %ERRORLEVEL% == 0 exit /B 1 +call:CmpPerm "a\b\b" %~2 +if not %ERRORLEVEL% == 0 exit /B 1 +call:CmpPerm "a\b\x" %~3 +if not %ERRORLEVEL% == 0 exit /B 1 + +rd /S /Q a +exit /B 0 + + +:: CmpPerm +:: - Compare file permission against given permission +:: - Use 'ls' to get the new permission +:: - Exit with errorlevel > 0 on failure +:: +:CmpPerm :: [file] [perm] +for /F "tokens=1" %%A in ('call %WINUTILS% ls %~1') do set PERM=%%A +if not %ERRORLEVEL% == 0 exit /B 1 +if not %PERM:~-9%==%~2 exit /B 1 +exit /B 0 + + +:: Failure +:: - Report test failure +:: +:Failure +echo Test failed. +exit /B 1 + +:: Success +:: - Report test success +:: +:Success +echo Test succeeded. +exit /B 0 Modified: hadoop/common/branches/branch-1-win/src/winutils/tests/test-winutils-chown.bat URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1-win/src/winutils/tests/test-winutils-chown.bat?rev=1397436&r1=1397435&r2=1397436&view=diff ============================================================================== --- hadoop/common/branches/branch-1-win/src/winutils/tests/test-winutils-chown.bat (original) +++ hadoop/common/branches/branch-1-win/src/winutils/tests/test-winutils-chown.bat Fri Oct 12 04:50:05 2012 @@ -1,95 +1,95 @@ -:: Licensed to the Apache Software Foundation (ASF) under one or more -:: contributor license agreements. See the NOTICE file distributed with this -:: work for additional information regarding copyright ownership. The ASF -:: licenses this file to you 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. -:: -@echo off -echo Test chown operations -setlocal -set WINUTILS="%HADOOP_HOME%\bin\winutils.exe" -set TESTDIR=winutils-test - -:: Setup test directory -:: -if not exist %TESTDIR% md %TESTDIR% -pushd %TESTDIR% - -:: Get username -:: -for /F "tokens=1" %%A in ('call whoami') do set USER=%%A - -:: Test cases -:: -echo Test case 1: -if exist a goto Failure -type NUL>a -%WINUTILS% chown %USER%:Administrators a -if not %ERRORLEVEL% == 0 goto Failure -call:CmpOwn "a" "%USER%" "BUILTIN\Administrators" -if not %ERRORLEVEL% == 0 goto Failure -del a -if not %ERRORLEVEL% == 0 goto Failure -echo passed. - -echo Test case 2: -if exist a goto Failure -type NUL>a -%WINUTILS% chown %USER% a -if not %ERRORLEVEL% == 0 goto Failure -%WINUTILS% chown :Administrators a -if not %ERRORLEVEL% == 0 goto Failure -call:CmpOwn "a" "%USER%" "BUILTIN\Administrators" -if not %ERRORLEVEL% == 0 goto Failure -del a -if not %ERRORLEVEL% == 0 goto Failure -echo passed. - - -:: Cleanup -:: -popd -rd %TESTDIR% -goto Success - -:: ----------------------------------------------------------------------------- -:: -- Function section starts below here -:: ----------------------------------------------------------------------------- - -:: CmpOwn -:: - Compare file ownership against expected owner -:: - Use 'ls' to get the ownership -:: - Exit with errorlevel > 0 on failure -:: -:CmpOwn :: [file] [expected user owner] [expected group owner] -for /F "tokens=3" %%A in ('call %WINUTILS% ls %~1') do set OWNER=%%A -if not %ERRORLEVEL% == 0 exit /B 1 -for /F "tokens=4" %%A in ('call %WINUTILS% ls %~1') do set GROUP=%%A -if not %ERRORLEVEL% == 0 exit /B 1 -if /I not %OWNER%==%~2 exit /B 1 -if /I not %GROUP%==%~3 exit /B 1 -exit /B 0 - - -:: Failure -:: - Report test failure -:: -:Failure -echo Test failed. -exit /B 1 - -:: Success -:: - Report test success -:: -:Success -echo Test succeeded. -exit /B 0 +:: Licensed to the Apache Software Foundation (ASF) under one or more +:: contributor license agreements. See the NOTICE file distributed with this +:: work for additional information regarding copyright ownership. The ASF +:: licenses this file to you 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. +:: +@echo off +echo Test chown operations +setlocal +set WINUTILS="%HADOOP_HOME%\bin\winutils.exe" +set TESTDIR=winutils-test + +:: Setup test directory +:: +if not exist %TESTDIR% md %TESTDIR% +pushd %TESTDIR% + +:: Get username +:: +for /F "tokens=1" %%A in ('call whoami') do set USER=%%A + +:: Test cases +:: +echo Test case 1: +if exist a goto Failure +type NUL>a +%WINUTILS% chown %USER%:Administrators a +if not %ERRORLEVEL% == 0 goto Failure +call:CmpOwn "a" "%USER%" "BUILTIN\Administrators" +if not %ERRORLEVEL% == 0 goto Failure +del a +if not %ERRORLEVEL% == 0 goto Failure +echo passed. + +echo Test case 2: +if exist a goto Failure +type NUL>a +%WINUTILS% chown %USER% a +if not %ERRORLEVEL% == 0 goto Failure +%WINUTILS% chown :Administrators a +if not %ERRORLEVEL% == 0 goto Failure +call:CmpOwn "a" "%USER%" "BUILTIN\Administrators" +if not %ERRORLEVEL% == 0 goto Failure +del a +if not %ERRORLEVEL% == 0 goto Failure +echo passed. + + +:: Cleanup +:: +popd +rd %TESTDIR% +goto Success + +:: ----------------------------------------------------------------------------- +:: -- Function section starts below here +:: ----------------------------------------------------------------------------- + +:: CmpOwn +:: - Compare file ownership against expected owner +:: - Use 'ls' to get the ownership +:: - Exit with errorlevel > 0 on failure +:: +:CmpOwn :: [file] [expected user owner] [expected group owner] +for /F "tokens=3" %%A in ('call %WINUTILS% ls %~1') do set OWNER=%%A +if not %ERRORLEVEL% == 0 exit /B 1 +for /F "tokens=4" %%A in ('call %WINUTILS% ls %~1') do set GROUP=%%A +if not %ERRORLEVEL% == 0 exit /B 1 +if /I not %OWNER%==%~2 exit /B 1 +if /I not %GROUP%==%~3 exit /B 1 +exit /B 0 + + +:: Failure +:: - Report test failure +:: +:Failure +echo Test failed. +exit /B 1 + +:: Success +:: - Report test success +:: +:Success +echo Test succeeded. +exit /B 0
