FallbackDir: Use VecBuilder for orports
And drop the ad-hoc orport() method. This brings FallbackDir's orports field in line with our list builder API. The general semver note in "configuation" seems to cover most of this.
This commit is contained in:
parent
cc394ca9b9
commit
4ad4cae418
|
@ -389,11 +389,12 @@ mod test {
|
|||
.name("Fred")
|
||||
.v3ident([22; 20].into())
|
||||
.clone();
|
||||
let fallback = dir::FallbackDir::builder()
|
||||
let mut fallback = dir::FallbackDir::builder();
|
||||
fallback
|
||||
.rsa_identity([23; 20].into())
|
||||
.ed_identity([99; 32].into())
|
||||
.orports(vec!["127.0.0.7:7".parse().unwrap()])
|
||||
.clone();
|
||||
.orports()
|
||||
.push("127.0.0.7:7".parse().unwrap());
|
||||
|
||||
let mut bld = TorClientConfig::builder();
|
||||
bld.tor_network().set_authorities(vec![auth]);
|
||||
|
|
|
@ -226,11 +226,12 @@ mod test {
|
|||
.name("Fred")
|
||||
.v3ident([22; 20].into())
|
||||
.clone();
|
||||
let fallback = dir::FallbackDir::builder()
|
||||
let mut fallback = dir::FallbackDir::builder();
|
||||
fallback
|
||||
.rsa_identity([23; 20].into())
|
||||
.ed_identity([99; 32].into())
|
||||
.orports(vec!["127.0.0.7:7".parse().unwrap()])
|
||||
.clone();
|
||||
.orports()
|
||||
.push("127.0.0.7:7".parse().unwrap());
|
||||
|
||||
let mut bld = ArtiConfig::builder();
|
||||
bld.proxy().socks_port(Some(9999));
|
||||
|
|
|
@ -117,18 +117,22 @@ mod test {
|
|||
#[test]
|
||||
fn dirpath_fallback() {
|
||||
let fb_owned = vec![
|
||||
FallbackDir::builder()
|
||||
.rsa_identity([0x01; 20].into())
|
||||
.ed_identity([0x01; 32].into())
|
||||
.orport("127.0.0.1:9000".parse().unwrap())
|
||||
.build()
|
||||
.unwrap(),
|
||||
FallbackDir::builder()
|
||||
.rsa_identity([0x03; 20].into())
|
||||
.ed_identity([0x03; 32].into())
|
||||
.orport("127.0.0.1:9003".parse().unwrap())
|
||||
.build()
|
||||
.unwrap(),
|
||||
{
|
||||
let mut bld = FallbackDir::builder();
|
||||
bld.rsa_identity([0x01; 20].into())
|
||||
.ed_identity([0x01; 32].into())
|
||||
.orports()
|
||||
.push("127.0.0.1:9000".parse().unwrap());
|
||||
bld.build().unwrap()
|
||||
},
|
||||
{
|
||||
let mut bld = FallbackDir::builder();
|
||||
bld.rsa_identity([0x03; 20].into())
|
||||
.ed_identity([0x03; 32].into())
|
||||
.orports()
|
||||
.push("127.0.0.1:9003".parse().unwrap());
|
||||
bld.build().unwrap()
|
||||
},
|
||||
];
|
||||
let fb: FallbackList = fb_owned.clone().into();
|
||||
let dirinfo = (&fb).into();
|
||||
|
|
|
@ -333,12 +333,14 @@ mod test {
|
|||
]);
|
||||
assert!(bld.build().is_err());
|
||||
|
||||
bld.set_fallback_caches(vec![FallbackDir::builder()
|
||||
.rsa_identity([b'x'; 20].into())
|
||||
.ed_identity([b'y'; 32].into())
|
||||
.orport("127.0.0.1:99".parse().unwrap())
|
||||
.orport("[::]:99".parse().unwrap())
|
||||
.clone()]);
|
||||
bld.set_fallback_caches(vec![{
|
||||
let mut bld = FallbackDir::builder();
|
||||
bld.rsa_identity([b'x'; 20].into())
|
||||
.ed_identity([b'y'; 32].into());
|
||||
bld.orports().push("127.0.0.1:99".parse().unwrap());
|
||||
bld.orports().push("[::]:99".parse().unwrap());
|
||||
bld
|
||||
}]);
|
||||
let cfg = bld.build().unwrap();
|
||||
assert_eq!(cfg.authorities.len(), 2);
|
||||
assert_eq!(cfg.fallback_caches.len(), 1);
|
||||
|
|
|
@ -15,6 +15,7 @@ mod set;
|
|||
use crate::ids::FallbackId;
|
||||
use derive_builder::Builder;
|
||||
use tor_config::ConfigBuildError;
|
||||
use tor_config::{define_list_builder_accessors, list_builder::VecBuilder};
|
||||
use tor_llcrypto::pk::ed25519::Ed25519Identity;
|
||||
use tor_llcrypto::pk::rsa::RsaIdentity;
|
||||
|
||||
|
@ -41,9 +42,16 @@ pub struct FallbackDir {
|
|||
/// Ed25519 identity for the directory relay
|
||||
ed_identity: Ed25519Identity,
|
||||
/// List of ORPorts for the directory relay
|
||||
#[builder(sub_builder(fn_name = "build"), setter(custom))]
|
||||
orports: Vec<SocketAddr>,
|
||||
}
|
||||
|
||||
define_list_builder_accessors! {
|
||||
struct FallbackDirBuilder {
|
||||
pub orports: [SocketAddr],
|
||||
}
|
||||
}
|
||||
|
||||
impl FallbackDir {
|
||||
/// Return a builder that can be used to make a `FallbackDir`.
|
||||
pub fn builder() -> FallbackDirBuilder {
|
||||
|
@ -67,13 +75,6 @@ impl FallbackDirBuilder {
|
|||
pub fn new() -> Self {
|
||||
Self::default()
|
||||
}
|
||||
/// Add a single OR port for this fallback directory.
|
||||
///
|
||||
/// This field is required, and may be called more than once.
|
||||
pub fn orport(&mut self, orport: SocketAddr) -> &mut Self {
|
||||
self.orports.get_or_insert_with(Vec::new).push(orport);
|
||||
self
|
||||
}
|
||||
/// Builds a new `FallbackDir`.
|
||||
///
|
||||
/// ### Errors
|
||||
|
@ -108,7 +109,7 @@ pub(crate) fn default_fallbacks() -> Vec<FallbackDirBuilder> {
|
|||
.iter()
|
||||
.map(|s| s.parse().expect("Bad socket address in fallbacklist"))
|
||||
.for_each(|p| {
|
||||
bld.orport(p);
|
||||
bld.orports().push(p);
|
||||
});
|
||||
|
||||
bld
|
||||
|
|
|
@ -244,12 +244,12 @@ mod test {
|
|||
let ed: [u8; 32] = rng.gen();
|
||||
let rsa: [u8; 20] = rng.gen();
|
||||
let ip: u32 = rng.gen();
|
||||
FallbackDir::builder()
|
||||
.ed_identity(ed.into())
|
||||
let mut bld = FallbackDir::builder();
|
||||
bld.ed_identity(ed.into())
|
||||
.rsa_identity(rsa.into())
|
||||
.orport(std::net::SocketAddrV4::new(ip.into(), 9090).into())
|
||||
.build()
|
||||
.unwrap()
|
||||
.orports()
|
||||
.push(std::net::SocketAddrV4::new(ip.into(), 9090).into());
|
||||
bld.build().unwrap()
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
|
@ -60,6 +60,7 @@ BREAKING: DirMgrCfg: schedule and network fields rename (`_config` removed)
|
|||
|
||||
### tor-guardmgr
|
||||
|
||||
BREAKING: FallbackDirBuilder::orport() removed, and orports() now gives &mut SocketAddrListBuilder
|
||||
MODIFIED: New functions to get estimated clock skew.
|
||||
MODIFIED: New functions to report observed clock skew.
|
||||
|
||||
|
|
Loading…
Reference in New Issue