Skip to content

Commit dea6be4

Browse files
author
Marcelo R Costa
authored
task(gen3-qa-in-a-box): Run tests within a container/pod with selenium-standlone (uc-cdis#668)
1 parent fb1bf0c commit dea6be4

File tree

4 files changed

+260
-39
lines changed

4 files changed

+260
-39
lines changed

Dockerfile

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM quay.io/cdis/alpine:3.12.1
1+
FROM quay.io/cdis/debian:bullseye
22

33
USER root
44

@@ -9,8 +9,8 @@ ARG group=sdet
99
ARG uid=1000
1010
ARG gid=1000
1111

12-
RUN addgroup -g ${gid} ${group} \
13-
&& adduser --home "$SDET_HOME" --uid ${uid} --ingroup ${group} --disabled-password --shell /bin/sh ${user}
12+
RUN addgroup --gid ${gid} ${group} \
13+
&& useradd -m -d "$SDET_HOME" -u ${uid} -g ${group} -s /bin/bash ${user}
1414

1515
ENV DEBIAN_FRONTEND=noninteractive
1616

@@ -30,37 +30,42 @@ ENV PYTHONUNBUFFERED=1 \
3030
# prepend poetry and venv to path
3131
ENV PATH="$POETRY_HOME/bin:$VENV_PATH/bin:$PATH"
3232

33-
RUN apk add --update --no-cache python3 \
33+
RUN apt-get update \
34+
&& apt-get install -y python3 python3-pip \
3435
&& ln -sf python3 /usr/bin/python \
35-
&& python3 -m ensurepip \
3636
&& pip3 install --no-cache --upgrade pip setuptools
3737

3838
# install everything else
39-
RUN set -xe && apk add --no-cache --virtual .build-deps \
39+
RUN set -xe && apt-get update && apt-get upgrade -y && apt-get install -y \
4040
zip \
4141
unzip \
4242
less \
4343
vim \
4444
gcc \
45+
xvfb \
46+
libxi6 \
47+
libgconf-2-4 \
4548
libc-dev \
4649
libffi-dev \
4750
make \
48-
openssl-dev \
49-
pcre-dev \
50-
zlib-dev \
51-
linux-headers \
51+
libssl-dev \
52+
libghc-regex-pcre-dev \
53+
zlib1g-dev \
54+
linux-headers-amd64 \
5255
curl \
5356
wget \
5457
jq \
5558
nodejs \
56-
npm
59+
npm \
60+
openjdk-11-jre-headless
5761

5862
# Copy the gen3-qa framework scripts (test suites + service and utils modules)
59-
COPY codecept.conf.js \
60-
package.json \
63+
COPY package.json \
6164
package-lock.json \
6265
test_setup.js \
6366
.eslintrc.js ${SDET_HOME}/
67+
# gen3-qa-in-a-box requires a couple of changes to its webdriver config
68+
COPY gen3.qa.in.a.box.codecept.conf.js ${SDET_HOME}/codecept.conf.js
6469
COPY helpers ${SDET_HOME}/helpers/
6570
COPY hooks ${SDET_HOME}/hooks/
6671
COPY services ${SDET_HOME}/services/
@@ -74,9 +79,16 @@ RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-
7479
RUN mkdir -p ${SDET_HOME}/controller/gen3qa-controller
7580
WORKDIR ${SDET_HOME}/controller
7681

82+
# Install google chrome
83+
RUN curl -sS -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
84+
&& echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list \
85+
&& apt-get -y update \
86+
&& apt-get -y install google-chrome-stable
87+
7788
# utilize the selenium sidecar as there is no selenium-hub in prod-tier environments
7889
RUN cd ${SDET_HOME} \
7990
&& npm install \
91+
&& npx selenium-standalone install \
8092
&& sed -i "s/ host: 'selenium-hub',/ host: 'localhost',/" codecept.conf.js
8193

8294
# poetry artifacts

gen3.qa.in.a.box.codecept.conf.js

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
const { Env } = require('./utils/env');
2+
3+
Env.setupEnvVariables();
4+
5+
// Set hostname according to namespace
6+
exports.config = {
7+
output: './output',
8+
helpers: {
9+
WebDriver: {
10+
url: `https://${process.env.HOSTNAME}`,
11+
smartWait: 30000,
12+
browser: 'chrome',
13+
// fullPageScreenshots: true,
14+
disableScreenshots: true,
15+
desiredCapabilities: {
16+
chromeOptions: {
17+
args: [
18+
'--headless', // for dev, you can comment this line to open actual chrome for easier test
19+
'--disable-gpu', // https://stackoverflow.com/questions/51959986/how-to-solve-selenium-chromedriver-timed-out-receiving-message-from-renderer-exc
20+
'--whitelisted-ips=*',
21+
'--disable-features=VizDisplayCompositor', // https://stackoverflow.com/a/55371396/491553
22+
'--window-size=1280,720',
23+
'--no-sandbox',
24+
// '--enable-features=NetworkService,NetworkServiceInProcess',
25+
'--disable-infobars', // https://stackoverflow.com/a/43840128/1689770
26+
'--disable-dev-shm-usage', // https://stackoverflow.com/a/50725918/1689770
27+
'--disable-browser-side-navigation', // https://stackoverflow.com/a/49123152/1689770
28+
],
29+
},
30+
},
31+
restart: true, // restart browser for every test
32+
timeouts: {
33+
script: 6000,
34+
// 'page load': 10000,
35+
},
36+
port: 4444,
37+
},
38+
REST: {
39+
endpoint: `https://${process.env.HOSTNAME}`,
40+
timeout: 300000,
41+
defaultHeaders: {
42+
common: {
43+
Accept: 'application/json',
44+
},
45+
get: {},
46+
head: {},
47+
delete: {},
48+
post: { 'Content-Type': 'application/json' },
49+
patch: { 'Content-Type': 'application/json' },
50+
put: { 'Content-Type': 'application/json' },
51+
},
52+
},
53+
CDISHelper: {
54+
require: './helpers/cdisHelper.js',
55+
},
56+
browserLogHelper: {
57+
require: './helpers/browserLogHelper.js',
58+
},
59+
},
60+
include: {
61+
// General Utils
62+
nodes: './utils/nodes.js',
63+
users: './utils/user.js',
64+
google: './utils/google.js',
65+
files: './utils/file.js',
66+
dataUpload: './utils/dataUpload.js',
67+
68+
// APIs
69+
sheepdog: './services/apis/sheepdog/sheepdogService.js',
70+
indexd: './services/apis/indexd/indexdService.js',
71+
drs: './services/apis/drs/drsService.js',
72+
peregrine: './services/apis/peregrine/peregrineService.js',
73+
pidgin: './services/apis/pidgin/pidginService.js',
74+
fence: './services/apis/fence/fenceService.js',
75+
dataClient: './services/apis/dataClient/dataClientService.js',
76+
etl: './services/apis/etl/etlService.js',
77+
manifestService: './services/apis/manifestService/manifestServiceService.js',
78+
guppy: './services/apis/guppy/guppyService.js',
79+
mds: './services/apis/mds/mdsService.js',
80+
auditService: './services/apis/auditService/auditService.js',
81+
82+
// Pages
83+
home: './services/portal/home/homeService.js',
84+
indexing: './services/portal/indexing/indexingService.js',
85+
login: './services/portal/login/loginService.js',
86+
explorer: './services/portal/explorer/explorerService.js',
87+
portalDataUpload: './services/portal/dataUpload/dataUploadService.js',
88+
portalExportToWorkspace: './services/portal/exportToWorkspace/exportToWorkspaceService.js',
89+
portalCoreMetadataPage: './services/portal/coreMetadataPage/coreMetadataPageService.js',
90+
discovery: './services/portal/discovery/discoveryService.js',
91+
},
92+
mocha: {
93+
reporterOptions: {
94+
'codeceptjs-cli-reporter': {
95+
stdout: '-',
96+
options: {
97+
verbose: true,
98+
steps: true,
99+
},
100+
},
101+
'mocha-junit-reporter': {
102+
stdout: 'output/result[hash].xml',
103+
options: {
104+
mochaFile: 'output/result[hash].xml',
105+
verbose: true,
106+
steps: true,
107+
},
108+
},
109+
},
110+
},
111+
bootstrap: require('./test_setup.js'), // eslint-disable-line global-require
112+
hooks: [
113+
require('./hooks/test_results.js'), // eslint-disable-line global-require
114+
],
115+
tests: './suites/**/*.js',
116+
gherkin: {
117+
features: './suites/bdd/**/*.feature',
118+
steps: './suites/bdd/**/*.js',
119+
},
120+
plugins: {
121+
allure: {},
122+
tryTo: {
123+
enabled: true,
124+
},
125+
screenshotOnFail: {
126+
enabled: true,
127+
},
128+
},
129+
timeout: 60000,
130+
name: 'selenium',
131+
};

package-lock.json

Lines changed: 103 additions & 25 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)