mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-03 20:07:42 +00:00
0e680eae31
* fix typos * build(deps): bump the dependencies group with 9 updates (#613) Bumps the dependencies group with 9 updates: | Package | From | To | | --- | --- | --- | | [axum](https://github.com/tokio-rs/axum) | `0.8.4` | `0.8.6` | | [axum-extra](https://github.com/tokio-rs/axum) | `0.10.1` | `0.10.3` | | [regex](https://github.com/rust-lang/regex) | `1.11.2` | `1.11.3` | | [serde](https://github.com/serde-rs/serde) | `1.0.226` | `1.0.228` | | [shadow-rs](https://github.com/baoyachi/shadow-rs) | `1.3.0` | `1.4.0` | | [sysinfo](https://github.com/GuillaumeGomez/sysinfo) | `0.37.0` | `0.37.1` | | [thiserror](https://github.com/dtolnay/thiserror) | `2.0.16` | `2.0.17` | | [tokio-rustls](https://github.com/rustls/tokio-rustls) | `0.26.3` | `0.26.4` | | [zeroize](https://github.com/RustCrypto/utils) | `1.8.1` | `1.8.2` | Updates `axum` from 0.8.4 to 0.8.6 - [Release notes](https://github.com/tokio-rs/axum/releases) - [Changelog](https://github.com/tokio-rs/axum/blob/main/CHANGELOG.md) - [Commits](https://github.com/tokio-rs/axum/compare/axum-v0.8.4...axum-v0.8.6) Updates `axum-extra` from 0.10.1 to 0.10.3 - [Release notes](https://github.com/tokio-rs/axum/releases) - [Changelog](https://github.com/tokio-rs/axum/blob/main/CHANGELOG.md) - [Commits](https://github.com/tokio-rs/axum/compare/axum-extra-v0.10.1...axum-extra-v0.10.3) Updates `regex` from 1.11.2 to 1.11.3 - [Release notes](https://github.com/rust-lang/regex/releases) - [Changelog](https://github.com/rust-lang/regex/blob/master/CHANGELOG.md) - [Commits](https://github.com/rust-lang/regex/compare/1.11.2...1.11.3) Updates `serde` from 1.0.226 to 1.0.228 - [Release notes](https://github.com/serde-rs/serde/releases) - [Commits](https://github.com/serde-rs/serde/compare/v1.0.226...v1.0.228) Updates `shadow-rs` from 1.3.0 to 1.4.0 - [Release notes](https://github.com/baoyachi/shadow-rs/releases) - [Commits](https://github.com/baoyachi/shadow-rs/compare/1.3.0...v1.4.0) Updates `sysinfo` from 0.37.0 to 0.37.1 - [Changelog](https://github.com/GuillaumeGomez/sysinfo/blob/master/CHANGELOG.md) - [Commits](https://github.com/GuillaumeGomez/sysinfo/compare/v0.37.0...v0.37.1) Updates `thiserror` from 2.0.16 to 2.0.17 - [Release notes](https://github.com/dtolnay/thiserror/releases) - [Commits](https://github.com/dtolnay/thiserror/compare/2.0.16...2.0.17) Updates `tokio-rustls` from 0.26.3 to 0.26.4 - [Release notes](https://github.com/rustls/tokio-rustls/releases) - [Commits](https://github.com/rustls/tokio-rustls/compare/v/0.26.3...v/0.26.4) Updates `zeroize` from 1.8.1 to 1.8.2 - [Commits](https://github.com/RustCrypto/utils/compare/zeroize-v1.8.1...zeroize-v1.8.2) --- updated-dependencies: - dependency-name: axum dependency-version: 0.8.6 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: axum-extra dependency-version: 0.10.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: regex dependency-version: 1.11.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: serde dependency-version: 1.0.228 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: shadow-rs dependency-version: 1.4.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies - dependency-name: sysinfo dependency-version: 0.37.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: thiserror dependency-version: 2.0.17 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: tokio-rustls dependency-version: 0.26.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: zeroize dependency-version: 1.8.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
168 lines
5.0 KiB
Rust
168 lines
5.0 KiB
Rust
// Copyright 2024 RustFS Team
|
|
//
|
|
// Licensed 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.
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use crate::query::execution::{DONE, Output, QueryExecution, QueryState, QueryType, RUNNING};
|
|
use crate::{QueryError, QueryResult};
|
|
use async_trait::async_trait;
|
|
|
|
#[test]
|
|
fn test_query_type_display() {
|
|
assert_eq!(format!("{}", QueryType::Batch), "batch");
|
|
assert_eq!(format!("{}", QueryType::Stream), "stream");
|
|
}
|
|
|
|
#[test]
|
|
fn test_query_type_equality() {
|
|
assert_eq!(QueryType::Batch, QueryType::Batch);
|
|
assert_ne!(QueryType::Batch, QueryType::Stream);
|
|
assert_eq!(QueryType::Stream, QueryType::Stream);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn test_output_nil_methods() {
|
|
let output = Output::Nil(());
|
|
|
|
let result = output.chunk_result().await;
|
|
assert!(result.is_ok(), "Output::Nil result should be Ok");
|
|
|
|
let output2 = Output::Nil(());
|
|
let rows = output2.num_rows().await;
|
|
assert_eq!(rows, 0, "Output::Nil should have 0 rows");
|
|
|
|
let output3 = Output::Nil(());
|
|
let affected = output3.affected_rows().await;
|
|
assert_eq!(affected, 0, "Output::Nil should have 0 affected rows");
|
|
}
|
|
|
|
#[test]
|
|
fn test_query_state_as_ref() {
|
|
let accepting = QueryState::ACCEPTING;
|
|
assert_eq!(accepting.as_ref(), "ACCEPTING");
|
|
|
|
let running = QueryState::RUNNING(RUNNING::ANALYZING);
|
|
assert_eq!(running.as_ref(), "ANALYZING");
|
|
|
|
let done = QueryState::DONE(DONE::FINISHED);
|
|
assert_eq!(done.as_ref(), "FINISHED");
|
|
}
|
|
|
|
#[test]
|
|
fn test_running_state_as_ref() {
|
|
assert_eq!(RUNNING::DISPATCHING.as_ref(), "DISPATCHING");
|
|
assert_eq!(RUNNING::ANALYZING.as_ref(), "ANALYZING");
|
|
assert_eq!(RUNNING::OPTIMIZING.as_ref(), "OPTIMIZING");
|
|
assert_eq!(RUNNING::SCHEDULING.as_ref(), "SCHEDULING");
|
|
}
|
|
|
|
#[test]
|
|
fn test_done_state_as_ref() {
|
|
assert_eq!(DONE::FINISHED.as_ref(), "FINISHED");
|
|
assert_eq!(DONE::FAILED.as_ref(), "FAILED");
|
|
assert_eq!(DONE::CANCELLED.as_ref(), "CANCELLED");
|
|
}
|
|
|
|
// Mock implementation for testing
|
|
struct MockQueryExecution {
|
|
should_succeed: bool,
|
|
should_cancel: bool,
|
|
}
|
|
|
|
#[async_trait]
|
|
impl QueryExecution for MockQueryExecution {
|
|
async fn start(&self) -> QueryResult<Output> {
|
|
if self.should_cancel {
|
|
return Err(QueryError::Cancel);
|
|
}
|
|
|
|
if self.should_succeed {
|
|
Ok(Output::Nil(()))
|
|
} else {
|
|
Err(QueryError::NotImplemented {
|
|
err: "Mock execution failed".to_string(),
|
|
})
|
|
}
|
|
}
|
|
|
|
fn cancel(&self) -> QueryResult<()> {
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn test_mock_query_execution_success() {
|
|
let execution = MockQueryExecution {
|
|
should_succeed: true,
|
|
should_cancel: false,
|
|
};
|
|
|
|
let result = execution.start().await;
|
|
assert!(result.is_ok(), "Mock execution should succeed");
|
|
|
|
if let Ok(Output::Nil(_)) = result {
|
|
// Expected result
|
|
} else {
|
|
panic!("Expected Output::Nil");
|
|
}
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn test_mock_query_execution_failure() {
|
|
let execution = MockQueryExecution {
|
|
should_succeed: false,
|
|
should_cancel: false,
|
|
};
|
|
|
|
let result = execution.start().await;
|
|
assert!(result.is_err(), "Mock execution should fail");
|
|
|
|
if let Err(QueryError::NotImplemented { .. }) = result {
|
|
// Expected error
|
|
} else {
|
|
panic!("Expected NotImplemented error");
|
|
}
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn test_mock_query_execution_cancel() {
|
|
let execution = MockQueryExecution {
|
|
should_succeed: false,
|
|
should_cancel: true,
|
|
};
|
|
|
|
let result = execution.start().await;
|
|
assert!(result.is_err(), "Cancelled execution should fail");
|
|
|
|
if let Err(QueryError::Cancel) = result {
|
|
// Expected cancellation error
|
|
} else {
|
|
panic!("Expected Cancel error");
|
|
}
|
|
|
|
let cancel_result = execution.cancel();
|
|
assert!(cancel_result.is_ok(), "Cancel should succeed");
|
|
}
|
|
|
|
#[test]
|
|
fn test_query_execution_default_type() {
|
|
let execution = MockQueryExecution {
|
|
should_succeed: true,
|
|
should_cancel: false,
|
|
};
|
|
|
|
assert_eq!(execution.query_type(), QueryType::Batch);
|
|
}
|
|
}
|