Skip to content

Commit e5f6386

Browse files
authored
Merge pull request #226 from kpcyrd/nullable-release
Fix some api routes for distros with release=null (e.g. Arch Linux)
2 parents 3b6acd8 + ab7edbd commit e5f6386

30 files changed

Lines changed: 227 additions & 144 deletions

daemon/src/api/v1/meta.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@ use rebuilderd_common::errors::Error;
1010
use serde_json::json;
1111
use std::sync::Arc;
1212

13+
const NO_RELEASE: &str = "-";
14+
15+
fn derive_release(release: &str) -> Option<&str> {
16+
Some(release).filter(|r| *r != NO_RELEASE)
17+
}
18+
1319
#[get("/distributions")]
1420
pub async fn get_distributions(
1521
pool: web::Data<Pool>,
@@ -92,11 +98,12 @@ pub async fn get_distribution_release_architectures(
9298
freshness_filter: web::Query<FreshnessFilter>,
9399
) -> web::Result<impl Responder> {
94100
let mut connection = pool.get().map_err(Error::from)?;
101+
let release = derive_release(&path.1);
95102

96103
let distribution_release_architectures = source_packages::table
97104
.inner_join(build_inputs::table)
98105
.filter(source_packages::distribution.is(&path.0))
99-
.filter(source_packages::release.is(&path.1))
106+
.filter(source_packages::release.is(release))
100107
.filter(freshness_filter.into_inner().into_filter())
101108
.select(build_inputs::architecture)
102109
.distinct()
@@ -113,10 +120,11 @@ pub async fn get_distribution_release_components(
113120
freshness_filter: web::Query<FreshnessFilter>,
114121
) -> web::Result<impl Responder> {
115122
let mut connection = pool.get().map_err(Error::from)?;
123+
let release = derive_release(&path.1);
116124

117125
let distribution_release_components = source_packages::table
118126
.filter(source_packages::distribution.is(&path.0))
119-
.filter(source_packages::release.is(&path.1))
127+
.filter(source_packages::release.is(release))
120128
.filter(freshness_filter.into_inner().into_filter())
121129
.select(source_packages::component)
122130
.distinct()
@@ -133,11 +141,12 @@ pub async fn get_distribution_release_component_architectures(
133141
freshness_filter: web::Query<FreshnessFilter>,
134142
) -> web::Result<impl Responder> {
135143
let mut connection = pool.get().map_err(Error::from)?;
144+
let release = derive_release(&path.1);
136145

137146
let distribution_release_component_architectures = source_packages::table
138147
.inner_join(build_inputs::table)
139148
.filter(source_packages::distribution.is(&path.0))
140-
.filter(source_packages::release.is(&path.1))
149+
.filter(source_packages::release.is(release))
141150
.filter(source_packages::component.is(&path.2))
142151
.filter(freshness_filter.into_inner().into_filter())
143152
.select(build_inputs::architecture)

tests/src/actions/mod.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,13 @@ pub async fn import_multiple_packages(client: &Client) {
4444
.unwrap();
4545
}
4646

47+
pub async fn import_single_package_with_null_release(client: &Client) {
48+
client
49+
.submit_package_report(&single_package_report_with_null_release())
50+
.await
51+
.unwrap();
52+
}
53+
4754
pub async fn pick_up_job(client: &Client) -> QueuedJobWithArtifacts {
4855
match client
4956
.request_work(PopQueuedJobRequest {

tests/src/api/v1/build/get_build.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::fixtures::server::IsolatedServer;
22
use crate::fixtures::*;
3-
use crate::setup::*;
3+
use crate::setup;
44
use rebuilderd_common::api::v1::BuildRestApi;
55
use rstest::rstest;
66

@@ -17,7 +17,7 @@ pub async fn returns_no_results_for_empty_database(mut isolated_server: Isolated
1717
#[rstest]
1818
#[tokio::test]
1919
pub async fn returns_result_for_existing_id(mut isolated_server: IsolatedServer) {
20-
setup_single_good_rebuild(&isolated_server.client).await;
20+
setup::single_good_rebuild(&isolated_server.client).await;
2121

2222
let results = isolated_server.client.get_build(1).await;
2323

@@ -29,7 +29,7 @@ pub async fn returns_result_for_existing_id(mut isolated_server: IsolatedServer)
2929
#[rstest]
3030
#[tokio::test]
3131
pub async fn returns_no_result_for_nonexistent_id(mut isolated_server: IsolatedServer) {
32-
setup_single_good_rebuild(&isolated_server.client).await;
32+
setup::single_good_rebuild(&isolated_server.client).await;
3333

3434
let results = isolated_server.client.get_build(99999).await;
3535

@@ -43,7 +43,7 @@ pub async fn returns_no_result_for_nonexistent_id(mut isolated_server: IsolatedS
4343
pub async fn does_not_need_authentication(mut isolated_server: IsolatedServer) {
4444
let client = &mut isolated_server.client;
4545

46-
setup_single_good_rebuild(client).await;
46+
setup::single_good_rebuild(client).await;
4747

4848
// zero out keys
4949
client.auth_cookie("");

tests/src/api/v1/build/get_build_artifact.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::fixtures::server::IsolatedServer;
22
use crate::fixtures::*;
3-
use crate::setup::*;
3+
use crate::setup;
44
use rebuilderd_common::api::v1::BuildRestApi;
55
use rstest::rstest;
66

@@ -21,7 +21,7 @@ pub async fn returns_no_results_for_empty_database(mut isolated_server: Isolated
2121
pub async fn returns_result_for_existing_id(mut isolated_server: IsolatedServer) {
2222
let client = &isolated_server.client;
2323

24-
setup_single_good_rebuild(client).await;
24+
setup::single_good_rebuild(client).await;
2525

2626
let results = client.get_build_artifact(1, 1).await;
2727

@@ -35,7 +35,7 @@ pub async fn returns_result_for_existing_id(mut isolated_server: IsolatedServer)
3535
pub async fn returns_no_result_for_nonexistent_build_id(mut isolated_server: IsolatedServer) {
3636
let client = &isolated_server.client;
3737

38-
setup_single_good_rebuild(client).await;
38+
setup::single_good_rebuild(client).await;
3939

4040
let results = client.get_build_artifact(99999, 1).await;
4141

@@ -49,7 +49,7 @@ pub async fn returns_no_result_for_nonexistent_build_id(mut isolated_server: Iso
4949
pub async fn returns_no_result_for_nonexistent_artifact_id(mut isolated_server: IsolatedServer) {
5050
let client = &isolated_server.client;
5151

52-
setup_single_good_rebuild(client).await;
52+
setup::single_good_rebuild(client).await;
5353

5454
let results = client.get_build_artifact(1, 99999).await;
5555

@@ -63,7 +63,7 @@ pub async fn returns_no_result_for_nonexistent_artifact_id(mut isolated_server:
6363
pub async fn does_not_need_authentication(mut isolated_server: IsolatedServer) {
6464
let client = &mut isolated_server.client;
6565

66-
setup_single_good_rebuild(client).await;
66+
setup::single_good_rebuild(client).await;
6767

6868
// zero out keys
6969
client.auth_cookie("");

tests/src/api/v1/build/get_build_artifact_attestation.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::actions::*;
22
use crate::fixtures::server::IsolatedServer;
33
use crate::fixtures::*;
4-
use crate::setup::*;
4+
use crate::setup;
55
use rebuilderd::attestation;
66
use rebuilderd::attestation::Attestation;
77
use rebuilderd_common::api::v1::{BuildRestApi, MetaRestApi, PackageRestApi};
@@ -24,7 +24,7 @@ pub async fn returns_no_result_for_empty_database(mut isolated_server: IsolatedS
2424
pub async fn returns_no_result_for_failed_build(mut isolated_server: IsolatedServer) {
2525
let client = &isolated_server.client;
2626

27-
setup_single_failed_rebuild(client).await;
27+
setup::single_failed_rebuild(client).await;
2828

2929
let results = client.get_build_artifact_attestation(1, 1).await;
3030

tests/src/api/v1/build/get_build_artifact_diffoscope.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::data::*;
22
use crate::fixtures::server::IsolatedServer;
33
use crate::fixtures::*;
4-
use crate::setup::*;
4+
use crate::setup;
55
use rebuilderd_common::api::v1::BuildRestApi;
66
use rstest::rstest;
77

@@ -22,7 +22,7 @@ pub async fn returns_no_result_for_empty_database(mut isolated_server: IsolatedS
2222
pub async fn returns_no_result_for_failed_build(mut isolated_server: IsolatedServer) {
2323
let client = &isolated_server.client;
2424

25-
setup_single_failed_rebuild(client).await;
25+
setup::single_failed_rebuild(client).await;
2626

2727
let result = client.get_build_artifact_diffoscope(1, 1).await;
2828

@@ -36,7 +36,7 @@ pub async fn returns_no_result_for_failed_build(mut isolated_server: IsolatedSer
3636
pub async fn returns_result_for_bad_build(mut isolated_server: IsolatedServer) {
3737
let client = &isolated_server.client;
3838

39-
setup_single_bad_rebuild(client).await;
39+
setup::single_bad_rebuild(client).await;
4040

4141
let result = client.get_build_artifact_diffoscope(1, 1).await.unwrap();
4242

@@ -50,7 +50,7 @@ pub async fn returns_result_for_bad_build(mut isolated_server: IsolatedServer) {
5050
pub async fn does_not_need_authentication(mut isolated_server: IsolatedServer) {
5151
let client = &mut isolated_server.client;
5252

53-
setup_single_bad_rebuild(client).await;
53+
setup::single_bad_rebuild(client).await;
5454

5555
// zero out keys
5656
client.auth_cookie("");

tests/src/api/v1/build/get_build_artifacts.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use crate::actions::*;
22
use crate::data::*;
33
use crate::fixtures::server::IsolatedServer;
44
use crate::fixtures::*;
5-
use crate::setup::*;
5+
use crate::setup;
66
use rebuilderd_common::api::v1::BuildRestApi;
77
use rstest::rstest;
88

@@ -23,7 +23,7 @@ pub async fn returns_no_results_for_empty_database(mut isolated_server: Isolated
2323
pub async fn returns_no_results_for_failed_build(mut isolated_server: IsolatedServer) {
2424
let client = &isolated_server.client;
2525

26-
setup_single_failed_rebuild(client).await;
26+
setup::single_failed_rebuild(client).await;
2727

2828
let results = client.get_build_artifacts(1).await.unwrap();
2929

@@ -79,7 +79,7 @@ pub async fn returns_correct_results_for_good_build_with_multiple_artifacts(
7979
pub async fn does_not_need_authentication(mut isolated_server: IsolatedServer) {
8080
let client = &mut isolated_server.client;
8181

82-
setup_single_good_rebuild(client).await;
82+
setup::single_good_rebuild(client).await;
8383

8484
// zero out keys
8585
client.auth_cookie("");

tests/src/api/v1/build/get_build_log.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::data::*;
22
use crate::fixtures::server::IsolatedServer;
33
use crate::fixtures::*;
4-
use crate::setup::*;
4+
use crate::setup;
55
use rebuilderd_common::api::v1::BuildRestApi;
66
use rstest::rstest;
77

@@ -22,7 +22,7 @@ pub async fn returns_no_result_for_empty_database(mut isolated_server: IsolatedS
2222
pub async fn returns_result_for_failed_build(mut isolated_server: IsolatedServer) {
2323
let client = &isolated_server.client;
2424

25-
setup_single_failed_rebuild(client).await;
25+
setup::single_failed_rebuild(client).await;
2626

2727
let result = client.get_build_log(1).await.unwrap();
2828

@@ -36,7 +36,7 @@ pub async fn returns_result_for_failed_build(mut isolated_server: IsolatedServer
3636
pub async fn returns_result_for_bad_build(mut isolated_server: IsolatedServer) {
3737
let client = &isolated_server.client;
3838

39-
setup_single_bad_rebuild(client).await;
39+
setup::single_bad_rebuild(client).await;
4040

4141
let result = client.get_build_log(1).await.unwrap();
4242

@@ -50,7 +50,7 @@ pub async fn returns_result_for_bad_build(mut isolated_server: IsolatedServer) {
5050
pub async fn does_not_need_authentication(mut isolated_server: IsolatedServer) {
5151
let client = &mut isolated_server.client;
5252

53-
setup_single_good_rebuild(client).await;
53+
setup::single_good_rebuild(client).await;
5454

5555
// zero out keys
5656
client.auth_cookie("");

tests/src/api/v1/build/get_builds.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use crate::actions::*;
22
use crate::data::*;
33
use crate::fixtures::server::IsolatedServer;
44
use crate::fixtures::*;
5-
use crate::setup::*;
5+
use crate::setup;
66
use rebuilderd_common::api::v1::{
77
BuildRestApi, OriginFilter, PackageReport, PackageRestApi, Page, SourceIdentityFilter,
88
};
@@ -31,7 +31,7 @@ pub async fn returns_single_result_for_database_with_single_build(
3131
) {
3232
let client = &isolated_server.client;
3333

34-
setup_single_good_rebuild(client).await;
34+
setup::single_good_rebuild(client).await;
3535

3636
let results = client
3737
.get_builds(None, None, None)
@@ -51,7 +51,7 @@ pub async fn returns_multiple_results_for_database_with_multiple_builds(
5151
) {
5252
let client = &isolated_server.client;
5353

54-
setup_single_bad_rebuild(client).await;
54+
setup::single_bad_rebuild(client).await;
5555
request_rebuild_of_all_bad_packages(client).await;
5656
report_good_rebuild(client).await;
5757

@@ -71,7 +71,7 @@ pub async fn returns_multiple_results_for_database_with_multiple_builds(
7171
pub async fn does_not_need_authentication(mut isolated_server: IsolatedServer) {
7272
let client = &mut isolated_server.client;
7373

74-
setup_single_good_rebuild(client).await;
74+
setup::single_good_rebuild(client).await;
7575

7676
// zero out keys
7777
client.auth_cookie("");
@@ -90,7 +90,7 @@ pub async fn does_not_need_authentication(mut isolated_server: IsolatedServer) {
9090
pub async fn can_paginate(mut isolated_server: IsolatedServer) {
9191
let client = &isolated_server.client;
9292

93-
setup_single_bad_rebuild(client).await;
93+
setup::single_bad_rebuild(client).await;
9494
request_rebuild_of_all_bad_packages(client).await;
9595
report_good_rebuild(client).await;
9696

@@ -190,7 +190,7 @@ pub async fn returns_result_for_matching_origin_filter(
190190
#[case] expected_count: usize,
191191
) {
192192
let client = &isolated_server.client;
193-
setup_single_imported_package(client).await;
193+
setup::single_imported_package(client).await;
194194

195195
register_worker(client).await;
196196
report_good_rebuild(client).await;
@@ -265,7 +265,7 @@ pub async fn returns_result_for_matching_identity_filter(
265265
) {
266266
let client = &isolated_server.client;
267267

268-
setup_multiple_imported_packages(client).await;
268+
setup::multiple_imported_packages(client).await;
269269

270270
register_worker(client).await;
271271

0 commit comments

Comments
 (0)