Alien-Build

 view release on metacpan or  search on metacpan

t/alien_build_plugin_fetch_lwp.t  view on Meta::CPAN

      my($self, $meta) = @_;
      $plugin = $self;
    });

    my $build = alienfile_ok q{

      use alienfile;

      meta->prop->{start_url} = 'http://baz.bar.foo';

      plugin 'Fetch::LWP';

    };

    is $plugin->url, 'http://baz.bar.foo';

  };

};

subtest 'fetch' => sub {

  skip_all 'test requires LWP::UserAgent' unless eval { require LWP::UserAgent; 1 };

  foreach my $type (qw( http ftp file ))
  {
    subtest "with $type" => sub {

      my $url = do {
        my $get_url = \&{"${type}_url"};
        my $error   = \&{"${type}_error"};
        my $url = $get_url->();
        skip_all $error->() unless $url;
      };

      # This test runs against a real http or ftp server, usually only in CI
      # the server is running on localhost
      local $ENV{ALIEN_DOWNLOAD_RULE} = $ENV{ALIEN_DOWNLOAD_RULE};
      $ENV{ALIEN_DOWNLOAD_RULE} = 'warn' if $url =~ /^(http|ftp):/;

      my $plugin = Alien::Build::Plugin::Fetch::LWP->new( url => "$url" );
      my $build = alienfile filename => 'corpus/blank/alienfile';
      my $meta = $build->meta;

      $plugin->init($meta);
      eval { $build->load_requires('share') };
      skip_all 'test requires LWP' if $@;

      subtest 'listing' => sub {
        my $res = $build->fetch;
        is(
          $res,
          hash {
            if($type eq 'ftp')
            {
              field type => 'dir_listing';
            }
            else
            {
              field type    => 'html';
              field charset => E();
            }
            field base     => match qr!^$type:/!;
            field content  => match qr!foo-1\.00\.tar\.gz!;
            field protocol => $type;
            end;
          },
         ) || diag _dump($res);
      };

      subtest 'file' => sub {
        my $furl = URI->new_abs("foo-1.00.tar.gz", $url);
        note "url = $furl";

        my $expected_content = path('corpus/dist/foo-1.00.tar.gz')->slurp_raw;

        my $res = $build->fetch("$furl");
        is(
          $res,
          hash {
            field type     => 'file';
            field filename => 'foo-1.00.tar.gz';
            field content  => $expected_content;
            field protocol => $type;
            end;
          },
        );
      };

      subtest 'not found' => sub {
        my $furl = URI->new_abs("bogus.tar.gz", $url);
        note "url = $furl";
        eval { $build->fetch("$furl") };
        like $@, qr/^error fetching $type:/;
      };
    };
  }

  subtest 'headers' => sub {
    my $url = http_url;
    skip_all http_error unless $url;

    require URI;
    my $furl = URI->new_abs("test1/foo.txt", $url);
    note "url = $furl";

    # This test runs against a real http or ftp server, usually only in CI
    # the server is running on localhost
    local $ENV{ALIEN_DOWNLOAD_RULE} = $ENV{ALIEN_DOWNLOAD_RULE};
    $ENV{ALIEN_DOWNLOAD_RULE} = 'warn' if $url ne 'https';

    my $build = do {
      my $plugin = Alien::Build::Plugin::Fetch::LWP->new( url => "$url" );
      my $build = alienfile filename => 'corpus/blank/alienfile';
      my $meta = $build->meta;
      $plugin->init($meta);
      $build;
    };

    my $res = capture_note { $build->fetch("$furl", http_headers => [ Foo => 'Bar1', Foo => 'Bar2', Baz => 1 ]) };



( run in 1.214 second using v1.01-cache-2.11-cpan-62a16548d74 )