@@ -8,17 +8,86 @@ function short_version() {
88 echo " ${__major} .${__minor: 0: 1} "
99}
1010
11+ # A global array of environment variable prefixes supports different browser suffixes
12+ ENV_PREFIXES=(
13+ " SE_NODE_STEREOTYPE"
14+ " SE_NODE_BROWSER_NAME"
15+ " SE_NODE_BROWSER_VERSION"
16+ " SE_NODE_PLATFORM_NAME"
17+ " SE_BROWSER_BINARY_LOCATION"
18+ " SE_NODE_STEREOTYPE_EXTRA"
19+ " SE_NODE_MAX_SESSIONS"
20+ )
21+
22+ function backup_original_env_vars() {
23+ echo " Backing up original environment variables..."
24+
25+ for prefix in " ${ENV_PREFIXES[@]} " ; do
26+ local backup_var=" ${prefix} _ORIGINAL"
27+ local common_var=" ${prefix} "
28+
29+ # Backup original value if not already backed up
30+ if [[ -z " ${! backup_var} " ]] && [[ -n " ${! common_var} " ]]; then
31+ eval " ${backup_var} =\" ${! common_var} \" "
32+ echo " Backed up original ${common_var} =${! common_var} to ${backup_var} "
33+ fi
34+ done
35+ }
36+
37+ function restore_original_env_vars() {
38+ echo " Restoring original environment variables..."
39+
40+ for prefix in " ${ENV_PREFIXES[@]} " ; do
41+ local backup_var=" ${prefix} _ORIGINAL"
42+ local common_var=" ${prefix} "
43+
44+ # Restore original value if backup exists
45+ if [[ -n " ${! backup_var} " ]]; then
46+ eval " ${common_var} =\" ${! backup_var} \" "
47+ echo " Restored original ${backup_var} =${! backup_var} to ${common_var} "
48+ else
49+ # Clear the variable if no backup exists
50+ eval " ${common_var} =\"\" "
51+ echo " Cleared ${common_var} (no original backup)"
52+ fi
53+ done
54+ }
55+
56+ function assign_browser_specific_env_vars() {
57+ local browser_name=$1
58+
59+ # Set browser-specific values or inherit original values
60+ for prefix in " ${ENV_PREFIXES[@]} " ; do
61+ local browser_specific_var=" ${prefix} _${browser_name} "
62+ local common_var=" ${prefix} "
63+ local backup_var=" ${prefix} _ORIGINAL"
64+
65+ # Check if the browser-specific environment variable exists
66+ if [[ -n " ${! browser_specific_var} " ]]; then
67+ # Assign the browser-specific value to the common variable
68+ eval " ${common_var} =\" ${! browser_specific_var} \" "
69+ echo " Assigned ${browser_specific_var} =${! browser_specific_var} to ${common_var} "
70+ elif [[ -n " ${! backup_var} " ]]; then
71+ # Inherit original value if browser-specific value is not set
72+ eval " ${common_var} =\" ${! backup_var} \" "
73+ echo " Inherited original ${backup_var} =${! backup_var} to ${common_var} "
74+ fi
75+ done
76+ }
77+
1178if [[ -z " $CONFIG_FILE " ]]; then
1279 FILENAME=" /opt/selenium/config.toml"
1380else
1481 FILENAME=" $CONFIG_FILE "
1582fi
1683
84+ echo -n " " > " $FILENAME "
85+
1786if [[ -n " ${SE_EVENT_BUS_HOST} " ]]; then
1887 echo " [events]
1988 publish = \" tcp://${SE_EVENT_BUS_HOST} :${SE_EVENT_BUS_PUBLISH_PORT} \"
2089 subscribe = \" tcp://${SE_EVENT_BUS_HOST} :${SE_EVENT_BUS_SUBSCRIBE_PORT} \"
21- " > " $FILENAME "
90+ " >> " $FILENAME "
2291fi
2392
2493if [[ -z " ${SE_NODE_HOST} " ]] && [[ -z " ${SE_NODE_PORT} " ]]; then
39108 echo " port = \" ${SE_NODE_PORT} \" " >> " $FILENAME "
40109fi
41110
111+ if [[ -n " ${SE_RELAX_CHECKS} " ]]; then
112+ echo " [network]" >> " $FILENAME "
113+ echo " relax-checks = ${SE_RELAX_CHECKS} " >> " $FILENAME "
114+ fi
115+
42116echo " [node]" >> " $FILENAME "
43117# String, Url where the Grid can be reached
44118if [[ -z " ${SE_NODE_GRID_URL} " ]]; then
@@ -50,44 +124,65 @@ echo "session-timeout = ${SE_NODE_SESSION_TIMEOUT}" >>"$FILENAME"
50124echo " override-max-sessions = ${SE_NODE_OVERRIDE_MAX_SESSIONS} " >> " $FILENAME "
51125echo " detect-drivers = false" >> " $FILENAME "
52126echo " drain-after-session-count = ${DRAIN_AFTER_SESSION_COUNT:- $SE_DRAIN_AFTER_SESSION_COUNT } " >> " $FILENAME "
53- echo " max-sessions = ${SE_NODE_MAX_SESSIONS}
54- " >> " $FILENAME "
127+ echo " " >> " $FILENAME "
55128
56- if [ -f /opt/selenium/browser_name ]; then
57- SE_NODE_BROWSER_NAME=$( cat /opt/selenium/browser_name)
58- fi
59- if [ -f /opt/selenium/browser_version ] && [ " ${SE_NODE_BROWSER_VERSION,,} " = " stable" ]; then
60- SE_NODE_BROWSER_VERSION=$( short_version $( cat /opt/selenium/browser_version) )
61- fi
62- if [ -f /opt/selenium/browser_binary_location ] && [ -z " ${SE_BROWSER_BINARY_LOCATION} " ]; then
63- SE_BROWSER_BINARY_LOCATION=$( cat /opt/selenium/browser_binary_location)
64- fi
65- SE_NODE_CONTAINER_NAME=" ${SE_NODE_CONTAINER_NAME:- $(hostname)} "
66-
67- # 'browserName' is mandatory for default stereotype
68- if [[ -z " ${SE_NODE_STEREOTYPE} " ]] && [[ -n " ${SE_NODE_BROWSER_NAME} " ]] && ([[ -z " ${SE_NODE_RELAY_URL} " ]] || [[ " ${SE_NODE_RELAY_ONLY} " = " false" ]]); then
69- SE_NODE_STEREOTYPE=" {\" browserName\" : \" ${SE_NODE_BROWSER_NAME} \" , \" browserVersion\" : \" ${SE_NODE_BROWSER_VERSION} \" , \" platformName\" : \" ${SE_NODE_PLATFORM_NAME} \" , \" se:containerName\" : \" ${SE_NODE_CONTAINER_NAME} \" , \" container:hostname\" : \" $( hostname) \" }"
70- if [[ -n " ${SE_BROWSER_BINARY_LOCATION} " ]]; then
71- SE_NODE_STEREOTYPE=" $( python3 /opt/bin/json_merge.py " ${SE_NODE_STEREOTYPE} " " {${SE_BROWSER_BINARY_LOCATION} }" ) "
72- fi
73- else
74- SE_NODE_STEREOTYPE=" ${SE_NODE_STEREOTYPE} "
75- fi
76- if [[ -n " ${SE_NODE_STEREOTYPE_EXTRA} " ]]; then
77- echo " Merging SE_NODE_STEREOTYPE_EXTRA=${SE_NODE_STEREOTYPE_EXTRA} to main stereotype"
78- SE_NODE_STEREOTYPE=" $( python3 /opt/bin/json_merge.py " ${SE_NODE_STEREOTYPE} " " ${SE_NODE_STEREOTYPE_EXTRA} " ) "
79- if [[ $? -ne 0 ]]; then
80- echo " Failed to merge SE_NODE_STEREOTYPE_EXTRA. Please check the format of the JSON string. Keep using main stereotype."
81- else
82- echo " Merged stereotype: ${SE_NODE_STEREOTYPE} "
83- fi
84- fi
129+ # Check if /opt/selenium/browsers directory exists and iterate through browser folders
130+ if [ -d " /opt/selenium/browsers" ]; then
131+ # Backup original environment variables before processing browsers
132+ backup_original_env_vars
85133
86- # 'stereotype' setting is mandatory
87- if [[ -n " ${SE_NODE_STEREOTYPE} " ]]; then
88- echo " [[node.driver-configuration]]" >> " $FILENAME "
89- echo " display-name = \" ${SE_NODE_BROWSER_NAME} \" " >> " $FILENAME "
90- echo " stereotype = '${SE_NODE_STEREOTYPE} '" >> " $FILENAME "
91- echo " max-sessions = ${SE_NODE_MAX_SESSIONS}
92- " >> " $FILENAME "
134+ for browser_dir in /opt/selenium/browsers/* /; do
135+ if [ -d " $browser_dir " ]; then
136+ browser_name=$( basename " $browser_dir " | tr ' [:lower:]' ' [:upper:]' )
137+ echo " ===Start generating stereotype for browser: ${browser_name} ==="
138+ # Assign environment variables with browser suffix to common variables
139+ assign_browser_specific_env_vars " $browser_name "
140+
141+ if [ -f " ${browser_dir} name" ]; then
142+ SE_NODE_BROWSER_NAME=$( cat " ${browser_dir} name" )
143+ fi
144+ if [ -f " ${browser_dir} version" ] && [ " ${SE_NODE_BROWSER_VERSION,,} " = " stable" ]; then
145+ SE_NODE_BROWSER_VERSION=$( short_version " $( cat " ${browser_dir} version" ) " )
146+ fi
147+ if [ -f " ${browser_dir} binary_location" ] && [ -z " ${SE_BROWSER_BINARY_LOCATION} " ]; then
148+ SE_BROWSER_BINARY_LOCATION=$( cat " ${browser_dir} binary_location" )
149+ fi
150+ SE_NODE_CONTAINER_NAME=" ${SE_NODE_CONTAINER_NAME:- $(hostname)} "
151+
152+ # 'browserName' is mandatory for default stereotype
153+ if [[ -z " ${SE_NODE_STEREOTYPE} " ]] && [[ -n " ${SE_NODE_BROWSER_NAME} " ]] && ([[ -z " ${SE_NODE_RELAY_URL} " ]] || [[ " ${SE_NODE_RELAY_ONLY} " = " false" ]]); then
154+ SE_NODE_STEREOTYPE=" {\" browserName\" : \" ${SE_NODE_BROWSER_NAME} \" , \" browserVersion\" : \" ${SE_NODE_BROWSER_VERSION} \" , \" platformName\" : \" ${SE_NODE_PLATFORM_NAME} \" , \" se:containerName\" : \" ${SE_NODE_CONTAINER_NAME} \" , \" container:hostname\" : \" $( hostname) \" }"
155+ if [[ -n " ${SE_BROWSER_BINARY_LOCATION} " ]]; then
156+ SE_NODE_STEREOTYPE=" $( python3 /opt/bin/json_merge.py " ${SE_NODE_STEREOTYPE} " " ${SE_BROWSER_BINARY_LOCATION} " ) "
157+ fi
158+ else
159+ SE_NODE_STEREOTYPE=" ${SE_NODE_STEREOTYPE} "
160+ fi
161+ if [[ -n " ${SE_NODE_STEREOTYPE_EXTRA} " ]]; then
162+ echo " Merging SE_NODE_STEREOTYPE_EXTRA=${SE_NODE_STEREOTYPE_EXTRA} to main stereotype for $browser_name "
163+ SE_NODE_STEREOTYPE=" $( python3 /opt/bin/json_merge.py " ${SE_NODE_STEREOTYPE} " " ${SE_NODE_STEREOTYPE_EXTRA} " ) "
164+ if [[ $? -ne 0 ]]; then
165+ echo " Failed to merge SE_NODE_STEREOTYPE_EXTRA for $browser_name . Please check the format of the JSON string. Keep using main stereotype."
166+ else
167+ echo " Merged stereotype for $browser_name : ${SE_NODE_STEREOTYPE} "
168+ fi
169+ fi
170+
171+ # 'stereotype' setting is mandatory
172+ if [[ -n " ${SE_NODE_STEREOTYPE} " ]]; then
173+ echo " [[node.driver-configuration]]" >> " $FILENAME "
174+ echo " display-name = \" ${SE_NODE_BROWSER_NAME} \" " >> " $FILENAME "
175+ echo " stereotype = '${SE_NODE_STEREOTYPE} '" >> " $FILENAME "
176+ # Validate SE_NODE_MAX_SESSIONS is a positive integer
177+ if [[ " ${SE_NODE_MAX_SESSIONS} " =~ ^[0-9]+$ ]] && [[ " ${SE_NODE_MAX_SESSIONS} " -gt 0 ]]; then
178+ echo " max-sessions = ${SE_NODE_MAX_SESSIONS} " >> " $FILENAME "
179+ fi
180+ echo " " >> " $FILENAME "
181+ fi
182+
183+ # Restore original environment variables for next browser iteration
184+ restore_original_env_vars
185+ echo " ===Stop generating stereotype for browser: ${browser_name} ==="
186+ fi
187+ done
93188fi
0 commit comments