/// <exception cref="System.IO.IOException"/> private void CheckDFSAdminDecommissionStatus(IList <DatanodeDescriptor> expectedDecomm , DistributedFileSystem dfs, DFSAdmin admin) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); TextWriter ps = new TextWriter(baos); TextWriter oldOut = System.Console.Out; Runtime.SetOut(ps); try { // Parse DFSAdmin just to check the count admin.Report(new string[] { "-decommissioning" }, 0); string[] lines = baos.ToString().Split("\n"); int num = null; int count = 0; foreach (string line in lines) { if (line.StartsWith("Decommissioning datanodes")) { // Pull out the "(num)" and parse it into an int string temp = line.Split(" ")[2]; num = System.Convert.ToInt32((string)temp.SubSequence(1, temp.Length - 2)); } if (line.Contains("Decommission in progress")) { count++; } } NUnit.Framework.Assert.IsTrue("No decommissioning output", num != null); NUnit.Framework.Assert.AreEqual("Unexpected number of decomming DNs", expectedDecomm .Count, num); NUnit.Framework.Assert.AreEqual("Unexpected number of decomming DNs", expectedDecomm .Count, count); // Check Java API for correct contents IList <DatanodeInfo> decomming = new AList <DatanodeInfo>(Arrays.AsList(dfs.GetDataNodeStats (HdfsConstants.DatanodeReportType.Decommissioning))); NUnit.Framework.Assert.AreEqual("Unexpected number of decomming DNs", expectedDecomm .Count, decomming.Count); foreach (DatanodeID id in expectedDecomm) { NUnit.Framework.Assert.IsTrue("Did not find expected decomming DN " + id, decomming .Contains(id)); } } finally { Runtime.SetOut(oldOut); } }