Skip to content

Commit

Permalink
[App config] Perf tests (#15763)
Browse files Browse the repository at this point in the history
Adds the list test

Closes #13981
  • Loading branch information
HarshaNalluru authored Jun 25, 2021
1 parent c6b82ee commit 35739ab
Show file tree
Hide file tree
Showing 9 changed files with 185 additions and 0 deletions.
17 changes: 17 additions & 0 deletions common/config/rush/pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions rush.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
]
}
9 changes: 9 additions & 0 deletions sdk/appconfiguration/perf-tests/app-configuration/README.md
Original file line number Diff line number Diff line change
@@ -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`
47 changes: 47 additions & 0 deletions sdk/appconfiguration/perf-tests/app-configuration/package.json
Original file line number Diff line number Diff line change
@@ -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"
}
}
3 changes: 3 additions & 0 deletions sdk/appconfiguration/perf-tests/app-configuration/sample.env
Original file line number Diff line number Diff line change
@@ -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>
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -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();
Original file line number Diff line number Diff line change
@@ -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
);
}
}
16 changes: 16 additions & 0 deletions sdk/appconfiguration/perf-tests/app-configuration/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"extends": "../../../../tsconfig.package",
"compilerOptions": {
"module": "CommonJS",
"declarationDir": "./typings/latest",
"lib": [
"ES6",
"ESNext.AsyncIterable"
],
"noEmit": true
},
"compileOnSave": true,
"include": [
"./test/**/*.ts"
]
}

0 comments on commit 35739ab

Please sign in to comment.