curl/tests/data/test3207
Aki a2bcec0ee0
openssl: fix the data race when sharing an SSL session between threads
The SSL_Session object is mutated during connection inside openssl,
and it might not be thread-safe. Besides, according to documentation
of openssl:

```
SSL_SESSION objects keep internal link information about the session
cache list, when being inserted into one SSL_CTX object's session
cache. One SSL_SESSION object, regardless of its reference count,
must therefore only be used with one SSL_CTX object (and the SSL
objects created from this SSL_CTX object).
```
If I understand correctly, it is not safe to share it even in a
single thread.

Instead, serialize the SSL_SESSION before adding it to the cache,
and deserialize it after retrieving it from the cache, so that no
concurrent write to the same object is infeasible.

Also
 - add a ci test for thread sanitizer
 - add a test for sharing ssl sessions concurrently
 - avoid redefining memory functions when not building libcurl, but
   including the soruce in libtest
 - increase the concurrent connections limit in sws

Notice that there are fix for a global data race for openssl which
is not yet release. The fix is cherry pick for the ci test with
thread sanitizer.
d8def79838

Closes #14751
2024-09-02 23:35:44 +02:00

176 lines
4.3 KiB
Plaintext

<testcase>
<info>
<keywords>
HTTPS
</keywords>
</info>
# Server-side
<reply>
<data>
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
Content-Type: text/html
Content-Length: 29
run 1: foobar and so on fun!
</data>
<datacheck>
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
run 1: foobar and so on fun!
</datacheck>
</reply>
# Client-side
<client>
<features>
SSL
OpenSSL
</features>
<server>
https
</server>
<name>
concurrent HTTPS GET using shared ssl session cache
</name>
<tool>
lib%TESTNUMBER
</tool>
# provide URL and ca-cert
<command>
https://localhost:%HTTPSPORT/%TESTNUMBER %SRCDIR/certs/EdelCurlRoot-ca.crt
</command>
</client>
# Verify data after the test has been "shot"
<verify>
</verify>
</testcase>