public void Visit(HBaseConfig hBaseConfig)
        {
            if (String.IsNullOrEmpty(hBaseConfig.JarPath))
            {
                throw new InvalidOperationException(Resources.E_HBaseJarPathIsMissing);
            }

            //install HBase
            this.CreateBootstrapActionConfig(
                Resources.HBaseInstallName,
                Resources.HBaseInstallPath,
                null);

            //Configure HBase
            if (hBaseConfig.Args != null && hBaseConfig.Args.Count > 0)
            {
                this.CreateBootstrapActionConfig(
                    Resources.HBaseConfigName,
                    Resources.HBaseConfigPath,
                    hBaseConfig.Args);
            }

            //start HBase
            this.CreateStepConfig(
                Resources.HBaseStepName,
                hBaseConfig.JarPath,
                Resources.HBaseMainClass,
                ActionOnFailure.TERMINATE_JOB_FLOW,
                new List <String>()
            {
                "--start-master"
            });
        }
        public void VisitHBaseConfig()
        {
            //Init args
            HBaseConfig hBaseConfig = new HBaseConfig()
            {
                IfStart = true
            };

            hBaseConfig.JarPath = "/home/hadoop/lib/hbase-0.94.7.jar";
            hBaseConfig.Args    = new List <string>()
            {
                "-s", "somearg{arg1}", "-s", "{arg2}"
            };

            //Expectations
            List <string> expectedConfigArgs = new List <string>()
            {
                "-s", "somearg1234", "-s", "6789"
            };
            List <string> expectedStartArgs = new List <string>()
            {
                "--start-master"
            };

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

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

            //Action
            hBaseConfig.Accept(visitor);

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

            // BootstrapAction 1: Install HBase
            BootstrapActionConfig actualBootstrapAction = visitorSubscriber.bootstrapActionList[0];

            Assert.AreEqual("Install HBase", actualBootstrapAction.Name, "Unexpected Name");
            Assert.AreEqual("s3://elasticmapreduce/bootstrap-actions/setup-hbase", actualBootstrapAction.ScriptBootstrapAction.Path, "Unexpected ScriptBootstrapAction.Path");
            Assert.IsNull(actualBootstrapAction.ScriptBootstrapAction.Args, "Unexpected args list");

            // BootstrapAction 2: Configure HBase
            actualBootstrapAction = visitorSubscriber.bootstrapActionList[1];
            Assert.AreEqual("Configure HBase", actualBootstrapAction.Name, "Unexpected Name");
            Assert.AreEqual("s3://elasticmapreduce/bootstrap-actions/configure-hbase", actualBootstrapAction.ScriptBootstrapAction.Path, "Unexpected ScriptBootstrapAction.Path");
            Assert.IsTrue(expectedConfigArgs.SequenceEqual(actualBootstrapAction.ScriptBootstrapAction.Args), "Unexpected args list");

            //Step : Start HBase
            StepConfig actualStep = visitorSubscriber.stepList[0];

            Assert.AreEqual("Start HBase", actualStep.Name, "Unexpected Name");
            Assert.AreEqual(ActionOnFailure.TERMINATE_JOB_FLOW, actualStep.ActionOnFailure, "Unexpected ActionOnFailure");
            Assert.AreEqual("/home/hadoop/lib/hbase-0.94.7.jar", actualStep.HadoopJarStep.Jar, "Unexpected Jar");
            Assert.AreEqual("emr.hbase.backup.Main", actualStep.HadoopJarStep.MainClass, "Unexpected MainClass");
            Assert.IsTrue(expectedStartArgs.SequenceEqual(actualStep.HadoopJarStep.Args), "Unexpected args list");
        }
        public void SkipHBaseConfigIfStartFalse()
        {
            //Init args
            HBaseConfig hBaseConfig = new HBaseConfig();

            //Init visitor
            BuildRequestVisitor visitor           = new BuildRequestVisitor(BuildRequestVisitorTest.GetSettings());
            VisitorSubscriber   visitorSubscriber = new VisitorSubscriber(visitor);

            //Action
            hBaseConfig.Accept(visitor);

            //Verify
            Assert.IsFalse(visitorSubscriber.wasAnyEventFired, "None of the visitor's events should be fired!");
        }
        public void HBaseJarPathIsMissing()
        {
            //Input
            HBaseConfig hBaseConfig = new HBaseConfig {
                IfStart = true
            };

            //Init visitor
            BuildRequestVisitor visitor           = new BuildRequestVisitor(BuildRequestVisitorTest.GetSettings());
            VisitorSubscriber   visitorSubscriber = new VisitorSubscriber(visitor);

            //Action
            try
            {
                hBaseConfig.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>("JarPath property is missing for the HBase Configuration. Example: \"/home/hadoop/lib/hbase-0.94.7.jar\"", ex.Message, "Unexpected exception message");
            }
        }