Devel-Agent

 view release on metacpan or  search on metacpan

t/Devel-Agent.t  view on Meta::CPAN



    $fh->close;

    $self->start_trace;

    my $cv=AnyEvent->condvar;

    my $check='';
    my $watcher;
    {
    $fh=IO::File->new($path,'<');
    $watcher=AnyEvent->io(
      fh=>$fh,
      poll=>'r',
      cb=>sub {
        my $line=$fh->getline;
        if(defined($line)) {
          $check .=$line;

        } else {
          $fh->close;
          undef $watcher;
          undef $fh;
          $cv->send('test');
        }
      }
    );
    $cv->recv;
    }

    $self->stop_trace;
    diag Dumper($self->trace);
    cmp_ok($str,'eq',$check,'make sure our calls to anyevent work');
  }
  {
    $SET='Pack Testing';
    $TESTS=0;
    my $check;
    sub test_app { \&test_responder }

    sub test_responder {
      my $responder = shift;
      my $writer = $responder->([ 200, [ 'Content-Type', 'text/plain' ]]);
      $check='';
      for(my $id=0;$id<2;++$id) {
        write_chunk($writer,$id);
        write_chunk($writer,$id);
      }
      $writer->close;
    }
    sub write_chunk {
      my ($writer,$id)=@_;
      my $line="Line: $id\n";
      $check .=$line;
      $writer->write($line);
    }
    my $test = Plack::Test->create(\&test_app);
    my $get=GET '/';
    my $res=$test->request($get);
    cmp_ok($res->code,'==',200,'establish a base line that our hello world streaming app is working');
    cmp_ok($res->content,'eq',$check,'ensure that our content is not corrupted');

    
    $DB::AGENT=undef;
    {
    no warnings;
    # force a trace every reqest
    $Plack::Middleware::Devel::Agent::Plack::TRACE_EVERY=1;
    $Plack::Middleware::Devel::Agent::Plack::AGENT_OPTIONS{save_to_stack}=0;
    $Plack::Middleware::Devel::Agent::Plack::AGENT_OPTIONS{on_frame_end}=sub {
      my ($agent,$frame)=@_;
      my $str='';
      my $fh;
      open($fh,'>',\$str);

      flush_row($agent,$frame,$fh);
      $fh->close;
      diag $str;
    };
    $Plack::Middleware::Devel::Agent::Plack::AGENT_OPTIONS{ignore_calling_class_re}=[qr/^Test2::/s,qr/^Test::/,];
    $Plack::Middleware::Devel::Agent::Plack::AGENT_OPTIONS{excludes}->{'Plack::Test::MockHTTP'}=1;
    
    $Plack::Middleware::Devel::Agent::Plack::AFTER_TRACE=sub {
      my ($db,$id,$res,$env)=@_;
      diag Dumper($res);
      $self=$db;
    };
    }

    my $org=$check;
    $test = Plack::Test->create(Plack::Middleware::Devel::Agent::Plack->wrap(\&test_app));
    $get=GET '/';
    $res=$test->request($get);
    $DB::AGENT->stop_trace if defined $DB::AGENT;
    cmp_ok($res->code,'==',200,'should get a code 200');#or die $res->status_line;
    diag $res->content;
    diag Dumper(\%Plack::Middleware::Devel::Agent::Plack::AGENT_OPTIONS);
    diag Dumper(\%Plack::Middleware::Devel::Agent::Plack::SELF_EXCLUDES);


  }
}
sub rebuild_trace {
  my ($frames)=@_;
  my @keys=sort { $a<=>$b } keys $frames->%*;
  my $trace=[];
  foreach my $key (@keys) {
    my $frame=$frames->{$key};

    # stick this in our root execution hook
    push @$trace,$frame if $frame->{depth}==1;
    my $owner_id=$frame->{owner_id};
    
    next unless exists $frames->{$owner_id};
    push $frames->{$owner_id}->{calls}->@*,$frame 
  }
  return $trace;
}

sub gm {



( run in 3.061 seconds using v1.01-cache-2.11-cpan-140bd7fdf52 )