@@ -8,17 +8,86 @@ function short_version() {
8
8
echo " ${__major} .${__minor: 0: 1} "
9
9
}
10
10
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
+
11
78
if [[ -z " $CONFIG_FILE " ]]; then
12
79
FILENAME=" /opt/selenium/config.toml"
13
80
else
14
81
FILENAME=" $CONFIG_FILE "
15
82
fi
16
83
84
+ echo -n " " > " $FILENAME "
85
+
17
86
if [[ -n " ${SE_EVENT_BUS_HOST} " ]]; then
18
87
echo " [events]
19
88
publish = \" tcp://${SE_EVENT_BUS_HOST} :${SE_EVENT_BUS_PUBLISH_PORT} \"
20
89
subscribe = \" tcp://${SE_EVENT_BUS_HOST} :${SE_EVENT_BUS_SUBSCRIBE_PORT} \"
21
- " > " $FILENAME "
90
+ " >> " $FILENAME "
22
91
fi
23
92
24
93
if [[ -z " ${SE_NODE_HOST} " ]] && [[ -z " ${SE_NODE_PORT} " ]]; then
39
108
echo " port = \" ${SE_NODE_PORT} \" " >> " $FILENAME "
40
109
fi
41
110
111
+ if [[ -n " ${SE_RELAX_CHECKS} " ]]; then
112
+ echo " [network]" >> " $FILENAME "
113
+ echo " relax-checks = ${SE_RELAX_CHECKS} " >> " $FILENAME "
114
+ fi
115
+
42
116
echo " [node]" >> " $FILENAME "
43
117
# String, Url where the Grid can be reached
44
118
if [[ -z " ${SE_NODE_GRID_URL} " ]]; then
@@ -50,44 +124,65 @@ echo "session-timeout = ${SE_NODE_SESSION_TIMEOUT}" >>"$FILENAME"
50
124
echo " override-max-sessions = ${SE_NODE_OVERRIDE_MAX_SESSIONS} " >> " $FILENAME "
51
125
echo " detect-drivers = false" >> " $FILENAME "
52
126
echo " 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 "
55
128
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
85
133
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
93
188
fi
0 commit comments