public virtual void TestCommitWithInvalidGenStamp()
        {
            Path file = new Path("/file");
            FSDataOutputStream @out = null;

            try
            {
                @out = dfs.Create(file, (short)1);
                INodeFile     fileNode = dir.GetINode4Write(file.ToString()).AsFile();
                ExtendedBlock previous = null;
                Block         newBlock = DFSTestUtil.AddBlockToFile(cluster.GetDataNodes(), dfs, cluster.
                                                                    GetNamesystem(), file.ToString(), fileNode, dfs.GetClient().GetClientName(), previous
                                                                    , 100);
                Block newBlockClone = new Block(newBlock);
                previous = new ExtendedBlock(cluster.GetNamesystem().GetBlockPoolId(), newBlockClone
                                             );
                previous.SetGenerationStamp(123);
                try
                {
                    dfs.GetClient().GetNamenode().Complete(file.ToString(), dfs.GetClient().GetClientName
                                                               (), previous, fileNode.GetId());
                    NUnit.Framework.Assert.Fail("should throw exception because invalid genStamp");
                }
                catch (IOException e)
                {
                    NUnit.Framework.Assert.IsTrue(e.ToString().Contains("Commit block with mismatching GS. NN has "
                                                                        + newBlock + ", client submits " + newBlockClone));
                }
                previous = new ExtendedBlock(cluster.GetNamesystem().GetBlockPoolId(), newBlock);
                bool complete = dfs.GetClient().GetNamenode().Complete(file.ToString(), dfs.GetClient
                                                                           ().GetClientName(), previous, fileNode.GetId());
                NUnit.Framework.Assert.IsTrue("should complete successfully", complete);
            }
            finally
            {
                IOUtils.Cleanup(null, @out);
            }
        }