Skip to content

Commit 349692b

Browse files
committed
test: [#989] add more tests for keys
There are four ways of adding keys to the tracker. One for each combination of: - Expiring or permanent key. - Pre-generated (uploaded) ot randomdly generated key. This commit adds new tests for each case.
1 parent 8d58882 commit 349692b

1 file changed

Lines changed: 187 additions & 55 deletions

File tree

src/core/mod.rs

Lines changed: 187 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1785,35 +1785,8 @@ mod tests {
17851785
use std::str::FromStr;
17861786
use std::time::Duration;
17871787

1788-
use torrust_tracker_clock::clock::Time;
1789-
use torrust_tracker_configuration::v2::core::PrivateMode;
1790-
1791-
use crate::core::auth::{self, Key};
1788+
use crate::core::auth::{self};
17921789
use crate::core::tests::the_tracker::private_tracker;
1793-
use crate::CurrentClock;
1794-
1795-
#[tokio::test]
1796-
async fn it_should_generate_the_expiring_authentication_keys() {
1797-
let tracker = private_tracker();
1798-
1799-
let key = tracker.generate_auth_key(Some(Duration::from_secs(100))).await.unwrap();
1800-
1801-
assert_eq!(
1802-
key.valid_until,
1803-
Some(CurrentClock::now_add(&Duration::from_secs(100)).unwrap())
1804-
);
1805-
}
1806-
1807-
#[tokio::test]
1808-
async fn it_should_authenticate_a_peer_by_using_a_key() {
1809-
let tracker = private_tracker();
1810-
1811-
let expiring_key = tracker.generate_auth_key(Some(Duration::from_secs(100))).await.unwrap();
1812-
1813-
let result = tracker.authenticate(&expiring_key.key()).await;
1814-
1815-
assert!(result.is_ok());
1816-
}
18171790

18181791
#[tokio::test]
18191792
async fn it_should_fail_authenticating_a_peer_when_it_uses_an_unregistered_key() {
@@ -1826,33 +1799,6 @@ mod tests {
18261799
assert!(result.is_err());
18271800
}
18281801

1829-
#[tokio::test]
1830-
async fn it_should_verify_a_valid_authentication_key() {
1831-
let tracker = private_tracker();
1832-
1833-
let expiring_key = tracker.generate_auth_key(Some(Duration::from_secs(100))).await.unwrap();
1834-
1835-
assert!(tracker.authenticate(&expiring_key.key()).await.is_ok());
1836-
}
1837-
1838-
#[tokio::test]
1839-
async fn it_should_accept_an_expired_key_when_checking_expiration_is_disabled_in_configuration() {
1840-
let mut tracker = private_tracker();
1841-
1842-
tracker.config.private_mode = Some(PrivateMode {
1843-
check_keys_expiration: false,
1844-
});
1845-
1846-
let past_time = Some(Duration::ZERO);
1847-
1848-
let expiring_key = tracker
1849-
.add_auth_key(Key::new("YZSl4lMZupRuOpSRC3krIKR5BPB14nrJ").unwrap(), past_time)
1850-
.await
1851-
.unwrap();
1852-
1853-
assert!(tracker.authenticate(&expiring_key.key()).await.is_ok());
1854-
}
1855-
18561802
#[tokio::test]
18571803
async fn it_should_fail_verifying_an_unregistered_authentication_key() {
18581804
let tracker = private_tracker();
@@ -1888,6 +1834,192 @@ mod tests {
18881834
assert!(result.is_ok());
18891835
assert!(tracker.verify_auth_key(&expiring_key.key()).await.is_ok());
18901836
}
1837+
1838+
mod with_expiring_and {
1839+
1840+
mod randomly_generated_keys {
1841+
use std::time::Duration;
1842+
1843+
use torrust_tracker_clock::clock::Time;
1844+
use torrust_tracker_configuration::v2::core::PrivateMode;
1845+
1846+
use crate::core::auth::Key;
1847+
use crate::core::tests::the_tracker::private_tracker;
1848+
use crate::CurrentClock;
1849+
1850+
#[tokio::test]
1851+
async fn it_should_generate_the_key() {
1852+
let tracker = private_tracker();
1853+
1854+
let peer_key = tracker.generate_auth_key(Some(Duration::from_secs(100))).await.unwrap();
1855+
1856+
assert_eq!(
1857+
peer_key.valid_until,
1858+
Some(CurrentClock::now_add(&Duration::from_secs(100)).unwrap())
1859+
);
1860+
}
1861+
1862+
#[tokio::test]
1863+
async fn it_should_authenticate_a_peer_with_the_key() {
1864+
let tracker = private_tracker();
1865+
1866+
let peer_key = tracker.generate_auth_key(Some(Duration::from_secs(100))).await.unwrap();
1867+
1868+
let result = tracker.authenticate(&peer_key.key()).await;
1869+
1870+
assert!(result.is_ok());
1871+
}
1872+
1873+
#[tokio::test]
1874+
async fn it_should_accept_an_expired_key_when_checking_expiration_is_disabled_in_configuration() {
1875+
let mut tracker = private_tracker();
1876+
1877+
tracker.config.private_mode = Some(PrivateMode {
1878+
check_keys_expiration: false,
1879+
});
1880+
1881+
let past_timestamp = Duration::ZERO;
1882+
1883+
let peer_key = tracker
1884+
.add_auth_key(Key::new("YZSl4lMZupRuOpSRC3krIKR5BPB14nrJ").unwrap(), Some(past_timestamp))
1885+
.await
1886+
.unwrap();
1887+
1888+
assert!(tracker.authenticate(&peer_key.key()).await.is_ok());
1889+
}
1890+
}
1891+
1892+
mod pre_generated_keys {
1893+
use std::time::Duration;
1894+
1895+
use torrust_tracker_clock::clock::Time;
1896+
use torrust_tracker_configuration::v2::core::PrivateMode;
1897+
1898+
use crate::core::auth::Key;
1899+
use crate::core::tests::the_tracker::private_tracker;
1900+
use crate::core::AddKeyRequest;
1901+
use crate::CurrentClock;
1902+
1903+
#[tokio::test]
1904+
async fn it_should_add_a_pre_generated_key() {
1905+
let tracker = private_tracker();
1906+
1907+
let peer_key = tracker
1908+
.add_peer_key(AddKeyRequest {
1909+
opt_key: Some(Key::new("YZSl4lMZupRuOpSRC3krIKR5BPB14nrJ").unwrap().to_string()),
1910+
opt_seconds_valid: Some(100),
1911+
})
1912+
.await
1913+
.unwrap();
1914+
1915+
assert_eq!(
1916+
peer_key.valid_until,
1917+
Some(CurrentClock::now_add(&Duration::from_secs(100)).unwrap())
1918+
);
1919+
}
1920+
1921+
#[tokio::test]
1922+
async fn it_should_authenticate_a_peer_with_the_key() {
1923+
let tracker = private_tracker();
1924+
1925+
let peer_key = tracker
1926+
.add_peer_key(AddKeyRequest {
1927+
opt_key: Some(Key::new("YZSl4lMZupRuOpSRC3krIKR5BPB14nrJ").unwrap().to_string()),
1928+
opt_seconds_valid: Some(100),
1929+
})
1930+
.await
1931+
.unwrap();
1932+
1933+
let result = tracker.authenticate(&peer_key.key()).await;
1934+
1935+
assert!(result.is_ok());
1936+
}
1937+
1938+
#[tokio::test]
1939+
async fn it_should_accept_an_expired_key_when_checking_expiration_is_disabled_in_configuration() {
1940+
let mut tracker = private_tracker();
1941+
1942+
tracker.config.private_mode = Some(PrivateMode {
1943+
check_keys_expiration: false,
1944+
});
1945+
1946+
let peer_key = tracker
1947+
.add_peer_key(AddKeyRequest {
1948+
opt_key: Some(Key::new("YZSl4lMZupRuOpSRC3krIKR5BPB14nrJ").unwrap().to_string()),
1949+
opt_seconds_valid: Some(0),
1950+
})
1951+
.await
1952+
.unwrap();
1953+
1954+
assert!(tracker.authenticate(&peer_key.key()).await.is_ok());
1955+
}
1956+
}
1957+
}
1958+
1959+
mod with_permanent_and {
1960+
1961+
mod randomly_generated_keys {
1962+
use crate::core::tests::the_tracker::private_tracker;
1963+
1964+
#[tokio::test]
1965+
async fn it_should_generate_the_key() {
1966+
let tracker = private_tracker();
1967+
1968+
let peer_key = tracker.generate_permanent_auth_key().await.unwrap();
1969+
1970+
assert_eq!(peer_key.valid_until, None);
1971+
}
1972+
1973+
#[tokio::test]
1974+
async fn it_should_authenticate_a_peer_with_the_key() {
1975+
let tracker = private_tracker();
1976+
1977+
let peer_key = tracker.generate_permanent_auth_key().await.unwrap();
1978+
1979+
let result = tracker.authenticate(&peer_key.key()).await;
1980+
1981+
assert!(result.is_ok());
1982+
}
1983+
}
1984+
1985+
mod pre_generated_keys {
1986+
use crate::core::auth::Key;
1987+
use crate::core::tests::the_tracker::private_tracker;
1988+
use crate::core::AddKeyRequest;
1989+
1990+
#[tokio::test]
1991+
async fn it_should_add_a_pre_generated_key() {
1992+
let tracker = private_tracker();
1993+
1994+
let peer_key = tracker
1995+
.add_peer_key(AddKeyRequest {
1996+
opt_key: Some(Key::new("YZSl4lMZupRuOpSRC3krIKR5BPB14nrJ").unwrap().to_string()),
1997+
opt_seconds_valid: None,
1998+
})
1999+
.await
2000+
.unwrap();
2001+
2002+
assert_eq!(peer_key.valid_until, None);
2003+
}
2004+
2005+
#[tokio::test]
2006+
async fn it_should_authenticate_a_peer_with_the_key() {
2007+
let tracker = private_tracker();
2008+
2009+
let peer_key = tracker
2010+
.add_peer_key(AddKeyRequest {
2011+
opt_key: Some(Key::new("YZSl4lMZupRuOpSRC3krIKR5BPB14nrJ").unwrap().to_string()),
2012+
opt_seconds_valid: None,
2013+
})
2014+
.await
2015+
.unwrap();
2016+
2017+
let result = tracker.authenticate(&peer_key.key()).await;
2018+
2019+
assert!(result.is_ok());
2020+
}
2021+
}
2022+
}
18912023
}
18922024

18932025
mod handling_an_announce_request {}

0 commit comments

Comments
 (0)