Skip to content

Commit

Permalink
Test get_metadata_for_test a little better, including the whole inclu…
Browse files Browse the repository at this point in the history
…de_shared_libraries aspect.
  • Loading branch information
nfachan committed Jan 8, 2025
1 parent a80b2f2 commit 050a5b1
Show file tree
Hide file tree
Showing 2 changed files with 203 additions and 20 deletions.
35 changes: 34 additions & 1 deletion crates/maelstrom-test-runner/src/metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,47 @@ use directive::{Directive, DirectiveContainer, DirectiveContainerAugment};
use maelstrom_base::Timeout;
use maelstrom_client::spec::{ContainerSpec, IntoEnvironment};

#[derive(Clone)]
#[derive(Clone, Debug, PartialEq)]
pub struct Metadata {
pub container: ContainerSpec,
pub include_shared_libraries: bool,
pub timeout: Option<Timeout>,
pub ignore: bool,
}

#[cfg(test)]
macro_rules! metadata {
(@expand [] -> [$($($fields:tt)+)?] [$($container_fields:tt)*]) => {
Metadata {
$($($fields)+,)?
.. Metadata {
container: maelstrom_client::container_spec!($($container_fields)*),
include_shared_libraries: Default::default(),
timeout: Default::default(),
ignore: Default::default(),
}
}
};
(@expand [include_shared_libraries: $include_shared_libraries:expr $(,$($field_in:tt)*)?] -> [$($($field_out:tt)+)?] [$($container_field:tt)*]) => {
metadata!(@expand [$($($field_in)*)?] -> [$($($field_out)+,)? include_shared_libraries: $include_shared_libraries.into()] [$($container_field)*])
};
(@expand [timeout: $timeout:expr $(,$($field_in:tt)*)?] -> [$($($field_out:tt)+)?] [$($container_field:tt)*]) => {
metadata!(@expand [$($($field_in)*)?] -> [$($($field_out)+,)? timeout: Timeout::new($timeout)] [$($container_field)*])
};
(@expand [ignore: $ignore:expr $(,$($field_in:tt)*)?] -> [$($($field_out:tt)+)?] [$($container_field:tt)*]) => {
metadata!(@expand [$($($field_in)*)?] -> [$($($field_out)+,)? ignore: $ignore.into()] [$($container_field)*])
};
(@expand [$container_field_name:ident: $container_field_value:expr $(,$($field_in:tt)*)?] -> [$($field_out:tt)*] [$($($container_field:tt)+)?]) => {
metadata!(@expand [$($($field_in)*)?] -> [$($field_out)*] [$($($container_field)+,)? $container_field_name: $container_field_value])
};
($($field_in:tt)*) => {
metadata!(@expand [$($field_in)*] -> [] [])
};
}

#[cfg(test)]
pub(crate) use metadata;

impl Metadata {
/// The logic here is that if they explicitly set the value to something, we should return
/// that. Otherwise, we should see if they are using layers from an image. If they are, we can
Expand Down
188 changes: 169 additions & 19 deletions crates/maelstrom-test-runner/src/metadata/store.rs
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,10 @@ where
mod tests {
use super::*;
use crate::{
metadata::directive::{augment_directive, override_directive},
metadata::{
directive::{augment_directive, override_directive},
metadata,
},
NoCaseMetadata, SimpleFilter,
};
use indoc::indoc;
Expand Down Expand Up @@ -418,9 +421,10 @@ mod tests {
&"package0".into(),
("test1", &NoCaseMetadata)
)
.unwrap()
.container,
container_spec! {},
.unwrap(),
metadata! {
include_shared_libraries: true,
},
);
assert_eq!(
store
Expand All @@ -429,9 +433,11 @@ mod tests {
&"package1".into(),
("test0", &NoCaseMetadata)
)
.unwrap()
.container,
container_spec! { network: JobNetwork::Loopback },
.unwrap(),
metadata! {
network: JobNetwork::Loopback,
include_shared_libraries: true,
},
);
assert_eq!(
store
Expand All @@ -440,11 +446,11 @@ mod tests {
&"package1".into(),
("test1", &NoCaseMetadata)
)
.unwrap()
.container,
container_spec! {
.unwrap(),
metadata! {
network: JobNetwork::Loopback,
user: 101,
include_shared_libraries: true,
},
);
}
Expand Down Expand Up @@ -477,11 +483,11 @@ mod tests {
&"package0".into(),
("test1", &NoCaseMetadata)
)
.unwrap()
.container,
container_spec! {
.unwrap(),
metadata! {
group: 202,
enable_writable_file_system: true,
include_shared_libraries: true,
},
);
assert_eq!(
Expand All @@ -491,12 +497,12 @@ mod tests {
&"package1".into(),
("test0", &NoCaseMetadata)
)
.unwrap()
.container,
container_spec! {
.unwrap(),
metadata! {
group: 202,
enable_writable_file_system: true,
network: JobNetwork::Loopback,
include_shared_libraries: true,
},
);
assert_eq!(
Expand All @@ -506,13 +512,157 @@ mod tests {
&"package1".into(),
("test1", &NoCaseMetadata)
)
.unwrap()
.container,
container_spec! {
.unwrap(),
metadata! {
group: 202,
enable_writable_file_system: true,
network: JobNetwork::Loopback,
user: 101,
include_shared_libraries: true,
},
);
}

#[test]
fn get_metadata_for_test_include_shared_libraries() {
let store = Store::<SimpleFilter>::load(
indoc! {r#"
[containers.parent1]
image = "image"
[containers.parent2]
[[directives]]
filter = "package = \"package1\""
parent = "parent1"
[[directives]]
filter = "package = \"package2\""
parent = "parent2"
[[directives]]
filter = "name = \"test2\""
include_shared_libraries = false
[[directives]]
filter = "name = \"test3\""
include_shared_libraries = true
"#},
&Default::default(),
)
.unwrap();
assert_eq!(
store
.get_metadata_for_test(
&"package1".into(),
&"package1".into(),
("test1", &NoCaseMetadata)
)
.unwrap(),
metadata! {
parent: container_container_parent!("parent1", all),
include_shared_libraries: false,
},
);
assert_eq!(
store
.get_metadata_for_test(
&"package1".into(),
&"package1".into(),
("test2", &NoCaseMetadata)
)
.unwrap(),
metadata! {
parent: container_container_parent!("parent1", all),
include_shared_libraries: false,
},
);
assert_eq!(
store
.get_metadata_for_test(
&"package1".into(),
&"package1".into(),
("test3", &NoCaseMetadata)
)
.unwrap(),
metadata! {
parent: container_container_parent!("parent1", all),
include_shared_libraries: true,
},
);
assert_eq!(
store
.get_metadata_for_test(
&"package2".into(),
&"package2".into(),
("test1", &NoCaseMetadata)
)
.unwrap(),
metadata! {
parent: container_container_parent!("parent2", all),
include_shared_libraries: true,
},
);
assert_eq!(
store
.get_metadata_for_test(
&"package2".into(),
&"package2".into(),
("test2", &NoCaseMetadata)
)
.unwrap(),
metadata! {
parent: container_container_parent!("parent2", all),
include_shared_libraries: false,
},
);
assert_eq!(
store
.get_metadata_for_test(
&"package2".into(),
&"package2".into(),
("test3", &NoCaseMetadata)
)
.unwrap(),
metadata! {
parent: container_container_parent!("parent2", all),
include_shared_libraries: true,
},
);
assert_eq!(
store
.get_metadata_for_test(
&"package3".into(),
&"package3".into(),
("test1", &NoCaseMetadata)
)
.unwrap(),
metadata! {
include_shared_libraries: true,
},
);
assert_eq!(
store
.get_metadata_for_test(
&"package3".into(),
&"package3".into(),
("test2", &NoCaseMetadata)
)
.unwrap(),
metadata! {
include_shared_libraries: false,
},
);
assert_eq!(
store
.get_metadata_for_test(
&"package3".into(),
&"package3".into(),
("test3", &NoCaseMetadata)
)
.unwrap(),
metadata! {
include_shared_libraries: true,
},
);
}
Expand Down

0 comments on commit 050a5b1

Please sign in to comment.