package t::Net::ACME::Challenge::Pending::http_01; use strict; use warnings; BEGIN { if ( $^V ge v5.10.1 ) { require autodie; } } use parent qw( Test::Class ); use Test::More; use Test::NoWarnings; use Test::Deep; use Test::Exception; use File::Slurp (); use File::Temp (); use Net::ACME::Challenge::Pending::http_01 (); use Net::ACME::Constants (); use Net::ACME::Utils (); if ( !caller ) { my $test_obj = __PACKAGE__->new(); plan tests => $test_obj->expected_tests(+1); $test_obj->runtests(); } #---------------------------------------------------------------------- sub _KEY { return <<END; -----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAw65MxcsV0bL2T0eTFe220RynlXj1+CqN2MP5FbWEkFApqIXm XBiq/1fp1Emq/M26AalyYtYAA/lDpGYmsUzau39AyOwOvA4Qr87NmWluys/k5IHm HqxmuDtW/Hmh+MW0HV29a+5eFjTJX5654K4D9cxqkc29v+gnzzE+NuMEX7Cid38q YgcY7dkfkOc+vunFCdGMXv+GcSeByGCeXsHApszti0zUNu8xWqN5bAKo/TJpgIVU KG96uVvZ0ydPRDWMK25/LH5cSQMmmCruBV8d0LLFxLKqczH5D7jmftvw/HrnsMX0 iBcJYVnFJXca4A84gGqozECXVuH3OgCjnGhr3wIDAQABAoIBADhhiUdYS5IfMW8I XW3tD0bTLcoYjy6Q/Evfs2443dhC8K3Y3tXcWbC24O3EyBqNIDIIY6fspxZ+BKpi sHVXgpKRiNYbhedTWiV9vamdQkn3eqkIcIiX/gTJPDgEx9GJDWuEreZiSQO28+q0 LjR5jzSMUIxwLmMT/hxpwNZJtOHo3sPPFS6MrrZq1RtgtoqW3T9ESfh2EAst8glm RoO9vskkPNWHHs0aOsuRHwYochhJM5Ihfh2kt7NMZzFnAzyOsfbj5RFdkss/Z4IJ UraDC9zrx/WY9fVwc3gZkzRi/vCBUZUs8YpgWBdTOzbdRJM458eX/HRjA2jQ6P+i T/lvq5ECgYEA7VaU5MBCXHvzr6rvEQGbHqWHjltn4wUUUUKd21yjwndXY04lJlf5 jHsZ2XRVUkNu4dxeqmIUqLjJL9mVyLle/q9etAbIm9KMyvatrufuBgK1fFCFaDnc MvPLBvwR8CHmohkPwA3UpqC4Kqo17dEQypMWZjTp5uyEAaY3vmJhwqcCgYEA0xEw 3UKgSnfr+mU/H9pT3ydiChjLmJ0jdIi9N9EM3PHa5MpXB6gzpHEu8k9YTgaMLYko aKF7RYJTwIXo0zbFYdmG1vBCSILntnU2vTZj5ZNmcB0dHjzhqHBEijkoSfzqfoap ylx9RZGAjqv/5+WVcVK586gB8i8CaQXSzCY5TAkCgYAatjPryvetEQZMLyDY+SVM PbUUAJWgp2GyA51govyLVoMvWgw0VJJxjSlLoBw6Nfy0zuiYpJFOq/14tTR2cuaO I461FE5fu0K9VSYXGWNgqc1jQGzDXj+6PFYNYzFhpW8fr1JmeygD2PLhWmbXbUBG jGdo+WuZ4eS5isubUddO4QKBgAsQ36r6D0VYPDsIi+Kzo6oTeoRlAGej9XPqp2EB yNbcp0lPgniYTPzWIkv59PtCRJ8ujbvOm5PtXU6+tpI8UOTsbrFeL1t14YgjZRdO frZOoBRIsnofXwVhvXYxwPcAF5tCnCxL5RV8p2zTf7s8wjUKzU0FBfUYmdu/vmmN p3thAoGBALzFFXhtZ1P+P4DPo8NUagpBl4mEzVW6EMCWpJ8mAjHfXwHCfooMUQ7r 1KT23I/e0o0kjc67bBhRdYaoeLNFnazN9CqPuqsKhfCWU9w4Uu/oraD3QiSf9ECT fzO63bNpgeF1Djw2RmtnpchhUZ63A6IrgqfwQrUVeKtxPknYcMvV -----END RSA PRIVATE KEY----- END } sub do_tests : Tests(4) { my ($self) = @_; my $challenge = Net::ACME::Challenge::Pending::http_01->new( token => 'the_token', uri => 'http://the/challenge/uri', ); is( $challenge->token(), 'the_token', 'token()' ); is( $challenge->uri(), 'http://the/challenge/uri', 'uri()' ); my $key_obj = Net::ACME::Crypt::parse_key(_KEY()); my $jwk = $key_obj->get_struct_for_public_jwk(); my $scratch_dir = File::Temp::tempdir( CLEANUP => 1 ); my $handler = $challenge->create_handler( $scratch_dir, $jwk, ); my $relative_path = "$Net::ACME::Constants::HTTP_01_CHALLENGE_DCV_DIR_IN_DOCROOT/the_token"; is( File::Slurp::read_file("$scratch_dir/$relative_path"), 'the_token.NHDpucT75mJ9q2JOrBsMxI01r_xjdj9gx5OGEGzZvv8', 'DCV file contents', ); undef $handler; ok( !( -e "$scratch_dir/$relative_path" ), 'after handler DESTROYed, DCV file is gone', ); return; } 1;