1#!/usr/bin/perl -w 2 3use Net::DRI; 4use Net::DRI::Data::Raw; 5 6use Test::More tests => 5; 7 8eval { no warnings; require Test::LongString; Test::LongString->import(max => 100); $Test::LongString::Context=50; }; 9*{'main::is_string'}=\&main::is if $@; 10 11our $E1='<?xml version="1.0" encoding="UTF-8" standalone="no"?><epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">'; 12our $E2='</epp>'; 13our $TRID='<trID><clTRID>ABC-12345</clTRID><svTRID>54322-XYZ</svTRID></trID>'; 14 15our $R1; 16sub mysend 17{ 18 my ($transport,$count,$msg)=@_; 19 $R1=$msg->as_string(); 20 return 1; 21} 22 23our $R2; 24sub myrecv 25{ 26 return Net::DRI::Data::Raw->new_from_string($R2? $R2 : $E1.'<response>'.r().$TRID.'</response>'.$E2); 27} 28 29my $dri=Net::DRI::TrapExceptions->new({cache_ttl=>10,trid_factory => sub { return 'coricopat-9978-1002'}}); 30$dri->add_registry('US'); 31$dri->target('US')->add_current_profile('p1','test=Net::DRI::Protocol::EPP::Extensions::US',{f_send=>\&mysend,f_recv=>\&myrecv}); 32 33######################################################################################################### 34## Examples taken from draft-liu-epp-usTLD-00 + updates to current EPP 35 36my $c=$dri->local_object('contact'); 37$c->srid('abcde')->name('abc')->org('abc.org')->street(['123 d street'])->city('reston')->pc(20194)->sp('VA')->cc('US')->fax('+1.2345678901x1234')->email('xxx@yyy.com'); 38$c->auth({pw => 123456}); 39 40$c->application_purpose('P1'); 41$c->nexus_category('C31/DE'); 42 43my $rc=$dri->contact_create($c); 44is_string($R1,$E1.'<command><create><contact:create xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:contact-1.0 contact-1.0.xsd"><contact:id>abcde</contact:id><contact:postalInfo type="loc"><contact:name>abc</contact:name><contact:org>abc.org</contact:org><contact:addr><contact:street>123 d street</contact:street><contact:city>reston</contact:city><contact:sp>VA</contact:sp><contact:pc>20194</contact:pc><contact:cc>US</contact:cc></contact:addr></contact:postalInfo><contact:postalInfo type="int"><contact:name>abc</contact:name><contact:org>abc.org</contact:org><contact:addr><contact:street>123 d street</contact:street><contact:city>reston</contact:city><contact:sp>VA</contact:sp><contact:pc>20194</contact:pc><contact:cc>US</contact:cc></contact:addr></contact:postalInfo><contact:fax x="1234">+1.2345678901</contact:fax><contact:email>xxx@yyy.com</contact:email><contact:authInfo><contact:pw>123456</contact:pw></contact:authInfo></contact:create></create><extension><neulevel:extension xmlns:neulevel="urn:ietf:params:xml:ns:neulevel-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:neulevel-1.0 neulevel-1.0.xsd"><neulevel:unspec>AppPurpose=P1 NexusCategory=C31/DE</neulevel:unspec></neulevel:extension></extension><clTRID>coricopat-9978-1002</clTRID></command>'.$E2,'contact_create with nexus info build'); 45 46$R2=$E1.'<response>'.r().'<resData><contact:infData xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:contact-1.0 contact-1.0.xsd"><contact:id>abcde</contact:id><contact:roid>ABCDE-US</contact:roid><contact:status s="linked"/><contact:status s="clientDeleteProhibited"/><contact:postalInfo type="loc"><contact:name>abc</contact:name><contact:org>abc.org</contact:org><contact:addr><contact:street>123 d street</contact:street><contact:city>reston</contact:city><contact:sp>VA</contact:sp><contact:pc>20194</contact:pc><contact:cc>US</contact:cc></contact:addr></contact:postalInfo><contact:fax x="1234">+1.2345678901</contact:fax><contact:email>xxx@yyy.com</contact:email><contact:clID>ClientY</contact:clID><contact:crID>ClientX</contact:crID><contact:crDate>2002-04-03T22:00:00.0Z</contact:crDate><contact:upID>ClientX</contact:upID><contact:upDate>2002-12-03T09:00:00.0Z</contact:upDate><contact:trDate>2000-04-08T09:00:00.0Z</contact:trDate><contact:authInfo><contact:pw>123456</contact:pw></contact:authInfo></contact:infData></resData><extension>AppPurpose=P1 NexusCategory=C11</extension><trID><clTRID>coricopat-9978-1003</clTRID><svTRID>54322-XYZ</svTRID></trID></response>'.$E2; 47$co=$dri->local_object('contact')->srid('abcde')->auth({pw=>'123456'}); 48$rc=$dri->contact_info($co); 49$c=$dri->get_info('self','contact','abcde'); 50is($c->application_purpose(),'P1','contact_info parse AppPurpose'); 51is($c->nexus_category(),'C11','contact_info parse NexusCategory'); 52 53$R2=''; 54my $co=$dri->local_object('contact')->srid('abc'); 55my $toc=$dri->local_object('changes'); 56my $co2=$dri->local_object('contact'); 57$co2->voice('+1.2345678910'); 58$co2->application_purpose('P3'); 59$co2->nexus_category('C11'); 60$toc->set('info',$co2); 61$rc=$dri->contact_update($co,$toc); 62is_string($R1,$E1.'<command><update><contact:update xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:contact-1.0 contact-1.0.xsd"><contact:id>abc</contact:id><contact:chg><contact:voice>+1.2345678910</contact:voice></contact:chg></contact:update></update><extension><neulevel:extension xmlns:neulevel="urn:ietf:params:xml:ns:neulevel-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:neulevel-1.0 neulevel-1.0.xsd"><neulevel:unspec>AppPurpose=P3 NexusCategory=C11</neulevel:unspec></neulevel:extension></extension><clTRID>coricopat-9978-1002</clTRID></command>'.$E2,'contact_update build 1'); 63 64$co2=$dri->local_object('contact'); 65$co2->application_purpose(''); 66$toc->set('info',$co2); 67$rc=$dri->contact_update($co,$toc); 68is_string($R1,$E1.'<command><update><contact:update xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:contact-1.0 contact-1.0.xsd"><contact:id>abc</contact:id></contact:update></update><extension><neulevel:extension xmlns:neulevel="urn:ietf:params:xml:ns:neulevel-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:neulevel-1.0 neulevel-1.0.xsd"><neulevel:unspec>AppPurpose=</neulevel:unspec></neulevel:extension></extension><clTRID>coricopat-9978-1002</clTRID></command>'.$E2,'contact_update build 2'); 69 70 71exit 0; 72 73sub r 74{ 75 my ($c,$m)=@_; 76 return '<result code="'.($c || 1000).'"><msg>'.($m || 'Command completed successfully').'</msg></result>'; 77} 78