Adds the list test

Closes #13981
This commit is contained in:
Harsha Nalluru 2021-06-24 18:33:26 -07:00 коммит произвёл GitHub
Родитель c6b82eeb28
Коммит 35739abf7c
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
9 изменённых файлов: 185 добавлений и 0 удалений

Просмотреть файл

@ -57,6 +57,7 @@ dependencies:
'@rush-temp/perf-ai-form-recognizer': file:projects/perf-ai-form-recognizer.tgz
'@rush-temp/perf-ai-metrics-advisor': file:projects/perf-ai-metrics-advisor.tgz
'@rush-temp/perf-ai-text-analytics': file:projects/perf-ai-text-analytics.tgz
'@rush-temp/perf-app-configuration': file:projects/perf-app-configuration.tgz
'@rush-temp/perf-core-rest-pipeline': file:projects/perf-core-rest-pipeline.tgz
'@rush-temp/perf-eventgrid': file:projects/perf-eventgrid.tgz
'@rush-temp/perf-identity': file:projects/perf-identity.tgz
@ -10577,6 +10578,21 @@ packages:
integrity: sha512-Kvl28eIyB/TUFjHazX20V+clKd8zLCBx+Tb7zTU3Yp1kei9JNZfqMaDmDlCyfw1bmRLDslq5/xfo/NEMWks0wQ==
tarball: file:projects/perf-ai-text-analytics.tgz
version: 0.0.0
file:projects/perf-app-configuration.tgz:
dependencies:
'@types/node': 8.10.66
'@types/uuid': 8.3.0
dotenv: 8.6.0
ts-node: 9.1.1_typescript@4.2.4
tslib: 2.3.0
typescript: 4.2.4
uuid: 8.3.2
dev: false
name: '@rush-temp/perf-app-configuration'
resolution:
integrity: sha512-i2b4+TTev+rOwl+F2AqZoAyVcrP7/qP4IkOI9KeSEWSjbizV7wKmvzpENQylboaW5EJoe7XqxGIUDLxuDxWVWQ==
tarball: file:projects/perf-app-configuration.tgz
version: 0.0.0
file:projects/perf-core-rest-pipeline.tgz:
dependencies:
'@types/uuid': 8.3.0
@ -11947,6 +11963,7 @@ specifiers:
'@rush-temp/perf-ai-form-recognizer': file:./projects/perf-ai-form-recognizer.tgz
'@rush-temp/perf-ai-metrics-advisor': file:./projects/perf-ai-metrics-advisor.tgz
'@rush-temp/perf-ai-text-analytics': file:./projects/perf-ai-text-analytics.tgz
'@rush-temp/perf-app-configuration': file:./projects/perf-app-configuration.tgz
'@rush-temp/perf-core-rest-pipeline': file:./projects/perf-core-rest-pipeline.tgz
'@rush-temp/perf-eventgrid': file:./projects/perf-eventgrid.tgz
'@rush-temp/perf-identity': file:./projects/perf-identity.tgz

Просмотреть файл

@ -784,6 +784,11 @@
"packageName": "@azure-tests/perf-core-rest-pipeline",
"projectFolder": "sdk/core/perf-tests/core-rest-pipeline",
"versionPolicyName": "test"
},
{
"packageName": "@azure-tests/perf-app-configuration",
"projectFolder": "sdk/appconfiguration/perf-tests/app-configuration",
"versionPolicyName": "test"
}
]
}

Просмотреть файл

@ -0,0 +1,9 @@
### Guide
1. Build the app-config perf tests package `rush build -t perf-app-configuration`.
2. Copy the `sample.env` file and name it as `.env`.
3. Create a App Configuration resource and populate the `.env` file with `APPCONFIG_CONNECTION_STRING` variable.
4. Run the tests as follows
- list configuration settings
- `npm run perf-test:node -- ListSettingsTest --warmup 2 --duration 7 --iterations 2 --parallel 2`

Просмотреть файл

@ -0,0 +1,47 @@
{
"name": "@azure-tests/perf-app-configuration",
"version": "1.0.0",
"description": "",
"main": "",
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"@azure/app-configuration": "^1.2.0-beta.2",
"@azure/core-http": "^2.0.0",
"@azure/test-utils-perfstress": "^1.0.0",
"dotenv": "^8.2.0"
},
"devDependencies": {
"@types/uuid": "^8.0.0",
"@types/node": "^8.0.0",
"uuid": "^8.3.0",
"tslib": "^2.2.0",
"ts-node": "^9.0.0",
"typescript": "~4.2.0"
},
"private": true,
"scripts": {
"perf-test:node": "ts-node test/index.spec.ts",
"audit": "node ../../../common/scripts/rush-audit.js && rimraf node_modules package-lock.json && npm i --package-lock-only 2>&1 && npm audit",
"build": "tsc -p .",
"build:samples": "echo skipped",
"build:test": "echo skipped",
"check-format": "prettier --list-different --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.ts\" \"test/**/*.ts\" \"*.{js,json}\"",
"clean": "rimraf dist dist-esm test-dist typings *.tgz *.log",
"format": "prettier --write --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.ts\" \"test/**/*.ts\" \"*.{js,json}\"",
"integration-test:browser": "echo skipped",
"integration-test:node": "echo skipped",
"integration-test": "echo skipped",
"lint:fix": "eslint package.json src test --ext .ts --fix --fix-type [problem,suggestion]",
"lint": "eslint package.json src test --ext .ts -f html -o app-config-perf-test-lintReport.html || exit 0",
"pack": "npm pack 2>&1",
"prebuild": "npm run clean",
"unit-test:browser": "echo skipped",
"unit-test:node": "echo skipped",
"unit-test": "echo skipped",
"test:browser": "echo skipped",
"test:node": "echo skipped",
"test": "echo skipped"
}
}

Просмотреть файл

@ -0,0 +1,3 @@
# This is the connection string for your app-configuration resource
# You can get this from the Azure portal.
APPCONFIG_CONNECTION_STRING=<app-configuration connection string goes here>

Просмотреть файл

@ -0,0 +1,15 @@
import { PerfStressTest, getEnvVar } from "@azure/test-utils-perfstress";
import { AppConfigurationClient } from "@azure/app-configuration";
// Expects the .env file at the same level
import * as dotenv from "dotenv";
dotenv.config();
export abstract class AppConfigTest<TOptions> extends PerfStressTest<TOptions> {
client: AppConfigurationClient;
constructor() {
super();
const connectionString = getEnvVar("APPCONFIG_CONNECTION_STRING");
this.client = new AppConfigurationClient(connectionString);
}
}

Просмотреть файл

@ -0,0 +1,8 @@
import { PerfStressProgram, selectPerfStressTest } from "@azure/test-utils-perfstress";
import { ListSettingsTest } from "./listSettings.spec";
console.log("=== Starting the perfStress test ===");
const perfStressProgram = new PerfStressProgram(selectPerfStressTest([ListSettingsTest]));
perfStressProgram.run();

Просмотреть файл

@ -0,0 +1,65 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
import { generateUuid } from "@azure/core-http";
import { PerfStressOptionDictionary, executeParallel } from "@azure/test-utils-perfstress";
import { AppConfigTest } from "./appConfigBase.spec";
interface ListTestOptions {
/**
* Number of settings to be created/listed in the test
*/
count: number;
}
export class ListSettingsTest extends AppConfigTest<ListTestOptions> {
static prefix = generateUuid();
public options: PerfStressOptionDictionary<ListTestOptions> = {
count: {
required: true,
description: "Number of settings to be listed",
longName: "count",
defaultValue: 10
}
};
public async globalSetup() {
await executeParallel(
async (_count: number, _index: number) => {
await this.client.addConfigurationSetting({
key: ListSettingsTest.prefix + generateUuid(),
value: "random"
});
},
this.parsedOptions.count.value!,
32
);
}
async runAsync(): Promise<void> {
for await (const response of this.client
.listConfigurationSettings({ keyFilter: ListSettingsTest.prefix + "*" })
.byPage()) {
for (const _ of response.items) {
}
}
}
public async globalCleanup() {
const keys: string[] = [];
for await (const response of this.client
.listConfigurationSettings({ keyFilter: ListSettingsTest.prefix + "*" })
.byPage()) {
for (const setting of response.items) {
keys.push(setting.key);
}
}
await executeParallel(
async (count: number, _: number) => {
await this.client.deleteConfigurationSetting({ key: keys[count] });
},
this.parsedOptions.count.value!,
32
);
}
}

Просмотреть файл

@ -0,0 +1,16 @@
{
"extends": "../../../../tsconfig.package",
"compilerOptions": {
"module": "CommonJS",
"declarationDir": "./typings/latest",
"lib": [
"ES6",
"ESNext.AsyncIterable"
],
"noEmit": true
},
"compileOnSave": true,
"include": [
"./test/**/*.ts"
]
}