Skip to content

Commit 9bc3b1b

Browse files
committed
test: avoid circular dependency with core/test crates
Signed-off-by: Robert Pack <robstar.pack@gmail.com>
1 parent b058e86 commit 9bc3b1b

13 files changed

Lines changed: 247 additions & 233 deletions

File tree

crates/core/Cargo.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ humantime = { version = "2.1.0" }
9999
criterion = "0.5"
100100
ctor = "0"
101101
datatest-stable = "0.2"
102-
deltalake-test = { path = "../test", features = ["datafusion"] }
102+
deltalake-test = { path = "../test" }
103103
dotenvy = "0"
104104
fs_extra = "1.2.0"
105105
maplit = "1"
@@ -133,6 +133,8 @@ cloud = ["object_store/cloud"]
133133
# enable caching some file I/O operations when scanning delta logs
134134
delta-cache = ["foyer", "tempfile", "url/serde"]
135135

136+
integration_test = []
137+
136138
[[test]]
137139
name = "dat"
138140
harness = false

crates/core/src/kernel/scalars.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use delta_kernel::{
99
schema::StructField,
1010
};
1111
use object_store::path::Path;
12-
#[cfg(test)]
12+
#[cfg(any(test, feature = "integration_test"))]
1313
use serde_json::Value;
1414
use urlencoding::encode;
1515

@@ -24,7 +24,7 @@ pub trait ScalarExt: Sized {
2424
/// Create a [`Scalar`] from an arrow array row
2525
fn from_array(arr: &dyn Array, index: usize) -> Option<Self>;
2626
/// Serialize as serde_json::Value
27-
#[cfg(test)]
27+
#[cfg(any(test, feature = "integration_test"))]
2828
fn to_json(&self) -> serde_json::Value;
2929
}
3030

@@ -235,7 +235,7 @@ impl ScalarExt for Scalar {
235235
}
236236

237237
/// Serializes this scalar as a serde_json::Value.
238-
#[cfg(test)]
238+
#[cfg(any(test, feature = "integration_test"))]
239239
fn to_json(&self) -> serde_json::Value {
240240
match self {
241241
Self::String(s) => Value::String(s.to_owned()),

crates/core/src/kernel/snapshot/log_segment.rs

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -579,7 +579,6 @@ pub(super) async fn list_log_files(
579579
#[cfg(test)]
580580
pub(super) mod tests {
581581
use delta_kernel::table_features::{ReaderFeature, WriterFeature};
582-
use deltalake_test::utils::*;
583582
use maplit::hashset;
584583
use tokio::task::JoinHandle;
585584

@@ -588,22 +587,23 @@ pub(super) mod tests {
588587
kernel::transaction::{CommitBuilder, TableReference},
589588
kernel::{Action, Add, Format, Remove},
590589
protocol::{DeltaOperation, SaveMode},
590+
test_utils::{TestResult, TestTables},
591591
DeltaTableBuilder,
592592
};
593593

594594
use super::*;
595595

596-
pub(crate) async fn test_log_segment(context: &IntegrationContext) -> TestResult {
597-
read_log_files(context).await?;
598-
read_metadata(context).await?;
599-
log_segment_serde(context).await?;
596+
pub(crate) async fn test_log_segment() -> TestResult {
597+
read_log_files().await?;
598+
read_metadata().await?;
599+
log_segment_serde().await?;
600600

601601
Ok(())
602602
}
603603

604-
async fn log_segment_serde(context: &IntegrationContext) -> TestResult {
605-
let store = context
606-
.table_builder(TestTables::Simple)
604+
async fn log_segment_serde() -> TestResult {
605+
let store = TestTables::Simple
606+
.table_builder()
607607
.build_storage()?
608608
.object_store(None);
609609

@@ -620,9 +620,9 @@ pub(super) mod tests {
620620
Ok(())
621621
}
622622

623-
async fn read_log_files(context: &IntegrationContext) -> TestResult {
624-
let store = context
625-
.table_builder(TestTables::SimpleWithCheckpoint)
623+
async fn read_log_files() -> TestResult {
624+
let store = TestTables::SimpleWithCheckpoint
625+
.table_builder()
626626
.build_storage()?
627627
.object_store(None);
628628

@@ -654,8 +654,8 @@ pub(super) mod tests {
654654
assert_eq!(segment.commit_files.len(), 9);
655655
assert_eq!(segment.checkpoint_files.len(), 0);
656656

657-
let store = context
658-
.table_builder(TestTables::Simple)
657+
let store = TestTables::Simple
658+
.table_builder()
659659
.build_storage()?
660660
.object_store(None);
661661

@@ -670,9 +670,9 @@ pub(super) mod tests {
670670
Ok(())
671671
}
672672

673-
async fn read_metadata(context: &IntegrationContext) -> TestResult {
674-
let store = context
675-
.table_builder(TestTables::WithDvSmall)
673+
async fn read_metadata() -> TestResult {
674+
let store = TestTables::WithDvSmall
675+
.table_builder()
676676
.build_storage()?
677677
.object_store(None);
678678
let segment = LogSegment::try_new(&Path::default(), None, store.as_ref()).await?;
@@ -692,16 +692,13 @@ pub(super) mod tests {
692692
Ok(())
693693
}
694694

695-
pub(crate) async fn concurrent_checkpoint(context: &IntegrationContext) -> TestResult {
696-
context
697-
.load_table(TestTables::LatestNotCheckpointed)
698-
.await?;
699-
let table_to_checkpoint = context
700-
.table_builder(TestTables::LatestNotCheckpointed)
695+
pub(crate) async fn concurrent_checkpoint() -> TestResult {
696+
let table_to_checkpoint = TestTables::LatestNotCheckpointed
697+
.table_builder()
701698
.load()
702699
.await?;
703-
let store = context
704-
.table_builder(TestTables::LatestNotCheckpointed)
700+
let store = TestTables::LatestNotCheckpointed
701+
.table_builder()
705702
.build_storage()?
706703
.object_store(None);
707704
let slow_list_store = Arc::new(slow_store::SlowListStore { store });

crates/core/src/kernel/snapshot/mod.rs

Lines changed: 16 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -816,44 +816,34 @@ fn find_nested_field<'a>(
816816
mod tests {
817817
use std::collections::HashMap;
818818

819-
use chrono::Utc;
820-
use deltalake_test::utils::*;
821819
use futures::TryStreamExt;
822820
use itertools::Itertools;
823821

824822
use super::log_segment::tests::{concurrent_checkpoint, test_log_segment};
825823
use super::replay::tests::test_log_replay;
826824
use super::*;
827-
use crate::kernel::Remove;
828825
use crate::protocol::{DeltaOperation, SaveMode};
829-
use crate::test_utils::ActionFactory;
826+
use crate::test_utils::{assert_batches_sorted_eq, ActionFactory, TestResult, TestTables};
830827

831828
#[tokio::test]
832829
async fn test_snapshots() -> TestResult {
833-
let context = IntegrationContext::new(Box::<LocalStorageIntegration>::default())?;
834-
context.load_table(TestTables::Checkpoints).await?;
835-
context.load_table(TestTables::Simple).await?;
836-
context.load_table(TestTables::SimpleWithCheckpoint).await?;
837-
context.load_table(TestTables::WithDvSmall).await?;
838-
839-
test_log_segment(&context).await?;
840-
test_log_replay(&context).await?;
841-
test_snapshot(&context).await?;
842-
test_eager_snapshot(&context).await?;
830+
test_log_segment().await?;
831+
test_log_replay().await?;
832+
test_snapshot().await?;
833+
test_eager_snapshot().await?;
843834

844835
Ok(())
845836
}
846837

847838
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
848839
async fn test_concurrent_checkpoint() -> TestResult {
849-
let context = IntegrationContext::new(Box::<LocalStorageIntegration>::default())?;
850-
concurrent_checkpoint(&context).await?;
840+
concurrent_checkpoint().await?;
851841
Ok(())
852842
}
853843

854-
async fn test_snapshot(context: &IntegrationContext) -> TestResult {
855-
let store = context
856-
.table_builder(TestTables::Simple)
844+
async fn test_snapshot() -> TestResult {
845+
let store = TestTables::Simple
846+
.table_builder()
857847
.build_storage()?
858848
.object_store(None);
859849

@@ -900,8 +890,8 @@ mod tests {
900890
];
901891
assert_batches_sorted_eq!(expected, &batches);
902892

903-
let store = context
904-
.table_builder(TestTables::Checkpoints)
893+
let store = TestTables::Checkpoints
894+
.table_builder()
905895
.build_storage()?
906896
.object_store(None);
907897

@@ -924,9 +914,9 @@ mod tests {
924914
Ok(())
925915
}
926916

927-
async fn test_eager_snapshot(context: &IntegrationContext) -> TestResult {
928-
let store = context
929-
.table_builder(TestTables::Simple)
917+
async fn test_eager_snapshot() -> TestResult {
918+
let store = TestTables::Simple
919+
.table_builder()
930920
.build_storage()?
931921
.object_store(None);
932922

@@ -942,8 +932,8 @@ mod tests {
942932
let expected: StructType = serde_json::from_str(schema_string)?;
943933
assert_eq!(snapshot.schema(), &expected);
944934

945-
let store = context
946-
.table_builder(TestTables::Checkpoints)
935+
let store = TestTables::Checkpoints
936+
.table_builder()
947937
.build_storage()?
948938
.object_store(None);
949939

@@ -962,76 +952,6 @@ mod tests {
962952
Ok(())
963953
}
964954

965-
#[tokio::test]
966-
async fn test_eager_snapshot_advance() -> TestResult {
967-
let context = IntegrationContext::new(Box::<LocalStorageIntegration>::default())?;
968-
context.load_table(TestTables::Simple).await?;
969-
970-
let store = context
971-
.table_builder(TestTables::Simple)
972-
.build_storage()?
973-
.object_store(None);
974-
975-
let mut snapshot =
976-
EagerSnapshot::try_new(&Path::default(), store.clone(), Default::default(), None)
977-
.await?;
978-
979-
let version = snapshot.version();
980-
981-
let files = snapshot.file_actions()?.enumerate().collect_vec();
982-
let num_files = files.len();
983-
984-
let split = files.split(|(idx, _)| *idx == num_files / 2).collect_vec();
985-
assert!(split.len() == 2 && !split[0].is_empty() && !split[1].is_empty());
986-
let (first, second) = split.into_iter().next_tuple().unwrap();
987-
988-
let removes = first
989-
.iter()
990-
.map(|(_, add)| {
991-
Remove {
992-
path: add.path.clone(),
993-
size: Some(add.size),
994-
data_change: add.data_change,
995-
deletion_timestamp: Some(Utc::now().timestamp_millis()),
996-
extended_file_metadata: Some(true),
997-
partition_values: Some(add.partition_values.clone()),
998-
tags: add.tags.clone(),
999-
deletion_vector: add.deletion_vector.clone(),
1000-
base_row_id: add.base_row_id,
1001-
default_row_commit_version: add.default_row_commit_version,
1002-
}
1003-
.into()
1004-
})
1005-
.collect_vec();
1006-
1007-
let operation = DeltaOperation::Write {
1008-
mode: SaveMode::Append,
1009-
partition_by: None,
1010-
predicate: None,
1011-
};
1012-
1013-
let actions = vec![CommitData::new(
1014-
removes,
1015-
operation,
1016-
HashMap::new(),
1017-
Vec::new(),
1018-
)];
1019-
1020-
let new_version = snapshot.advance(&actions)?;
1021-
assert_eq!(new_version, version + 1);
1022-
1023-
let new_files = snapshot.file_actions()?.map(|f| f.path).collect::<Vec<_>>();
1024-
assert_eq!(new_files.len(), num_files - first.len());
1025-
assert!(first
1026-
.iter()
1027-
.all(|(_, add)| { !new_files.contains(&add.path) }));
1028-
assert!(second
1029-
.iter()
1030-
.all(|(_, add)| { new_files.contains(&add.path) }));
1031-
1032-
Ok(())
1033-
}
1034-
1035955
#[test]
1036956
fn test_partition_schema() {
1037957
let schema = StructType::new(vec![

crates/core/src/kernel/snapshot/replay.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -603,7 +603,6 @@ pub(super) mod tests {
603603

604604
use arrow_select::concat::concat_batches;
605605
use delta_kernel::schema::DataType;
606-
use deltalake_test::utils::*;
607606
use futures::TryStreamExt;
608607
use object_store::path::Path;
609608

@@ -613,16 +612,16 @@ pub(super) mod tests {
613612
use crate::kernel::{models::ActionType, StructType};
614613
use crate::protocol::DeltaOperation;
615614
use crate::table::config::TableConfig;
616-
use crate::test_utils::{ActionFactory, TestResult, TestSchemas};
615+
use crate::test_utils::{ActionFactory, TestResult, TestSchemas, TestTables};
617616

618-
pub(crate) async fn test_log_replay(context: &IntegrationContext) -> TestResult {
617+
pub(crate) async fn test_log_replay() -> TestResult {
619618
let log_schema = Arc::new(StructType::new(vec![
620619
ActionType::Add.schema_field().clone(),
621620
ActionType::Remove.schema_field().clone(),
622621
]));
623622

624-
let store = context
625-
.table_builder(TestTables::SimpleWithCheckpoint)
623+
let store = TestTables::SimpleWithCheckpoint
624+
.table_builder()
626625
.build_storage()?
627626
.object_store(None);
628627

@@ -643,8 +642,8 @@ pub(super) mod tests {
643642
let filtered = scanner.process_files_batch(&batch, true)?;
644643
assert_eq!(filtered.schema().fields().len(), 1);
645644

646-
let store = context
647-
.table_builder(TestTables::Simple)
645+
let store = TestTables::Simple
646+
.table_builder()
648647
.build_storage()?
649648
.object_store(None);
650649
let segment = LogSegment::try_new(&Path::default(), None, store.as_ref()).await?;

crates/core/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ pub mod protocol;
7777
pub mod schema;
7878
pub mod table;
7979

80-
#[cfg(test)]
80+
#[cfg(any(test, feature = "integration_test"))]
8181
pub mod test_utils;
8282

8383
#[cfg(feature = "datafusion")]

0 commit comments

Comments
 (0)