@@ -2108,3 +2108,139 @@ EOF
2108
2108
assert_command dfx canister call e2e_project_frontend list_permitted ' (record { permission = variant { ManagePermissions }; })'
2109
2109
assert_match " $( dfx identity get-principal) "
2110
2110
}
2111
+
2112
+ @test " ic_env cookie is set for html files" {
2113
+ install_asset assetscanister
2114
+ dfx_start
2115
+
2116
+ touch src/e2e_project_frontend/assets/index.html
2117
+ echo " <html><body>Test</body></html>" > src/e2e_project_frontend/assets/index.html
2118
+
2119
+ dfx deploy
2120
+
2121
+ ID=$( dfx canister id e2e_project_frontend)
2122
+ PORT=$( get_webserver_port)
2123
+
2124
+ IC_ENV_COOKIE_REGEX=" ic_env=ic%5Froot%5Fkey%3D[0-9a-fA-F]+; SameSite=Lax"
2125
+
2126
+ # Request HTML file and verify ic_env cookie is set
2127
+ assert_command curl -v " http://$ID .localhost:$PORT /index.html"
2128
+ assert_match " set-cookie: $IC_ENV_COOKIE_REGEX "
2129
+ }
2130
+
2131
+ @test " ic_env cookie contains PUBLIC_ environment variables" {
2132
+ install_asset assetscanister
2133
+ dfx_start
2134
+
2135
+ touch src/e2e_project_frontend/assets/index.html
2136
+ echo " <html><body>Test</body></html>" > src/e2e_project_frontend/assets/index.html
2137
+
2138
+ dfx canister create --all
2139
+ dfx build --all
2140
+ dfx canister install e2e_project_frontend
2141
+
2142
+ ID=$( dfx canister id e2e_project_frontend)
2143
+
2144
+ set_canister_environment_variables " $ID " PUBLIC_TEST1=value1 PUBLIC_TEST2=value2
2145
+
2146
+ dfx deploy
2147
+
2148
+ PORT=$( get_webserver_port)
2149
+
2150
+ IC_ENV_COOKIE_REGEX=" ic_env=ic%5Froot%5Fkey%3D[0-9a-fA-F]+%26PUBLIC%5FTEST1%3Dvalue1%26PUBLIC%5FTEST2%3Dvalue2; SameSite=Lax"
2151
+
2152
+ # Request HTML file and verify cookie contains PUBLIC_ variables
2153
+ assert_command curl -v " http://$ID .localhost:$PORT /index.html"
2154
+ assert_match " set-cookie: $IC_ENV_COOKIE_REGEX "
2155
+ }
2156
+
2157
+ @test " ic_env cookie is not set for non-html files" {
2158
+ install_asset assetscanister
2159
+ dfx_start
2160
+
2161
+ touch src/e2e_project_frontend/assets/test.txt
2162
+ echo " plain text file" > src/e2e_project_frontend/assets/test.txt
2163
+ touch src/e2e_project_frontend/assets/script.js
2164
+ echo " console.log('test');" > src/e2e_project_frontend/assets/script.js
2165
+
2166
+ dfx deploy
2167
+
2168
+ ID=$( dfx canister id e2e_project_frontend)
2169
+ PORT=$( get_webserver_port)
2170
+
2171
+ # Request text file and verify no ic_env cookie is set
2172
+ assert_command curl -v " http://$ID .localhost:$PORT /test.txt"
2173
+ assert_not_match " set-cookie: ic_env="
2174
+
2175
+ # Request JS file and verify no ic_env cookie is set
2176
+ assert_command curl -v " http://$ID .localhost:$PORT /script.js"
2177
+ assert_not_match " set-cookie: ic_env="
2178
+ }
2179
+
2180
+ @test " ic_env cookie is set only for PUBLIC_ prefixed environment variables" {
2181
+ install_asset assetscanister
2182
+ dfx_start
2183
+
2184
+ touch src/e2e_project_frontend/assets/app.html
2185
+ echo " <html><body>App</body></html>" > src/e2e_project_frontend/assets/app.html
2186
+
2187
+ dfx canister create --all
2188
+ dfx build --all
2189
+ dfx canister install e2e_project_frontend
2190
+
2191
+ ID=$( dfx canister id e2e_project_frontend)
2192
+
2193
+ set_canister_environment_variables " $ID " PUBLIC_TEST1=value1 TEST2=value2
2194
+
2195
+ dfx deploy
2196
+
2197
+ PORT=$( get_webserver_port)
2198
+
2199
+ IC_ENV_COOKIE_REGEX_1=" ic_env=ic%5Froot%5Fkey%3D[0-9a-fA-F]+%26PUBLIC%5FTEST1%3Dvalue1; SameSite=Lax"
2200
+
2201
+ assert_command curl -v " http://$ID .localhost:$PORT /app.html"
2202
+ assert_match " set-cookie: $IC_ENV_COOKIE_REGEX_1 "
2203
+
2204
+ # Redeploy with no PUBLIC_ prefixed (case sensitive!) environment variables
2205
+ set_canister_environment_variables " $ID " public_TEST1=value1 TEST2=value2
2206
+ dfx deploy
2207
+
2208
+ IC_ENV_COOKIE_REGEX_2=" ic_env=ic%5Froot%5Fkey%3D[0-9a-fA-F]+; SameSite=Lax"
2209
+
2210
+ assert_command curl -v " http://$ID .localhost:$PORT /app.html"
2211
+ assert_match " set-cookie: $IC_ENV_COOKIE_REGEX_2 "
2212
+ }
2213
+
2214
+ @test " ic_env cookie updates on redeploy with new environment variables" {
2215
+ install_asset assetscanister
2216
+ dfx_start
2217
+
2218
+ touch src/e2e_project_frontend/assets/app.html
2219
+ echo " <html><body>App</body></html>" > src/e2e_project_frontend/assets/app.html
2220
+
2221
+ dfx canister create --all
2222
+ dfx build --all
2223
+ dfx canister install e2e_project_frontend
2224
+
2225
+ ID=$( dfx canister id e2e_project_frontend)
2226
+
2227
+ set_canister_environment_variables " $ID " PUBLIC_TEST1=value1
2228
+
2229
+ dfx deploy
2230
+
2231
+ PORT=$( get_webserver_port)
2232
+
2233
+ IC_ENV_COOKIE_REGEX_1=" ic_env=ic%5Froot%5Fkey%3D[0-9a-fA-F]+%26PUBLIC%5FTEST1%3Dvalue1; SameSite=Lax"
2234
+
2235
+ assert_command curl -v " http://$ID .localhost:$PORT /app.html"
2236
+ assert_match " set-cookie: $IC_ENV_COOKIE_REGEX_1 "
2237
+
2238
+ # Redeploy with additional PUBLIC_ variable
2239
+ set_canister_environment_variables " $ID " PUBLIC_TEST1=value1 PUBLIC_TEST2=value2
2240
+ dfx deploy
2241
+
2242
+ IC_ENV_COOKIE_REGEX_2=" ic_env=ic%5Froot%5Fkey%3D[0-9a-fA-F]+%26PUBLIC%5FTEST1%3Dvalue1%26PUBLIC%5FTEST2%3Dvalue2; SameSite=Lax"
2243
+
2244
+ assert_command curl -v " http://$ID .localhost:$PORT /app.html"
2245
+ assert_match " set-cookie: $IC_ENV_COOKIE_REGEX_2 "
2246
+ }
0 commit comments