Skip to content

Commit d567e99

Browse files
committed
test(common): add APIVersionProviderTestExtension
To enable testing with canned `openapi.yml` version or setting up a always failing provider
1 parent ae9e2d9 commit d567e99

File tree

6 files changed

+61
-8
lines changed

6 files changed

+61
-8
lines changed

internal/mithril-aggregator-client/src/client.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ mod tests {
6868
use http::StatusCode;
6969
use httpmock::MockServer;
7070

71+
use mithril_common::test::api_version_extensions::ApiVersionProviderTestExtension;
72+
7173
use crate::test::TestLogger;
7274

7375
use super::*;

mithril-aggregator/src/services/aggregator_client.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -812,6 +812,7 @@ mod tests {
812812
mod warn_if_api_version_mismatch {
813813
use std::collections::HashMap;
814814

815+
use mithril_common::test::api_version_extensions::ApiVersionProviderTestExtension;
815816
use mithril_common::test::logging::MemoryDrainForTestInspector;
816817

817818
use super::*;

mithril-common/src/api_version.rs

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,6 @@ impl APIVersionProvider {
6363
versions.sort();
6464
versions
6565
}
66-
67-
/// Update open api versions. Test only
68-
pub fn update_open_api_versions(
69-
&mut self,
70-
open_api_versions: HashMap<OpenAPIFileName, Version>,
71-
) {
72-
self.open_api_versions = open_api_versions;
73-
}
7466
}
7567

7668
impl Default for APIVersionProvider {
@@ -87,8 +79,31 @@ impl Default for APIVersionProvider {
8779
}
8880
}
8981

82+
#[cfg(any(test, feature = "test_tools"))]
83+
impl crate::test::api_version_extensions::ApiVersionProviderTestExtension for APIVersionProvider {
84+
fn update_open_api_versions(&mut self, open_api_versions: HashMap<OpenAPIFileName, Version>) {
85+
self.open_api_versions = open_api_versions;
86+
}
87+
88+
fn new_with_default_version(version: Version) -> APIVersionProvider {
89+
Self {
90+
open_api_versions: HashMap::from([("openapi.yaml".to_string(), version)]),
91+
..Self::default()
92+
}
93+
}
94+
95+
fn new_failing() -> APIVersionProvider {
96+
Self {
97+
// Leverage the error raised if the default api version is missing
98+
open_api_versions: HashMap::new(),
99+
..Self::default()
100+
}
101+
}
102+
}
103+
90104
#[cfg(test)]
91105
mod test {
106+
use crate::test::api_version_extensions::ApiVersionProviderTestExtension;
92107
use crate::test::double::DummyApiVersionDiscriminantSource;
93108

94109
use super::*;
@@ -177,4 +192,18 @@ mod test {
177192
&version
178193
);
179194
}
195+
196+
#[test]
197+
fn building_provider_with_canned_default_openapi_version() {
198+
let provider = APIVersionProvider::new_with_default_version(Version::new(1, 2, 3));
199+
let version = provider.compute_current_version().unwrap();
200+
201+
assert_eq!(Version::new(1, 2, 3), version);
202+
}
203+
204+
#[test]
205+
fn building_provider_that_fails_compute_current_version() {
206+
let provider = APIVersionProvider::new_failing();
207+
provider.compute_current_version().expect_err("Should fail");
208+
}
180209
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
//! A set of extension traits to add test utilities to this crate `APIVersionProvider`
2+
3+
use semver::Version;
4+
use std::collections::HashMap;
5+
6+
use crate::api_version::{APIVersionProvider, OpenAPIFileName};
7+
8+
/// Extension trait adding test utilities to [APIVersionProvider]
9+
pub trait ApiVersionProviderTestExtension {
10+
/// `TEST ONLY` - Replace the open api versions
11+
fn update_open_api_versions(&mut self, open_api_versions: HashMap<OpenAPIFileName, Version>);
12+
13+
/// `TEST ONLY` - Set up an ` APIVersionProvider ` with the given version for the `openapi.yaml` file
14+
fn new_with_default_version(version: Version) -> APIVersionProvider;
15+
16+
/// `TEST ONLY` - Set up an ` APIVersionProvider ` that fails to compute api versions
17+
fn new_failing() -> APIVersionProvider;
18+
}

mithril-common/src/test/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
//! * `temp_dir`: Temporary directory management for tests
1313
//!
1414
15+
pub mod api_version_extensions;
1516
pub mod builder;
1617
pub mod crypto_helper;
1718
pub mod double;

mithril-signer/src/services/aggregator_client.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1057,6 +1057,8 @@ mod tests {
10571057
}
10581058

10591059
mod warn_if_api_version_mismatch {
1060+
use mithril_common::test::api_version_extensions::ApiVersionProviderTestExtension;
1061+
10601062
use super::*;
10611063

10621064
fn version_provider_with_open_api_version<V: Into<String>>(

0 commit comments

Comments
 (0)