diff --git a/.github/workflows/cd-pipeline.yml b/.github/workflows/cd-pipeline.yml
index f10eaa848..5e1836797 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 000000000..876594274
--- /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 000000000..098ecf440
--- /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 000000000..e7f5712e0
--- /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 000000000..089321b21
--- /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 000000000..87cdbaf18
--- /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 000000000..37a498fb5
--- /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 000000000..f0217c977
--- /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 000000000..648bbc669
--- /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 000000000..5a8ea55e1
--- /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 82641c213..f8debd721 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 2e864ff67..8d9b51d0e 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"
+ }
+ }
}
]
}