Skip to content

Commit

Permalink
remove duplicated code
Browse files Browse the repository at this point in the history
Removed duplication of the make entities function. Created a new function new_entities which is used by all others with different options.
  • Loading branch information
xpromache committed Jun 23, 2023
1 parent a0f97d7 commit dd47c63
Show file tree
Hide file tree
Showing 3 changed files with 163 additions and 596 deletions.
124 changes: 77 additions & 47 deletions cfdp-core/tests/common/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -801,10 +801,44 @@ pub(crate) fn create_daemons<T: FileStore + Sync + Send + 'static>(

#[fixture]
#[once]
pub(crate) fn tempdir_fixture() -> TempDir {
fn tempdir_fixture() -> TempDir {
TempDir::new().unwrap()
}

#[fixture]
#[once]
pub(crate) fn filestore_fixture(tempdir_fixture: &TempDir) -> Arc<NativeFileStore> {
let utf8_path = Utf8PathBuf::from(
tempdir_fixture
.path()
.as_os_str()
.to_str()
.expect("Unable to coerce tmp path to String."),
);

let filestore = Arc::new(NativeFileStore::new(&utf8_path));
filestore
.create_directory("local")
.expect("Unable to create local directory.");
filestore
.create_directory("remote")
.expect("Unable to create local directory.");

let data_dir = Path::new(env!("CARGO_MANIFEST_DIR"))
.parent()
.unwrap()
.join("data");
for filename in ["small.txt", "medium.txt", "large.txt"] {
fs::copy(
data_dir.join(filename),
utf8_path.join("local").join(filename),
)
.expect("Unable to copy file.");
}

filestore
}

#[fixture]
#[once]
pub(crate) fn terminate() -> Arc<AtomicBool> {
Expand Down Expand Up @@ -833,11 +867,12 @@ pub(crate) type EntityConstructorReturn = (
JoD<'static, Result<(), String>>,
);

#[fixture]
#[once]
fn make_entities(
tempdir_fixture: &TempDir,
pub(crate) fn new_entities(
filestore_fixture: &Arc<NativeFileStore>,
terminate: &Arc<AtomicBool>,
local_transport_issue: Option<TransportIssue>,
remote_transport_issue: Option<TransportIssue>,
timeouts: Timeouts,
) -> EntityConstructorReturn {
let remote_udp = UdpSocket::bind("127.0.0.1:0").expect("Unable to bind remote UDP.");
let remote_addr = remote_udp.local_addr().expect("Cannot find local address.");
Expand All @@ -850,66 +885,61 @@ fn make_entities(
(EntityID::from(1_u16), remote_addr),
]);

let local_transport = UdpTransport::try_from((local_udp, entity_map.clone()))
.expect("Unable to make Lossy Transport.");
let remote_transport =
UdpTransport::try_from((remote_udp, entity_map)).expect("Unable to make UdpTransport.");
let local_transport = if let Some(issue) = local_transport_issue {
Box::new(
LossyTransport::try_from((local_udp, entity_map.clone(), issue))
.expect("Unable to make Lossy Transport."),
) as Box<dyn PDUTransport + Send>
} else {
Box::new(
UdpTransport::try_from((local_udp, entity_map.clone()))
.expect("Unable to make UDP Transport."),
) as Box<dyn PDUTransport + Send>
};

let remote_transport = if let Some(issue) = remote_transport_issue {
Box::new(
LossyTransport::try_from((remote_udp, entity_map.clone(), issue))
.expect("Unable to make Lossy Transport."),
) as Box<dyn PDUTransport + Send>
} else {
Box::new(
UdpTransport::try_from((remote_udp, entity_map.clone()))
.expect("Unable to make UDP Transport."),
) as Box<dyn PDUTransport + Send>
};

let remote_transport_map: HashMap<Vec<EntityID>, Box<dyn PDUTransport + Send>> =
HashMap::from([(
vec![EntityID::from(0_u16)],
Box::new(remote_transport) as Box<dyn PDUTransport + Send>,
)]);
HashMap::from([(vec![EntityID::from(0_u16)], remote_transport)]);

let local_transport_map: HashMap<Vec<EntityID>, Box<dyn PDUTransport + Send>> =
HashMap::from([(
vec![EntityID::from(1_u16)],
Box::new(local_transport) as Box<dyn PDUTransport + Send>,
)]);

let utf8_path = Utf8PathBuf::from(
tempdir_fixture
.path()
.as_os_str()
.to_str()
.expect("Unable to coerce tmp path to String."),
);

let filestore = Arc::new(NativeFileStore::new(&utf8_path));
filestore
.create_directory("local")
.expect("Unable to create local directory.");
filestore
.create_directory("remote")
.expect("Unable to create local directory.");
HashMap::from([(vec![EntityID::from(1_u16)], local_transport)]);

let data_dir = Path::new(env!("CARGO_MANIFEST_DIR"))
.parent()
.unwrap()
.join("data");
for filename in ["small.txt", "medium.txt", "large.txt"] {
fs::copy(
data_dir.join(filename),
utf8_path.join("local").join(filename),
)
.expect("Unable to copy file.");
}
let (local_user, remote_user, local_handle, remote_handle) = create_daemons(
filestore.clone(),
filestore_fixture.clone(),
local_transport_map,
remote_transport_map,
terminate.clone(),
[None, None, None],
timeouts,
);
(
local_user,
remote_user,
filestore,
filestore_fixture.clone(),
local_handle,
remote_handle,
)
}

#[fixture]
#[once]
fn make_entities(
filestore_fixture: &Arc<NativeFileStore>,
terminate: &Arc<AtomicBool>,
) -> EntityConstructorReturn {
new_entities(filestore_fixture, terminate, None, None, [None; 3])
}

pub(crate) type UsersAndFilestore = (
&'static TestUserHalf,
&'static TestUserHalf,
Expand Down
144 changes: 21 additions & 123 deletions cfdp-core/tests/series_f1.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
use std::{
collections::HashMap,
net::UdpSocket,
sync::{atomic::AtomicBool, Arc},
thread,
time::Duration,
Expand All @@ -14,19 +12,18 @@ use cfdp_core::{
Condition, EntityID, MessageToUser, ProxyOperation, ProxyPutRequest, TransmissionMode,
UserOperation,
},
transport::{PDUTransport, UdpTransport},
};

use rstest::{fixture, rstest};

mod common;
use common::{
create_daemons, get_filestore, terminate, EntityConstructorReturn, LossyTransport,
TransportIssue, UsersAndFilestore,
get_filestore, new_entities, terminate, EntityConstructorReturn, TransportIssue,
UsersAndFilestore,
};

#[rstest]
#[timeout(Duration::from_secs(2))]
#[timeout(Duration::from_secs(200))]
// Series F1
// Sequence 1 Test
// Test goal:
Expand Down Expand Up @@ -128,46 +125,13 @@ fn fixture_f1s04(
get_filestore: &UsersAndFilestore,
terminate: &Arc<AtomicBool>,
) -> EntityConstructorReturn {
let (_, _, filestore) = get_filestore;
let remote_udp = UdpSocket::bind("127.0.0.1:0").expect("Unable to bind remote UDP.");
let remote_addr = remote_udp.local_addr().expect("Cannot find local address.");

let local_udp = UdpSocket::bind("127.0.0.1:0").expect("Unable to bind local UDP.");
let local_addr = local_udp.local_addr().expect("Cannot find local address.");

let entity_map = {
let mut temp = HashMap::new();
temp.insert(EntityID::from(0_u16), local_addr);
temp.insert(EntityID::from(1_u16), remote_addr);
temp
};

let local_transport =
LossyTransport::try_from((local_udp, entity_map.clone(), TransportIssue::Rate(13)))
.expect("Unable to make Lossy Transport.");
let remote_transport =
UdpTransport::try_from((remote_udp, entity_map)).expect("Unable to make UdpTransport.");

let remote_transport_map: HashMap<Vec<EntityID>, Box<dyn PDUTransport + Send>> =
HashMap::from([(
vec![EntityID::from(0_u16)],
Box::new(remote_transport) as Box<dyn PDUTransport + Send>,
)]);

let local_transport_map: HashMap<Vec<EntityID>, Box<dyn PDUTransport + Send>> =
HashMap::from([(
vec![EntityID::from(1_u16)],
Box::new(local_transport) as Box<dyn PDUTransport + Send>,
)]);

let (local_user, remote_user, local, remote) = create_daemons(
filestore.clone(),
local_transport_map,
remote_transport_map,
terminate.clone(),
new_entities(
&get_filestore.2,
terminate,
Some(TransportIssue::Rate(13)),
None,
[None; 3],
);
(local_user, remote_user, filestore.clone(), local, remote)
)
}

#[rstest]
Expand Down Expand Up @@ -209,46 +173,13 @@ fn fixture_f1s05(
get_filestore: &UsersAndFilestore,
terminate: &Arc<AtomicBool>,
) -> EntityConstructorReturn {
let (_, _, filestore) = get_filestore;
let remote_udp = UdpSocket::bind("127.0.0.1:0").expect("Unable to bind remote UDP.");
let remote_addr = remote_udp.local_addr().expect("Cannot find local address.");

let local_udp = UdpSocket::bind("127.0.0.1:0").expect("Unable to bind local UDP.");
let local_addr = local_udp.local_addr().expect("Cannot find local address.");

let entity_map = {
let mut temp = HashMap::new();
temp.insert(EntityID::from(0_u16), local_addr);
temp.insert(EntityID::from(1_u16), remote_addr);
temp
};

let local_transport =
LossyTransport::try_from((local_udp, entity_map.clone(), TransportIssue::Duplicate(13)))
.expect("Unable to make Lossy Transport.");
let remote_transport =
UdpTransport::try_from((remote_udp, entity_map)).expect("Unable to make UdpTransport.");

let remote_transport_map: HashMap<Vec<EntityID>, Box<dyn PDUTransport + Send>> =
HashMap::from([(
vec![EntityID::from(0_u16)],
Box::new(remote_transport) as Box<dyn PDUTransport + Send>,
)]);

let local_transport_map: HashMap<Vec<EntityID>, Box<dyn PDUTransport + Send>> =
HashMap::from([(
vec![EntityID::from(1_u16)],
Box::new(local_transport) as Box<dyn PDUTransport + Send>,
)]);

let (local_user, remote_user, local, remote) = create_daemons(
filestore.clone(),
local_transport_map,
remote_transport_map,
terminate.clone(),
new_entities(
&get_filestore.2,
terminate,
Some(TransportIssue::Duplicate(13)),
None,
[None; 3],
);
(local_user, remote_user, filestore.clone(), local, remote)
)
}

#[rstest]
Expand Down Expand Up @@ -291,46 +222,13 @@ fn fixture_f1s06(
get_filestore: &UsersAndFilestore,
terminate: &Arc<AtomicBool>,
) -> EntityConstructorReturn {
let (_, _, filestore) = get_filestore;
let remote_udp = UdpSocket::bind("127.0.0.1:0").expect("Unable to bind remote UDP.");
let remote_addr = remote_udp.local_addr().expect("Cannot find local address.");

let local_udp = UdpSocket::bind("127.0.0.1:0").expect("Unable to bind local UDP.");
let local_addr = local_udp.local_addr().expect("Cannot find local address.");

let entity_map = {
let mut temp = HashMap::new();
temp.insert(EntityID::from(0_u16), local_addr);
temp.insert(EntityID::from(1_u16), remote_addr);
temp
};

let local_transport =
LossyTransport::try_from((local_udp, entity_map.clone(), TransportIssue::Reorder(13)))
.expect("Unable to make Lossy Transport.");
let remote_transport =
UdpTransport::try_from((remote_udp, entity_map)).expect("Unable to make UdpTransport.");

let remote_transport_map: HashMap<Vec<EntityID>, Box<dyn PDUTransport + Send>> =
HashMap::from([(
vec![EntityID::from(0_u16)],
Box::new(remote_transport) as Box<dyn PDUTransport + Send>,
)]);

let local_transport_map: HashMap<Vec<EntityID>, Box<dyn PDUTransport + Send>> =
HashMap::from([(
vec![EntityID::from(1_u16)],
Box::new(local_transport) as Box<dyn PDUTransport + Send>,
)]);

let (local_user, remote_user, local, remote) = create_daemons(
filestore.clone(),
local_transport_map,
remote_transport_map,
terminate.clone(),
new_entities(
&get_filestore.2,
terminate,
Some(TransportIssue::Reorder(13)),
None,
[None; 3],
);
(local_user, remote_user, filestore.clone(), local, remote)
)
}

#[rstest]
Expand Down
Loading

0 comments on commit dd47c63

Please sign in to comment.