├── .github
└── workflows
│ └── codeql-analysis.yml
├── .gitignore
├── .vs
├── ProjectSettings.json
├── PublicTestProjects
│ └── v15
│ │ └── .suo
└── VSWorkspaceState.json
├── .vscode
├── extensions.json
├── iis-e-settings.json
├── settings.json
└── tasks.json
├── BDD
├── .gitignore
├── BDDWebTestAutomation
│ ├── BDDWebTestAutomation.sln
│ ├── EncryptUtils
│ │ ├── EncryptStrings.cs
│ │ ├── EncryptUtils.csproj
│ │ └── Properties
│ │ │ └── AssemblyInfo.cs
│ ├── EncryptUtilsTests
│ │ ├── EncryptStringsTests.cs
│ │ ├── EncryptUtilsTests.csproj
│ │ ├── Properties
│ │ │ └── AssemblyInfo.cs
│ │ └── packages.config
│ ├── README.md
│ ├── SpecFlowTests
│ │ ├── App.config
│ │ ├── BDDCoffeeSite.feature
│ │ ├── BDDCoffeeSite.feature.cs
│ │ ├── BDDCoffeeSiteSteps.cs
│ │ ├── Drivers
│ │ │ └── WebDriver.cs
│ │ ├── Properties
│ │ │ ├── AssemblyInfo.cs
│ │ │ ├── Settings.Designer.cs
│ │ │ └── Settings.settings
│ │ ├── SpecFlowTests.csproj
│ │ ├── packages.config
│ │ ├── phantomjs-license.txt
│ │ └── test.ps1
│ └── test.runsettings
└── README.md
├── DynamicsFinOps
└── FinOpsConfigurationValidation
│ ├── .gitattributes
│ ├── .gitignore
│ ├── DynamicsFinOpsConfigValidation.sln
│ ├── DynamicsOdata
│ ├── DynamicsOdata.csproj
│ ├── FinOpsRSS.cs
│ ├── Properties
│ │ └── AssemblyInfo.cs
│ ├── UriExtensions.cs
│ ├── app.config
│ └── packages.config
│ ├── DynamicsOdataTests
│ ├── ChartOfAccountsConfiguration.feature
│ ├── ChartOfAccountsConfiguration.feature.cs
│ ├── ChartOfAccountsConfigurationSteps.cs
│ ├── ConfigurationBuilderTests.cs
│ ├── DynamicsOdataTests.csproj
│ ├── FinOpsRSSTests.cs
│ ├── Properties
│ │ └── AssemblyInfo.cs
│ ├── RSSUtil.cs
│ ├── app.config
│ └── packages.config
│ ├── README.md
│ ├── SecuringSettings.md
│ ├── ServicePrincipalSettings.md
│ └── images
│ ├── keyvaultsecrets.JPG
│ ├── refreshAAD.JPG
│ └── requiredpermissions.JPG
├── LICENSE
├── README.md
├── SSIS Unit Testing
├── .gitignore
├── README.md
├── SSISDevOpsPowerShell
│ ├── SSISDevOpsPowerShell.pssproj
│ ├── ssissetenvironment.ps1
│ └── ssistest.ps1
├── isp1
│ ├── Package.dtsx
│ ├── PackageTest.dtsx
│ ├── Project.params
│ ├── isp1.database
│ └── isp1.dtproj
├── ssisDBTest.sln
└── ssisDBTest
│ ├── SalesLT
│ ├── Sequences
│ │ └── SalesOrderNumber.sql
│ ├── Tables
│ │ ├── Address.sql
│ │ ├── Customer.sql
│ │ ├── CustomerAddress.sql
│ │ ├── Product.sql
│ │ ├── ProductCategory.sql
│ │ ├── ProductDescription.sql
│ │ ├── ProductModel.sql
│ │ ├── ProductModelProductDescription.sql
│ │ ├── SalesOrderDetail.sql
│ │ └── SalesOrderHeader.sql
│ └── Views
│ │ ├── vGetAllCategories.sql
│ │ ├── vProductAndDescription.sql
│ │ └── vProductModelCatalogDescription.sql
│ ├── Security
│ └── SalesLT.sql
│ ├── dbo
│ ├── Functions
│ │ ├── ufnGetAllCategories.sql
│ │ ├── ufnGetCustomerInformation.sql
│ │ └── ufnGetSalesOrderStatusText.sql
│ ├── Stored Procedures
│ │ ├── uspLogError.sql
│ │ └── uspPrintError.sql
│ ├── Tables
│ │ ├── BuildVersion.sql
│ │ └── ErrorLog.sql
│ └── User Defined Types
│ │ ├── AccountNumber.sql
│ │ ├── Flag.sql
│ │ ├── Name.sql
│ │ ├── NameStyle.sql
│ │ ├── OrderNumber.sql
│ │ └── Phone.sql
│ └── ssisDBTest.sqlproj
├── ThirdPartyNotices.txt
├── azure-pipeline-enhancements.yml
├── azure-pipelines.yml
├── jmeter
├── Azure load test parameters.jmx
├── CallAzureFunction.jmx
├── ConnectToSqlServer.jmx
├── CustomJar.jmx
├── DR Parts Unlimited JumpStart.jmx
├── Distributing Load Sample.jmx
├── FLOOD_CHALLENGE-CLEAN.jmx
├── FLOOD_s2f.jmx
├── InjectApplicationInsights.jmx
├── LICENSE
├── Lame Selenium.jmx
├── NestedThroughputControllers.jmx
├── Random Controller.jmx
├── Read from Windows Certificate Store.jmx
├── ReadMe.md
├── Recording Controller.jmx
├── Simple ControllerReports.jmx
├── View Results Tree.jmx
├── bashsample.jmx
├── bearer.groovy
├── bearertokendecode.jmx
├── chaos-mesh
│ ├── block-external-network.yaml
│ ├── chaoshappy.jpg
│ ├── jfrcosmos.jmx
│ ├── readme.md
│ ├── slow-down-network.yaml
│ ├── stress-cpu.yaml
│ └── stress-memory.yaml
├── childtest.jmx
├── coffeeperftest.jmx
├── coffeeperftest.yaml
├── correlationrecord.jmx
├── csv2redis.redis
├── custom_jtl_vars.jmx
├── customfunction.jmx
├── customvars.csv
├── customvars.xlsx
├── docker
│ ├── CreateTestRig.ps1
│ ├── Csv2Redis.ps1
│ ├── DeleteTestRig.ps1
│ ├── Influxdb-grafana-docker
│ ├── JMeter Demo Dashboard-for external.json
│ ├── JtlCsvToSqlAci.ps1
│ ├── PublishPreviousResults.ps1
│ ├── QueryLimits.ps1
│ ├── SQLReporting.md
│ ├── Set-JmeterTestRig.ps1
│ ├── StorageTechnologies.md
│ ├── TestrigProcessDiagram.jpg
│ ├── UpdateSqlReporting.ps1
│ ├── builddocker.ps1
│ ├── commenutils.psm1
│ ├── csv2redisvalidate
│ │ ├── Search.csv
│ │ ├── names.csv
│ │ └── redis.jmx
│ ├── floodio.yaml
│ ├── jmeter report.pbit
│ ├── jmeter_cluster_create.ps1
│ ├── jmeter_grafana_deploy.yaml
│ ├── jmeterbase-docker
│ ├── jmetermaster-docker
│ ├── jmeterslave-docker
│ ├── jmetertestrig
│ │ ├── .helmignore
│ │ ├── Chart.yaml
│ │ ├── charts
│ │ │ └── redis-12.8.3.tgz
│ │ ├── readme.md
│ │ ├── templates
│ │ │ ├── _helpers.tpl
│ │ │ ├── csv2redis.yaml
│ │ │ ├── jmeter_influxdb_deploy.yaml
│ │ │ ├── jmeter_master_deploy.yaml
│ │ │ └── jmeter_slaves_deploy.yaml
│ │ └── values.yaml
│ ├── jtl_junit_converter.py
│ ├── load_test_run
│ ├── log4j2.xml
│ ├── readme.md
│ ├── run_test.ps1
│ └── storage_technologies.jpg
├── donothing.jmx
├── drax1.jmx
├── draxrecord.xml
├── drparts-blazemeter.jmx
├── drparts.jmx
├── drpartsBlaze.jmx
├── drpartsparent.jmx
├── floodios2f.csv
├── floodios2f.jtl
├── floodios2f.xlsx
├── fromwhere.jmx
├── influxdb.jmx
├── jmr.cmd
├── largeusers.csv
├── linux
│ └── Std-Xrdp-Install-0.6.sh
├── login.jmx
├── manipulatedates
├── maybe.jmx
├── meter
├── new recordings
│ ├── drparts.jmx
│ ├── drparts1212.xml
│ └── user.properties
├── onceonlycontroller.jmx
├── parent.jmx
├── partsrecord.jmx
├── partsul.xml
├── percentagedist.jmx
├── perfmon.jmx
├── redis-good-example.jmx
├── redisscript.txt
├── renewbearer.jmx
├── responsetime.csv
├── search.csv
├── shread.jmx
├── smallusers.csv
├── summary.csv
├── swaggerdemo.jmx
├── swaggerdemo2.jmx
├── timestampcapture.jmx
└── user.properties
├── parameterize
└── DetectParams
│ ├── DetectParams.sln
│ ├── DetectParams
│ ├── DetectParams.csproj
│ └── Program.cs
│ └── dos2unix
│ ├── App.config
│ ├── Program.cs
│ ├── Properties
│ └── AssemblyInfo.cs
│ └── dos2unix.csproj
├── play.md
└── source
├── Csv2RedisScript
├── .dockerignore
├── BuildDocker.ps1
├── Csv2RedisScript.sln
├── Csv2RedisScript
│ ├── Csv2RedisScript.csproj
│ ├── DoWork.cs
│ ├── LoggerHelper.cs
│ ├── Program.cs
│ ├── Properties
│ │ └── PublishProfiles
│ │ │ ├── FolderProfile.pubxml
│ │ │ └── registry.hub.docker.com_shadowpic.pubxml
│ ├── Search.csv
│ ├── csv2redis.yaml
│ ├── logger.config
│ ├── names.csv
│ ├── redis.jmx
│ └── template.jmx
├── Csv2RedisTests
│ ├── Csv2RedisTests.csproj
│ ├── JMeterTestScriptTests.cs
│ ├── Search.csv
│ ├── csv-missing-filenames.jmx
│ ├── names.csv
│ ├── redis-rediscontrol.jmx
│ └── redis.jmx
├── Dockerfile
├── JMeterTestsScript
│ ├── Csv2Redis.cs
│ ├── JMeterTestsScript.csproj
│ ├── JmeterScript.cs
│ └── Properties
│ │ ├── Resources.Designer.cs
│ │ └── Resources.resx
└── README.md
├── DarrenFunctionPlayground
├── DarrenFunctionPlayground.sln
└── DarrenFunctionPlayground
│ ├── .dockerignore
│ ├── .gitignore
│ ├── .vscode
│ └── extensions.json
│ ├── DarrenFunctionPlayground.csproj
│ ├── Dockerfile
│ ├── JMeterHttpCall.cs
│ ├── host.json
│ └── jmeter_function.yaml
├── JmeterPipelineValidationTests
├── JmeterPipelineValidationTests.sln
└── JmeterPipelineValidationTests
│ ├── Config.cs
│ ├── GenerateReportTests.cs
│ ├── JMeterLogTests.cs
│ ├── JmeterPipelineValidationTests.csproj
│ ├── appsettings.json
│ └── samplefail
│ └── statistics.json
├── JtlFunctionApp
└── JtlExportFunction
│ ├── JtlExportFunction.sln
│ └── JtlFunction
│ ├── .gitignore
│ ├── ExportJtlFunction.cs
│ ├── JtlFunction.csproj
│ ├── Properties
│ ├── serviceDependencies.json
│ └── serviceDependencies.local.json
│ └── host.json
├── JtlToSql
├── .dockerignore
├── .sonarqube
│ ├── conf
│ │ ├── 0
│ │ │ ├── FilesToAnalyze.txt
│ │ │ ├── ProjectOutFolderPath.txt
│ │ │ └── SonarProjectConfig.xml
│ │ ├── 1
│ │ │ ├── FilesToAnalyze.txt
│ │ │ ├── ProjectOutFolderPath.txt
│ │ │ └── SonarProjectConfig.xml
│ │ ├── 2
│ │ │ ├── FilesToAnalyze.txt
│ │ │ ├── ProjectOutFolderPath.txt
│ │ │ └── SonarProjectConfig.xml
│ │ ├── 3
│ │ │ ├── FilesToAnalyze.txt
│ │ │ ├── ProjectOutFolderPath.txt
│ │ │ └── SonarProjectConfig.xml
│ │ ├── 4
│ │ │ ├── FilesToAnalyze.txt
│ │ │ ├── ProjectOutFolderPath.txt
│ │ │ └── SonarProjectConfig.xml
│ │ ├── 5
│ │ │ ├── FilesToAnalyze.txt
│ │ │ ├── ProjectOutFolderPath.txt
│ │ │ └── SonarProjectConfig.xml
│ │ ├── 6
│ │ │ ├── FilesToAnalyze.txt
│ │ │ ├── ProjectOutFolderPath.txt
│ │ │ └── SonarProjectConfig.xml
│ │ ├── 7
│ │ │ ├── FilesToAnalyze.txt
│ │ │ ├── ProjectOutFolderPath.txt
│ │ │ └── SonarProjectConfig.xml
│ │ ├── 8
│ │ │ ├── FilesToAnalyze.txt
│ │ │ ├── ProjectOutFolderPath.txt
│ │ │ └── SonarProjectConfig.xml
│ │ ├── 9
│ │ │ ├── FilesToAnalyze.txt
│ │ │ ├── ProjectOutFolderPath.txt
│ │ │ └── SonarProjectConfig.xml
│ │ ├── 10
│ │ │ ├── FilesToAnalyze.txt
│ │ │ ├── ProjectOutFolderPath.txt
│ │ │ └── SonarProjectConfig.xml
│ │ ├── 11
│ │ │ ├── FilesToAnalyze.txt
│ │ │ ├── ProjectOutFolderPath.txt
│ │ │ └── SonarProjectConfig.xml
│ │ ├── 12
│ │ │ ├── FilesToAnalyze.txt
│ │ │ ├── ProjectOutFolderPath.txt
│ │ │ └── SonarProjectConfig.xml
│ │ ├── 13
│ │ │ ├── FilesToAnalyze.txt
│ │ │ ├── ProjectOutFolderPath.txt
│ │ │ └── SonarProjectConfig.xml
│ │ ├── 14
│ │ │ ├── FilesToAnalyze.txt
│ │ │ ├── ProjectOutFolderPath.txt
│ │ │ └── SonarProjectConfig.xml
│ │ ├── 15
│ │ │ ├── FilesToAnalyze.txt
│ │ │ ├── ProjectOutFolderPath.txt
│ │ │ └── SonarProjectConfig.xml
│ │ ├── 16
│ │ │ ├── FilesToAnalyze.txt
│ │ │ ├── ProjectOutFolderPath.txt
│ │ │ └── SonarProjectConfig.xml
│ │ ├── 17
│ │ │ ├── FilesToAnalyze.txt
│ │ │ ├── ProjectOutFolderPath.txt
│ │ │ └── SonarProjectConfig.xml
│ │ ├── 18
│ │ │ ├── FilesToAnalyze.txt
│ │ │ ├── ProjectOutFolderPath.txt
│ │ │ └── SonarProjectConfig.xml
│ │ ├── 19
│ │ │ ├── FilesToAnalyze.txt
│ │ │ ├── ProjectOutFolderPath.txt
│ │ │ └── SonarProjectConfig.xml
│ │ ├── 20
│ │ │ ├── FilesToAnalyze.txt
│ │ │ ├── ProjectOutFolderPath.txt
│ │ │ └── SonarProjectConfig.xml
│ │ ├── Sonar-cs-none.ruleset
│ │ ├── Sonar-cs.ruleset
│ │ ├── Sonar-vbnet-none.ruleset
│ │ ├── Sonar-vbnet.ruleset
│ │ ├── SonarQubeAnalysisConfig.xml
│ │ ├── cs
│ │ │ └── SonarLint.xml
│ │ └── vbnet
│ │ │ └── SonarLint.xml
│ └── out
│ │ ├── 0
│ │ ├── ProjectInfo.xml
│ │ └── output-cs
│ │ │ ├── file-metadata.pb
│ │ │ ├── metrics.pb
│ │ │ ├── symrefs.pb
│ │ │ ├── token-cpd.pb
│ │ │ └── token-type.pb
│ │ ├── 1
│ │ ├── ProjectInfo.xml
│ │ └── output-cs
│ │ │ ├── file-metadata.pb
│ │ │ ├── metrics.pb
│ │ │ ├── symrefs.pb
│ │ │ ├── token-cpd.pb
│ │ │ └── token-type.pb
│ │ ├── 2
│ │ ├── ProjectInfo.xml
│ │ └── output-cs
│ │ │ ├── file-metadata.pb
│ │ │ ├── metrics.pb
│ │ │ ├── symrefs.pb
│ │ │ ├── token-cpd.pb
│ │ │ └── token-type.pb
│ │ ├── 3
│ │ ├── ProjectInfo.xml
│ │ └── output-cs
│ │ │ ├── file-metadata.pb
│ │ │ ├── metrics.pb
│ │ │ ├── symrefs.pb
│ │ │ ├── token-cpd.pb
│ │ │ └── token-type.pb
│ │ ├── 4
│ │ ├── ProjectInfo.xml
│ │ └── output-cs
│ │ │ ├── file-metadata.pb
│ │ │ ├── metrics.pb
│ │ │ ├── symrefs.pb
│ │ │ ├── token-cpd.pb
│ │ │ └── token-type.pb
│ │ ├── 5
│ │ ├── ProjectInfo.xml
│ │ └── output-cs
│ │ │ ├── file-metadata.pb
│ │ │ ├── metrics.pb
│ │ │ ├── symrefs.pb
│ │ │ ├── token-cpd.pb
│ │ │ └── token-type.pb
│ │ ├── 6
│ │ ├── ProjectInfo.xml
│ │ └── output-cs
│ │ │ ├── file-metadata.pb
│ │ │ ├── metrics.pb
│ │ │ ├── symrefs.pb
│ │ │ ├── token-cpd.pb
│ │ │ └── token-type.pb
│ │ ├── 7
│ │ ├── ProjectInfo.xml
│ │ └── output-cs
│ │ │ ├── file-metadata.pb
│ │ │ ├── metrics.pb
│ │ │ ├── symrefs.pb
│ │ │ ├── token-cpd.pb
│ │ │ └── token-type.pb
│ │ ├── 8
│ │ ├── ProjectInfo.xml
│ │ └── output-cs
│ │ │ ├── file-metadata.pb
│ │ │ ├── metrics.pb
│ │ │ ├── symrefs.pb
│ │ │ ├── token-cpd.pb
│ │ │ └── token-type.pb
│ │ ├── 9
│ │ ├── ProjectInfo.xml
│ │ └── output-cs
│ │ │ ├── file-metadata.pb
│ │ │ ├── metrics.pb
│ │ │ ├── symrefs.pb
│ │ │ ├── token-cpd.pb
│ │ │ └── token-type.pb
│ │ ├── 10
│ │ ├── ProjectInfo.xml
│ │ └── output-cs
│ │ │ ├── file-metadata.pb
│ │ │ ├── metrics.pb
│ │ │ ├── symrefs.pb
│ │ │ ├── token-cpd.pb
│ │ │ └── token-type.pb
│ │ ├── 11
│ │ ├── ProjectInfo.xml
│ │ └── output-cs
│ │ │ ├── file-metadata.pb
│ │ │ ├── metrics.pb
│ │ │ ├── symrefs.pb
│ │ │ ├── token-cpd.pb
│ │ │ └── token-type.pb
│ │ ├── 12
│ │ ├── ProjectInfo.xml
│ │ └── output-cs
│ │ │ ├── file-metadata.pb
│ │ │ ├── metrics.pb
│ │ │ ├── symrefs.pb
│ │ │ ├── token-cpd.pb
│ │ │ └── token-type.pb
│ │ ├── 13
│ │ ├── ProjectInfo.xml
│ │ └── output-cs
│ │ │ ├── file-metadata.pb
│ │ │ ├── metrics.pb
│ │ │ ├── symrefs.pb
│ │ │ ├── token-cpd.pb
│ │ │ └── token-type.pb
│ │ ├── 14
│ │ ├── ProjectInfo.xml
│ │ └── output-cs
│ │ │ ├── file-metadata.pb
│ │ │ ├── metrics.pb
│ │ │ ├── symrefs.pb
│ │ │ ├── token-cpd.pb
│ │ │ └── token-type.pb
│ │ ├── 15
│ │ ├── ProjectInfo.xml
│ │ └── output-cs
│ │ │ ├── file-metadata.pb
│ │ │ ├── metrics.pb
│ │ │ ├── symrefs.pb
│ │ │ ├── token-cpd.pb
│ │ │ └── token-type.pb
│ │ ├── 16
│ │ ├── ProjectInfo.xml
│ │ └── output-cs
│ │ │ ├── file-metadata.pb
│ │ │ ├── metrics.pb
│ │ │ ├── symrefs.pb
│ │ │ ├── token-cpd.pb
│ │ │ └── token-type.pb
│ │ ├── 17
│ │ ├── ProjectInfo.xml
│ │ └── output-cs
│ │ │ ├── file-metadata.pb
│ │ │ ├── metrics.pb
│ │ │ ├── symrefs.pb
│ │ │ ├── token-cpd.pb
│ │ │ └── token-type.pb
│ │ ├── 18
│ │ ├── ProjectInfo.xml
│ │ └── output-cs
│ │ │ ├── file-metadata.pb
│ │ │ ├── metrics.pb
│ │ │ ├── symrefs.pb
│ │ │ ├── token-cpd.pb
│ │ │ └── token-type.pb
│ │ ├── 19
│ │ ├── ProjectInfo.xml
│ │ └── output-cs
│ │ │ ├── file-metadata.pb
│ │ │ ├── metrics.pb
│ │ │ ├── symrefs.pb
│ │ │ ├── token-cpd.pb
│ │ │ └── token-type.pb
│ │ ├── 20
│ │ ├── ProjectInfo.xml
│ │ └── output-cs
│ │ │ ├── file-metadata.pb
│ │ │ ├── metrics.pb
│ │ │ ├── symrefs.pb
│ │ │ ├── token-cpd.pb
│ │ │ └── token-type.pb
│ │ ├── .sonar
│ │ ├── .sonar_lock
│ │ └── report-task.txt
│ │ └── sonar-project.properties
├── Dockerfile
├── FileJtlToSql
│ ├── ConsoleHostedService.cs
│ ├── Dockerfile
│ ├── Dockerfile.develop
│ ├── FileJtlToSql.csproj
│ └── Program.cs
├── JmeterReportingDb
│ ├── JmeterReportingDb.refactorlog
│ ├── JmeterReportingDb.sqlproj
│ └── dbo
│ │ ├── Functions
│ │ └── fn_ConvertToDateTime.sql
│ │ ├── Stored Procedures
│ │ ├── spAddReport.sql
│ │ ├── spDeleteReport.sql
│ │ └── spReportExists.sql
│ │ └── Tables
│ │ ├── TestRuns.sql
│ │ └── jmeterrawresults.sql
├── JmeterSqlDatabase
│ ├── JmeterSqlDatabase.sqlproj
│ └── dbo
│ │ ├── Functions
│ │ └── fn_ConvertToDateTime.sql
│ │ ├── Stored Procedures
│ │ ├── spAddReport.sql
│ │ ├── spDeleteReport.sql
│ │ ├── spPostProcess.sql
│ │ ├── spReportExists.sql
│ │ └── spSetRawSTartTime.sql
│ │ ├── Tables
│ │ ├── ExcludedThreadNames.sql
│ │ ├── PerformanceTargets.sql
│ │ ├── SUTMetric.sql
│ │ ├── TestRuns.sql
│ │ └── jmeterrawresults.sql
│ │ └── Views
│ │ ├── vwCompareTestRuns.sql
│ │ └── vwRawResults.sql
├── JtlToSql.sln
├── JtlToSql.yml
├── JtlToSql
│ ├── CsvJtl.cs
│ ├── JtlCsvToSql.cs
│ ├── JtlToSql.csproj
│ └── ProcessJtlFiles.cs
├── JtlToSqlDirectPublish
│ ├── CommandLineOptions.cs
│ ├── JtlToSqlDirectPublish.csproj
│ ├── Program.cs
│ ├── Properties
│ │ └── PublishProfiles
│ │ │ └── FolderProfile.pubxml
│ └── Publish-Report.ps1
├── JtlToSqlSecrets.yml
├── JtlToSqlTests
│ ├── CsvJtlTests.cs
│ ├── JtlCsvToSqlTests.cs
│ ├── JtlToSqlTests.csproj
│ ├── ProcessJtlFilesTests.cs
│ ├── Settings.cs
│ └── results.jtl
├── SendJtlFileToSQL
│ ├── Program.cs
│ └── SendJtlFileToSQL.csproj
├── default.runsettings
├── publishcontainer.ps1
└── readme.md
└── SpecFlowComputerVision
├── SpecFlowComputerVision.sln
└── SpecFlowComputerVision
├── Framework
├── ElementExtensions.cs
├── FoundItem.cs
└── ImageObjectDetection.cs
├── POM
├── PaintPomBase.cs
├── SystemDiagnosticsUtils.cs
└── WinAppDriverInstance.cs
├── Paint.feature
├── Paint.feature.cs
├── PaintSteps.cs
└── SpecFlowComputerVision.csproj
/.vs/ProjectSettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "CurrentProjectSetting": null
3 | }
--------------------------------------------------------------------------------
/.vs/PublicTestProjects/v15/.suo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShadowPic/PublicTestProjects/0545a86b50cb15380f2c2ffd73eca47f99b1802e/.vs/PublicTestProjects/v15/.suo
--------------------------------------------------------------------------------
/.vs/VSWorkspaceState.json:
--------------------------------------------------------------------------------
1 | {
2 | "ExpandedNodes": [
3 | "",
4 | "\\source",
5 | "\\source\\JtlToSql",
6 | "\\source\\JtlToSql\\FileJtlToSql",
7 | "\\source\\JtlToSql\\JtlToSql"
8 | ],
9 | "SelectedNode": "\\source\\JtlToSql\\FileJtlToSql\\ConsoleHostedService.cs",
10 | "PreviewInSolutionExplorer": false
11 | }
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": [
3 | "ms-azuretools.vscode-azurefunctions",
4 | "ms-dotnettools.csharp"
5 | ]
6 | }
7 |
--------------------------------------------------------------------------------
/.vscode/iis-e-settings.json:
--------------------------------------------------------------------------------
1 | {"Port":11117,"RunningFolder":"c:\\src\\PublicTestProjects\\source\\JmeterToSqlFunction","Architecture":0,"IISPath":"C:\\Program Files\\IIS Express\\iisexpress.exe","Browser":0,"Protocol":0}
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "powershell.codeFormatting.addWhitespaceAroundPipe": true,
3 | "azureFunctions.deploySubpath": "source\\JmeterToSqlFunction/bin/Release/netcoreapp3.1/publish",
4 | "azureFunctions.projectLanguage": "C#",
5 | "azureFunctions.projectRuntime": "~3",
6 | "debug.internalConsoleOptions": "neverOpen",
7 | "azureFunctions.preDeployTask": "publish"
8 | }
--------------------------------------------------------------------------------
/BDD/BDDWebTestAutomation/EncryptUtilsTests/EncryptStringsTests.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Microsoft.VisualStudio.TestTools.UnitTesting;
3 | using EncryptUtils;
4 | namespace EncryptUtilsTests
5 | {
6 | [TestClass]
7 | public class EncryptStringsTests
8 | {
9 | [TestMethod]
10 | public void EncryptStringTest()
11 | {
12 | //arrange
13 | string OriginalString = "This is not encrypted";
14 | string EncryptionKey = "really lame encryption key";
15 | //act
16 | var EncryptedString = EncryptUtils.EncryptStrings.Encrypt(OriginalString, true, EncryptionKey);
17 | var DecryptedString = EncryptUtils.EncryptStrings.Decrypt(EncryptedString, true, EncryptionKey);
18 | //assert
19 | Assert.AreEqual(OriginalString, DecryptedString);
20 | }
21 |
22 | [TestMethod]
23 | public void DecryptStringTest()
24 | { }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/BDD/BDDWebTestAutomation/EncryptUtilsTests/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | [assembly: AssemblyTitle("EncryptUtilsTests")]
6 | [assembly: AssemblyDescription("")]
7 | [assembly: AssemblyConfiguration("")]
8 | [assembly: AssemblyCompany("")]
9 | [assembly: AssemblyProduct("EncryptUtilsTests")]
10 | [assembly: AssemblyCopyright("Copyright © 2018")]
11 | [assembly: AssemblyTrademark("")]
12 | [assembly: AssemblyCulture("")]
13 |
14 | [assembly: ComVisible(false)]
15 |
16 | [assembly: Guid("7a4db617-5bd2-4f01-93c5-f729b80de37b")]
17 |
18 | // [assembly: AssemblyVersion("1.0.*")]
19 | [assembly: AssemblyVersion("1.0.0.0")]
20 | [assembly: AssemblyFileVersion("1.0.0.0")]
21 |
--------------------------------------------------------------------------------
/BDD/BDDWebTestAutomation/EncryptUtilsTests/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/BDD/BDDWebTestAutomation/SpecFlowTests/BDDCoffeeSite.feature:
--------------------------------------------------------------------------------
1 | Feature: BDDCoffeeSite
2 |
3 |
4 | @SetBasePage
5 | Scenario: Set the base url
6 | Given I have a deployed web site
7 | And I want to override the default site url
8 | When I set the Site Url to https://drcoffee.azurewebsites.net
9 | Then a browser opens to the default page
10 |
11 | @HomePage
12 | Scenario: Verify Cappuccino is available
13 | Given I like Capuccino
14 | When I set the Site Url to https://drcoffee.azurewebsites.net
15 | And I go to the relative url of /
16 | Then the coffee type Cappuccino is found
17 |
18 | @AboutPage
19 | Scenario: Show how anyone can write new tests
20 | Given I want to show how to write tests
21 | When I set the Site Url to https://drcoffee.azurewebsites.net
22 | And I go to the relative url of /about.jsp
23 | Then I can verify the text 'Its a coffee shop' is on the page
--------------------------------------------------------------------------------
/BDD/BDDWebTestAutomation/SpecFlowTests/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | [assembly: AssemblyTitle("SpecFlowTests")]
6 | [assembly: AssemblyDescription("")]
7 | [assembly: AssemblyConfiguration("")]
8 | [assembly: AssemblyCompany("")]
9 | [assembly: AssemblyProduct("SpecFlowTests")]
10 | [assembly: AssemblyCopyright("Copyright © 2018")]
11 | [assembly: AssemblyTrademark("")]
12 | [assembly: AssemblyCulture("")]
13 |
14 | [assembly: ComVisible(false)]
15 |
16 | [assembly: Guid("4af56848-ff4e-4666-8ed2-9ab044c939d4")]
17 |
18 | // [assembly: AssemblyVersion("1.0.*")]
19 | [assembly: AssemblyVersion("1.0.0.0")]
20 | [assembly: AssemblyFileVersion("1.0.0.0")]
21 |
--------------------------------------------------------------------------------
/BDD/BDDWebTestAutomation/SpecFlowTests/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | IE
7 |
8 |
9 | http://localhost:5179
10 |
11 |
12 |
--------------------------------------------------------------------------------
/BDD/BDDWebTestAutomation/SpecFlowTests/test.ps1:
--------------------------------------------------------------------------------
1 | Write-Output "hello world"
--------------------------------------------------------------------------------
/BDD/README.md:
--------------------------------------------------------------------------------
1 | # Introduction
2 | TODO: Give a short introduction of your project. Let this section explain the objectives or the motivation behind this project.
3 |
4 | # Getting Started
5 | TODO: Guide users through getting your code up and running on their own system. In this section you can talk about:
6 | 1. Installation process
7 | 2. Software dependencies
8 | 3. Latest releases
9 | 4. API references
10 |
11 | # Build and Test
12 | TODO: Describe and show how to build your code and run the tests.
13 |
14 | # Contribute
15 | TODO: Explain how other users and developers can contribute to make your code better.
16 |
17 | If you want to learn more about creating good readme files then refer the following [guidelines](https://www.visualstudio.com/en-us/docs/git/create-a-readme). You can also seek inspiration from the below readme files:
18 | - [ASP.NET Core](https://github.com/aspnet/Home)
19 | - [Visual Studio Code](https://github.com/Microsoft/vscode)
20 | - [Chakra Core](https://github.com/Microsoft/ChakraCore)
--------------------------------------------------------------------------------
/DynamicsFinOps/FinOpsConfigurationValidation/DynamicsOdata/UriExtensions.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | namespace DynamicsOdata
8 | {
9 | public static class UriExtensions
10 | {
11 | public static Uri Combine(this Uri uriCurrent, params string[] uriParts)
12 | {
13 | string uri = uriCurrent.ToString();
14 | if (uriParts != null && uriParts.Count() > 0)
15 | {
16 | char[] trims = new char[] { '\\', '/' };
17 | uri = (uri ?? string.Empty).TrimEnd(trims);
18 | for (int i = 0; i < uriParts.Count(); i++)
19 | {
20 | uri = string.Format("{0}/{1}", uri.TrimEnd(trims), (uriParts[i] ?? string.Empty).TrimStart(trims));
21 | }
22 | }
23 | return new Uri( uri);
24 |
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/DynamicsFinOps/FinOpsConfigurationValidation/DynamicsOdata/app.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/DynamicsFinOps/FinOpsConfigurationValidation/DynamicsOdata/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/DynamicsFinOps/FinOpsConfigurationValidation/DynamicsOdataTests/ConfigurationBuilderTests.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Microsoft.VisualStudio.TestTools.UnitTesting;
3 |
4 | namespace DynamicsOdataTests
5 | {
6 | [TestClass]
7 | public class ConfigurationBuilderTests
8 | {
9 | [TestMethod]
10 | public void VerifySetting()
11 | {
12 |
13 | //arrange
14 | string expectedValue = "from configbuilder";
15 | string actualValue = "not from configbuilder";
16 | //act
17 | #pragma warning disable CS0618 // Type or member is obsolete
18 | actualValue = System.Configuration.ConfigurationSettings.AppSettings["TestConfig"];
19 | #pragma warning restore CS0618 // Type or member is obsolete
20 | //assert
21 | Assert.AreEqual(actualValue, expectedValue);
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/DynamicsFinOps/FinOpsConfigurationValidation/DynamicsOdataTests/RSSUtil.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 | using DynamicsOdata;
7 | using System.Configuration;
8 |
9 | namespace DynamicsOdataTests
10 | {//apparently this is missing.
11 | public class RSSUtil
12 | {
13 | public static FinOpsRSS CreateRssFromConfig()
14 | {
15 | return new FinOpsRSS()
16 | {
17 | #pragma warning disable CS0618 // Type or member is obsolete
18 |
19 | ActiveDirectoryTenant = ConfigurationSettings.AppSettings["ActiveDirectoryTenant"].ToString(),
20 | ActiveDirectoryResource = ConfigurationSettings.AppSettings["ActiveDirectoryResource"].ToString(),
21 | ActiveDirectoryClientAppId = ConfigurationSettings.AppSettings["ActiveDirectoryClientAppId"].ToString(),
22 | AzureSecret = ConfigurationSettings.AppSettings["AzureSecret"].ToString()
23 | #pragma warning disable CS0618 // Type or member is obsolete
24 |
25 | };
26 | }
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/DynamicsFinOps/FinOpsConfigurationValidation/DynamicsOdataTests/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/DynamicsFinOps/FinOpsConfigurationValidation/images/keyvaultsecrets.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShadowPic/PublicTestProjects/0545a86b50cb15380f2c2ffd73eca47f99b1802e/DynamicsFinOps/FinOpsConfigurationValidation/images/keyvaultsecrets.JPG
--------------------------------------------------------------------------------
/DynamicsFinOps/FinOpsConfigurationValidation/images/refreshAAD.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShadowPic/PublicTestProjects/0545a86b50cb15380f2c2ffd73eca47f99b1802e/DynamicsFinOps/FinOpsConfigurationValidation/images/refreshAAD.JPG
--------------------------------------------------------------------------------
/DynamicsFinOps/FinOpsConfigurationValidation/images/requiredpermissions.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShadowPic/PublicTestProjects/0545a86b50cb15380f2c2ffd73eca47f99b1802e/DynamicsFinOps/FinOpsConfigurationValidation/images/requiredpermissions.JPG
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2020 Darren Rich
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/SSIS Unit Testing/README.md:
--------------------------------------------------------------------------------
1 | # Introduction
2 | TODO: Trying to figure out how best to do SSIS Package unit testing.
3 |
4 | # Getting Started
5 | There are 3 projects in the solution.
6 |
7 | ## isp1
8 | An example SQL 2017 database which is consumed by the SSIS Package. Build and deploy this to a local or an Azure db instance.
9 |
10 | ## ssisDBTest
11 | SSIS DB tool project which contains 2 SSIS packag definitions. One package will read allow the rows of a table and insert a record count into another table. The other SSIS package calls the first one and contains the text 'test' to indicate it's a unit test.
12 |
13 | If the second SSIS package runs without errors then the unit test is said to have 'passed'.
14 |
15 | ## SSISDevOpsPowerShell
16 | These are PowerShell Scripts which have been partially validated which can deploy SSIS Packages to an Azure Data Factory for processing.
17 |
18 | # Contribute
19 | All contributions are welcome.
20 |
21 | Darren Rich
--------------------------------------------------------------------------------
/SSIS Unit Testing/isp1/Project.params:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/SSIS Unit Testing/ssisDBTest/SalesLT/Sequences/SalesOrderNumber.sql:
--------------------------------------------------------------------------------
1 | CREATE SEQUENCE [SalesLT].[SalesOrderNumber]
2 | AS INT
3 | START WITH 1
4 | INCREMENT BY 1;
5 |
6 |
--------------------------------------------------------------------------------
/SSIS Unit Testing/ssisDBTest/SalesLT/Tables/Address.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE [SalesLT].[Address] (
2 | [AddressID] INT IDENTITY (1, 1) NOT NULL,
3 | [AddressLine1] NVARCHAR (60) NOT NULL,
4 | [AddressLine2] NVARCHAR (60) NULL,
5 | [City] NVARCHAR (30) NOT NULL,
6 | [StateProvince] [dbo].[Name] NOT NULL,
7 | [CountryRegion] [dbo].[Name] NOT NULL,
8 | [PostalCode] NVARCHAR (15) NOT NULL,
9 | [rowguid] UNIQUEIDENTIFIER CONSTRAINT [DF_Address_rowguid] DEFAULT (newid()) NOT NULL,
10 | [ModifiedDate] DATETIME CONSTRAINT [DF_Address_ModifiedDate] DEFAULT (getdate()) NOT NULL,
11 | CONSTRAINT [PK_Address_AddressID] PRIMARY KEY CLUSTERED ([AddressID] ASC),
12 | CONSTRAINT [AK_Address_rowguid] UNIQUE NONCLUSTERED ([rowguid] ASC)
13 | );
14 |
15 |
16 | GO
17 | CREATE NONCLUSTERED INDEX [IX_Address_AddressLine1_AddressLine2_City_StateProvince_PostalCode_CountryRegion]
18 | ON [SalesLT].[Address]([AddressLine1] ASC, [AddressLine2] ASC, [City] ASC, [StateProvince] ASC, [PostalCode] ASC, [CountryRegion] ASC);
19 |
20 |
21 | GO
22 | CREATE NONCLUSTERED INDEX [IX_Address_StateProvince]
23 | ON [SalesLT].[Address]([StateProvince] ASC);
24 |
25 |
--------------------------------------------------------------------------------
/SSIS Unit Testing/ssisDBTest/SalesLT/Tables/Customer.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE [SalesLT].[Customer] (
2 | [CustomerID] INT IDENTITY (1, 1) NOT NULL,
3 | [NameStyle] [dbo].[NameStyle] CONSTRAINT [DF_Customer_NameStyle] DEFAULT ((0)) NOT NULL,
4 | [Title] NVARCHAR (8) NULL,
5 | [FirstName] [dbo].[Name] NOT NULL,
6 | [MiddleName] [dbo].[Name] NULL,
7 | [LastName] [dbo].[Name] NOT NULL,
8 | [Suffix] NVARCHAR (10) NULL,
9 | [CompanyName] NVARCHAR (128) NULL,
10 | [SalesPerson] NVARCHAR (256) NULL,
11 | [EmailAddress] NVARCHAR (50) NULL,
12 | [Phone] [dbo].[Phone] NULL,
13 | [PasswordHash] VARCHAR (128) NOT NULL,
14 | [PasswordSalt] VARCHAR (10) NOT NULL,
15 | [rowguid] UNIQUEIDENTIFIER CONSTRAINT [DF_Customer_rowguid] DEFAULT (newid()) NOT NULL,
16 | [ModifiedDate] DATETIME CONSTRAINT [DF_Customer_ModifiedDate] DEFAULT (getdate()) NOT NULL,
17 | CONSTRAINT [PK_Customer_CustomerID] PRIMARY KEY CLUSTERED ([CustomerID] ASC),
18 | CONSTRAINT [AK_Customer_rowguid] UNIQUE NONCLUSTERED ([rowguid] ASC)
19 | );
20 |
21 |
22 | GO
23 | CREATE NONCLUSTERED INDEX [IX_Customer_EmailAddress]
24 | ON [SalesLT].[Customer]([EmailAddress] ASC);
25 |
26 |
--------------------------------------------------------------------------------
/SSIS Unit Testing/ssisDBTest/SalesLT/Tables/CustomerAddress.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE [SalesLT].[CustomerAddress] (
2 | [CustomerID] INT NOT NULL,
3 | [AddressID] INT NOT NULL,
4 | [AddressType] [dbo].[Name] NOT NULL,
5 | [rowguid] UNIQUEIDENTIFIER CONSTRAINT [DF_CustomerAddress_rowguid] DEFAULT (newid()) NOT NULL,
6 | [ModifiedDate] DATETIME CONSTRAINT [DF_CustomerAddress_ModifiedDate] DEFAULT (getdate()) NOT NULL,
7 | CONSTRAINT [PK_CustomerAddress_CustomerID_AddressID] PRIMARY KEY CLUSTERED ([CustomerID] ASC, [AddressID] ASC),
8 | CONSTRAINT [FK_CustomerAddress_Address_AddressID] FOREIGN KEY ([AddressID]) REFERENCES [SalesLT].[Address] ([AddressID]),
9 | CONSTRAINT [FK_CustomerAddress_Customer_CustomerID] FOREIGN KEY ([CustomerID]) REFERENCES [SalesLT].[Customer] ([CustomerID]),
10 | CONSTRAINT [AK_CustomerAddress_rowguid] UNIQUE NONCLUSTERED ([rowguid] ASC)
11 | );
12 |
13 |
--------------------------------------------------------------------------------
/SSIS Unit Testing/ssisDBTest/SalesLT/Tables/ProductCategory.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE [SalesLT].[ProductCategory] (
2 | [ProductCategoryID] INT IDENTITY (1, 1) NOT NULL,
3 | [ParentProductCategoryID] INT NULL,
4 | [Name] [dbo].[Name] NOT NULL,
5 | [rowguid] UNIQUEIDENTIFIER CONSTRAINT [DF_ProductCategory_rowguid] DEFAULT (newid()) NOT NULL,
6 | [ModifiedDate] DATETIME CONSTRAINT [DF_ProductCategory_ModifiedDate] DEFAULT (getdate()) NOT NULL,
7 | CONSTRAINT [PK_ProductCategory_ProductCategoryID] PRIMARY KEY CLUSTERED ([ProductCategoryID] ASC),
8 | CONSTRAINT [FK_ProductCategory_ProductCategory_ParentProductCategoryID_ProductCategoryID] FOREIGN KEY ([ParentProductCategoryID]) REFERENCES [SalesLT].[ProductCategory] ([ProductCategoryID]),
9 | CONSTRAINT [AK_ProductCategory_Name] UNIQUE NONCLUSTERED ([Name] ASC),
10 | CONSTRAINT [AK_ProductCategory_rowguid] UNIQUE NONCLUSTERED ([rowguid] ASC)
11 | );
12 |
13 |
--------------------------------------------------------------------------------
/SSIS Unit Testing/ssisDBTest/SalesLT/Tables/ProductDescription.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE [SalesLT].[ProductDescription] (
2 | [ProductDescriptionID] INT IDENTITY (1, 1) NOT NULL,
3 | [Description] NVARCHAR (400) NOT NULL,
4 | [rowguid] UNIQUEIDENTIFIER CONSTRAINT [DF_ProductDescription_rowguid] DEFAULT (newid()) NOT NULL,
5 | [ModifiedDate] DATETIME CONSTRAINT [DF_ProductDescription_ModifiedDate] DEFAULT (getdate()) NOT NULL,
6 | CONSTRAINT [PK_ProductDescription_ProductDescriptionID] PRIMARY KEY CLUSTERED ([ProductDescriptionID] ASC),
7 | CONSTRAINT [AK_ProductDescription_rowguid] UNIQUE NONCLUSTERED ([rowguid] ASC)
8 | );
9 |
10 |
--------------------------------------------------------------------------------
/SSIS Unit Testing/ssisDBTest/SalesLT/Tables/ProductModel.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE [SalesLT].[ProductModel] (
2 | [ProductModelID] INT IDENTITY (1, 1) NOT NULL,
3 | [Name] [dbo].[Name] NOT NULL,
4 | [CatalogDescription] XML NULL,
5 | [rowguid] UNIQUEIDENTIFIER CONSTRAINT [DF_ProductModel_rowguid] DEFAULT (newid()) NOT NULL,
6 | [ModifiedDate] DATETIME CONSTRAINT [DF_ProductModel_ModifiedDate] DEFAULT (getdate()) NOT NULL,
7 | CONSTRAINT [PK_ProductModel_ProductModelID] PRIMARY KEY CLUSTERED ([ProductModelID] ASC),
8 | CONSTRAINT [AK_ProductModel_Name] UNIQUE NONCLUSTERED ([Name] ASC),
9 | CONSTRAINT [AK_ProductModel_rowguid] UNIQUE NONCLUSTERED ([rowguid] ASC)
10 | );
11 |
12 |
--------------------------------------------------------------------------------
/SSIS Unit Testing/ssisDBTest/SalesLT/Tables/ProductModelProductDescription.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE [SalesLT].[ProductModelProductDescription] (
2 | [ProductModelID] INT NOT NULL,
3 | [ProductDescriptionID] INT NOT NULL,
4 | [Culture] NCHAR (6) NOT NULL,
5 | [rowguid] UNIQUEIDENTIFIER CONSTRAINT [DF_ProductModelProductDescription_rowguid] DEFAULT (newid()) NOT NULL,
6 | [ModifiedDate] DATETIME CONSTRAINT [DF_ProductModelProductDescription_ModifiedDate] DEFAULT (getdate()) NOT NULL,
7 | CONSTRAINT [PK_ProductModelProductDescription_ProductModelID_ProductDescriptionID_Culture] PRIMARY KEY CLUSTERED ([ProductModelID] ASC, [ProductDescriptionID] ASC, [Culture] ASC),
8 | CONSTRAINT [FK_ProductModelProductDescription_ProductDescription_ProductDescriptionID] FOREIGN KEY ([ProductDescriptionID]) REFERENCES [SalesLT].[ProductDescription] ([ProductDescriptionID]),
9 | CONSTRAINT [FK_ProductModelProductDescription_ProductModel_ProductModelID] FOREIGN KEY ([ProductModelID]) REFERENCES [SalesLT].[ProductModel] ([ProductModelID]),
10 | CONSTRAINT [AK_ProductModelProductDescription_rowguid] UNIQUE NONCLUSTERED ([rowguid] ASC)
11 | );
12 |
13 |
--------------------------------------------------------------------------------
/SSIS Unit Testing/ssisDBTest/SalesLT/Views/vGetAllCategories.sql:
--------------------------------------------------------------------------------
1 | CREATE VIEW [SalesLT].[vGetAllCategories]
2 | WITH SCHEMABINDING
3 | AS
4 | -- Returns the CustomerID, first name, and last name for the specified customer.
5 | WITH CategoryCTE([ParentProductCategoryID], [ProductCategoryID], [Name]) AS
6 | (
7 | SELECT [ParentProductCategoryID], [ProductCategoryID], [Name]
8 | FROM SalesLT.ProductCategory
9 | WHERE ParentProductCategoryID IS NULL
10 |
11 | UNION ALL
12 |
13 | SELECT C.[ParentProductCategoryID], C.[ProductCategoryID], C.[Name]
14 | FROM SalesLT.ProductCategory AS C
15 | INNER JOIN CategoryCTE AS BC ON BC.ProductCategoryID = C.ParentProductCategoryID
16 | )
17 |
18 | SELECT PC.[Name] AS [ParentProductCategoryName], CCTE.[Name] as [ProductCategoryName], CCTE.[ProductCategoryID]
19 | FROM CategoryCTE AS CCTE
20 | JOIN SalesLT.ProductCategory AS PC
21 | ON PC.[ProductCategoryID] = CCTE.[ParentProductCategoryID]
22 |
--------------------------------------------------------------------------------
/SSIS Unit Testing/ssisDBTest/SalesLT/Views/vProductAndDescription.sql:
--------------------------------------------------------------------------------
1 | CREATE VIEW [SalesLT].[vProductAndDescription]
2 | WITH SCHEMABINDING
3 | AS
4 | -- View (indexed or standard) to display products and product descriptions by language.
5 | SELECT
6 | p.[ProductID]
7 | ,p.[Name]
8 | ,pm.[Name] AS [ProductModel]
9 | ,pmx.[Culture]
10 | ,pd.[Description]
11 | FROM [SalesLT].[Product] p
12 | INNER JOIN [SalesLT].[ProductModel] pm
13 | ON p.[ProductModelID] = pm.[ProductModelID]
14 | INNER JOIN [SalesLT].[ProductModelProductDescription] pmx
15 | ON pm.[ProductModelID] = pmx.[ProductModelID]
16 | INNER JOIN [SalesLT].[ProductDescription] pd
17 | ON pmx.[ProductDescriptionID] = pd.[ProductDescriptionID];
18 |
19 | GO
20 | CREATE UNIQUE CLUSTERED INDEX [IX_vProductAndDescription]
21 | ON [SalesLT].[vProductAndDescription]([Culture] ASC, [ProductID] ASC);
22 |
23 |
--------------------------------------------------------------------------------
/SSIS Unit Testing/ssisDBTest/Security/SalesLT.sql:
--------------------------------------------------------------------------------
1 | CREATE SCHEMA [SalesLT]
2 | AUTHORIZATION [dbo];
3 |
4 |
--------------------------------------------------------------------------------
/SSIS Unit Testing/ssisDBTest/dbo/Functions/ufnGetAllCategories.sql:
--------------------------------------------------------------------------------
1 | CREATE FUNCTION [dbo].[ufnGetAllCategories]()
2 | RETURNS @retCategoryInformation TABLE
3 | (
4 | -- Columns returned by the function
5 | [ParentProductCategoryName] nvarchar(50) NULL,
6 | [ProductCategoryName] nvarchar(50) NOT NULL,
7 | [ProductCategoryID] int NOT NULL
8 | )
9 | AS
10 | -- Returns the CustomerID, first name, and last name for the specified customer.
11 | BEGIN
12 | WITH CategoryCTE([ParentProductCategoryID], [ProductCategoryID], [Name]) AS
13 | (
14 | SELECT [ParentProductCategoryID], [ProductCategoryID], [Name]
15 | FROM SalesLT.ProductCategory
16 | WHERE ParentProductCategoryID IS NULL
17 |
18 | UNION ALL
19 |
20 | SELECT C.[ParentProductCategoryID], C.[ProductCategoryID], C.[Name]
21 | FROM SalesLT.ProductCategory AS C
22 | INNER JOIN CategoryCTE AS BC ON BC.ProductCategoryID = C.ParentProductCategoryID
23 | )
24 |
25 | INSERT INTO @retCategoryInformation
26 | SELECT PC.[Name] AS [ParentProductCategoryName], CCTE.[Name] as [ProductCategoryName], CCTE.[ProductCategoryID]
27 | FROM CategoryCTE AS CCTE
28 | JOIN SalesLT.ProductCategory AS PC
29 | ON PC.[ProductCategoryID] = CCTE.[ParentProductCategoryID];
30 | RETURN;
31 | END;
32 |
--------------------------------------------------------------------------------
/SSIS Unit Testing/ssisDBTest/dbo/Functions/ufnGetCustomerInformation.sql:
--------------------------------------------------------------------------------
1 | CREATE FUNCTION [dbo].[ufnGetCustomerInformation](@CustomerID int)
2 | RETURNS TABLE
3 | AS
4 | -- Returns the CustomerID, first name, and last name for the specified customer.
5 | RETURN (
6 | SELECT
7 | CustomerID,
8 | FirstName,
9 | LastName
10 | FROM [SalesLT].[Customer]
11 | WHERE [CustomerID] = @CustomerID
12 | );
13 |
--------------------------------------------------------------------------------
/SSIS Unit Testing/ssisDBTest/dbo/Functions/ufnGetSalesOrderStatusText.sql:
--------------------------------------------------------------------------------
1 | CREATE FUNCTION [dbo].[ufnGetSalesOrderStatusText](@Status tinyint)
2 | RETURNS nvarchar(15)
3 | AS
4 | -- Returns the sales order status text representation for the status value.
5 | BEGIN
6 | DECLARE @ret nvarchar(15);
7 |
8 | SET @ret =
9 | CASE @Status
10 | WHEN 1 THEN 'In process'
11 | WHEN 2 THEN 'Approved'
12 | WHEN 3 THEN 'Backordered'
13 | WHEN 4 THEN 'Rejected'
14 | WHEN 5 THEN 'Shipped'
15 | WHEN 6 THEN 'Cancelled'
16 | ELSE '** Invalid **'
17 | END;
18 |
19 | RETURN @ret
20 | END;
21 |
--------------------------------------------------------------------------------
/SSIS Unit Testing/ssisDBTest/dbo/Stored Procedures/uspPrintError.sql:
--------------------------------------------------------------------------------
1 |
2 | -- uspPrintError prints error information about the error that caused
3 | -- execution to jump to the CATCH block of a TRY...CATCH construct.
4 | -- Should be executed from within the scope of a CATCH block otherwise
5 | -- it will return without printing any error information.
6 | CREATE PROCEDURE [dbo].[uspPrintError]
7 | AS
8 | BEGIN
9 | SET NOCOUNT ON;
10 |
11 | -- Print error information.
12 | PRINT 'Error ' + CONVERT(varchar(50), ERROR_NUMBER()) +
13 | ', Severity ' + CONVERT(varchar(5), ERROR_SEVERITY()) +
14 | ', State ' + CONVERT(varchar(5), ERROR_STATE()) +
15 | ', Procedure ' + ISNULL(ERROR_PROCEDURE(), '-') +
16 | ', Line ' + CONVERT(varchar(5), ERROR_LINE());
17 | PRINT ERROR_MESSAGE();
18 | END;
19 |
--------------------------------------------------------------------------------
/SSIS Unit Testing/ssisDBTest/dbo/Tables/BuildVersion.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE [dbo].[BuildVersion] (
2 | [SystemInformationID] TINYINT IDENTITY (1, 1) NOT NULL,
3 | [Database Version] NVARCHAR (25) NOT NULL,
4 | [VersionDate] DATETIME NOT NULL,
5 | [ModifiedDate] DATETIME CONSTRAINT [DF_BuildVersion_ModifiedDate] DEFAULT (getdate()) NOT NULL,
6 | PRIMARY KEY CLUSTERED ([SystemInformationID] ASC)
7 | );
8 |
9 |
--------------------------------------------------------------------------------
/SSIS Unit Testing/ssisDBTest/dbo/Tables/ErrorLog.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE [dbo].[ErrorLog] (
2 | [ErrorLogID] INT IDENTITY (1, 1) NOT NULL,
3 | [ErrorTime] DATETIME CONSTRAINT [DF_ErrorLog_ErrorTime] DEFAULT (getdate()) NOT NULL,
4 | [UserName] [sysname] NOT NULL,
5 | [ErrorNumber] INT NOT NULL,
6 | [ErrorSeverity] INT NULL,
7 | [ErrorState] INT NULL,
8 | [ErrorProcedure] NVARCHAR (126) NULL,
9 | [ErrorLine] INT NULL,
10 | [ErrorMessage] NVARCHAR (4000) NOT NULL,
11 | CONSTRAINT [PK_ErrorLog_ErrorLogID] PRIMARY KEY CLUSTERED ([ErrorLogID] ASC)
12 | );
13 |
14 |
--------------------------------------------------------------------------------
/SSIS Unit Testing/ssisDBTest/dbo/User Defined Types/AccountNumber.sql:
--------------------------------------------------------------------------------
1 | CREATE TYPE [dbo].[AccountNumber]
2 | FROM NVARCHAR (15) NULL;
3 |
4 |
--------------------------------------------------------------------------------
/SSIS Unit Testing/ssisDBTest/dbo/User Defined Types/Flag.sql:
--------------------------------------------------------------------------------
1 | CREATE TYPE [dbo].[Flag]
2 | FROM BIT NOT NULL;
3 |
4 |
--------------------------------------------------------------------------------
/SSIS Unit Testing/ssisDBTest/dbo/User Defined Types/Name.sql:
--------------------------------------------------------------------------------
1 | CREATE TYPE [dbo].[Name]
2 | FROM NVARCHAR (50) NULL;
3 |
4 |
--------------------------------------------------------------------------------
/SSIS Unit Testing/ssisDBTest/dbo/User Defined Types/NameStyle.sql:
--------------------------------------------------------------------------------
1 | CREATE TYPE [dbo].[NameStyle]
2 | FROM BIT NOT NULL;
3 |
4 |
--------------------------------------------------------------------------------
/SSIS Unit Testing/ssisDBTest/dbo/User Defined Types/OrderNumber.sql:
--------------------------------------------------------------------------------
1 | CREATE TYPE [dbo].[OrderNumber]
2 | FROM NVARCHAR (25) NULL;
3 |
4 |
--------------------------------------------------------------------------------
/SSIS Unit Testing/ssisDBTest/dbo/User Defined Types/Phone.sql:
--------------------------------------------------------------------------------
1 | CREATE TYPE [dbo].[Phone]
2 | FROM NVARCHAR (25) NULL;
3 |
4 |
--------------------------------------------------------------------------------
/ThirdPartyNotices.txt:
--------------------------------------------------------------------------------
1 | 3rd party notification
--------------------------------------------------------------------------------
/jmeter/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright 2021 Darren Rich
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in
6 | the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
7 | the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
8 |
9 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
10 |
11 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
12 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
13 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
/jmeter/ReadMe.md:
--------------------------------------------------------------------------------
1 | #JMeter Scripts
2 |
3 | I create JMeter demo scripts several times a week. Examples that may provide some value to others will be posted here.
4 |
5 | | JMX File | Summary | Additional Notes |
6 | | --- | --- | --- |
7 | |DRParts.jmx|Most of my JMeter demos use this as the primary demo file. It is also the JMX file referenced by the Azure Pipeline script|Leverages the [Backend Listener](https://jmeter.apache.org/usermanual/component_reference.html#Backend_Listener) to provide realtime monitoring during tests.|
8 | |CallAzureFunction.jmx|Provides one method to call .NET Core code from JMeter via K8S hosted Azure Functions|Uses a sample [Azure Function project](../source/DarrenFunctionPlayground) deployed to the same [AKS](https://azure.microsoft.com/en-us/services/kubernetes-service/) cluster hosting the test rig. 2,000 TPS on a 3 node cluster with each node at 2 cores was achieved.|
9 |
--------------------------------------------------------------------------------
/jmeter/bearer.groovy:
--------------------------------------------------------------------------------
1 | @Grab(group='commons-codec', module='commons-codec', version='1.13')
2 | import org.apache.commons.codec.binary.Base64;
3 | String jwtToken = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJtZXNzYWdlIjoiSldUIFJ1bGVzISIsImlhdCI6MTQ1OTQ0ODExOSwiZXhwIjoxNDU5NDU0NTE5fQ.-yIVBD5b73C75osbmwwshQNRC7frWUYrqaTjTpza2y4";
4 | //String jwtToken = vars.get("bearer");
5 | String[] split_string = jwtToken.split("\\.");
6 | String base64EncodedHeader = split_string[0];
7 | String base64EncodedBody = split_string[1];
8 | String base64EncodedSignature = split_string[2];
9 | Base64 base64Url = new Base64(true);
10 | String header = new String(base64Url.decode(base64EncodedHeader));
11 | String body = new String(base64Url.decode(base64EncodedBody));
12 | printf header;
13 | printf body;
14 | //vars.put("jwtHeader",header)
15 | //vars.put("jwtBody",body)
--------------------------------------------------------------------------------
/jmeter/chaos-mesh/block-external-network.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: chaos-mesh.org/v1alpha1
2 | kind: NetworkChaos
3 | metadata:
4 | name: block-external-network
5 | spec:
6 | action: partition # the specific chaos action to inject
7 | mode: one # the mode to run chaos action; supported modes are one/all/fixed/fixed-percent/random-max-percent
8 | selector: # pods where to inject chaos actions
9 | namespaces:
10 | - default
11 | labelSelectors:
12 | "app": "jfrcosmos"
13 | direction: to
14 | externalTargets:
15 | - "REDACTED.documents.azure.com"
16 | delay:
17 | latency: "2000ms"
18 | duration: "15s" # duration for the injected chaos experiment
19 | scheduler: # scheduler rules for the running time of the chaos experiments about pods.
20 | cron: "@every 15s"
--------------------------------------------------------------------------------
/jmeter/chaos-mesh/chaoshappy.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShadowPic/PublicTestProjects/0545a86b50cb15380f2c2ffd73eca47f99b1802e/jmeter/chaos-mesh/chaoshappy.jpg
--------------------------------------------------------------------------------
/jmeter/chaos-mesh/readme.md:
--------------------------------------------------------------------------------
1 | # Chaos-Mesh triggered by JMeter
2 |
3 | Just doing performance testing is like writing new code in COBOL. Yes you could do it but **WHY**? The cloud is all about redundancy, resiliency and scaling out to take on those millions of users to hopefully make them happy users! If your application/infrastructure/giganto-super-complex-smart-thing is doing more than just serving up a single html web page then you **MUST** include fault injection as a *standard* part of any and all performance testing.
4 |
5 | This is why I am completely **smitten** with [Chaos Mesh](https://chaos-mesh.org/) for everything I want to:
6 |
7 | - Systematically break the same way over and over again.
8 | - Systematically slow down, consume memory and generally create **CHAOS**
9 | - For micro services hosted in Azure Kubernetes Services
10 |
11 | # It really is that EASY
12 |
13 | The picture below shows an application at a steady RPS, then chaos is introduced 30 seconds in and then chaos is turned off after 4 minutes.
14 |
15 | 
16 |
17 | ## How you ask?
18 |
19 | - Take a look at the Chaos Threads in the [jfrcosmos](./jfrcosmos.jmx) jmeter test
20 | - It does a kubectl apply -f [block-external-network.yaml](./block-external-network.yaml)
21 | - Waits for a while and then does a kubectl delete -f [block-external-network.yaml](./block-external-network.yaml)
22 |
23 | **The magic comes from deploying chaos-mesh to your Kubernetes cluster**
24 |
--------------------------------------------------------------------------------
/jmeter/chaos-mesh/slow-down-network.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: chaos-mesh.org/v1alpha1
2 | kind: NetworkChaos
3 | metadata:
4 | name: web-show-network-delay
5 | spec:
6 | action: delay # the specific chaos action to inject
7 | mode: one # the mode to run chaos action; supported modes are one/all/fixed/fixed-percent/random-max-percent
8 | selector: # pods where to inject chaos actions
9 | namespaces:
10 | - default
11 | labelSelectors:
12 | "app": "jfrcosmos"
13 | delay:
14 | latency: "50ms"
15 | duration: "15s" # duration for the injected chaos experiment
16 | scheduler: # scheduler rules for the running time of the chaos experiments about pods.
17 | cron: "@every 15s"
--------------------------------------------------------------------------------
/jmeter/chaos-mesh/stress-cpu.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: chaos-mesh.org/v1alpha1
2 | kind: StressChaos
3 | metadata:
4 | name: stress-cpu-show
5 | spec:
6 | mode: one
7 | selector:
8 | namespaces:
9 | - default
10 | labelSelectors:
11 | "app": "jfrcosmos"
12 | stressors:
13 | cpu:
14 | workers: 5
15 | load: 50
16 | duration: '15s'
17 | scheduler:
18 | cron: '@every 15s'
--------------------------------------------------------------------------------
/jmeter/chaos-mesh/stress-memory.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: chaos-mesh.org/v1alpha1
2 | kind: StressChaos
3 | metadata:
4 | name: stress-memory-show
5 | spec:
6 | mode: one
7 | selector:
8 | namespaces:
9 | - default
10 | labelSelectors:
11 | "app": "jfrcosmos"
12 | stressors:
13 | memory:
14 | workers: 1
15 | size: 1G
16 | duration: '15s'
17 | scheduler:
18 | cron: '@every 15s'
--------------------------------------------------------------------------------
/jmeter/coffeeperftest.yaml:
--------------------------------------------------------------------------------
1 | execution:
2 | - scenario: simple
3 |
4 | scenarios:
5 | simple:
6 | script: coffeeperftest.jmx
--------------------------------------------------------------------------------
/jmeter/csv2redis.redis:
--------------------------------------------------------------------------------
1 | del names
2 | SADD names "Chauncee,Chettlebom"
3 | SADD names "Francis,Cheekbot"
4 | SADD names "Lawrencia,Smith"
5 | del search
6 | SADD search "Brakes"
7 | SADD search "Janice Choi"
8 | SADD search "chauncee"
9 |
--------------------------------------------------------------------------------
/jmeter/customvars.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShadowPic/PublicTestProjects/0545a86b50cb15380f2c2ffd73eca47f99b1802e/jmeter/customvars.xlsx
--------------------------------------------------------------------------------
/jmeter/docker/DeleteTestRig.ps1:
--------------------------------------------------------------------------------
1 | #Requires -Version 7
2 | param(
3 | [Parameter(Mandatory=$true)]
4 | [string]
5 | $AksResourceGroup,
6 | [Parameter(Mandatory=$true)]
7 | [string]
8 | $AksClusterName
9 |
10 | )
11 |
12 | function log([string] $message)
13 | {
14 | Write-Output "$(get-date) $message"
15 | }
16 | if($(az account list).contains("[]")){
17 | Exit-PSSession
18 | }
19 | log "Deleting AKS Instance"
20 | az aks delete --name $AksClusterName --resource-group $AksResourceGroup -y
21 | log "Removing local auth"
22 | kubectl config use-context docker-desktop
23 | kubectl config delete-context $AksClusterName
24 | kubectl config delete-cluster $AksClusterName
25 | kubectl config unset "users.clusterUser_$($AksClusterName)_$($AksClusterName)"
--------------------------------------------------------------------------------
/jmeter/docker/JtlCsvToSqlAci.ps1:
--------------------------------------------------------------------------------
1 | param(
2 |
3 | [Parameter(Mandatory=$true,HelpMessage="SQL Connection string to the reporting database")]
4 | [string]$JtlReportingDatabase,
5 | [Parameter(Mandatory=$true,HelpMessage="Storage account where the results.jtl blob files can be found and are assumed to be in the jmeterresults blob container.")]
6 | [string]$JtlReportingStorage,
7 | [Parameter(Mandatory=$true,HelpMessage="Resource group for the ACI instance")]
8 | [string]$ResourceGroup,
9 | [Parameter(Mandatory=$true,HelpMessage="Container name")]
10 | [string]$ContainerName,
11 | [Parameter(Mandatory=$false,HelpMessage="Docker image name")]
12 | [string]$ImageName="shadowpic/filejtltosql:latest"
13 |
14 |
15 | )
16 |
17 | az container create --resource-group $ResourceGroup --name $ContainerName --image $ImageName --restart-policy OnFailure `
18 | --environment-variables RunOnceAndStop="true" JtlReportingDatabase="$JtlReportingDatabase" JtlReportingStorage="$JtlReportingStorage"
19 |
20 |
21 |
--------------------------------------------------------------------------------
/jmeter/docker/TestrigProcessDiagram.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShadowPic/PublicTestProjects/0545a86b50cb15380f2c2ffd73eca47f99b1802e/jmeter/docker/TestrigProcessDiagram.jpg
--------------------------------------------------------------------------------
/jmeter/docker/builddocker.ps1:
--------------------------------------------------------------------------------
1 | #Requires -Version 7
2 | [CmdletBinding()]
3 | param (
4 | [Parameter(Mandatory=$false)]
5 | [string]
6 | $label="test"
7 | )
8 | docker build --tag="shadowpic/jmeter-base:$label" -f jmeterbase-docker .
9 | docker push "shadowpic/jmeter-base:$label"
10 | docker build --tag="shadowpic/jmeter-master:$label" -f jmetermaster-docker .
11 | docker build --tag="shadowpic/jmeter-slave:$label" -f jmeterslave-docker .
12 | docker push "shadowpic/jmeter-master:$label"
13 | docker push "shadowpic/jmeter-slave:$label"
14 |
--------------------------------------------------------------------------------
/jmeter/docker/csv2redisvalidate/Search.csv:
--------------------------------------------------------------------------------
1 | SearchValue
2 | Brakes
3 | Janice Choi
4 | chauncee
5 |
--------------------------------------------------------------------------------
/jmeter/docker/csv2redisvalidate/names.csv:
--------------------------------------------------------------------------------
1 | FirstName,LastName
2 | Chauncee,Chettlebom
3 | Francis,Cheekbot
4 | Lawrencia,Smith
5 |
--------------------------------------------------------------------------------
/jmeter/docker/floodio.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1beta2
2 | kind: Deployment
3 | metadata:
4 | name: floodio-challenge
5 | labels:
6 | challenge: youbet
7 | spec:
8 | replicas: 1
9 | selector:
10 | matchLabels:
11 | challenge: youbet
12 | template:
13 | metadata:
14 | labels:
15 | challenge: youbet
16 | spec:
17 | containers:
18 | - name: floodio-challenge
19 | image: floodio/challenge:latest
20 | imagePullPolicy: IfNotPresent
21 | ports:
22 | - containerPort: 8080
23 |
24 | ---
25 |
26 | apiVersion: v1
27 | kind: Service
28 | metadata:
29 | name: floodio-challenge-service
30 | labels:
31 | challenge: youbet
32 | spec:
33 | type: LoadBalancer
34 | ports:
35 | - name: http
36 | port: 8080
37 | selector:
38 | challenge: youbet
--------------------------------------------------------------------------------
/jmeter/docker/jmeter report.pbit:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShadowPic/PublicTestProjects/0545a86b50cb15380f2c2ffd73eca47f99b1802e/jmeter/docker/jmeter report.pbit
--------------------------------------------------------------------------------
/jmeter/docker/jmetermaster-docker:
--------------------------------------------------------------------------------
1 | FROM shadowpic/jmeter-base:latest
2 |
3 | ARG JMETER_VERSION=5.4.3
4 | ARG JMETER_PLUGIN_MANAGER_JAR=jmeter-plugins-manager-1.7.jar
5 | ARG JMETER_PLUGIN_VERSION=1.7
6 | ARG JMETER_PLUGIN_ZIP=JMeterPlugins-Standard-1.7.0.zip
7 |
8 | COPY rmi_keystore.jks /jmeter/apache-jmeter-$JMETER_VERSION/bin/
9 |
10 | COPY log4j2.xml /jmeter/apache-jmeter-$JMETER_VERSION/bin/
11 |
12 | COPY rmi_keystore.jks /
13 |
14 | COPY load_test_run /
15 |
16 | RUN ["chmod","777","load_test_run"]
17 |
18 | EXPOSE 60000-60200
--------------------------------------------------------------------------------
/jmeter/docker/jmeterslave-docker:
--------------------------------------------------------------------------------
1 | FROM shadowpic/jmeter-base:latest
2 |
3 | ARG JMETER_VERSION=5.4.3
4 | ARG JMETER_PLUGIN_MANAGER_JAR=jmeter-plugins-manager-1.7.jar
5 | ARG JMETER_PLUGIN_VERSION=1.7
6 | ARG JMETER_PLUGIN_ZIP=JMeterPlugins-Standard-1.7.0.zip
7 |
8 | ENV JMETER_VERSION=5.4.3
9 |
10 | COPY rmi_keystore.jks /jmeter/apache-jmeter-$JMETER_VERSION/bin/
11 |
12 | COPY rmi_keystore.jks /
13 |
14 | COPY log4j2.xml /jmeter/apache-jmeter-$JMETER_VERSION/bin/
15 |
16 | EXPOSE 1099 50000
--------------------------------------------------------------------------------
/jmeter/docker/jmetertestrig/.helmignore:
--------------------------------------------------------------------------------
1 | # Patterns to ignore when building packages.
2 | # This supports shell glob matching, relative path matching, and
3 | # negation (prefixed with !). Only one pattern per line.
4 | .DS_Store
5 | # Common VCS dirs
6 | .git/
7 | .gitignore
8 | .bzr/
9 | .bzrignore
10 | .hg/
11 | .hgignore
12 | .svn/
13 | # Common backup files
14 | *.swp
15 | *.bak
16 | *.tmp
17 | *.orig
18 | *~
19 | # Various IDEs
20 | .project
21 | .idea/
22 | *.tmproj
23 | .vscode/
24 |
--------------------------------------------------------------------------------
/jmeter/docker/jmetertestrig/Chart.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v2
2 | name: jmetertestrig
3 | description: A Helm chart for JMeter
4 |
5 | # A chart can be either an 'application' or a 'library' chart.
6 | #
7 | # Application charts are a collection of templates that can be packaged into versioned archives
8 | # to be deployed.
9 | #
10 | # Library charts provide useful utilities or functions for the chart developer. They're included as
11 | # a dependency of application charts to inject those utilities and functions into the rendering
12 | # pipeline. Library charts do not define any templates and therefore cannot be deployed.
13 | type: application
14 |
15 | # This is the chart version. This version number should be incremented each time you make changes
16 | # to the chart and its templates, including the app version.
17 | # Versions are expected to follow Semantic Versioning (https://semver.org/)
18 | version: 0.6.0
19 |
20 | # This is the version number of the application being deployed. This version number should be
21 | # incremented each time you make changes to the application. Versions are not expected to
22 | # follow Semantic Versioning. They should reflect the version the application is using.
23 | appVersion: 5.4.3
24 |
25 | dependencies:
26 | - name: redis
27 | condition: RedisEnabled
28 | version: 12.8.3
29 | repository: https://charts.bsitnami.com
30 |
--------------------------------------------------------------------------------
/jmeter/docker/jmetertestrig/charts/redis-12.8.3.tgz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShadowPic/PublicTestProjects/0545a86b50cb15380f2c2ffd73eca47f99b1802e/jmeter/docker/jmetertestrig/charts/redis-12.8.3.tgz
--------------------------------------------------------------------------------
/jmeter/docker/jmetertestrig/readme.md:
--------------------------------------------------------------------------------
1 | # JMeter Test Rig Helm Chart
2 |
3 | This chart will deploy a JMeter test rig, InfluxDb and Redis cache.
4 |
5 | ## Custom Chart Settings
6 |
7 | The following settings can be customized for your deployment
8 |
9 | ### JMeter Master Settings
10 |
11 | jmeterMasterImage: shadowpic/jmeter-master:latest
12 | - Docker image used for the JMeter master pod
13 |
14 | jmeterMasterMemory: 4Gi
15 | - Maximum memory allowed
16 |
17 | jmeterMasterCpu: 2
18 | - Maximum CPUs allowed
19 |
20 | ### JMeter Slave Settings
21 |
22 | jmeterSlaveImage: shadowpic/jmeter-slave:latest
23 | - Docker image used for the JMeter slave pods
24 |
25 | replicaCount: 2
26 | - The default number of jmeter slaves
27 |
28 | jmeterSlaveMemory: 2Gi
29 | - Maximum memory per slave pod
30 |
31 | jmeterSlaveCpu: 2
32 | - Default number of JMeter slaves
33 |
34 | ### Supporting Services
35 |
36 | jmeterInfluxDbImage: influxdb:1.8
37 | - Influx DB docker image
38 |
39 | jmeterInfluxDbStorageClass: # Allow specifying alternate StorageClass
40 | - Allows for an alternate storage class
41 |
42 | redis:
43 | usePassword: false
44 | - Whether or not to require a password for Redis Cache
45 | cluster:
46 | enabled: false
47 | - Whether or not to create a Redis cluster or just a single pod
--------------------------------------------------------------------------------
/jmeter/docker/jmetertestrig/templates/_helpers.tpl:
--------------------------------------------------------------------------------
1 | {{/* vim: set filetype=mustache: */}}
2 | {{/* Expand the name of the chart. */}}
3 | {{- define "name" -}}
4 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
5 | {{- end -}}
6 | {{/* Create a default fully qualified app name. We truncate at 63 chars because . . . */}}
7 | {{- define "fullname" -}}
8 | {{- $name := default .Chart.Name .Values.nameOverride -}}
9 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
10 | {{- end -}}
--------------------------------------------------------------------------------
/jmeter/docker/jmetertestrig/templates/csv2redis.yaml:
--------------------------------------------------------------------------------
1 | {{ if .Values.csv2RedisEnabled }}
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | name: {{ template "fullname" . }}-jmeter-csv2redis
6 | spec:
7 | selector:
8 | matchLabels:
9 | app: csv2redis
10 | replicas: 1
11 | template:
12 | metadata:
13 | labels:
14 | app: csv2redis
15 | spec:
16 | containers:
17 | - name: csv2redis
18 | image: {{ .Values.csv2RedisImage }}
19 | imagePullPolicy: Always
20 | args:
21 | - while true; do sleep 30; done;
22 | command:
23 | - /bin/bash
24 | - -c
25 | - --
26 | resources:
27 | limits:
28 | memory: "2Gi"
29 | cpu: "1"
30 | {{ end }}
--------------------------------------------------------------------------------
/jmeter/docker/jmetertestrig/values.yaml:
--------------------------------------------------------------------------------
1 | # Default values for jmetertestrig.
2 | # This is a YAML-formatted file.
3 | # Declare variables to be passed into your templates.
4 | Globals:
5 | RedisEnabled: true
6 | replicaCount: 2
7 | jmeterMasterImage: shadowpic/jmeter-master:latest
8 | jmeterMasterMemory: 4Gi
9 | jmeterMasterCpu: 2
10 | jmeterSlaveMemory: 2Gi
11 | jmeterSlaveCpu: 2
12 | jmeterSlaveImage: shadowpic/jmeter-slave:latest
13 | jmeterInfluxDbImage: influxdb:1.8
14 | jmeterInfluxDbStorageClass: # Allow specifying alternate StorageClass
15 | csv2RedisEnabled: true
16 | csv2RedisImage: shadowpic/csv2redis:latest
17 | influxDBEnabled: true
18 | redis:
19 | usePassword: false
20 | cluster:
21 | enabled: false
22 |
--------------------------------------------------------------------------------
/jmeter/docker/load_test_run:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | #Script created to invoke jmeter test script with the slave POD IP addresses
3 | #Script should be run like: ./load_test "path to the test script in jmx format"
4 | cd $JMETER_HOME/bin
5 | ./jmeter -l /results.log -e -o /report -n -t $@ -Dserver.rmi.ssl.disable=true -R `getent ahostsv4 jmeter-slaves-svc | cut -d' ' -f1 | sort -u | awk -v ORS=, '{print $1}' | sed 's/,$//'`
6 |
--------------------------------------------------------------------------------
/jmeter/docker/storage_technologies.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShadowPic/PublicTestProjects/0545a86b50cb15380f2c2ffd73eca47f99b1802e/jmeter/docker/storage_technologies.jpg
--------------------------------------------------------------------------------
/jmeter/floodios2f.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShadowPic/PublicTestProjects/0545a86b50cb15380f2c2ffd73eca47f99b1802e/jmeter/floodios2f.xlsx
--------------------------------------------------------------------------------
/jmeter/jmr.cmd:
--------------------------------------------------------------------------------
1 | jmeter -t %1%
--------------------------------------------------------------------------------
/jmeter/largeusers.csv:
--------------------------------------------------------------------------------
1 | user
2 | largeuser1
3 | largeuser2
4 | largeuser3
--------------------------------------------------------------------------------
/jmeter/manipulatedates:
--------------------------------------------------------------------------------
1 | import java.time.LocalDateTime;
2 | import java.util.Date;
3 | Earlier= LocalDateTime.parse("2019-11-14T16:51:02.181");
4 | Integer hi="1".toInteger();
5 | RightNow=LocalDateTime.now();
6 | Earlier.plusMinutes(hi)
2 |
3 |
4 | Exe
5 | netcoreapp3.0
6 |
7 |
8 |
9 |
10 | Always
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/parameterize/DetectParams/DetectParams/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Xml;
3 | using System.IO;
4 | using System.Xml.Linq;
5 | using System.Linq;
6 | using System.Linq.Expressions;
7 | using System.Collections.Generic;
8 | namespace DetectParams
9 | {
10 | class Program
11 | {
12 | static void Main(string[] args)
13 | {
14 | string filename = "floodio.xml";
15 | string xmlString = File.ReadAllText(filename).Replace("\r\n", "\n");
16 |
17 | var xElement = XElement.Parse(xmlString);
18 | System.Collections.Generic.IEnumerable