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