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 )