Cache
view release on metacpan or search on metacpan
lib/Cache/Tester.pm view on Meta::CPAN
my $handle = $entry->handle('>');
_ok($handle, 'write handle created');
$handle or diag("handle not created: $!");
print $handle 'A'x100;
$handle->close();
_is($entry->get(), 'A'x100, 'write to write only handle ok');
_is($entry->size(), 100, 'entry size is correct');
_is($cache->size(), $size + 100, 'cache size is correct');
$entry->remove();
}
# Test append via a handle
sub test_append_handle {
my ($cache) = @_;
my $entry = $cache->entry('appendhandle');
$entry->remove();
$entry->set('hello ');
my $size = $cache->size();
my $handle = $entry->handle('>>');
_ok($handle, 'append handle created');
$handle or diag("handle not created: $!");
$handle->print('world');
$handle->close();
_is($entry->get(), 'hello world', 'write to append handle ok');
_is($entry->size(), 11, 'entry size is correct');
_is($entry->size(), $size + 5, 'cache size is correct');
$entry->remove();
}
# Test that a entry can be read while a handle is open for read
sub test_handle_async_read {
my ($cache) = @_;
my $entry = $cache->entry('readhandle');
$entry->remove();
my $size = $cache->size();
my $data = 'test data';
$entry->set($data);
my $handle = $entry->handle('<') or diag("handle not created: $!");
_ok($entry->exists(), 'entry exists after handle opened');
_is(<$handle>, $data, 'handle returns correct data');
_is($entry->get(), $data, '$entry->get() returns correct data');
$handle->close();
_ok($entry->exists(), 'entry exists after handle closed');
_is($entry->get(), $data, '$entry->get() returns correct data');
}
# Test that a handle can be removed asynchronously with it being open
sub test_handle_async_remove {
my ($cache) = @_;
my $entry = $cache->entry('removehandle');
$entry->remove();
my $size = $cache->size();
$entry->set('test data');
my $handle = $entry->handle() or diag("handle not created: $!");
# extend data by 5 bytes before removing the entry
$handle->print('some more data');
$handle->seek(0,0);
$entry->remove();
_ok(!$entry->exists(), 'entry removed whilst handle active');
local $/;
_is(<$handle>, 'some more data', 'read via <$handle> successful');
# ensure we can still write to the handle
$handle->seek(0,0);
$handle->print('hello wide wide world');
$handle->seek(0,0);
_is(<$handle>, 'hello wide wide world', 'write via <$handle> successful');
$handle->close();
_ok(!$entry->exists(), 'entry still removed after handle closed');
_is($entry->size(), undef, 'entry size is undefined');
_is($cache->size(), $size, 'cache size is correct');
}
sub test_handle_async_replace {
my ($cache) = @_;
my $entry = $cache->entry('replacehandle');
$entry->remove();
my $size = $cache->size();
$entry->set('test data');
my $handle = $entry->handle();
$entry->set('A'x20);
_is($entry->get(), 'A'x20, 'entry replaced whilst handle active');
local $/;
_is(<$handle>, 'test data', 'read via <$handle> successful');
$handle->seek(0,0);
$handle->print('hello world');
$handle->seek(0,0);
_is(<$handle>, 'hello world', 'write via <$handle> successful');
$handle->close();
_ok($entry->exists(), 'entry still exists after handle closed');
_is($entry->get(), 'A'x20, 'entry still correct after handle closed');
_is($entry->size(), 20, 'entry size is correct');
( run in 0.745 second using v1.01-cache-2.11-cpan-e1769b4cff6 )