sqlx/tests
Richard Bradfield 20877d83fd
Add extension support for SQLite (#2062)
* Add extension support for SQLite

While SQLite supports loading extensions at run-time via either the C
API or the SQL interface, they strongly recommend [1] only enabling the C
API so that SQL injections don't allow attackers to run arbitrary
extension code.

Here we take the most conservative approach, we enable only the C
function, and then only when the user requests extensions be loaded in
their `SqliteConnectOptions`, and disable it again once we're done
loading those requested modules. We don't add any support for loading
extensions via environment variables or connection strings.

Extensions in the options are stored as an IndexMap as the load order
can have side effects, they will be loaded in the order they are
supplied by the caller.

Extensions with custom entry points are supported, but a default API
is exposed as most users will interact with extensions using the
defaults.

[1]: https://sqlite.org/c3ref/enable_load_extension.html

* Add extension testing for SQlite

Extends x.py to download an appropriate shared object file for supported
operating systems, and uses wget to fetch one into the GitHub Actions
context for use by CI.

Overriding LD_LIBRARY_PATH for only this specific DB minimises the
impact on the rest of the suite.
2022-09-01 15:03:27 -07:00
..
any chore: replace dotenv with dotenvy (#2003) 2022-07-28 14:33:44 -07:00
certs update todo examples to 0.4 and use migrations 2020-07-18 05:43:16 -07:00
keys update todo examples to 0.4 and use migrations 2020-07-18 05:43:16 -07:00
migrate fix(macros): tell the compiler about external files/env vars to watch (#1332) 2021-07-21 16:36:22 -07:00
mssql fix: mssql uses unsigned for tinyint instead of signed (#2074) 2022-08-31 18:10:29 -07:00
mysql feat: implement testing utilities (#2001) 2022-08-02 14:38:12 -07:00
postgres feat: implement testing utilities (#2001) 2022-08-02 14:38:12 -07:00
sqlite Add extension support for SQLite (#2062) 2022-09-01 15:03:27 -07:00
ui Update some postgres trybuild tests 2021-01-12 03:39:10 -08:00
.dockerignore feat(mssql): fix a few bugs and implement Connection::describe 2020-06-07 02:00:31 -07:00
.env feat: introduce docker-compose based testing for running locally against many database combinations 2020-05-30 17:51:55 -07:00
.gitignore update todo examples to 0.4 and use migrations 2020-07-18 05:43:16 -07:00
docker-compose.yml feat: implement testing utilities (#2001) 2022-08-02 14:38:12 -07:00
docker.py Fix GitHub Actions and integration test (#1346) 2021-07-28 14:00:34 -07:00
README.md Fix GitHub Actions and integration test (#1346) 2021-07-28 14:00:34 -07:00
ui-tests.rs chore: replace dotenv with dotenvy (#2003) 2022-07-28 14:33:44 -07:00
x.py Add extension support for SQLite (#2062) 2022-09-01 15:03:27 -07:00

Running Tests

SQLx uses docker to run many compatible database systems for integration testing. You'll need to install docker to run the full suite. You can validate your docker installation with:

$ docker run hello-world

Start the databases with docker-compose before running tests:

$ docker-compose up

Run all tests against all supported databases using:

$ ./x.py

If you see test failures, or want to run a more specific set of tests against a specific database, you can specify both the features to be tests and the DATABASE_URL. e.g.

$ DATABASE_URL=mysql://root:password@127.0.0.1:49183/sqlx cargo test --no-default-features --features macros,offline,any,all-types,mysql,runtime-async-std-native-tls