Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 33 additions & 20 deletions src/test/clitools.rs
Original file line number Diff line number Diff line change
Expand Up @@ -543,6 +543,8 @@ pub enum Scenario {
SimpleV2,
/// One date, v1 manifests
SimpleV1,
/// One date, v2 manifests, `rust-analyzer` available as an extension component
RustAnalyzer,
/// One date, v2 manifests, MULTI_ARCH1 host
MultiHost,
/// One date, v2 manifests, beta with tag
Expand Down Expand Up @@ -627,6 +629,13 @@ impl Scenario {
Release::beta("1.2.0", "2015-01-02"),
Release::stable("1.1.0", "2015-01-02"),
],
Self::RustAnalyzer => vec![
Release::new("nightly", "1.3.0", "2015-01-02", "2")
.with_rls(RlsStatus::Renamed)
.with_rust_analyzer(),
Release::beta("1.2.0", "2015-01-02").with_rust_analyzer(),
Release::stable("1.1.0", "2015-01-02").with_rust_analyzer(),
],
Self::MultiHost => vec![
Release::new("nightly", "1.3.0", "2015-01-02", "2").multi_arch(),
Release::beta("1.2.0", "2015-01-02").multi_arch(),
Expand Down Expand Up @@ -677,6 +686,7 @@ impl Scenario {
| Self::ArchivesV2TwoVersions
| Self::BetaTag
| Self::MultiHost
| Self::RustAnalyzer
| Self::Unavailable
| Self::UnavailableRls
| Self::RemovedRls
Expand Down Expand Up @@ -723,26 +733,27 @@ impl ConstState {
Self {
const_dist_dir,
scenarios: enum_map! {
Scenario::ArchivesV1 => RwLock::new(None),
Scenario::ArchivesV2 => RwLock::new(None),
Scenario::ArchivesV2_2015_01_01 => RwLock::new(None),
Scenario::ArchivesV2TwoVersions => RwLock::new(None),
Scenario::BetaTag => RwLock::new(None),
Scenario::Empty => RwLock::new(None),
Scenario::Full => RwLock::new(None),
Scenario::HostGoesMissingBefore => RwLock::new(None),
Scenario::HostGoesMissingAfter => RwLock::new(None),
Scenario::MissingComponent => RwLock::new(None),
Scenario::MissingComponentMulti => RwLock::new(None),
Scenario::MissingNightly => RwLock::new(None),
Scenario::MultiHost => RwLock::new(None),
Scenario::None => RwLock::new(None),
Scenario::RemovedRls => RwLock::new(None),
Scenario::SimpleV1 => RwLock::new(None),
Scenario::SimpleV2 => RwLock::new(None),
Scenario::Unavailable => RwLock::new(None),
Scenario::UnavailableRls => RwLock::new(None),
Scenario::RecentStable => RwLock::new(None),
Scenario::ArchivesV1
| Scenario::ArchivesV2
| Scenario::ArchivesV2TwoVersions
| Scenario::ArchivesV2_2015_01_01
| Scenario::BetaTag
| Scenario::Empty
| Scenario::Full
| Scenario::HostGoesMissingAfter
| Scenario::HostGoesMissingBefore
| Scenario::MissingComponent
| Scenario::MissingComponentMulti
| Scenario::MissingNightly
| Scenario::MultiHost
| Scenario::None
| Scenario::RecentStable
| Scenario::RemovedRls
| Scenario::RustAnalyzer
| Scenario::SimpleV1
| Scenario::SimpleV2
| Scenario::Unavailable
| Scenario::UnavailableRls => RwLock::new(None),
},
}
}
Expand Down Expand Up @@ -849,6 +860,7 @@ async fn setup_test_state(test_dist_dir: TempDir) -> (TempDir, Config) {
let rustc_path = config.exedir.join(format!("rustc{EXE_SUFFIX}"));
let cargo_path = config.exedir.join(format!("cargo{EXE_SUFFIX}"));
let rls_path = config.exedir.join(format!("rls{EXE_SUFFIX}"));
let rust_analyzer_path = config.exedir.join(format!("rust-analyzer{EXE_SUFFIX}"));
let rust_lldb_path = config.exedir.join(format!("rust-lldb{EXE_SUFFIX}"));

const ESTIMATED_LINKS_PER_TEST: usize = 6 * 2;
Expand Down Expand Up @@ -885,6 +897,7 @@ async fn setup_test_state(test_dist_dir: TempDir) -> (TempDir, Config) {
hard_link(&rustup_path, rustc_path).unwrap();
hard_link(&rustup_path, cargo_path).unwrap();
hard_link(&rustup_path, rls_path).unwrap();
hard_link(&rustup_path, rust_analyzer_path).unwrap();
hard_link(&rustup_path, rust_lldb_path).unwrap();

// Make sure the host tuple matches the build tuple. Otherwise testing a 32-bit build of
Expand Down
94 changes: 59 additions & 35 deletions src/test/dist.rs
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ pub(super) struct Release {
version: String,
hash: String,
rls: RlsStatus,
rust_analyzer: bool,
available: bool,
multi_arch: bool,
}
Expand All @@ -111,6 +112,11 @@ impl Release {
self
}

pub(super) fn with_rust_analyzer(mut self) -> Self {
self.rust_analyzer = true;
self
}

pub(super) fn unavailable(mut self) -> Self {
self.available = false;
self
Expand All @@ -136,32 +142,17 @@ impl Release {
available: true,
multi_arch: false,
rls: RlsStatus::Available,
rust_analyzer: false,
}
}

pub(super) fn mock(&self) -> MockChannel {
if self.available {
MockChannel::new(
&self.channel,
&self.date,
&self.version,
&self.hash,
self.rls,
self.multi_arch,
false,
)
MockChannel::new(self, self.multi_arch, false)
} else if self.multi_arch {
// unavailable but multiarch means to build only with host==MULTI_ARCH1
// instead of true multiarch
MockChannel::new(
&self.channel,
&self.date,
&self.version,
&self.hash,
self.rls,
false,
true,
)
MockChannel::new(self, false, true)
} else {
MockChannel::unavailable(&self.channel, &self.date, &self.version, &self.hash)
}
Expand Down Expand Up @@ -287,15 +278,17 @@ pub(crate) struct MockChannel {
}

impl MockChannel {
pub(super) fn new(
channel: &str,
date: &str,
version: &str,
version_hash: &str,
rls: RlsStatus,
multi_arch: bool,
swap_tuples: bool,
) -> Self {
pub(super) fn new(release: &Release, multi_arch: bool, swap_tuples: bool) -> Self {
let Release {
channel,
date,
version,
hash: version_hash,
rls,
rust_analyzer,
available: _,
multi_arch: _,
} = release;
// Build the mock installers
let host_tuple = if swap_tuples {
MULTI_ARCH1.to_owned()
Expand Down Expand Up @@ -323,7 +316,7 @@ impl MockChannel {
all.rustc.push((rustc, host_tuple.clone()));
all.cargo.push((cargo, host_tuple.clone()));

if rls != RlsStatus::Unavailable {
if *rls != RlsStatus::Unavailable {
let rls = MockInstallerBuilder::rls(version, version_hash, rls.pkg_name());
all.rls.push((rls, host_tuple.clone()));
} else {
Expand All @@ -333,6 +326,11 @@ impl MockChannel {
));
}

if *rust_analyzer {
let ra = MockInstallerBuilder::rust_analyzer(version, version_hash);
all.rust_analyzer.push((ra, host_tuple.clone()));
}

all.docs.push((rust_docs, host_tuple.clone()));
all.src.push((rust_src, "*".to_string()));
all.analysis.push((rust_analysis, "*".to_string()));
Expand All @@ -350,7 +348,7 @@ impl MockChannel {
all.rustc.push((rustc, target_tuple.clone()));
all.cargo.push((cargo, target_tuple.clone()));

if rls != RlsStatus::Unavailable {
if *rls != RlsStatus::Unavailable {
let rls = MockInstallerBuilder::rls(version, version_hash, rls.pkg_name());
all.rls.push((rls, target_tuple.clone()));
} else {
Expand All @@ -360,6 +358,11 @@ impl MockChannel {
));
}

if *rust_analyzer {
let ra = MockInstallerBuilder::rust_analyzer(version, version_hash);
all.rust_analyzer.push((ra, target_tuple.clone()));
}

all.docs.push((rust_docs, target_tuple.to_string()));
all.combined.push((rust, target_tuple));
}
Expand Down Expand Up @@ -389,7 +392,7 @@ impl MockChannel {

// Add subcomponents of the rust package
{
let rust_pkg = packages.last_mut().unwrap();
let rust_pkg = packages.iter_mut().find(|p| p.name == "rust").unwrap();
for target_pkg in rust_pkg.targets.iter_mut() {
let target = &target_pkg.target;
target_pkg.components.push(MockComponent {
Expand All @@ -412,13 +415,13 @@ impl MockChannel {
target: target.to_string(),
is_extension: false,
});
if rls == RlsStatus::Renamed {
if *rls == RlsStatus::Renamed {
target_pkg.components.push(MockComponent {
name: "rls-preview".to_string(),
target: target.to_string(),
is_extension: true,
});
} else if rls == RlsStatus::Available {
} else if *rls == RlsStatus::Available {
target_pkg.components.push(MockComponent {
name: "rls".to_string(),
target: target.to_string(),
Expand All @@ -431,6 +434,13 @@ impl MockChannel {
is_extension: true,
})
}
if *rust_analyzer {
target_pkg.components.push(MockComponent {
name: "rust-analyzer-preview".to_string(),
target: target.to_string(),
is_extension: true,
});
}
for other_target in &all_std_archs {
if other_target != target {
target_pkg.components.push(MockComponent {
Expand All @@ -455,9 +465,15 @@ impl MockChannel {
}

let mut renames = HashMap::new();
if rls == RlsStatus::Renamed {
if *rls == RlsStatus::Renamed {
renames.insert("rls".to_owned(), "rls-preview".to_owned());
}
if *rust_analyzer {
renames.insert(
"rust-analyzer".to_owned(),
"rust-analyzer-preview".to_owned(),
);
}

Self {
name: channel.to_string(),
Expand Down Expand Up @@ -513,6 +529,7 @@ struct MockChannelContent {
rustc: Vec<(MockInstallerBuilder, String)>,
cargo: Vec<(MockInstallerBuilder, String)>,
rls: Vec<(MockInstallerBuilder, String)>,
rust_analyzer: Vec<(MockInstallerBuilder, String)>,
docs: Vec<(MockInstallerBuilder, String)>,
src: Vec<(MockInstallerBuilder, String)>,
analysis: Vec<(MockInstallerBuilder, String)>,
Expand All @@ -524,7 +541,7 @@ impl MockChannelContent {
self,
rls_name: &'static str,
) -> Vec<(&'static str, Vec<(MockInstallerBuilder, String)>)> {
vec![
let mut packages = vec![
("rust-std", self.std),
("rustc", self.rustc),
("cargo", self.cargo),
Expand All @@ -533,7 +550,14 @@ impl MockChannelContent {
("rust-src", self.src),
("rust-analysis", self.analysis),
("rust", self.combined),
]
];

// Not every release ships `rust-analyzer`.
if !self.rust_analyzer.is_empty() {
packages.push(("rust-analyzer-preview", self.rust_analyzer));
}

packages
}
}

Expand Down
9 changes: 9 additions & 0 deletions src/test/mock.rs
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,15 @@ impl MockInstallerBuilder {
}
}

pub(super) fn rust_analyzer(version: &str, version_hash: &str) -> Self {
Self {
components: vec![MockComponentBuilder {
name: "rust-analyzer-preview".to_string(),
files: mock_bin("rust-analyzer", version, version_hash),
}],
}
}

pub(super) fn rust_doc() -> Self {
let mut files: Vec<MockFile> = topical_doc_data::unique_paths()
.map(|x| MockFile::new(x, b""))
Expand Down
Loading
Loading