MT#12347 Cache for FakeData to increase tests speed in massive run

Conflicts:
	t/lib/Test/FakeData.pm

Change-Id: I7bbeab2b65ad56d6d4d291f9fca14fb7754b6c3b
(cherry picked from commit 3d78efeb96150e33661d6a5d3d1bc1351f315aad)
changes/28/4728/97
Irina Peshinskaya 9 years ago
parent a42334ca16
commit 69966040c6

@ -17,7 +17,20 @@ use File::Basename;
use Test::HTTPRequestAsCurl;
use Data::Dumper;
use File::Slurp qw/write_file/;
use Storable;
has 'data_cache_file' => (
is => 'ro',
isa => 'Str',
lazy => 1,
default => sub {'/tmp/ngcp-api-test-data-cache';},
);
has 'cache_data' => (
is => 'ro',
isa => 'Bool',
lazy => 1,
default => $ENV{API_CACHE_FAKE_DATA} // 0,
);
has 'local_test' => (
is => 'rw',
isa => 'Str',
@ -501,6 +514,21 @@ sub request_delete{
my $req = HTTP::Request->new('DELETE', $self->normalize_uri($uri));
my $res = $self->request($req);
my $content = $self->get_response_content($res);
if($self->cache_data){
#my $restored = (-e $self->data_cache_file) ? retrieve($self->data_cache_file) : {};
#if('204' eq $res->code){
# $restored->{deleted}->{204}->{$uri} = 1;
#}
#$restored->{deleted}->{all}->{$uri} = [$res->code,$res->message];
#store $restored, $self->data_cache_file;
$self->replace_cached_data(sub{
my $restored = shift;
if('204' eq $res->code){
$restored->{deleted}->{204}->{$uri} = 1;
}
$restored->{deleted}->{all}->{$uri} = [$res->code,$res->message];
});
}
return($req,$res,$content);
}
@ -904,6 +932,7 @@ sub clear_test_data_all{
$self->http_code_msg(204, "check delete item $del_uri",$res,$content);
}
$self->clear_data_created();
return \@uris;
}
sub clear_test_data_dependent{
my($self,$uri) = @_;
@ -1045,4 +1074,28 @@ sub http_code_msg{
}
$code and is($res->code, $code, $message_res);
}
sub get_cached_data{
my($self) = @_;
return (-e $self->data_cache_file) ? retrieve($self->data_cache_file) : {};
}
sub replace_cached_data{
my($self,$data_callback,$restored) = @_;
$restored //= $self->get_cached_data;
$data_callback->($restored);
store $restored,$self->data_cache_file;
return $restored;
}
sub get_cached_data{
my($self) = @_;
return (-e $self->data_cache_file) ? retrieve($self->data_cache_file) : {};
}
sub replace_cached_data{
my($self,$data_callback,$restored) = @_;
$restored //= $self->get_cached_data;
$data_callback->($restored);
store $restored,$self->data_cache_file;
return $restored;
}
1;

@ -12,7 +12,22 @@ use Test::DeepHashUtils qw(reach nest deepvalue);
use Clone qw/clone/;
use File::Slurp qw/read_file/;
use URI::Escape;
use Storable;
sub BUILD {
my $self = shift;
if($self->test_machine->cache_data){
$self->read_cached_data();
}
}
has 'data_cache_file' => (
is => 'ro',
isa => 'Str',
lazy => 1,
default => sub {
return shift->test_machine->data_cache_file;
},
);
has 'test_machine' =>(
is => 'rw',
isa => 'Test::Collection',
@ -570,6 +585,30 @@ sub create{
}
return $self->get_existent_id($collection_name);
}
sub read_cached_data{
my $self = shift;
if(! -e $self->data_cache_file ){
return;
}
my $restored = retrieve($self->data_cache_file);
my $clear_cached_from_deleted = sub {
my $cached_collections = shift;
foreach my $cached_collection(keys %{$cached_collections}){
foreach my $deleted_uri(keys %{$restored->{deleted}->{204}}){
if(index($cached_collections->{$cached_collection}->{location},$deleted_uri) || index($deleted_uri,$cached_collections->{$cached_collection}->{location})){
delete $cached_collections->{$cached_collection};
}
}
}
};
$clear_cached_from_deleted->($restored->{loaded});
$clear_cached_from_deleted->($restored->{created});
$self->loaded($restored->{loaded} // {} );
$self->created($restored->{created} // {} );
#delete $restored->{deleted};
store {loaded => $self->loaded, created => $self->created}, $self->data_cache_file;
}
sub DEMOLISH{
my($self) = @_;
( 'ARRAY' eq ref $self->created ) and ( $self->test_machine->clear_test_data_all([ map {$_->{location}} @$self->created ]) );

Loading…
Cancel
Save