From 22f8b9b2f8369e118e818394a3c1cf5e75d11606 Mon Sep 17 00:00:00 2001 From: Fabian Vogt Date: Mon, 20 Nov 2023 17:18:38 +0100 Subject: [PATCH] Set asset size on job creation Assets without a size are treated like they don't exist. With POST isos, referenced assets don't directly get a size and are thus not shown as downloadable. Only the next limit_assets task run changes this by running refresh_assets. Improve this by setting the size for assets on job creation. --- lib/OpenQA/Schema/Result/ScheduledProducts.pm | 3 ++- t/39-scheduled_products-table.t | 11 +++++++++++ t/data/openqa/share/factory/iso/dvdsize42.iso | 1 + 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 t/data/openqa/share/factory/iso/dvdsize42.iso diff --git a/lib/OpenQA/Schema/Result/ScheduledProducts.pm b/lib/OpenQA/Schema/Result/ScheduledProducts.pm index ef2f5656eab..b71cc98f160 100644 --- a/lib/OpenQA/Schema/Result/ScheduledProducts.pm +++ b/lib/OpenQA/Schema/Result/ScheduledProducts.pm @@ -255,7 +255,8 @@ sub _schedule_iso { for my $asset (values %{parse_assets_from_settings($args)}) { my ($name, $type) = ($asset->{name}, $asset->{type}); return {error => 'Asset type and name must not be empty.'} unless $name && $type; - return {error => "Failed to register asset $name."} unless $assets->register($type, $name, {missing_ok => 1}); + return {error => "Failed to register asset $name."} + unless $assets->register($type, $name, {missing_ok => 1, refresh_size => 1}); } # read arguments for deprioritization and obsoleten diff --git a/t/39-scheduled_products-table.t b/t/39-scheduled_products-table.t index 6a5f12a0a63..8d8f38c906c 100644 --- a/t/39-scheduled_products-table.t +++ b/t/39-scheduled_products-table.t @@ -71,6 +71,17 @@ subtest 'handling assets with invalid name' => sub { is $scheduled_product->schedule_iso(\%settings), undef, 'scheduling the same product again prevented'; +subtest 'asset registration on scheduling' => sub { + my $assets = $schema->resultset('Assets'); + my %asset_info = (type => 'iso', name => 'dvdsize42.iso'); + $schema->storage->dbh->prepare('delete from assets where name = ? ')->execute('dvdsize42.iso'); + is $assets->find(\%asset_info), undef, 'dvdsize42.iso is not known yet'; + $scheduled_product = $scheduled_products->create(\%settings); + $scheduled_product->schedule_iso({ISO => 'dvdsize42.iso'}); + is $assets->find(\%asset_info)->size, 42, 'dvdsize42.iso has known size'; + $scheduled_product->discard_changes; +}; + my $test_job = $scheduled_product->jobs->create({TEST => 'testjob'}); subtest 'cancellation after product has been scheduled' => sub { is $scheduled_product->cancel('test reason 1'), 1, 'cancel returns the number of affected jobs'; diff --git a/t/data/openqa/share/factory/iso/dvdsize42.iso b/t/data/openqa/share/factory/iso/dvdsize42.iso new file mode 100644 index 00000000000..c5666ccc0ab --- /dev/null +++ b/t/data/openqa/share/factory/iso/dvdsize42.iso @@ -0,0 +1 @@ +this asset file is exactly 42 bytes long!