diff --git a/Azure_ICA_all.xml b/Azure_ICA_all.xml
index 5793c02..e18c5c3 100644
--- a/Azure_ICA_all.xml
+++ b/Azure_ICA_all.xml
@@ -7107,6 +7107,20 @@
testDuration=300
P0
+
+
+ ICA-PERF-LAGSCOPE-TEST
+
+
+ ICA-PERF-LAGSCOPE-TEST.ps1
+ M1S1
+ AzureServiceManagement,AzureResourceManager
+ SOME,TEXTS,NEEDS,TO,BE,PRESENT,HERE,FOR,PRINTING,TEST,SUMMARY
+ .\remote-scripts\azuremodules.sh
+
+ pingIteration=1000000
+
+ P0
ICA-PERF-FIO-TEST-4K
@@ -8252,6 +8266,12 @@
ICA-PERF-NTTTCP-TEST
+
+ PERF-LAGSCOPE
+
+ ICA-PERF-LAGSCOPE-TEST
+
+
PERF-TCPv6
diff --git a/remote-scripts/ICA-PERF-LAGSCOPE-TEST.ps1 b/remote-scripts/ICA-PERF-LAGSCOPE-TEST.ps1
new file mode 100644
index 0000000..f84abdc
--- /dev/null
+++ b/remote-scripts/ICA-PERF-LAGSCOPE-TEST.ps1
@@ -0,0 +1,232 @@
+<#-------------Create Deployment Start------------------#>
+Import-Module .\TestLibs\RDFELibs.psm1 -Force
+$result = ""
+$testResult = ""
+$resultArr = @()
+$isDeployed = DeployVMS -setupType $currentTestData.setupType -Distro $Distro -xmlConfig $xmlConfig
+if ($isDeployed)
+{
+ try
+ {
+ $noClient = $true
+ $noServer = $true
+ foreach ( $vmData in $allVMData )
+ {
+ if ( $vmData.RoleName -imatch "client" )
+ {
+ $clientVMData = $vmData
+ $noClient = $false
+ }
+ elseif ( $vmData.RoleName -imatch "server" )
+ {
+ $noServer = $fase
+ $serverVMData = $vmData
+ }
+ }
+ if ( $noClient )
+ {
+ Throw "No any master VM defined. Be sure that, Client VM role name matches with the pattern `"*master*`". Aborting Test."
+ }
+ if ( $noServer )
+ {
+ Throw "No any slave VM defined. Be sure that, Server machine role names matches with pattern `"*slave*`" Aborting Test."
+ }
+ #region CONFIGURE VM FOR TERASORT TEST
+ LogMsg "CLIENT VM details :"
+ LogMsg " RoleName : $($clientVMData.RoleName)"
+ LogMsg " Public IP : $($clientVMData.PublicIP)"
+ LogMsg " SSH Port : $($clientVMData.SSHPort)"
+ LogMsg "SERVER VM details :"
+ LogMsg " RoleName : $($serverVMData.RoleName)"
+ LogMsg " Public IP : $($serverVMData.PublicIP)"
+ LogMsg " SSH Port : $($serverVMData.SSHPort)"
+
+ #
+ # PROVISION VMS FOR LISA WILL ENABLE ROOT USER AND WILL MAKE ENABLE PASSWORDLESS AUTHENTICATION ACROSS ALL VMS IN SAME HOSTED SERVICE.
+ #
+ ProvisionVMsForLisa -allVMData $allVMData -installPackagesOnRoleNames "none"
+
+ #endregion
+
+ LogMsg "Generating constansts.sh ..."
+ $constantsFile = "$LogDir\constants.sh"
+ Set-Content -Value "#Generated by Azure Automation." -Path $constantsFile
+ Add-Content -Value "server=$($serverVMData.InternalIP)" -Path $constantsFile
+ Add-Content -Value "client=$($clientVMData.InternalIP)" -Path $constantsFile
+ foreach ( $param in $currentTestData.TestParameters.param)
+ {
+ if ($param -imatch "pingIteration")
+ {
+ $pingIteration=$param.Trim().Replace("pingIteration=","")
+ }
+ Add-Content -Value "$param" -Path $constantsFile
+ }
+ LogMsg "constanst.sh created successfully..."
+ LogMsg (Get-Content -Path $constantsFile)
+ #endregion
+
+
+ #region EXECUTE TEST
+ $myString = @"
+cd /root/
+./perf_lagscope.sh &> lagscopeConsoleLogs.txt
+. azuremodules.sh
+collect_VM_properties
+"@
+ Set-Content "$LogDir\StartLagscopeTest.sh" $myString
+ RemoteCopy -uploadTo $clientVMData.PublicIP -port $clientVMData.SSHPort -files ".\$constantsFile,.\remote-scripts\azuremodules.sh,.\remote-scripts\perf_lagscope.sh,.\$LogDir\StartLagscopeTest.sh" -username "root" -password $password -upload
+ RemoteCopy -uploadTo $clientVMData.PublicIP -port $clientVMData.SSHPort -files $currentTestData.files -username "root" -password $password -upload
+
+ $out = RunLinuxCmd -ip $clientVMData.PublicIP -port $clientVMData.SSHPort -username "root" -password $password -command "chmod +x *.sh"
+ $testJob = RunLinuxCmd -ip $clientVMData.PublicIP -port $clientVMData.SSHPort -username "root" -password $password -command "/root/StartLagscopeTest.sh" -RunInBackground
+ #endregion
+
+ #region MONITOR TEST
+ while ( (Get-Job -Id $testJob).State -eq "Running" )
+ {
+ $currentStatus = RunLinuxCmd -ip $clientVMData.PublicIP -port $clientVMData.SSHPort -username "root" -password $password -command "tail -1 lagscopeConsoleLogs.txt"
+ LogMsg "Current Test Staus : $currentStatus"
+ WaitFor -seconds 20
+ }
+ $finalStatus = RunLinuxCmd -ip $clientVMData.PublicIP -port $clientVMData.SSHPort -username "root" -password $password -command "cat /root/state.txt"
+ RemoteCopy -downloadFrom $clientVMData.PublicIP -port $clientVMData.SSHPort -username "root" -password $password -download -downloadTo $LogDir -files "lagscope-n$pingIteration-output.txt"
+ RemoteCopy -downloadFrom $clientVMData.PublicIP -port $clientVMData.SSHPort -username "root" -password $password -download -downloadTo $LogDir -files "VM_properties.csv"
+
+ $out=Read-Host -Prompt "Continue?"
+ $testSummary = $null
+ $lagscopeReportLog = Get-Content -Path "$LogDir\lagscope-n$pingIteration-output.txt"
+ LogMsg $lagscopeReportLog
+
+ try
+ {
+ $matchLine= (Select-String -Path "$LogDir\lagscope-n$pingIteration-output.txt" -Pattern "Average").Line
+ $minimumLat = $matchLine.Split(",").Split("=").Trim().Replace("us","")[1]
+ $maximumLat = $matchLine.Split(",").Split("=").Trim().Replace("us","")[3]
+ $averageLat = $matchLine.Split(",").Split("=").Trim().Replace("us","")[5]
+
+ $resultSummary += CreateResultSummary -testResult $minimumLat -metaData "Minimum Latency" -checkValues "PASS,FAIL,ABORTED" -testName $currentTestData.testName
+ $resultSummary += CreateResultSummary -testResult $maximumLat -metaData "Maximum Latency" -checkValues "PASS,FAIL,ABORTED" -testName $currentTestData.testName
+ $resultSummary += CreateResultSummary -testResult $maximumLat -metaData "Average Latency" -checkValues "PASS,FAIL,ABORTED" -testName $currentTestData.testName
+ }
+ catch
+ {
+ $resultSummary += CreateResultSummary -testResult "Error in parsing logs." -metaData "LAGSCOPE" -checkValues "PASS,FAIL,ABORTED" -testName $currentTestData.testName
+ }
+ #endregion
+
+ if ( $finalStatus -imatch "TestFailed")
+ {
+ LogErr "Test failed. Last known status : $currentStatus."
+ $testResult = "FAIL"
+ }
+ elseif ( $finalStatus -imatch "TestAborted")
+ {
+ LogErr "Test Aborted. Last known status : $currentStatus."
+ $testResult = "ABORTED"
+ }
+ elseif ( $finalStatus -imatch "TestCompleted")
+ {
+ LogMsg "Test Completed."
+ $testResult = "PASS"
+ }
+ elseif ( $finalStatus -imatch "TestRunning")
+ {
+ LogMsg "Powershell backgroud job for test is completed but VM is reporting that test is still running. Please check $LogDir\zkConsoleLogs.txt"
+ LogMsg "Contests of summary.log : $testSummary"
+ $testResult = "PASS"
+ }
+ LogMsg "Test result : $testResult"
+ LogMsg "Test Completed"
+
+ LogMsg "Uploading the test results.."
+ $dataSource = $xmlConfig.config.Azure.database.server
+ $user = $xmlConfig.config.Azure.database.user
+ $password = $xmlConfig.config.Azure.database.password
+ $database = $xmlConfig.config.Azure.database.dbname
+ $dataTableName = $xmlConfig.config.Azure.database.dbtable
+ $TestCaseName = $xmlConfig.config.Azure.database.testTag
+ if ($dataSource -And $user -And $password -And $database -And $dataTableName)
+ {
+ $GuestDistro = cat "$LogDir\VM_properties.csv" | Select-String "OS type"| %{$_ -replace ",OS type,",""}
+
+ #$TestCaseName = "LINUX-NEXT-UPSTREAM-TEST"
+ if ( $UseAzureResourceManager )
+ {
+ $HostType = "Azure-ARM"
+ }
+ else
+ {
+ $HostType = "Azure"
+ }
+ $HostBy = ($xmlConfig.config.Azure.General.Location).Replace('"','')
+ $HostOS = cat "$LogDir\VM_properties.csv" | Select-String "Host Version"| %{$_ -replace ",Host Version,",""}
+ $GuestOSType = "Linux"
+ $GuestDistro = cat "$LogDir\VM_properties.csv" | Select-String "OS type"| %{$_ -replace ",OS type,",""}
+ $GuestSize = $clientVMData.InstanceSize
+ $KernelVersion = cat "$LogDir\VM_properties.csv" | Select-String "Kernel version"| %{$_ -replace ",Kernel version,",""}
+ $IPVersion = "IPv4"
+ $ProtocolType = "TCP"
+ if($EnableAcceleratedNetworking)
+ {
+ $DataPath = "SRIOV"
+ }
+ else
+ {
+ $DataPath = "Synthetic"
+ }
+ $connectionString = "Server=$dataSource;uid=$user; pwd=$password;Database=$database;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;"
+
+ $SQLQuery = "INSERT INTO $dataTableName (TestCaseName,TestDate,HostType,HostBy,HostOS,GuestOSType,GuestDistro,GuestSize,KernelVersion,IPVersion,ProtocolType,DataPath,MaxLatency_us,AverageLatency_us,MinLatency_us,Latency95Percentile_us,Latency99Percentile_us) VALUES "
+
+ #Percentile Values are not calculated yet. will be added in future.
+ $Latency95Percentile_us = 0
+ $Latency99Percentile_us = 0
+
+ $SQLQuery += "('$TestCaseName','$(Get-Date -Format yyyy-MM-dd)','$HostType','$HostBy','$HostOS','$GuestOSType','$GuestDistro','$GuestSize','$KernelVersion','$IPVersion','$ProtocolType','$DataPath','$maximumLat','$averageLat','$minimumLat','$Latency95Percentile_us','$Latency99Percentile_us'),"
+
+ $SQLQuery = $SQLQuery.TrimEnd(',')
+ LogMsg $SQLQuery
+ $connection = New-Object System.Data.SqlClient.SqlConnection
+ $connection.ConnectionString = $connectionString
+ $connection.Open()
+
+ $command = $connection.CreateCommand()
+ $command.CommandText = $SQLQuery
+ $result = $command.executenonquery()
+ $connection.Close()
+ LogMsg "Uploading the test results done!!"
+ }
+ else
+ {
+ LogMsg "Invalid database details. Failed to upload result to database!"
+ }
+ }
+ catch
+ {
+ $ErrorMessage = $_.Exception.Message
+ LogMsg "EXCEPTION : $ErrorMessage"
+ }
+ Finally
+ {
+ $metaData = "LAGSCOPE RESULT"
+ if (!$testResult)
+ {
+ $testResult = "Aborted"
+ }
+ $resultArr += $testResult
+ }
+}
+
+else
+{
+ $testResult = "Aborted"
+ $resultArr += $testResult
+}
+
+$result = GetFinalResultHeader -resultarr $resultArr
+
+#Clean up the setup
+DoTestCleanUp -result $result -testName $currentTestData.testName -deployedServices $isDeployed -ResourceGroups $isDeployed
+
+#Return the result and summery to the test suite script..
+return $result, $resultSummary
diff --git a/remote-scripts/perf_lagscope.sh b/remote-scripts/perf_lagscope.sh
new file mode 100644
index 0000000..740394e
--- /dev/null
+++ b/remote-scripts/perf_lagscope.sh
@@ -0,0 +1,183 @@
+#!/bin/bash
+
+#######################################################################
+#
+# Linux on Hyper-V and Azure Test Code, ver. 1.0.0
+# Copyright (c) Microsoft Corporation
+#
+# All rights reserved.
+# Licensed 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
+#
+# THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS
+# OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
+# ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR
+# PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT.
+#
+# See the Apache Version 2.0 License for specific language governing
+# permissions and limitations under the License.
+#
+#######################################################################
+
+#######################################################################
+#
+# perf_lagscope.sh
+# Author : SHITAL SAVEKAR
+#
+# Description:
+# Download and run lagscope latency tests.
+# This script needs to be run on client VM.
+#
+# Supported Distros:
+# Ubuntu 16.04
+#######################################################################
+
+CONSTANTS_FILE="./constants.sh"
+ICA_TESTRUNNING="TestRunning" # The test is running
+ICA_TESTCOMPLETED="TestCompleted" # The test completed successfully
+ICA_TESTABORTED="TestAborted" # Error during the setup of the test
+ICA_TESTFAILED="TestFailed" # Error occurred during the test
+touch ./lagscopeTest.log
+
+
+InstallLAGSCOPE() {
+ DISTRO=`grep -ihs "buntu\|Suse\|Fedora\|Debian\|CentOS\|Red Hat Enterprise Linux" /etc/{issue,*release,*version}`
+
+ if [[ $DISTRO =~ "Ubuntu" ]];
+ then
+ LogMsg "Detected UBUNTU"
+ LogMsg "Configuring ${1} for lagscope test..."
+ ssh ${1} "apt-get update"
+ ssh ${1} "apt-get -y install libaio1 sysstat git bc make gcc"
+ ssh ${1} "rm -rf lagscope"
+ ssh ${1} "git clone https://github.com/Microsoft/lagscope"
+ ssh ${1} "cd lagscope/src && make && make install"
+
+ elif [[ $DISTRO =~ "Red Hat Enterprise Linux Server release 6" ]];
+ then
+ LogMsg "Detected Redhat 6.x"
+ ssh ${1} "rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm"
+ ssh ${1} "yum -y --nogpgcheck install libaio1 sysstat git bc make gcc"
+ ssh ${1} "yum -y --nogpgcheck install gcc-c++"
+
+ ssh ${1} "wget http://ftp.heanet.ie/mirrors/gnu/libc/glibc-2.14.1.tar.gz"
+ ssh ${1} "tar xvf glibc-2.14.1.tar.gz"
+ ssh ${1} "mv glibc-2.14.1 glibc-2.14 && cd glibc-2.14 && mkdir build && cd build && ../configure --prefix=/opt/glibc-2.14 && make && make install && export LD_LIBRARY_PATH=/opt/glibc-2.14/lib:$LD_LIBRARY_PATH"
+
+ ssh ${1} "rm -rf lagscope"
+ ssh ${1} "git clone https://github.com/Microsoft/lagscope"
+ ssh ${1} "cd lagscope/src && make && make install"
+ ssh ${1} "iptables -F"
+
+ elif [[ $DISTRO =~ "Red Hat Enterprise Linux Server release 7" ]];
+ then
+ LogMsg "Detected Redhat 7.x"
+ ssh ${1} "rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm"
+ ssh ${1} "yum -y --nogpgcheck install libaio1 sysstat git bc make gcc"
+ ssh ${1} "rm -rf lagscope"
+ ssh ${1} "git clone https://github.com/Microsoft/lagscope"
+ ssh ${1} "cd lagscope/src && make && make install"
+ ssh ${1} "iptables -F"
+
+ elif [[ $DISTRO =~ "CentOS Linux release 6" ]];
+ then
+ LogMsg "Detected CentOS 6.x"
+ ssh ${1} "rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm"
+ ssh ${1} "yum -y --nogpgcheck install libaio1 sysstat git bc make gcc"
+ ssh ${1} "yum -y --nogpgcheck install gcc-c++"
+ ssh ${1} "rm -rf lagscope"
+ ssh ${1} "git clone https://github.com/Microsoft/lagscope"
+ ssh ${1} "cd lagscope/src && make && make install"
+ ssh ${1} "iptables -F"
+
+ elif [[ $DISTRO =~ "CentOS Linux release 7" ]];
+ then
+ LogMsg "Detected CentOS 7.x"
+ ssh ${1} "rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm"
+ ssh ${1} "yum -y --nogpgcheck install libaio1 sysstat git bc make gcc"
+ ssh ${1} "rm -rf lagscope"
+ ssh ${1} "git clone https://github.com/Microsoft/lagscope"
+ ssh ${1} "cd lagscope/src && make && make install"
+ ssh ${1} "iptables -F"
+
+ elif [[ $DISTRO =~ "SUSE Linux Enterprise Server 12" ]];
+ then
+ LogMsg "Detected SLES12"
+ ssh ${1} "zypper --no-gpg-checks --non-interactive --gpg-auto-import-keys remove gettext-runtime-mini*"
+ ssh ${1} "zypper --no-gpg-checks --non-interactive --gpg-auto-import-keys install sysstat git bc make gcc grub2"
+ ssh ${1} "rm -rf lagscope"
+ ssh ${1} "git clone https://github.com/Microsoft/lagscope"
+ ssh ${1} "cd lagscope/src && make && make install"
+ ssh ${1} "iptables -F"
+
+ else
+ LogMsg "Unknown Distro"
+ UpdateTestState "TestAborted"
+ UpdateSummary "Unknown Distro, test aborted"
+ return 1
+ fi
+}
+LogMsg()
+{
+ echo `date "+%b %d %Y %T"` : "${1}" # Add the time stamp to the log message
+ echo "${1}" >> ./ntttcpTest.log
+}
+
+UpdateTestState()
+{
+ echo "${1}" > ./state.txt
+}
+
+if [ -e ${CONSTANTS_FILE} ]; then
+ source ${CONSTANTS_FILE}
+else
+ errMsg="Error: missing ${CONSTANTS_FILE} file"
+ LogMsg "${errMsg}"
+ UpdateTestState $ICA_TESTABORTED
+ exit 10
+fi
+
+if [ ! ${server} ]; then
+ errMsg="Please add/provide value for server in constants.sh. server="
+ LogMsg "${errMsg}"
+ echo "${errMsg}" >> ./summary.log
+ UpdateTestState $ICA_TESTABORTED
+ exit 1
+fi
+if [ ! ${client} ]; then
+ errMsg="Please add/provide value for client in constants.sh. client="
+ LogMsg "${errMsg}"
+ echo "${errMsg}" >> ./summary.log
+ UpdateTestState $ICA_TESTABORTED
+ exit 1
+fi
+
+if [ ! ${pingIteration} ]; then
+ errMsg="Please add/provide value for pingIteration in constants.sh. pingIteration=1000000"
+ LogMsg "${errMsg}"
+ echo "${errMsg}" >> ./summary.log
+ UpdateTestState $ICA_TESTABORTED
+ exit 1
+fi
+
+#Make & build ntttcp on client and server Machine
+
+LogMsg "Configuring client ${client}..."
+InstallLAGSCOPE ${client}
+
+LogMsg "Configuring server ${server}..."
+InstallLAGSCOPE ${server}
+
+#Now, start the ntttcp client on client VM.
+
+LogMsg "Now running Lagscope test"
+LogMsg "Starting server."
+ssh root@${server} "lagscope -r -D"
+sleep 1
+LogMsg "Starting client."
+ssh root@${client} "lagscope -s${server} -i0 -n${pingIteration} -H > lagscope-n${pingIteration}-output.txt"
+LogMsg "Test finsished."
+UpdateTestState ICA_TESTCOMPLETED
+