Benim Mojolicious uygulamasında, bir servisin hız sınırlaması için müşterinin IP adresini ($c->tx->remote_address
) kullanmam gerekir. Bu iyi çalışıyor.İstemci IP adresini bir Mojolicious uygulaması için bir birim testinde nasıl taklit ederim?
Şimdi bu özellik için bir birim sınaması oluşturmaya çalışıyorum, ancak istemcimin IP'sini sınamalarımda hata yapmakta sorun yaşıyorum.
İlk olarak, local_address
in Mojo::UserAgent'un istediğimi yapabileceğini düşündüm, ancak kullanıcı aracısının uygulamayı yerel olarak bağladığı ve onu değiştirmenin, uygulamayı artık bulamadığı için her şeyi bozduğu yer burası.
Sonra remote_address
in Mojo::Transaction yerine Sub::Override kullanarak çalıştım ama $t->post_ok
yaptığınızda zaten istemci için geçerlidir, bu istemci tarafında uzak adres sunucunun çünkü var olmayan IP için bir istek göndererek çalışır adresi ve istediği sunucu mevcut olmadığından asla başarılı olamayacak bekleyen engelleme isteğiyle sıkışmış durumdayım.
Denemek için aşağıdaki MCVE'ı kullanabilirsiniz. Beklenen sonuç testlerin geçmesidir.
use strict;
use warnings;
use Test::More;
use Test::Mojo;
use Mojolicious::Lite;
get '/foo' => sub { my $c = shift; $c->render(text => $c->tx->remote_address) };
my $t = Test::Mojo->new;
$t->get_ok('/foo')->content_like(qr/\Q127.0.0.1/);
# TODO change client IP address to 10.1.1.1
# in a way that the /foo route sees it
$t->get_ok('/foo')->content_like(qr/\Q10.1.1.1/);
done_testing;
Ben Katalizör ve Dancer (ya da diğer Testi :: Plack tabanlı sistemler) ile bunun nasıl biliyorum ama bu yaklaşımlar burada çalışmaz.