Skip to content

Commit

Permalink
NDEV-17443 : Add load-testing
Browse files Browse the repository at this point in the history
Signed-off-by: anushkamittal2001 <[email protected]>
  • Loading branch information
anushkamittal2001 committed Sep 26, 2023
1 parent 0a187e3 commit 15c95ae
Showing 1 changed file with 171 additions and 0 deletions.
171 changes: 171 additions & 0 deletions .github/workflows/load-testing.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
name: Kyverno Load Testing

on:
push:
branches:
- '*'
pull_request:
branches:
- 'main'
- 'release*'

jobs:
run-kyverno-load-testing:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v2

- name: Clone External Repository
run: |
# Define the external repository and branch
EXTERNAL_REPO="kyverno/load-testing"
EXTERNAL_BRANCH="main"
# Authenticate using your PAT
AUTH_HEADER="Authorization: token ${{ secrets.GITHUB_TOKEN }}"
# Clone the entire external repository
git clone --branch $EXTERNAL_BRANCH --depth 1 "https://github.com/$EXTERNAL_REPO.git" load-testing
working-directory: ${{ github.workspace }}

- name: Create and Add my-test.js
run: |
# Navigate to the cloned external repository (load-testing)
cd load-testing/k6
# Replace 'YOUR_CONTENT_HERE' with the provided JavaScript code
echo "import http from 'k6/http';
import { check } from 'k6';
import { buildKubernetesBaseUrl, generatePod, getParamsWithAuth, getTestNamespace, randomString } from './util.js';

const baseUrl = buildKubernetesBaseUrl();
const namespace = getTestNamespace();

http.setResponseCallback(http.expectedStatuses(400));

export default function() {
const podName = \`test-\${randomString(8)}\`;
const pod = generatePod(podName);
pod.metadata.labels = {
app: 'k6-test',
}

pod.metadata.labels[\"environment.tess.io/name\"] = 'feature'

const params = getParamsWithAuth();
params.headers['Content-Type'] = 'application/json';

const createRes = http.post(\`\${baseUrl}/api/v1/namespaces/\${namespace}/pods\`, JSON.stringify(pod), params);
console.log(\"received response \" + createRes.status + \" \" + createRes.status_text)
check(createRes, {
'verify response code of POST is 400': r => r.status === 400
});

}

export function teardown() {

}" > tests/my-test.js

# Add the my-test.js file to the repository
git add my-test.js
git commit -m "Add my-test.js"
working-directory: ${{ github.workspace }}/load-testing

- name: Create and Add util.js
run: |
# Navigate to the cloned external repository (load-testing)
cd load-testing/k6
# Replace 'YOUR_CONTENT_HERE' with the provided JavaScript code
echo "export const generatePod = (name = 'test', image = 'nginx') => {
return {
kind: 'Pod',
apiVersion: 'v1',
metadata: {
name: name
},
spec: {
containers: [
{
name: 'test',
image,
securityContext: {
}
}
],
}
}
}

export const generateConfigmap = (name = 'test') => {
return {
kind: "ConfigMap",
apiVersion: "v1",
metadata: {
name: name
}
}
}

export const generateSecret = (name = 'test') => {
return {
kind: "Secret",
apiVersion: "v1",
metadata: {
name: name
}
}
}

export const buildKubernetesBaseUrl = () => {
return `https://${__ENV.KUBERNETES_SERVICE_HOST}:${__ENV.KUBERNETES_SERVICE_PORT}`;
}

export const getTestNamespace = () => {
return __ENV.POD_NAMESPACE;
}

export const getParamsWithAuth = () => {
return {
headers: {
'Authorization': `Bearer ${__ENV.KUBERNETES_TOKEN}`
}
}
}

export const randomString = (length) => {
const characters = 'abcdefghijklmnopqrstuvwxyz0123456789';
const charactersLength = characters.length;
let result = '';
let counter = 0;
while (counter < length) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
counter += 1;
}
return result;
}" > tests/util.js

# Add the util.js file to the repository
git add util.js
git commit -m "Add util.js"
working-directory: ${{ github.workspace }}/load-testing

- name: Make ./start.sh Script Executable
run: |
# Navigate to the cloned external repository (load-testing)
cd load-testing/k6
# Make the script executable
chmod +x start.sh
working-directory: ${{ github.workspace }}/load-testing

- name: Run ./start.sh Script
run: |
# Navigate to the cloned external repository (load-testing)
cd load-testing/k6
# Run the ./start.sh script with the specified arguments
./start.sh tests/my-test.js 10 100
working-directory: ${{ github.workspace }}/load-testing

0 comments on commit 15c95ae

Please sign in to comment.