Skip to content
This repository has been archived by the owner on Jan 7, 2020. It is now read-only.

Commit

Permalink
Merge pull request #378 from NickPhura/EM-676
Browse files Browse the repository at this point in the history
EM-676: Add functional test fixtures & automated local execution.
  • Loading branch information
esune authored Apr 9, 2018
2 parents 71c1cd0 + 6a8fe2e commit 07adae7
Show file tree
Hide file tree
Showing 16 changed files with 720 additions and 151 deletions.
111 changes: 56 additions & 55 deletions Jenkinsfile.dev
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ def notifySlack(text, url, channel, attachments) {
attachments: attachments
])
def encodedReq = URLEncoder.encode(payload, "UTF-8")
sh("curl -s -S -X POST --data \'payload=${encodedReq}\' ${slackURL}")
sh("curl -s -S -X POST --data \'payload=${encodedReq}\' ${slackURL}")
}

/*
Expand All @@ -30,7 +30,7 @@ def buildsSinceLastSuccess(previousBuild, build) {
}

/*
* Generates a string containing all the commit messages from
* Generates a string containing all the commit messages from
* the builds in pastBuilds.
*/
@NonCPS
Expand Down Expand Up @@ -103,7 +103,7 @@ podTemplate(label: 'generic-maven', name: 'generic-maven', serviceAccount: 'jenk
}
}
}
}
}

podTemplate(label: 'sonarqube-maven', name: 'sonarqube-maven', serviceAccount: 'jenkins', cloud: 'openshift', containers: [
containerTemplate(
Expand Down Expand Up @@ -136,7 +136,7 @@ podTemplate(label: 'sonarqube-maven', name: 'sonarqube-maven', serviceAccount: '
}
}
}
}
}

podTemplate(label: 'generic-maven', name: 'generic-maven', serviceAccount: 'jenkins', cloud: 'openshift', containers: [
containerTemplate(
Expand Down Expand Up @@ -184,57 +184,58 @@ podTemplate(label: 'generic-maven', name: 'generic-maven', serviceAccount: 'jenk
}
}

podTemplate(label: 'bddstack', name: 'bddstack', serviceAccount: 'jenkins', cloud: 'openshift', containers: [
containerTemplate(
name: 'jnlp',
image: '172.50.0.2:5000/openshift/jenkins-slave-bddstack',
resourceRequestCpu: '500m',
resourceLimitCpu: '1000m',
resourceRequestMemory: '1Gi',
resourceLimitMemory: '4Gi',
workingDir: '/home/jenkins',
command: '',
args: '${computer.jnlpmac} ${computer.name}',
envVars: [
secretEnvVar(key: 'ADMINPW', secretName: 'esm-server-secrets', secretKey: 'dev-admin-pwd')
]
)
])
{
stage('FT on Dev') {
node('bddstack') {
//the checkout is mandatory, otherwise functional test would fail
echo "checking out source"
echo "Build: ${BUILD_ID}"
checkout scm
dir('functional-tests') {
try {
sh './gradlew chromeHeadlessTest'
} finally {
archiveArtifacts allowEmptyArchive: true, artifacts: 'build/reports/geb/**/*'
junit 'build/test-results/**/*.xml'
publishHTML (target: [
allowMissing: false,
alwaysLinkToLastBuild: false,
keepAll: true,
reportDir: 'build/reports/spock',
reportFiles: 'index.html',
reportName: "BDD Spock Report"
])
publishHTML (target: [
allowMissing: false,
alwaysLinkToLastBuild: false,
keepAll: true,
reportDir: 'build/reports/tests/chromeHeadlessTest',
reportFiles: 'index.html',
reportName: "Full Test Report"
])
perfReport compareBuildPrevious: true, excludeResponseTime: true, ignoreFailedBuilds: true, ignoreUnstableBuilds: true, modeEvaluation: true, modePerformancePerTestCase: true, percentiles: '0,50,90,100', relativeFailedThresholdNegative: 80.0, relativeFailedThresholdPositive: 20.0, relativeUnstableThresholdNegative: 50.0, relativeUnstableThresholdPositive: 50.0, sourceDataFiles: 'build/test-results/**/*.xml'
}
}
}
}
}
// TODO: activate and verify once the new bddstack jenkins slave image is available
// podTemplate(label: 'bddstack', name: 'bddstack', serviceAccount: 'jenkins', cloud: 'openshift', containers: [
// containerTemplate(
// name: 'jnlp',
// image: '172.50.0.2:5000/openshift/jenkins-slave-bddstack',
// resourceRequestCpu: '500m',
// resourceLimitCpu: '1000m',
// resourceRequestMemory: '1Gi',
// resourceLimitMemory: '4Gi',
// workingDir: '/home/jenkins',
// command: '',
// args: '${computer.jnlpmac} ${computer.name}',
// envVars: [
// secretEnvVar(key: 'ADMINPW', secretName: 'esm-server-secrets', secretKey: 'dev-admin-pwd')
// ]
// )
// ])
// {
// stage('FT on Dev') {
// node('bddstack') {
// //the checkout is mandatory, otherwise functional test would fail
// echo "checking out source"
// echo "Build: ${BUILD_ID}"
// checkout scm
// dir('functional-tests') {
// try {
// sh './gradlew chromeHeadlessTest'
// } finally {
// archiveArtifacts allowEmptyArchive: true, artifacts: 'build/reports/geb/**/*'
// junit 'build/test-results/**/*.xml'
// publishHTML (target: [
// allowMissing: false,
// alwaysLinkToLastBuild: false,
// keepAll: true,
// reportDir: 'build/reports/spock',
// reportFiles: 'index.html',
// reportName: "BDD Spock Report"
// ])
// publishHTML (target: [
// allowMissing: false,
// alwaysLinkToLastBuild: false,
// keepAll: true,
// reportDir: 'build/reports/tests/chromeHeadlessTest',
// reportFiles: 'index.html',
// reportName: "Full Test Report"
// ])
// perfReport compareBuildPrevious: true, excludeResponseTime: true, ignoreFailedBuilds: true, ignoreUnstableBuilds: true, modeEvaluation: true, modePerformancePerTestCase: true, percentiles: '0,50,90,100', relativeFailedThresholdNegative: 80.0, relativeFailedThresholdPositive: 20.0, relativeUnstableThresholdNegative: 50.0, relativeUnstableThresholdPositive: 50.0, sourceDataFiles: 'build/test-results/**/*.xml'
// }
// }
// }
// }
// }

podTemplate(label: 'owasp-zap', name: 'owasp-zap', serviceAccount: 'jenkins', cloud: 'openshift', containers: [
containerTemplate(
Expand Down
88 changes: 88 additions & 0 deletions config/assets/functional.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
'use strict';

module.exports = {
client: {
lib: {
css: [
'public/lib/bootstrap/dist/css/bootstrap.css',
'public/lib/angular-toastr/dist/angular-toastr.css',
'public/lib/angular-bootstrap/ui-bootstrap-csp.css',
'public/assimilated/ng-table/dist/ng-table.min.css'
],
js: [
'public/lib/es6-shim/es6-shim.min.js',
'public/lib/angular/angular.js',
'public/lib/angular-resource/angular-resource.js',
'public/lib/angular-animate/angular-animate.js',
'public/lib/angular-messages/angular-messages.js',
'public/lib/angular-ui-router/release/angular-ui-router.js',
'public/lib/angular-ui-utils/ui-utils.js',
'public/lib/tinymce/tinymce.js',
'public/lib/angular-ui-tinymce/src/tinymce.js',
'public/lib/jquery/dist/jquery.min.js',
'public/lib/bootstrap/dist/js/bootstrap.min.js',
'public/lib/angular-bootstrap/ui-bootstrap.js',
'public/lib/angular-bootstrap/ui-bootstrap-tpls.js',
'public/lib/angular-file-upload/angular-file-upload.js',
'public/lib/ng-file-upload/ng-file-upload.js',
'public/lib/angular-sanitize/angular-sanitize.js',
'public/lib/angular-toastr/dist/angular-toastr.js',
'public/lib/angular-toastr/dist/angular-toastr.tpls.js',
'public/lib/angular-bootstrap-confirm/dist/angular-bootstrap-confirm.min.js',
'public/lib/lodash/lodash.min.js',
'public/lib/angular-simple-logger/dist/angular-simple-logger.js',
'public/lib/angular-google-maps/dist/angular-google-maps.min.js',
'public/lib/d3/d3.min.js',
'public/lib/angularD3/dist/angularD3.js',
'public/assimilated/ng-table/dist/ng-table.js',
'public/lib/moment/moment.js',
'public/lib/moment-timezone/moment-timezone.js',
'public/lib/angular-moment/angular-moment.js',
'public/lib/angular-scroll/angular-scroll.min.js',
'public/lib/angular-cookies/angular-cookies.min.js',
'public/moment-timezone-data.js',
'public/readable-range.js',
'public/lib/pdfjs-dist/build/pdf.combined.js',
'public/lib/ng-pdfviewer/ng-pdfviewer.js',
'public/lib/ng-pdfviewer/pdf.js',
'public/lib/ng-pdfviewer/compatibility.js'
],
tests: ['public/lib/angular-mocks/angular-mocks.js']
},
css: ['modules/*/client/css/*.css'],
less: ['modules/*/client/less/*.less'],
sass: ['modules/*/client/scss/*.scss'],
js: [
'modules/core/client/app/config.js',
'modules/core/client/app/init.js',
'modules/*/client/*.js',
'modules/*/client/**/*.js',
'modules/*/processes/*/client/*.js',
'modules/*/processes/*/client/**/*.js',
'modules/*/controls/*/client/*.js',
'modules/*/controls/*/client/**/*.js'
],
views: [
'modules/*/client/views/**/*.html',
'modules/*/processes/*/client/views/**/*.html',
'modules/*/controls/*/client/views/**/*.html'
],
templates: ['build/templates.js']
},
server: {
gruntConfig: 'gruntfile.js',
allJS: ['server.js', 'config/**/*.js', 'modules/*/server/**/*.js'],
models: [
'modules/*/server/models/**/*.js',
'modules/*/processes/*/server/models/**/*.js'
],
routes: [
'modules/!(core)/server/routes/**/*.js',
'modules/core/server/routes/**/*.js'
],
sockets: 'modules/*/server/sockets/**/*.js',
config: 'modules/*/server/config/*.js',
policies: 'modules/*/server/policies/*.js',
views: 'modules/*/server/views/*.html'
}
};
12 changes: 8 additions & 4 deletions config/env/default.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,20 @@ module.exports = {
googleAnalyticsTrackingID: process.env.GOOGLE_ANALYTICS_TRACKING_ID || 'GOOGLE_ANALYTICS_TRACKING_ID'
},
port: process.env.PORT || 3000,
token: {
tokenQuery: process.env.TOKEN_QUERY || 'smgov_userguid',
tokenParams: process.env.TOKEN_PARAMS || undefined,
tokenField: process.env.TOKEN_FIELD || undefined,
tokenHeader: process.env.TOKEN_HEADER || 'smgov_userguid',
failedOnMissing: process.env.TOKEN_ON_MISSING || false
},
templateEngine: 'swig',
// Session Cookie settings
sessionCookie: {
// session expiration is set by default to 24 hours
maxAge: 24 * (60 * 60 * 1000),
// httpOnly flag makes sure the cookie is only accessed
// through the HTTP protocol and not JS/browser
// through the HTTP protocol and not JS/browser
httpOnly: true,
// secure cookie should be turned to true to provide additional
// layer of security so that the cookie is set only when working
Expand All @@ -30,6 +37,3 @@ module.exports = {
logo: 'modules/core/client/img/brand/eao-banner-img-lg.png',
favicon: 'modules/core/client/img/brand/favicon.ico'
};

console.log(module.exports.app);

2 changes: 2 additions & 0 deletions config/env/development.js
Original file line number Diff line number Diff line change
Expand Up @@ -72,3 +72,5 @@ module.exports = {
livereload: true,
seedDB: process.env.MONGO_SEED || true
};

console.log(module.exports.app);
67 changes: 67 additions & 0 deletions config/env/functional.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
'use strict';

var defaultEnvConfig = require('./default');

module.exports = {
db: {
uri: process.env.MONGOHQ_URL || process.env.MONGOLAB_URI || 'mongodb://' + (process.env.DB_1_PORT_27017_TCP_ADDR || 'localhost') + '/' + (process.env.MONGODB_FUNC_DATABASE || 'esm-dev-func'),
acluri: process.env.MONGOHQ_URL || process.env.MONGOLAB_URI || 'mongodb://' + (process.env.DB_1_PORT_27017_TCP_ADDR || 'localhost') + '/esm-acl-test',
name: process.env.MONGODB_FUNC_DATABASE || 'esm-dev-func',
options: {
user: '',
pass: ''
},
// Enable mongoose debug mode
debug: process.env.MONGODB_DEBUG || false
},
port: process.env.FUNCTIONAL_PORT || 3001,
app: {
title: defaultEnvConfig.app.title + ' - Functional Test Environment'
},
facebook: {
clientID: process.env.FACEBOOK_ID || 'APP_ID',
clientSecret: process.env.FACEBOOK_SECRET || 'APP_SECRET',
callbackURL: '/api/auth/facebook/callback'
},
twitter: {
clientID: process.env.TWITTER_KEY || 'CONSUMER_KEY',
clientSecret: process.env.TWITTER_SECRET || 'CONSUMER_SECRET',
callbackURL: '/api/auth/twitter/callback'
},
google: {
clientID: process.env.GOOGLE_ID || 'APP_ID',
clientSecret: process.env.GOOGLE_SECRET || 'APP_SECRET',
callbackURL: '/api/auth/google/callback'
},
linkedin: {
clientID: process.env.LINKEDIN_ID || 'APP_ID',
clientSecret: process.env.LINKEDIN_SECRET || 'APP_SECRET',
callbackURL: '/api/auth/linkedin/callback'
},
github: {
clientID: process.env.GITHUB_ID || 'APP_ID',
clientSecret: process.env.GITHUB_SECRET || 'APP_SECRET',
callbackURL: '/api/auth/github/callback'
},
paypal: {
clientID: process.env.PAYPAL_ID || 'CLIENT_ID',
clientSecret: process.env.PAYPAL_SECRET || 'CLIENT_SECRET',
callbackURL: '/api/auth/paypal/callback',
sandbox: true
},
mailer: {
from: process.env.MAILER_FROM || 'MAILER_FROM',
options: {
service: process.env.MAILER_SERVICE_PROVIDER || 'MAILER_SERVICE_PROVIDER',
auth: {
user: process.env.MAILER_EMAIL_ID || 'MAILER_EMAIL_ID',
pass: process.env.MAILER_PASSWORD || 'MAILER_PASSWORD'
}
}
},

seedDB: process.env.MONGO_SEED || true

};

console.log(module.exports.app);
2 changes: 2 additions & 0 deletions config/env/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,3 +60,5 @@ module.exports = {
},
seedDB: process.env.MONGO_SEED || true
};

console.log(module.exports.app);
Loading

0 comments on commit 07adae7

Please sign in to comment.