From 2b274c2f944c71a1c68c4bec2fd1744760d91a8f Mon Sep 17 00:00:00 2001 From: Jose Antonio Carmona Date: Tue, 15 Nov 2022 16:34:37 +0100 Subject: [PATCH] [bitnami/jasperreports] Add tests and publishing using VIB (#13305) * [bitnami/jasperreports] Add tests Signed-off-by: Jose Antonio Carmona * Publish using VIB Signed-off-by: Jose Antonio Carmona * Properly randomize Signed-off-by: Jose Antonio Carmona * Remove unnecessary https insecure Signed-off-by: Jose Antonio Carmona * Remove containerPort entry in runtime_params Signed-off-by: Jose Antonio Carmona Signed-off-by: Jose Antonio Carmona --- .github/workflows/cd-pipeline.yml | 1 + .vib/jasperreports/cypress/cypress.json | 8 +++++ .../cypress/fixtures/WorkingReport.jrxml | 17 +++++++++ .../cypress/cypress/fixtures/reports.json | 7 ++++ .../cypress/integration/jasperreports_spec.js | 32 +++++++++++++++++ .../cypress/cypress/support/commands.js | 36 +++++++++++++++++++ .../cypress/cypress/support/index.js | 20 +++++++++++ .../cypress/cypress/support/utils.js | 3 ++ .vib/jasperreports/goss/goss.yaml | 21 +++++++++++ .vib/jasperreports/goss/vars.yaml | 9 +++++ .vib/jasperreports/vib-publish.json | 28 ++++++++++++++- .vib/jasperreports/vib-verify.json | 28 ++++++++++++++- 12 files changed, 208 insertions(+), 2 deletions(-) create mode 100644 .vib/jasperreports/cypress/cypress.json create mode 100644 .vib/jasperreports/cypress/cypress/fixtures/WorkingReport.jrxml create mode 100644 .vib/jasperreports/cypress/cypress/fixtures/reports.json create mode 100644 .vib/jasperreports/cypress/cypress/integration/jasperreports_spec.js create mode 100644 .vib/jasperreports/cypress/cypress/support/commands.js create mode 100644 .vib/jasperreports/cypress/cypress/support/index.js create mode 100644 .vib/jasperreports/cypress/cypress/support/utils.js create mode 100644 .vib/jasperreports/goss/goss.yaml create mode 100644 .vib/jasperreports/goss/vars.yaml diff --git a/.github/workflows/cd-pipeline.yml b/.github/workflows/cd-pipeline.yml index f10eaa8484..5e18367970 100644 --- a/.github/workflows/cd-pipeline.yml +++ b/.github/workflows/cd-pipeline.yml @@ -32,6 +32,7 @@ on: # rebuild any PRs and main branch changes - 'bitnami/haproxy-intel/**' - 'bitnami/harbor/**' - 'bitnami/influxdb/**' + - 'bitnami/jasperreports/**' - 'bitnami/jenkins/**' - 'bitnami/joomla/**' - 'bitnami/kafka/**' diff --git a/.vib/jasperreports/cypress/cypress.json b/.vib/jasperreports/cypress/cypress.json new file mode 100644 index 0000000000..8765942749 --- /dev/null +++ b/.vib/jasperreports/cypress/cypress.json @@ -0,0 +1,8 @@ +{ + "baseUrl": "http://localhost/", + "env": { + "username": "jaspervibadmin", + "password": "ComplicatedPassword123!4" + }, + "defaultCommandTimeout": 30000 +} diff --git a/.vib/jasperreports/cypress/cypress/fixtures/WorkingReport.jrxml b/.vib/jasperreports/cypress/cypress/fixtures/WorkingReport.jrxml new file mode 100644 index 0000000000..098ecf4405 --- /dev/null +++ b/.vib/jasperreports/cypress/cypress/fixtures/WorkingReport.jrxml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.vib/jasperreports/cypress/cypress/fixtures/reports.json b/.vib/jasperreports/cypress/cypress/fixtures/reports.json new file mode 100644 index 0000000000..e7f5712e0e --- /dev/null +++ b/.vib/jasperreports/cypress/cypress/fixtures/reports.json @@ -0,0 +1,7 @@ +{ + "newReport": { + "name": "ShoppingList", + "file": "WorkingReport.jrxml", + "textToRandomize": "Cherries From Barn with ID" + } +} diff --git a/.vib/jasperreports/cypress/cypress/integration/jasperreports_spec.js b/.vib/jasperreports/cypress/cypress/integration/jasperreports_spec.js new file mode 100644 index 0000000000..089321b21b --- /dev/null +++ b/.vib/jasperreports/cypress/cypress/integration/jasperreports_spec.js @@ -0,0 +1,32 @@ +/// +import { random } from '../support/utils'; + +it('allows to upload and view a new Report', () => { + cy.login(); + cy.visit('/jasperserver/flow.html?_flowId=reportUnitFlow&ParentFolderUri=/'); + + cy.fixture('reports').then((reports) => { + const reportFile = `cypress/fixtures/${reports.newReport.file}`; + cy.readFile(reportFile).then((data) => { + const regex = new RegExp( + `${reports.newReport.textToRandomize}[a-z0-9_]*` + ); + const randomizedData = data.replace( + regex, + `${reports.newReport.textToRandomize}${random}` + ); + cy.writeFile(reportFile, randomizedData); + }); + + cy.get('[name="reportUnit.label"]') + .click() + .type(`${reports.newReport.name}_${random}`); + cy.get('#fromLocal').click(); + cy.get('[type="file"]').selectFile(reportFile, { force: true }); + cy.contains('Submit').click(); + cy.get('#resultsContainer').within(() => { + cy.contains(`${reports.newReport.name}_${random}`).click(); + }); + cy.contains(`${reports.newReport.textToRandomize}${random}`); + }); +}); diff --git a/.vib/jasperreports/cypress/cypress/support/commands.js b/.vib/jasperreports/cypress/cypress/support/commands.js new file mode 100644 index 0000000000..87cdbaf189 --- /dev/null +++ b/.vib/jasperreports/cypress/cypress/support/commands.js @@ -0,0 +1,36 @@ +const COMMAND_DELAY = 2000; + +for (const command of ['click']) { + Cypress.Commands.overwrite(command, (originalFn, ...args) => { + const origVal = originalFn(...args); + + return new Promise((resolve) => { + setTimeout(() => { + resolve(origVal); + }, COMMAND_DELAY); + }); + }); +} + +Cypress.Commands.add( + 'login', + (username = Cypress.env('username'), password = Cypress.env('password')) => { + cy.visit('/jasperserver/login.html'); + cy.get('#j_username').click().type(username); + cy.get('#j_password_pseudo').click().type(password); + cy.get('#submitButton').click(); + + // The login process completes when the directory tree is fully loaded + cy.get('#folders').within(() => { + cy.contains('root'); + }); + cy.get('body').then(($body) => { + // Close the pop-up if appears + if ($body.find('#heartbeatOptin').is(':visible')) { + cy.get('#heartbeatOptin').within(() => { + cy.contains('button', 'OK').click(); + }); + } + }); + } +); diff --git a/.vib/jasperreports/cypress/cypress/support/index.js b/.vib/jasperreports/cypress/cypress/support/index.js new file mode 100644 index 0000000000..37a498fb5b --- /dev/null +++ b/.vib/jasperreports/cypress/cypress/support/index.js @@ -0,0 +1,20 @@ +// *********************************************************** +// This example support/index.js is processed and +// loaded automatically before your test files. +// +// This is a great place to put global configuration and +// behavior that modifies Cypress. +// +// You can change the location of this file or turn off +// automatically serving support files with the +// 'supportFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/configuration +// *********************************************************** + +// Import commands.js using ES2015 syntax: +import './commands'; + +// Alternatively you can use CommonJS syntax: +// require('./commands') diff --git a/.vib/jasperreports/cypress/cypress/support/utils.js b/.vib/jasperreports/cypress/cypress/support/utils.js new file mode 100644 index 0000000000..f0217c9773 --- /dev/null +++ b/.vib/jasperreports/cypress/cypress/support/utils.js @@ -0,0 +1,3 @@ +/// + +export let random = (Math.random() + 1).toString(36).substring(7); diff --git a/.vib/jasperreports/goss/goss.yaml b/.vib/jasperreports/goss/goss.yaml new file mode 100644 index 0000000000..648bbc669c --- /dev/null +++ b/.vib/jasperreports/goss/goss.yaml @@ -0,0 +1,21 @@ +command: + check-user-info: + exec: id + exit-status: 0 + stdout: + - uid={{ .Vars.containerSecurityContext.runAsUser }} + - /groups=.*{{ .Vars.podSecurityContext.fsGroup }}/ +file: + /opt/bitnami/jasperreports/META-INF/context.xml: + exists: true + filetype: file + mode: '0644' + contains: + - /mysql.*{{ .Vars.mariadb.auth.database }}/ + - /username.*{{ .Vars.mariadb.auth.username }}/ + - /password.*{{ .Vars.mariadb.auth.password }}/ + /bitnami/jasperreports: + exists: true + filetype: directory + mode: '2775' + owner: root diff --git a/.vib/jasperreports/goss/vars.yaml b/.vib/jasperreports/goss/vars.yaml new file mode 100644 index 0000000000..5a8ea55e1b --- /dev/null +++ b/.vib/jasperreports/goss/vars.yaml @@ -0,0 +1,9 @@ +podSecurityContext: + fsGroup: 1002 +containerSecurityContext: + runAsUser: 1002 +mariadb: + auth: + database: bitnami_test_jasperreports + username: bn_test_jasperreports + password: bitnami_test_password \ No newline at end of file diff --git a/.vib/jasperreports/vib-publish.json b/.vib/jasperreports/vib-publish.json index 82641c213d..f8debd7213 100644 --- a/.vib/jasperreports/vib-publish.json +++ b/.vib/jasperreports/vib-publish.json @@ -22,7 +22,7 @@ "url": "{SHA_ARCHIVE}", "path": "/bitnami/jasperreports" }, - "runtime_parameters": "Imphc3BlcnJlcG9ydHNQYXNzd29yZCI6ICJTMzlCS1dqU2toIg==", + "runtime_parameters": "amFzcGVycmVwb3J0c1VzZXJuYW1lOiBqYXNwZXJ2aWJhZG1pbgpqYXNwZXJyZXBvcnRzUGFzc3dvcmQ6ICJDb21wbGljYXRlZFBhc3N3b3JkMTIzITQiCnBvZFNlY3VyaXR5Q29udGV4dDoKICBlbmFibGVkOiB0cnVlCiAgZnNHcm91cDogMTAwMgpjb250YWluZXJTZWN1cml0eUNvbnRleHQ6CiAgZW5hYmxlZDogdHJ1ZQogIHJ1bkFzVXNlcjogMTAwMgpwZXJzaXN0ZW5jZToKICBlbmFibGVkOiB0cnVlCnNlcnZpY2U6CiAgdHlwZTogTG9hZEJhbGFuY2VyCiAgcG9ydHM6CiAgICBodHRwOiA4MAptYXJpYWRiOgogIGVuYWJsZWQ6IHRydWUKICBhdXRoOgogICAgZGF0YWJhc2U6IGJpdG5hbWlfdGVzdF9qYXNwZXJyZXBvcnRzCiAgICB1c2VybmFtZTogYm5fdGVzdF9qYXNwZXJyZXBvcnRzCiAgICBwYXNzd29yZDogYml0bmFtaV90ZXN0X3Bhc3N3b3Jk", "target_platform": { "target_platform_id": "{VIB_ENV_TARGET_PLATFORM}", "size": { @@ -37,6 +37,32 @@ "endpoint": "lb-jasperreports-http", "app_protocol": "HTTP" } + }, + { + "action_id": "goss", + "params": { + "resources": { + "path": "/.vib/jasperreports/goss" + }, + "remote": { + "workload": "deploy-jasperreports" + }, + "vars_file": "vars.yaml" + } + }, + { + "action_id": "cypress", + "params": { + "resources": { + "path": "/.vib/jasperreports/cypress" + }, + "endpoint": "lb-jasperreports-http", + "app_protocol": "HTTP", + "env": { + "username": "jaspervibadmin", + "password": "ComplicatedPassword123!4" + } + } } ] }, diff --git a/.vib/jasperreports/vib-verify.json b/.vib/jasperreports/vib-verify.json index 2e864ff671..8d9b51d0e0 100644 --- a/.vib/jasperreports/vib-verify.json +++ b/.vib/jasperreports/vib-verify.json @@ -22,7 +22,7 @@ "url": "{SHA_ARCHIVE}", "path": "/bitnami/jasperreports" }, - "runtime_parameters": "Imphc3BlcnJlcG9ydHNQYXNzd29yZCI6ICJTMzlCS1dqU2toIg==", + "runtime_parameters": "amFzcGVycmVwb3J0c1VzZXJuYW1lOiBqYXNwZXJ2aWJhZG1pbgpqYXNwZXJyZXBvcnRzUGFzc3dvcmQ6ICJDb21wbGljYXRlZFBhc3N3b3JkMTIzITQiCnBvZFNlY3VyaXR5Q29udGV4dDoKICBlbmFibGVkOiB0cnVlCiAgZnNHcm91cDogMTAwMgpjb250YWluZXJTZWN1cml0eUNvbnRleHQ6CiAgZW5hYmxlZDogdHJ1ZQogIHJ1bkFzVXNlcjogMTAwMgpwZXJzaXN0ZW5jZToKICBlbmFibGVkOiB0cnVlCnNlcnZpY2U6CiAgdHlwZTogTG9hZEJhbGFuY2VyCiAgcG9ydHM6CiAgICBodHRwOiA4MAptYXJpYWRiOgogIGVuYWJsZWQ6IHRydWUKICBhdXRoOgogICAgZGF0YWJhc2U6IGJpdG5hbWlfdGVzdF9qYXNwZXJyZXBvcnRzCiAgICB1c2VybmFtZTogYm5fdGVzdF9qYXNwZXJyZXBvcnRzCiAgICBwYXNzd29yZDogYml0bmFtaV90ZXN0X3Bhc3N3b3Jk", "target_platform": { "target_platform_id": "{VIB_ENV_TARGET_PLATFORM}", "size": { @@ -37,6 +37,32 @@ "endpoint": "lb-jasperreports-http", "app_protocol": "HTTP" } + }, + { + "action_id": "goss", + "params": { + "resources": { + "path": "/.vib/jasperreports/goss" + }, + "remote": { + "workload": "deploy-jasperreports" + }, + "vars_file": "vars.yaml" + } + }, + { + "action_id": "cypress", + "params": { + "resources": { + "path": "/.vib/jasperreports/cypress" + }, + "endpoint": "lb-jasperreports-http", + "app_protocol": "HTTP", + "env": { + "username": "jaspervibadmin", + "password": "ComplicatedPassword123!4" + } + } } ] }