You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ab...@apache.org on 2015/01/20 22:15:39 UTC

[2/2] ambari git commit: AMBATI-9192 - Service Checks pass despite smoke test failures

AMBATI-9192 - Service Checks pass despite smoke test failures


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/8f30fc6a
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/8f30fc6a
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/8f30fc6a

Branch: refs/heads/trunk
Commit: 8f30fc6a8db83448812cc729e648671aba48b60a
Parents: 756a103
Author: Artem Baranchuk <ab...@hortonworks.con>
Authored: Mon Jan 19 01:11:19 2015 +0200
Committer: Artem Baranchuk <ab...@hortonworks.con>
Committed: Tue Jan 20 23:13:13 2015 +0200

----------------------------------------------------------------------
 .../libraries/functions/install_hdp_msi.py      |   5 +-
 .../2.1/hooks/after-INSTALL/scripts/hook.py     |  12 +
 .../after-INSTALL/templates/Run-SmokeTests.cmd  |  19 +
 .../after-INSTALL/templates/Run-SmokeTests.ps1  | 623 +++++++++++++++++++
 4 files changed, 658 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/8f30fc6a/ambari-common/src/main/python/resource_management/libraries/functions/install_hdp_msi.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/install_hdp_msi.py b/ambari-common/src/main/python/resource_management/libraries/functions/install_hdp_msi.py
index bbedd2c..130bae4 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/install_hdp_msi.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/install_hdp_msi.py
@@ -46,6 +46,9 @@ HDFS_NAMENODE_DATA_DIR={hdp_data_dir}\\hdpdatann
 
 #Datanode Data directory
 HDFS_DATANODE_DATA_DIR={hdp_data_dir}\\hdpdatadn
+
+IS_SLIDER=yes
+IS_PHOENIX=yes
 """
 cluster_properties = """#Log directory
 HDP_LOG_DIR={hdp_log_dir}
@@ -91,7 +94,7 @@ OOZIE_DB_PASSWORD=oozie
 
 INSTALL_MSI_CMD = 'cmd /C start /wait msiexec /qn /i  {hdp_msi_path} /lv {hdp_log_path} MSIUSEREALADMINDETECTION=1 ' \
                   'HDP_LAYOUT={hdp_layout_path} DESTROY_DATA=yes HDP_USER_PASSWORD={hadoop_password_arg} HDP=yes ' \
-                  'KNOX=yes KNOX_MASTER_SECRET="AmbariHDP2Windows" FALCON=yes STORM=yes HBase=yes STORM=yes FLUME=yes RANGER=no'
+                  'KNOX=yes KNOX_MASTER_SECRET="AmbariHDP2Windows" FALCON=yes STORM=yes HBase=yes STORM=yes FLUME=yes SLIDER=yes PHOENIX=yes RANGER=no'
 CREATE_SERVICE_SCRIPT = os.path.abspath("sbin\createservice.ps1")
 CREATE_SERVICE_CMD = 'cmd /C powershell -File "{script}" -username hadoop -password "{password}" -servicename ' \
                      '{servicename} -hdpresourcesdir "{resourcedir}" -servicecmdpath "{servicecmd}"'

http://git-wip-us.apache.org/repos/asf/ambari/blob/8f30fc6a/ambari-server/src/main/resources/stacks/HDPWIN/2.1/hooks/after-INSTALL/scripts/hook.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDPWIN/2.1/hooks/after-INSTALL/scripts/hook.py b/ambari-server/src/main/resources/stacks/HDPWIN/2.1/hooks/after-INSTALL/scripts/hook.py
index 07a3a00..31df28d 100644
--- a/ambari-server/src/main/resources/stacks/HDPWIN/2.1/hooks/after-INSTALL/scripts/hook.py
+++ b/ambari-server/src/main/resources/stacks/HDPWIN/2.1/hooks/after-INSTALL/scripts/hook.py
@@ -45,5 +45,17 @@ class AfterInstallHook(Hook):
            mode="f"
     )
 
+    File(format("{params.hadoop_install_root}/Run-SmokeTests.cmd"),
+         content=Template("Run-SmokeTests.cmd"),
+         owner=params.hdfs_user,
+         mode="f"
+    )
+
+    File(format("{params.hadoop_install_root}/Run-SmokeTests.ps1"),
+         content=Template("Run-SmokeTests.ps1"),
+         owner=params.hdfs_user,
+         mode="f"
+    )
+
 if __name__ == "__main__":
   AfterInstallHook().execute()

http://git-wip-us.apache.org/repos/asf/ambari/blob/8f30fc6a/ambari-server/src/main/resources/stacks/HDPWIN/2.1/hooks/after-INSTALL/templates/Run-SmokeTests.cmd
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDPWIN/2.1/hooks/after-INSTALL/templates/Run-SmokeTests.cmd b/ambari-server/src/main/resources/stacks/HDPWIN/2.1/hooks/after-INSTALL/templates/Run-SmokeTests.cmd
new file mode 100644
index 0000000..41c669f
--- /dev/null
+++ b/ambari-server/src/main/resources/stacks/HDPWIN/2.1/hooks/after-INSTALL/templates/Run-SmokeTests.cmd
@@ -0,0 +1,19 @@
+@echo off
+@rem Licensed to the Apache Software Foundation (ASF) under one or more
+@rem contributor license agreements.  See the NOTICE file distributed with
+@rem this work for additional information regarding copyright ownership.
+@rem The ASF licenses this file to You under the Apache License, Version 2.0
+@rem (the "License"); you may not use this file except in compliance with
+@rem the License.  You may obtain a copy of the License at
+@rem
+@rem     http://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+
+powershell.exe -NoProfile -InputFormat none -ExecutionPolicy unrestricted -File %~dp0Run-SmokeTests.ps1 %*
+exit /b %errorlevel%
+goto :eof
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/8f30fc6a/ambari-server/src/main/resources/stacks/HDPWIN/2.1/hooks/after-INSTALL/templates/Run-SmokeTests.ps1
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDPWIN/2.1/hooks/after-INSTALL/templates/Run-SmokeTests.ps1 b/ambari-server/src/main/resources/stacks/HDPWIN/2.1/hooks/after-INSTALL/templates/Run-SmokeTests.ps1
new file mode 100644
index 0000000..fe22060
--- /dev/null
+++ b/ambari-server/src/main/resources/stacks/HDPWIN/2.1/hooks/after-INSTALL/templates/Run-SmokeTests.ps1
@@ -0,0 +1,623 @@
+### 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.
+
+###
+### Script to run smoke tests
+### To run smoke tests for all components,
+###   runSmokeTests.ps1
+### To run smoke tests for specific component,
+###   runSmokeTests.ps1 hadoop hive
+###
+
+function ExportPropertiesIntoEnv($filepath)
+{
+    $propfile = Get-Content $filepath
+    foreach ($line in $propfile)
+    {
+        $line=$line.Trim()
+        if (($line) -and (-not $line.StartsWith("#")))
+        {
+            $prop = @($line.split("=", 2))
+            [Environment]::SetEnvironmentVariable( $prop[0].Trim(), $prop[1].Trim(), [EnvironmentVariableTarget]::Process )
+        }
+    }
+}
+
+function Invoke-Cmd($command)
+{
+    cmd.exe /C "SETLOCAL EnableDelayedExpansion & $command & exit !errorlevel!"
+}
+
+function Invoke-HadoopCmd($command)
+{
+    Invoke-Cmd "$ENV:HADOOP_HOME\bin\hadoop $command"
+}
+
+function Get-TimeStamp
+{
+    [math]::floor((Get-Date -UFormat('%s')))
+}
+
+function Run-HadoopSmokeTest
+{
+    $ts=Get-TimeStamp
+    Write-Host "Hadoop smoke test - wordcount using hadoop.cmd file"
+    Invoke-HadoopCmd "dfs -copyFromLocal $ENV:HADOOP_HOME\bin\hadoop.cmd hadoop-$ts"
+    if ($LastExitCode -ne 0)
+    {
+        Write-Error "Error copying the input file for the Hadoop smoke test"
+    }
+    $hadoopExamplesJAR = gci "$ENV:HADOOP_COMMON_HOME\share\hadoop\mapreduce\hadoop-mapreduce-examples*.jar"
+    Invoke-HadoopCmd "jar $hadoopExamplesJAR wordcount hadoop-$ts out-$ts"
+    if ($LastExitCode -ne 0)
+    {
+        Write-Error "Hadoop Smoke Test: FAILED"
+    }
+    else
+    {
+        Write-Host "Hadoop Smoke Test: PASSED"
+    }
+    [environment]::exit($LastExitCode)
+}
+
+function Run-TezSmokeTest
+{
+    try
+    {
+        $xml = New-Object System.Xml.XmlDocument
+        $xml.PreserveWhitespace = $true
+        $xml.Load("$ENV:HIVE_HOME\conf\hive-site.xml")
+        $name = $xml.SelectNodes('/configuration/property') | ? { ($_.name -eq "hive.execution.engine") -and ($_.Value -eq "tez") }
+        if (-not $name)
+        {
+            return
+        }
+    }
+    catch
+    {
+        return
+    }
+    $ts=Get-TimeStamp
+    Write-Host "Tez smoke test - orderedwordcount using hadoop.cmd file"
+    Invoke-HadoopCmd "dfs -copyFromLocal $ENV:HADOOP_HOME\bin\hadoop.cmd tez-in-$ts"
+    if ($LastExitCode -ne 0)
+    {
+        Write-Error "Error copying the input file for the Tez smoke test"
+    }
+    $tezExamplesJAR = gci "$ENV:TEZ_HOME\tez-examples-*.jar"
+    Invoke-HadoopCmd "jar $tezExamplesJAR orderedwordcount tez-in-$ts tez-out-$ts"
+    if ($LastExitCode -ne 0)
+    {
+        Write-Error "Tez Smoke Test: FAILED"
+    }
+    else
+    {
+        Write-Host "Tez Smoke Test: PASSED"
+    }
+    [environment]::exit($LastExitCode)
+}
+
+function Run-PigSmokeTest
+{
+    $ts=Get-TimeStamp
+    Write-Host "Pig smoke test - wordcount using hadoop.cmd file"
+    $pigscript = Join-Path $ENV:TMP "script-$ts.pig"
+    Invoke-HadoopCmd "dfs -copyFromLocal $ENV:HADOOP_HOME\bin\hadoop.cmd hadoop-$ts"
+    Add-Content $pigscript "A = load 'hadoop-$ts' using PigStorage(' ');"
+    Add-Content $pigscript "B = foreach A generate `$0 as id;"
+    Add-Content $pigscript "store B into 'out-${ts}.log';"
+    Invoke-Cmd "$ENV:PIG_HOME\bin\pig -l $ENV:TEMP\pig-$ts.log $pigscript"
+    if ($LastExitCode -ne 0)
+    {
+        Write-Error "Pig Smoke Test: FAILED"
+    }
+    else
+    {
+        Write-Host "Pig Smoke Test: PASSED"
+    }
+    [environment]::exit($LastExitCode)
+}
+
+function Invoke-HCatCmd($command)
+{
+    Write-Host "Running hcat command: $command"
+    Invoke-Cmd "python $ENV:HCAT_HOME\bin\hcat.py -e `"$command`""
+}
+
+function Run-HCatalogSmokeTest
+{
+    Write-Host "Hcatalog smoke test - show tables, create table, and drop table"
+    $hcatcmds = @("show tables", "drop table if exists hcatsmoke", "create table hcatsmoke ( id INT, name string ) stored as rcfile")
+    foreach ($cmd in $hcatcmds)
+    {
+        Invoke-HCatCmd "$cmd"
+        if ($LastExitCode -ne 0)
+        {
+            Write-Error "HCatalog Smoke Test: FAILED"
+            [environment]::exit($LastExitCode)
+            return $LastExitCode
+        }
+    }
+    Write-Host "HCatalog Smoke Test: PASSED"
+    [environment]::exit($LastExitCode)
+}
+
+function Invoke-HiveCmd($command)
+{
+    Write-Host "Running hive command: $command"
+    $filename = [System.IO.Path]::GetTempFileName()
+    Add-Content $filename "${command};"
+    Invoke-Cmd "$ENV:HIVE_HOME\bin\hive.cmd -f `"$filename`""
+    Remove-Item $filename
+}
+
+function Run-HiveSmokeTest
+{
+    Write-Host "Hive smoke test - drop table, create table and describe table"
+    $hivecmds = @("drop table if exists hivesmoke", "create external table if not exists hivesmoke ( foo INT, bar STRING)", "describe hivesmoke")
+    foreach ($cmd in $hivecmds)
+    {
+        Invoke-HiveCmd "$cmd"
+        if ($LastExitCode -ne 0)
+        {
+            Write-Error "Hive Smoke Test: FAILED"
+            [environment]::exit($LastExitCode)
+            return $LastExitCode
+        }
+    }
+    Write-Host "Hive Smoke Test: PASSED"
+    [environment]::exit($LastExitCode)
+}
+
+function Run-HiveServer2SmokeTest
+{
+    Write-Host "HiveServer2 smoke test - drop table, create table and describe table"
+    $hivecmds = @("drop table if exists hive2smoke", "create external table if not exists hive2smoke ( foo INT, bar STRING)", "describe hive2smoke")
+    foreach ($cmd in $hivecmds)
+    {
+        Invoke-Cmd "$ENV:HIVE_HOME\bin\beeline.cmd -u `"jdbc:hive2://${ENV:HIVE_SERVER_HOST}:10001/`" -n hadoop -p fakepwd -d org.apache.hive.jdbc.HiveDriver -e `"$cmd;`""
+        if ($LastExitCode -ne 0)
+        {
+            Write-Error "HiveServer2 Smoke Test: FAILED"
+            [environment]::exit($LastExitCode)
+            return $LastExitCode
+        }
+    }
+    Write-Host "HiveServer2 Smoke Test: PASSED"
+    [environment]::exit($LastExitCode)
+}
+
+function Run-SqoopSmokeTest
+{
+    Write-Host "Sqoop smoke test - version"
+    $out = Invoke-Cmd "$ENV:SQOOP_HOME\bin\sqoop.cmd version"
+    if (($LastExitCode -eq 0) -and ($out -match 'Sqoop [\d.]'))
+    {
+        Write-Host "Sqoop Smoke Test: PASSED"
+    }
+    else
+    {
+        Write-Error "Sqoop Smoke Test: FAILED"
+    }
+    [environment]::exit($LastExitCode)
+}
+
+function Run-SliderSmokeTest
+{
+    Write-Host "Slider smoke test - version"
+    $out = Invoke-Cmd "$ENV:SLIDER_HOME\bin\slider.py version"
+    if ($LastExitCode -eq 0)
+    {
+        $out = Invoke-Cmd "$ENV:SLIDER_HOME\bin\slider.py list"
+        if ($LastExitCode -eq 0)
+        {
+            Write-Host "Slider Smoke Test: PASSED"
+            [environment]::exit($LastExitCode)
+            return $LastExitCode
+        }
+    }
+    Write-Error "Slider Smoke Test: FAILED"
+    [environment]::exit($LastExitCode)
+}
+
+function Run-OozieSmokeTest
+{
+    Write-Host "Oozie smoke test - status"
+    $out = Invoke-Cmd "$ENV:OOZIE_HOME\bin\oozie.cmd admin -oozie http://${ENV:OOZIE_SERVER_HOST}:11000/oozie -status"
+    if (($LastExitCode -eq 0) -and ($out -match 'System mode: NORMAL'))
+    {
+        Write-Host "Oozie Smoke Test: PASSED"
+    }
+    else
+    {
+        Write-Error "Oozie Smoke Test: FAILED"
+    }
+    [environment]::exit($LastExitCode)
+}
+
+function Run-MahoutSmokeTest
+{
+	$MAHOUT_HOME = "$ENV:MAHOUT_HOME"
+	$PATH_TO_MAHOUT_CMD = Get-ChildItem $ENV:HADOOP_NODE_INSTALL_ROOT\mahout-*\bin\mahout.cmd
+	if((!$MAHOUT_HOME) -and ($PATH_TO_MAHOUT_CMD))
+	{
+		$MAHOUT_HOME = "$ENV:HADOOP_NODE_INSTALL_ROOT\mahout-*"
+	}
+	if($MAHOUT_HOME)
+	{
+		Write-Host "MAHOUT smoke test"
+		if ((Test-Path "$MAHOUT_HOME\bin\mahout.cmd") -and
+		(Test-Path "$MAHOUT_HOME\integration\target\mahout-integration-*.jar") -and
+		(Test-Path "$MAHOUT_HOME\math\target\mahout-math-*.jar") -and
+		(Test-Path "$MAHOUT_HOME\examples\target\mahout-examples-*-job.jar") -and
+		(Test-Path "$MAHOUT_HOME\examples\target\mahout-examples-*.jar"))
+		{
+			Write-Host "Mahout Smoke Test: PASSED"
+			[environment]::exit(0)
+		}
+		else
+		{
+        Write-Error "Mahout Smoke Test: FAILED"
+        [environment]::exit(-1)
+		}
+	}
+}
+
+function Invoke-HttpGetRequest($url)
+{
+    Write-Host "Calling URL: $url"
+    $req = [System.Net.WebRequest]::Create($url)
+    try
+    {
+        $resp = $req.GetResponse()
+        $respcode = [int]$resp.StatusCode
+        $stream = $resp.GetResponseStream()
+        $sreader = New-Object System.IO.StreamReader $stream
+        $result = $sreader.ReadToEnd()
+        $sreader.Close()
+    }
+    catch
+    {
+        $respcode = -1
+        $result = ""
+    }
+    return $respcode, $result
+}
+
+function Run-WebHcatSmokeTest
+{
+    Write-Host "WebHcat smoke test - status, show databases, show tables"
+    $ttcmds = @("status", "ddl/database?user.name=hadoop", "ddl/database/default/table?user.name=hadoop")
+    foreach ($cmd in $ttcmds)
+    {
+        $code, $out = Invoke-HttpGetRequest "http://${ENV:WEBHCAT_HOST}:50111/templeton/v1/$cmd"
+        Write-Host "Response: $code"
+        Write-Host "Data: $out"
+        if ($code -ne 200)
+        {
+            Write-Error "WebHcat Smoke Test: FAILED"
+            [environment]::exit(-1)
+            return $code
+        }
+    }
+    Write-Host "WebHcat Smoke Test: PASSED"
+    [environment]::exit(0)
+}
+
+function Run-HBaseSmokeTest
+{
+    # HBase is an optional component
+    if ( (-not (Test-Path ENV:HBASE_MASTER) ) -and (-not (Test-Path ENV:HBASE_CLASSPATH) ) )
+    {
+        return
+    }
+    Write-Host "Hbase smoke test - status, disable, drop, create, put and scan table"
+
+    # grant privs to the smoke test user only in secure mode
+    # skip for now
+
+    #check master URL
+    Write-Host "Checking master web URL"
+    $hbaseweburl="http://${ENV:HBASE_MASTER}:60010/master-status"
+    $code, $out = Invoke-HttpGetRequest $hbaseweburl
+    Write-Host "Response: $code"
+    if ($code -ne 200)
+    {
+        Write-Error "HBase Smoke Test: FAILED Hbase Master url $hbaseweburl not accessible"
+        [environment]::exit(-1)
+        return $code
+    } else
+    {
+        Write-Host "Hbase Master url $hbaseweburl accessible"
+    }
+
+    # run the smoke test
+    $hbasecmds = @("status", "disable 'usertable'", "drop 'usertable'", "create 'usertable', 'family'", "put 'usertable', 'row01', 'family:col01', 'value1'", "scan 'usertable'")
+    foreach ($cmd in $hbasecmds)
+    {
+        Write-Host "Running on hbase shell: $cmd"
+        $output=Invoke-Cmd "echo $cmd|$ENV:HBASE_HOME\bin\hbase.cmd shell"
+        if ($LastExitCode -ne 0)
+        {
+            Write-Error "HBase Smoke Test: FAILED failed to run command $cmd"
+            [environment]::exit($LastExitCode)
+            return $LastExitCode
+        }
+        if ($cmd -eq "status")
+        {
+            if ($output -match "status 0 servers*")
+            {
+                Write-Error "HBase Smoke Test: FAILED no regionservers running"
+                [environment]::exit(-1)
+                return -1
+            }
+        } elseif ($cmd.StartsWith("scan"))
+        {
+            if (-not ($output -match "1 row"))
+            {
+                Write-Error "HBase Smoke Test: FAILED scan did not return rows"
+                [environment]::exit(-1)
+                return -1
+            }
+        }
+    }
+
+    #cleanup
+    Write-Host "Runnng cleanup for HBase smoke tests"
+    $hbasecmds = @("disable 'usertable'", "drop 'usertable'")
+    foreach ($cmd in $hbasecmds)
+    {
+        Write-Host "Running on hbase shell: $cmd"
+        $output=Invoke-Cmd "echo $cmd|$ENV:HBASE_HOME\bin\hbase.cmd shell"
+        if ($LastExitCode -ne 0)
+        {
+            Write-Error "HBase Smoke Test: FAILED failed to run command $cmd"
+            [environment]::exit($LastExitCode)
+            return $LastExitCode
+        }
+    }
+    Write-Host "HBase Smoke Test: PASSED"
+    [environment]::exit(0)
+}
+
+function Run-ZooKeeperSmokeTest
+{
+    # ZooKeeper is an optional component
+    if (-not (Test-Path ENV:ZOOKEEPER_HOSTS))
+    {
+        return
+    }
+    Write-Host "ZooKeeper smoke test - create root znode and verify data consistency across the quorum"
+
+    $zk_node1=""
+    foreach ($tmpHost in ${ENV:ZOOKEEPER_HOSTS})
+    {
+        $zk_node1=$tmpHost
+        break
+    }
+
+    Write-Host "Delete /zk_smoketest znode if exists"
+    $cmd="delete /zk_smoketest"
+    $output=Invoke-Cmd "$ENV:ZOOKEEPER_HOME\bin\zkCli.cmd -server ${zk_node1}:2181 $cmd"
+    if ($LastExitCode -ne 0)
+    {
+        Write-Error "ZooKeeper Smoke Test: FAILED failed to run command $cmd"
+        [environment]::exit($LastExitCode)
+        return $LastExitCode
+    }
+
+    Write-Host "Creat /zk_smoketest znode"
+    $cmd="create /zk_smoketest smoke_data"
+    $output=Invoke-Cmd "$ENV:ZOOKEEPER_HOME\bin\zkCli.cmd -server ${zk_node1}:2181 $cmd"
+    if ($LastExitCode -ne 0)
+    {
+        Write-Error "ZooKeeper Smoke Test: FAILED failed to run command $cmd"
+        [environment]::exit($LastExitCode)
+        return $LastExitCode
+    }
+
+    $zookeeper_exit_code=0
+    Write-Host "Verify the data associated with znode across all the nodes in the zookeeper quorum"
+    $cmd="get /zk_smoketest"
+    foreach ($tmpHost in ${ENV:ZOOKEEPER_HOSTS})
+    {
+        $output=Invoke-Cmd "$ENV:ZOOKEEPER_HOME\bin\zkCli.cmd -server ${tmpHost}:2181 $cmd"
+        if (-not ($output -match "smoke_data"))
+        {
+            Write-Error "Data associated with znode /zk_smoketests is not consistent on host $tmpHost"
+            $zookeeper_exit_code=$zookeeper_exit_code+1
+        }
+    }
+
+    Write-Host "Response: $zookeeper_exit_code"
+    if ($zookeeper_exit_code -ne 0)
+    {
+        Write-Error "ZooKeeper Smoke Test: FAILED"
+        [environment]::exit(-1)
+        return $zookeeper_exit_code
+    }
+
+    #cleanup
+    Write-Host "Runnng cleanup for ZooKeeper smoke tests"
+    $cmd="delete /zk_smoketest "
+    $output=Invoke-Cmd "$ENV:ZOOKEEPER_HOME\bin\zkCli.cmd -server ${zk_node1}:2181 $cmd"
+
+    Write-Host "ZooKeeper Smoke Test: PASSED"
+    [environment]::exit(0)
+}
+
+function Run-KnoxSmokeTest
+{
+    Write-Host "Knox Smoke Test"
+    #Knox is an optional component and may not exist on every machine.
+    if (-not (Test-Path ENV:KNOX_HOME))
+    {
+        return
+    }
+
+    $url = "https://${ENV:KNOX_HOST}:8443/gateway/sandbox/webhdfs/v1/?op=GETHOMEDIRECTORY"
+    $req = [System.Net.WebRequest]::Create( $url )
+    # Set the HTTP basic auth credentials to use for the request
+    $req.Credentials = New-Object Net.NetworkCredential( "guest", "guest-password" )
+    # Disable SSL cerificate validation temporarily
+    [Net.ServicePointManager]::ServerCertificateValidationCallback = { $true }
+
+    Write-Host "GET $url"
+    try
+    {
+        $resp = $req.GetResponse()
+        $status = [int]$resp.StatusCode
+        $stream = $resp.GetResponseStream()
+        $reader = New-Object System.IO.StreamReader $stream
+        $entity = $reader.ReadToEnd()
+        $reader.Close()
+    }
+    catch [System.Net.WebException]
+    {
+        $entity = $_.Exception
+        $resp = $_.Exception.Response
+        $status = [int]$resp.StatusCode
+    }
+
+    # Restore previous server certificate validator callback.
+    [Net.ServicePointManager]::ServerCertificateValidationCallback = $null
+
+    Write-Host "Status: $status"
+    if ( $status -eq 200 )
+    {
+        Write-Host "Result: $entity"
+        Write-Host "Knox Smoke Test: PASSED"
+    }
+    elseif ( $status -eq 500 )
+    {
+        Write-Host "Result: WebHDFS unavailable"
+        Write-Host "Knox Smoke Test: PASSED"
+    }
+    else
+    {
+        Write-Host "Result: $entity"
+        Write-Error "Knox Smoke Test: FAILED"
+        [environment]::exit(-1)
+        return -1
+    }
+}
+
+function Run-PhoenixSmokeTest
+{
+    # Phoenix is an optional component
+    if (-not (Test-Path ENV:PHOENIX_HOME))
+    {
+        return
+    }
+    # Phoenix depends on hbase setup
+    if (-not (Test-Path ENV:HBASE_CONF_DIR))
+    {
+        return
+    }
+
+    $zookeeper = 'localhost:2181'
+    $output=Invoke-Cmd "$ENV:HBASE_HOME\bin\hbase.cmd org.apache.hadoop.hbase.util.HBaseConfTool hbase.zookeeper.quorum"
+    if ([string]::Compare($output,"null", $True) -ne 0)
+    {
+        $zookeeper=[regex]::replace($output,":\d+", '')
+        $output=Invoke-Cmd "$ENV:HBASE_HOME\bin\hbase.cmd org.apache.hadoop.hbase.util.HBaseConfTool hbase.zookeeper.property.clientPort"
+        $zookeeper = $zookeeper +":" + $output
+    }
+    $output=Invoke-Cmd "$ENV:HBASE_HOME\bin\hbase.cmd org.apache.hadoop.hbase.util.HBaseConfTool zookeeper.znode.parent"
+    if ([string]::Compare($output,"null", $True) -ne 0)
+    {
+        $zookeeper = $zookeeper +":" + $output
+    }
+    $ENV:PHOENIX_LIB_DIR = $ENV:PHOENIX_HOME
+
+    Write-Host "ZooKeeper connection string: $zookeeper"
+    Write-Host "Phoenix smoke test - create WEB_STAT table and load data into it"
+
+    $phoenixClientJAR = gci "$ENV:PHOENIX_HOME\phoenix-*client.jar"
+    $output=Invoke-Cmd "$ENV:JAVA_HOME\bin\java -cp $phoenixClientJAR org.apache.phoenix.util.PhoenixRuntime $zookeeper $ENV:PHOENIX_HOME\examples\WEB_STAT.sql $ENV:PHOENIX_HOME\examples\WEB_STAT.csv $ENV:PHOENIX_HOME\examples\WEB_STAT_QUERIES.sql"
+    if (-not ($output -match "39 rows upserted"))
+    {
+        Write-Error "Phoenix Smoke Test Failed To Load Data Into WEB_STAT sample table"
+        [environment]::exit(-1)
+        return -1
+    }
+
+    Write-Host "Phoenix Smoke Test: PASSED"
+    [environment]::exit(0)
+}
+
+function Run-FalconSmokeTest
+{
+    if (-not (Test-Path ENV:FALCON_HOME))
+    {
+        return
+    }
+    Write-Host "Falcon smoke test - get admin status"
+    $command = "admin -status"
+    Write-Host "Running falcon command: $command"
+    Invoke-Cmd "python $ENV:FALCON_HOME\bin\falcon.py $command"
+    if ($LastExitCode -ne 0)
+    {
+        Write-Error "Falcon Smoke Test: FAILED"
+    }
+    else
+    {
+        Write-Host "Falcon Smoke Test: PASSED"
+    }
+    [environment]::exit($LastExitCode)
+}
+
+function Run-StormSmokeTest
+{
+    if (-not (Test-Path ENV:STORM_HOME))
+    {
+        return
+    }
+    Write-Host "Storm smoke test - get configuration value from the server"
+    $command = "remoteconfvalue nimbus.host"
+    Write-Host "Running storm command: $command"
+    Invoke-Cmd "$ENV:STORM_HOME\bin\storm.cmd $command"
+    if ($LastExitCode -ne 0)
+    {
+        Write-Host "Storm Smoke Test: FAILED"
+    }
+    else
+    {
+        Write-Host "Storm Smoke Test: PASSED"
+    }
+    [environment]::exit($LastExitCode)
+}
+
+
+$scriptDir = Resolve-Path (Split-Path $MyInvocation.MyCommand.Path)
+ExportPropertiesIntoEnv (Join-Path $scriptDir "cluster.properties")
+$VALID_COMPONENTS = ls function:* | foreach { if ($_.Name -match '^Run-(.*)SmokeTest') { $matches[1] } }
+
+if ($args.Length -eq 0)
+{
+    $args = $VALID_COMPONENTS
+}
+foreach ($comp in $args)
+{
+    if ($VALID_COMPONENTS -contains $comp)
+    {
+        Invoke-Expression "Run-${comp}SmokeTest"
+    }
+    else
+    {
+        Write-Error "No smoke test found for $comp"
+    }
+}
+