Net-Blossom-Server
view release on metacpan or search on metacpan
t/04-StorageContract.t view on Meta::CPAN
storage => $storage,
context => $context,
chunks => [],
aborted => 0,
}, $class;
}
sub write {
my ($self, $chunk) = @_;
push @{$self->{chunks}}, $chunk;
return length $chunk;
}
sub commit {
my ($self, %metadata) = @_;
my $body = join '', @{$self->{chunks}};
my $created = exists $self->{storage}{blobs}{$metadata{sha256}} ? 0 : 1;
my $descriptor = Net::Blossom::BlobDescriptor->new(
url => "https://cdn.example.com/$metadata{sha256}.bin",
sha256 => $metadata{sha256},
size => $metadata{size},
type => $metadata{type},
uploaded => $metadata{uploaded},
);
$self->{storage}{blobs}{$metadata{sha256}} = {
descriptor => $descriptor,
body => $body,
};
$self->{storage}{owners}{$metadata{pubkey}}{$metadata{sha256}} = 1
if defined $metadata{pubkey};
return {
descriptor => $descriptor,
created => $created,
};
}
sub abort {
my ($self) = @_;
$self->{aborted}++;
return 1;
}
}
subtest 'run_storage_contract_tests validates arguments' => sub {
like(dies { run_storage_contract_tests() },
qr/name is required/, 'name required');
like(dies { run_storage_contract_tests(name => 'storage') },
qr/factory must be a code reference/, 'factory required');
like(dies { run_storage_contract_tests(name => 'storage', factory => sub { Local::ContractStorage->new }, bogus => 1) },
qr/unknown argument\(s\): bogus/, 'unknown argument rejected');
};
run_storage_contract_tests(
name => 'in-memory contract storage',
factory => sub { Local::ContractStorage->new },
);
run_storage_contract_tests(
name => 'streaming body contract storage',
factory => sub { Local::StreamingContractStorage->new },
);
done_testing;
( run in 2.421 seconds using v1.01-cache-2.11-cpan-995e09ba956 )