Skip to content

Commit 04a85d2

Browse files
Test
1 parent cf2f050 commit 04a85d2

3 files changed

Lines changed: 91 additions & 5 deletions

File tree

.github/workflows/test.yml

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,31 @@ jobs:
196196
uses: ./.github/actions/setup-rust
197197
- name: Run Deltalake tests
198198
run: |
199-
cargo test --features=deltalake extension_cases::deltalake
199+
cargo test --features=deltalake extension_cases::deltalake::test_deltalake
200+
test-deltalake-s3:
201+
name: Extension / Deltalake-S3
202+
runs-on: ubuntu-latest
203+
strategy:
204+
matrix:
205+
arch: [amd64]
206+
steps:
207+
- uses: actions/checkout@v3
208+
- name: Setup Rust Toolchain
209+
uses: ./.github/actions/setup-rust
210+
- name: Start LocalStack
211+
uses: LocalStack/setup-localstack@v0.2.3
212+
with:
213+
image-tag: 'latest'
214+
install-awslocal: 'true'
215+
configuration: DEBUG=1
216+
- name: Upload Delta Lake data to LocalStack
217+
run: |
218+
awslocal s3 mb s3://test
219+
awslocal s3 sync data/deltalake/simple_table s3://test/deltalake/simple_table
220+
echo "Test Execution complete!"
221+
- name: Run Deltalake S3 tests
222+
run: |
223+
cargo test --features="deltalake s3" extension_cases::deltalake::test_deltalake_s3
200224
test-udfs-wasm:
201225
name: Extension / UDFs-WASM
202226
runs-on: ubuntu-latest

CLAUDE.md

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ cargo test --features=flightsql extension_cases::flightsql -- --test-threads=1
5252
cargo test --features=s3 extension_cases::s3
5353
cargo test --features=functions-json extension_cases::functions_json
5454
cargo test --features=deltalake extension_cases::deltalake
55+
cargo test --features="deltalake s3" extension_cases::deltalake::test_deltalake_s3 # Requires LocalStack
5556
cargo test --features=udfs-wasm extension_cases::udfs_wasm
5657
cargo test --features=vortex extension_cases::vortex
5758
cargo test --features=vortex cli_cases::basic::test_output_vortex
@@ -189,16 +190,20 @@ The main runtime in `src/main.rs` uses a single-threaded Tokio runtime optimized
189190

190191
### Testing Against LocalStack
191192

192-
Some tests (S3, TUI, CLI) require LocalStack for S3 testing. The CI workflow shows the setup:
193+
Some tests (S3, TUI, CLI, Delta Lake + S3) require LocalStack for S3 testing. The CI workflow shows the setup:
193194

194195
```bash
195196
# Start LocalStack
196197
localstack start -d
197-
awslocal s3api create-bucket --bucket tmp --acl public-read
198-
awslocal s3 mv data/aggregate_test_100.csv s3://tmp/
198+
awslocal s3api create-bucket --bucket test --acl public-read
199+
awslocal s3 mv data/aggregate_test_100.csv s3://test/
199200

200-
# Run tests
201+
# Run S3 tests
201202
cargo test --features=s3 extension_cases::s3
203+
204+
# For Delta Lake + S3 tests, also sync the delta lake data
205+
awslocal s3 sync data/deltalake/simple_table s3://test/deltalake/simple_table
206+
cargo test --features="deltalake s3" extension_cases::deltalake::test_deltalake_s3
202207
```
203208

204209
### Benchmarking

tests/extension_cases/deltalake.rs

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,60 @@ async fn test_deltalake() {
4242
vec!["+----+", "| id |", "+----+", "| 5 |", "| 7 |", "| 9 |", "+----+"]
4343
);
4444
}
45+
46+
#[cfg(feature = "s3")]
47+
#[tokio::test(flavor = "multi_thread")]
48+
async fn test_deltalake_s3() {
49+
use assert_cmd::Command;
50+
use std::io::Write;
51+
52+
use crate::{cli_cases::contains_str, config::TestConfigBuilder};
53+
54+
let tempdir = tempfile::tempdir().unwrap();
55+
let ddl_path = tempdir.path().join("my_ddl.sql");
56+
let mut file = std::fs::File::create(ddl_path.clone()).unwrap();
57+
let ddl = "CREATE EXTERNAL TABLE delta_tbl STORED AS DELTATABLE LOCATION 's3://test/deltalake/simple_table';";
58+
file.write_all(ddl.as_bytes()).unwrap();
59+
file.flush().unwrap();
60+
61+
// Create a temp db directory to avoid conflicts with existing db files
62+
let db_dir = tempdir.path().join("db");
63+
std::fs::create_dir(&db_dir).unwrap();
64+
65+
let mut config_builder = TestConfigBuilder::default();
66+
config_builder.with_ddl_path("cli", ddl_path);
67+
config_builder.with_db_path(&format!("file://{}", db_dir.display()));
68+
config_builder.with_s3_object_store(
69+
"cli",
70+
"s3",
71+
"test",
72+
"s3://test",
73+
"http://localhost:4566",
74+
"LSIAQAAAAAAVNCBMPNSG",
75+
"5555555555555555555555555555555555555555",
76+
true,
77+
);
78+
let config = config_builder.build("my_config.toml");
79+
80+
let assert = Command::cargo_bin("dft")
81+
.unwrap()
82+
.arg("--config")
83+
.arg(config.path)
84+
.arg("--run-ddl")
85+
.arg("-c")
86+
.arg("SELECT id FROM delta_tbl ORDER BY id")
87+
.assert()
88+
.success();
89+
90+
let expected = r#"
91+
+----+
92+
| id |
93+
+----+
94+
| 5 |
95+
| 7 |
96+
| 9 |
97+
+----+
98+
"#;
99+
100+
assert.stdout(contains_str(expected));
101+
}

0 commit comments

Comments
 (0)