public void VisitHBaseRestoreStep()
        {
            //Init args
            HBaseRestoreStep hBaseRestoreStep = new HBaseRestoreStep();

            hBaseRestoreStep.HBaseJarPath = "{hbaseJar}";
            hBaseRestoreStep.RestorePath  = "{myBucket}/hbase/restore";

            //Expectations
            List <string> expectedArgs = new List <string>()
            {
                "--restore", "--backup-dir", "s3://myBucket/hbase/restore"
            };

            //Init settings
            IBuilderSettings settings = BuildRequestVisitorTest.GetSettings();

            //Init visitor
            BuildRequestVisitor visitor           = new BuildRequestVisitor(settings);
            VisitorSubscriber   visitorSubscriber = new VisitorSubscriber(visitor);

            //Action
            hBaseRestoreStep.Accept(visitor);

            //Verify
            Assert.AreEqual(1, visitorSubscriber.TotalObjCount, "Unexpected number of objects created");

            StepConfig actual = visitorSubscriber.stepList[0];

            Assert.AreEqual("Restore HBase", actual.Name, "Unexpected Name");
            Assert.AreEqual(ActionOnFailure.TERMINATE_JOB_FLOW, actual.ActionOnFailure, "Unexpected ActionOnFailure");
            Assert.AreEqual("/home/hadoop/lib/2.2.0/hbase-0.94.7.jar", actual.HadoopJarStep.Jar, "Unexpected Jar");
            Assert.AreEqual("emr.hbase.backup.Main", actual.HadoopJarStep.MainClass, "Unexpected MainClass");
            Assert.IsTrue(expectedArgs.SequenceEqual(actual.HadoopJarStep.Args), "Unexpected args list");
        }
        public void HBaseRestorePathIsMissing()
        {
            //Input
            HBaseRestoreStep hBaseRestoreStep = new HBaseRestoreStep()
            {
                HBaseJarPath = "/home/hadoop/lib/hbase-0.94.7.jar"
            };

            //Init settings
            BuilderSettings settings = BuildRequestVisitorTest.GetSettings();

            //Init visitor
            BuildRequestVisitor visitor           = new BuildRequestVisitor(settings);
            VisitorSubscriber   visitorSubscriber = new VisitorSubscriber(visitor);

            //Action
            try
            {
                hBaseRestoreStep.Accept(visitor);
                Assert.Fail("Exception has not been thrown!!!");
            }
            catch (InvalidOperationException ex)
            {
                Assert.IsFalse(visitorSubscriber.wasAnyEventFired, "None of the visitor's events should be fired!");
                Assert.AreEqual <string>("RestorePath property is missing for the HBase Restore Step. Example: \"s3://myBucket/hBaseRestore\"", ex.Message, "Unexpected exception message");
            }
        }
        public void Visit(HBaseRestoreStep hBaseRestoreStep)
        {
            if (String.IsNullOrEmpty(hBaseRestoreStep.HBaseJarPath))
            {
                throw new InvalidOperationException(Resources.E_HBaseRestoreJarIsMissing);
            }

            if (String.IsNullOrEmpty(hBaseRestoreStep.RestorePath))
            {
                throw new InvalidOperationException(Resources.E_HBaseRestorePathIsMissing);
            }

            this.CreateStepConfig(
                Resources.HBaseRestoreStepName,
                hBaseRestoreStep.HBaseJarPath,
                Resources.HBaseMainClass,
                ActionOnFailure.TERMINATE_JOB_FLOW,
                new List <String>()
            {
                "--restore", "--backup-dir", hBaseRestoreStep.RestorePath
            });
        }