I am developing my kibana plugin. I coded some tests which I can run in local easily like this:
TMPDIR=$HOME/tmp TEST_BROWSER_HEADLESS=0 yarn test --functional-test --testConfigFile ./test/functional/config.js
Now it is getting more complicated I want to run those tests in a Docker. I have a Dockerfile running kibana with my plugin working well. Then I try to run this bash script
cd plugins/my-plugin
CHROME_OUTPUT=$(npx @puppeteer/browsers install chrome@136)
npx @puppeteer/browsers install chromedriver@136
TEST_BROWSER_BINARY_PATH=$(echo "$CHROME_OUTPUT" | grep -oE '/.*chrome-linux64/chrome')
cd -
sudo apt install -y
default-jre
chromium-chromedriver
yarn es snapshot &
(NODE_OPTIONS="--max-old-space-size=4096" yarn start --no-base-path >startup.log &) &&
while ! grep -q "Kibana is now available" "startup.log"; do
echo "Pattern not found, checking again..."
tail startup.log
sleep 10
done
TAGS=$1
if [ -z "TAGS" ]; then
TMPDIR=$HOME/tmp TEST_BROWSER_BINARY_PATH=$TEST_BROWSER_BINARY_PATH TEST_BROWSER_HEADLESS=1 yarn --cwd plugins/my-plugin test --functional-test --testConfigFile ./test/functional/config.js
else
TMPDIR=$HOME/tmp TEST_BROWSER_BINARY_PATH=$TEST_BROWSER_BINARY_PATH TEST_BROWSER_HEADLESS=1 yarn --cwd plugins/my-plugin test --functional-test --testConfigFile ./test/functional/config.js --tags "$TAGS"
fi
yarn test is running
node /home/.../kibana/scripts/functional_test_runner.js --config /home/.../my-config.js
Here is my-config.js
export default async function ({ readConfigFile }) {
const functionalConfig = await readConfigFile(
require.resolve(`${REPO_ROOT}/test/functional/config.base`)
);
const baseConfig = functionalConfig.getAll();
return {
// Inherit Kibana function test config
...baseConfig,
services: {
...baseConfig.services,
dataGridHelper: DataGridHelperService,
},
security: {
...baseConfig.security,
disableTestUser: true,
},
servers: {
kibana: {
protocol: 'http',
hostname: 'localhost',
port: 5601,
auth: 'elastic:changeme',
username: 'elastic',
password: 'changeme',
},
elasticsearch: {
protocol: 'http',
hostname: 'localhost',
port: 9200,
username: 'elastic',
password: 'changeme',
auth: 'elastic:changeme',
},
},
testFiles: [require.resolve('./tests')],
browser: {
type: 'chrome',
},
uiSettings: { defaults: undefined },
junit: {
enabled: true,
reportName: 'Table actions UX/UI Integration Tests',
},
screenshots: {
directory: `${__dirname}/screenshots`,
},
snapshots: {
directory: `${__dirname}/snapshots`,
},
failureDebugging: {
htmlDirectory: `${__dirname}/failure_debug/html`,
},
};
}
So like I said in local on my machine it is working no problem but in my Docker container I have this error (actually it is in Jenkins):
debg KIBANA_CI_STATS_CONFIG environment variable not found, disabling CiStatsReporter
debg Loading config file from test/functional/config.js
debg Loading config file from ../../test/functional/config.base.js
debg Loading config file from ../../test/common/config.js
debg Only running suites which are compatible with ES version 9.0.2
debg randomness seed: 1750946212975
debg [webdriver] Creating session
warn Failure while creating webdriver instance
warn SessionNotCreatedError: session not created: probably user data directory is already in use, please specify a unique value for --user-data-dir argument, or don't use --user-data-dir
at Object.throwDecodedError (/home/.../kibana/node_modules/selenium-webdriver/lib/error.js:523:15)
at parseHttpResponse (/home/.../kibana/node_modules/selenium-webdriver/lib/http.js:524:13)
at Executor.execute (/home/.../kibana/node_modules/selenium-webdriver/lib/http.js:456:28)
at processTicksAndRejections (node:internal/process/task_queues:95:5)
at Executor.<anonymous> (prevent_parallel_calls.ts:49:14) {
remoteStacktrace: '#0 0x5c1f64bff7fa <unknown>n' +
'#1 0x5c1f646a3e90 <unknown>n' +
'#2 0x5c1f646ddcfb <unknown>n' +
'#3 0x5c1f646d9a3f <unknown>n' +
'#4 0x5c1f64729c15 <unknown>n' +
'#5 0x5c1f64729136 <unknown>n' +
'#6 0x5c1f6471b013 <unknown>n' +
'#7 0x5c1f646e7b3b <unknown>n' +
'#8 0x5c1f646e87a1 <unknown>n' +
'#9 0x5c1f64bc4b9b <unknown>n' +
'#10 0x5c1f64bc8a8a <unknown>n' +
'#11 0x5c1f64bac912 <unknown>n' +
'#12 0x5c1f64bc9604 <unknown>n' +
'#13 0x5c1f64b9174f <unknown>n' +
'#14 0x5c1f64bed678 <unknown>n' +
'#15 0x5c1f64bed856 <unknown>n' +
'#16 0x5c1f64bfe666 <unknown>n' +
'#17 0x73e869214ac3 <unknown>n'
}
What could I have forget in the config.js or in the bash script