Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add snapshot testing to CLI & set up AWS mock #13672

Open
wants to merge 30 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
2887bb9
Do not normalize values
blaginin Nov 26, 2024
813d634
Fix tests & update docs
blaginin Nov 26, 2024
c3de620
Prettier
blaginin Nov 26, 2024
0e11d36
Merge branch 'main' into bugfix/do-not-normalize-values
blaginin Dec 1, 2024
cb7da8c
Merge branch 'main' into bugfix/do-not-normalize-values
blaginin Dec 2, 2024
7c2b3fe
Lowercase config params
blaginin Dec 3, 2024
9146e4b
Add snap to CLI & set up AWS mock
blaginin Dec 5, 2024
9d856c3
Refactor tests
blaginin Dec 6, 2024
0574ab8
Unify transform and parse
blaginin Dec 9, 2024
2045495
Merge branch 'main' into bugfix/do-not-normalize-values
blaginin Dec 9, 2024
06c013d
Fix tests
blaginin Dec 9, 2024
4870219
Merge branch 'main' into cli-snap
blaginin Dec 10, 2024
a02625e
Merge branch 'bugfix/do-not-normalize-values' into cli-snap
blaginin Dec 10, 2024
65809a7
Setup CLI
blaginin Dec 10, 2024
05a562f
Show minio output
blaginin Dec 10, 2024
36f8550
Format Cargo.toml
blaginin Dec 10, 2024
921f229
Do not hardcode AWS params
blaginin Dec 11, 2024
107c515
Test options parsing
blaginin Dec 11, 2024
2d430a0
Add allow http
blaginin Dec 11, 2024
4b56506
Fix aws build
blaginin Dec 12, 2024
1581e7a
Merge branch 'main' into cli-snap
blaginin Dec 12, 2024
ad9734e
Fix ip
blaginin Dec 13, 2024
0b24daa
Remove slash ☠️
blaginin Dec 13, 2024
5f29c00
Format cargo toml
blaginin Dec 13, 2024
a3826d4
Remove integration_setup.bash
blaginin Dec 13, 2024
9cb1c99
Update docs
blaginin Dec 13, 2024
53c9c51
Do not hardcode test names
blaginin Dec 13, 2024
eb87f60
Merge branch 'main' into cli-snap
blaginin Dec 17, 2024
855315f
Relock cargo
blaginin Dec 17, 2024
fd3240d
Merge branch 'main' into cli-snap
blaginin Dec 20, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 19 additions & 8 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -165,22 +165,33 @@ jobs:
name: cargo test datafusion-cli (amd64)
needs: [ linux-build-lib ]
runs-on: ubuntu-latest
container:
image: amd64/rust
env:
AWS_ENDPOINT: http://127.0.0.1:9000
AWS_ACCESS_KEY_ID: TEST-DataFusionLogin
AWS_SECRET_ACCESS_KEY: TEST-DataFusionPassword
TEST_STORAGE_INTEGRATION: 1
AWS_ALLOW_HTTP: true

steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Setup Rust toolchain
uses: ./.github/actions/setup-builder
with:
rust-version: stable
- name: Run tests (excluding doctests)
run: |
cd datafusion-cli
cargo test --lib --tests --bins --all-features
rustup toolchain install stable
rustup default stable
- name: Setup Minio - S3-compatible storage
working-directory: datafusion-cli
run:
echo "MINIO_CONTAINER=$(docker run -d -p 9000:9000 -e MINIO_ROOT_USER=TEST-DataFusionLogin -e MINIO_ROOT_PASSWORD=TEST-DataFusionPassword quay.io/minio/minio server /data)" >> $GITHUB_ENV
- name: Run tests (excluding doctests, but with integration tests)
working-directory: datafusion-cli
run: cargo test --lib --tests --bins --all-features
Comment on lines +183 to +189
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@alamb you sugessting copying object_store approach for testing.

In object_store, they use Localstack for S3 simulation. It works fine for testing, but the problem is that it doesn't actually validate the credentials.

In another part of object_store, Minio is used, and it does validate credentials. So, I think we should switch to using Minio for testing here.

- name: Verify Working Directory Clean
run: git diff --exit-code
- name: Minio Output
if: ${{ !cancelled() }}
run: docker logs $MINIO_CONTAINER

linux-test-example:
name: cargo examples (amd64)
Expand Down
72 changes: 72 additions & 0 deletions datafusion-cli/CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
<!---
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->

# Development instructions

## Running Tests

Tests can be run using `cargo`

```shell
cargo test
```

## Snapshot testing

To test CLI output, [Insta](https://github.com/mitsuhiko/insta) is used for snapshot testing. Snapshots are generated
and compared on each test run. If the output changes, tests will fail.
To review the changes, you can use Insta CLI:

```shell
cargo install cargo-insta
cargo insta review
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we use this in influxdb_iox and I find it super useful

```

## Running Storage Integration Tests

By default, storage integration tests are not run. To run them you will need to set `TEST_STORAGE_INTEGRATION=1` and
then provide the necessary configuration for that object store.

### AWS

To test the S3 integration against [Minio](https://github.com/minio/minio)

First start up a container with Minio

```
$ docker run -d -p 9000:9000 -e MINIO_ROOT_USER=TEST-DataFusionLogin -e MINIO_ROOT_PASSWORD=TEST-DataFusionPassword quay.io/minio/minio server /data
```

Setup environment

```
export TEST_STORAGE_INTEGRATION=1
export AWS_ACCESS_KEY_ID=TEST-DataFusionLogin
export AWS_SECRET_ACCESS_KEY=TEST-DataFusionPassword
export AWS_ENDPOINT=http://127.0.0.1:9000
export AWS_ALLOW_HTTP=true
```

Note that `AWS_ENDPOINT` is set without slash at the end.

Run tests

```
$ cargo test
```
Loading
Loading