another swiping change and bump to version [0.08]
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 28 Oct 2007 19:47:30 +0000 (19:47 +0000)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 28 Oct 2007 19:47:30 +0000 (19:47 +0000)
- implemented SetParameterValues (tests missing)
- rename rest of misnamed files

git-svn-id: https://perl-cwmp.googlecode.com/svn/trunk@177 836a5e1a-633d-0410-964b-294494ad4392

15 files changed:
Makefile.PL
bin/acs.pl
lib/CWMP/Methods.pm
t/20-methods.t
t/methods/GetParameterNames.xml [new file with mode: 0644]
t/methods/GetParameterValues.xml [new file with mode: 0644]
t/methods/GetRPCMethods.xml [new file with mode: 0644]
t/methods/InformResponse.xml [new file with mode: 0644]
t/methods/Reboot.xml [new file with mode: 0644]
t/methods/SetParameterValues.xml [new file with mode: 0644]
t/response/GetParameterNames.xml [deleted file]
t/response/GetParameterValues.xml [deleted file]
t/response/GetRPCMethods.xml [deleted file]
t/response/InformResponse.xml [deleted file]
t/response/Reboot.xml [deleted file]

index 31c79c4..9d8a82a 100644 (file)
@@ -3,7 +3,7 @@ use lib './lib';
 use inc::Module::Install;
 
 name           'CWMP';
-version                '0.07';
+version                '0.08';
 license                'GPL';
 requires       'Net::Server';
 requires       'HTTP::Daemon';
index 461aca8..d8e923d 100755 (executable)
@@ -32,11 +32,17 @@ my $server = CWMP::Server->new({
        debug => $debug,
        default_queue => [
                'GetRPCMethods',
-               [ 'GetParameterNames', 'InternetGatewayDevice.DeviceInfo.SerialNumber', 0 ],
-               [ 'GetParameterNames', 'InternetGatewayDevice.DeviceInfo.', 1 ],
+               'GetParameterNames',
+#              [ 'GetParameterNames', 'InternetGatewayDevice.DeviceInfo.SerialNumber', 0 ],
+#              [ 'GetParameterNames', 'InternetGatewayDevice.DeviceInfo.', 1 ],
                [ 'GetParameterValues',
                        'InternetGatewayDevice.DeviceInfo.SerialNumber',
                        'InternetGatewayDevice.DeviceInfo.VendorConfigFile.',
+                       'InternetGatewayDevice.DeviceInfo.X_000E50_Country',
+               ],
+               [ 'SetParameterValues',
+                       'InternetGatewayDevice.DeviceInfo.ProvisioningCode' => 'test provision',
+#                      'InternetGatewayDevice.DeviceInfo.X_000E50_Country' => 1,
                ],
 #              'Reboot',
        ],
index e50b923..ab77c99 100644 (file)
@@ -84,7 +84,56 @@ sub GetRPCMethods {
 
 =head2 SetParameterValues
 
-B<not implemented>
+  $method->SetParameterValues( $state,
+       param1 => 'value1',
+       param2 => 'value2',
+       ...
+  );
+
+It doesn't support base64 encoding of values yet.
+
+To preserve data, it does support repeatable parametar names.
+Behaviour on this is not defined in protocol.
+
+=cut
+
+sub SetParameterValues {
+       my $self = shift;
+       my $state = shift;
+
+       confess "SetParameterValues needs parameters" unless @_;
+
+       my @params = @_;
+
+       my ( @names, @values );
+
+       while ( @_ ) {
+               push @names, shift @_;
+               push @values, shift @_;
+       }
+
+       confess "can't convert params ", dump( @params ), " to name/value pairs" unless $#names == $#values;
+
+       warn "# SetParameterValues", dump( @params ), "\n" if $self->debug;
+
+       $self->xml( $state, sub {
+               my ( $X, $state ) = @_;
+
+               $X->SetParameterValues( $cwmp,
+                       $X->ParameterList( $cwmp,
+                               $X->ParameterNames( $cwmp,
+                                       map {
+                                               $X->ParameterValueStruct( $cwmp,
+                                                       $X->Name( $cwmp, $_ ),
+                                                       $X->Value( $cwmp, shift @values )
+                                               )
+                                       } @names
+                               )
+                       )
+               );
+       });
+}
+
 
 =head2 GetParameterValues
 
@@ -96,7 +145,7 @@ sub GetParameterValues {
        my $self = shift;
        my $state = shift;
        my @ParameterNames = @_;
-       confess "need ParameterNames" unless @ParameterNames;
+       confess "GetParameterValues need ParameterNames" unless @ParameterNames;
        warn "# GetParameterValues", dump( @ParameterNames ), "\n" if $self->debug;
 
        $self->xml( $state, sub {
index ac09cb9..f81805c 100755 (executable)
@@ -4,7 +4,7 @@ use warnings;
 
 my $debug = shift @ARGV;
 
-use Test::More tests => 14;
+use Test::More tests => 16;
 use Data::Dump qw/dump/;
 use Cwd qw/abs_path/;
 use File::Slurp;
@@ -17,20 +17,20 @@ BEGIN {
 ok(my $abs_path = abs_path($0), "abs_path");
 $abs_path =~ s!/[^/]*$!/!;     #!fix-vim
 
-ok( my $response = CWMP::Methods->new({ debug => $debug }), 'new' );
-isa_ok( $response, 'CWMP::Methods' );
+ok( my $method = CWMP::Methods->new({ debug => $debug }), 'new' );
+isa_ok( $method, 'CWMP::Methods' );
 
-sub check_response {
+sub check_method {
        my $command = shift || die "no command?";
 
        my $state = {
                ID => 42,
        };
 
-       diag "check_response $command",dump( 'state', @_ ) if $debug;
-       ok( my $xml = $response->$command( $state, @_ ), "generate response $command" . dump(@_) );
+       diag "check_method $command",dump( 'state', @_ ) if $debug;
+       ok( my $xml = $method->$command( $state, @_ ), "generate method $command" . dump(@_) );
 
-       my $file = "$abs_path/response/$command.xml";
+       my $file = "$abs_path/methods/$command.xml";
 
        if ( ! -e $file ) {
                diag "creating $file";
@@ -39,11 +39,18 @@ sub check_response {
 
        my $template_xml = read_file( $file ) || die "can't read template xml $file: $!";
 
-       is( $xml, $template_xml, "compare $command" );
+       is( $xml, $template_xml, "compare $file" );
 }
 
-check_response( 'InformResponse' );
-check_response( 'GetRPCMethods' );
-check_response( 'Reboot' );
-check_response( 'GetParameterNames', 'InternetGatewayDevice.DeviceInfo.SerialNumber' );
-check_response( 'GetParameterValues', 'InternetGatewayDevice.DeviceInfo.SerialNumber', 'InternetGatewayDevice.DeviceInfo.VendorConfigFile.' );
+check_method( 'InformResponse' );
+check_method( 'GetRPCMethods' );
+check_method( 'Reboot' );
+check_method( 'SetParameterValues',
+       'InternetGatewayDevice.DeviceInfo.ProvisioningCode' => 'test provision',
+       'InternetGatewayDevice.DeviceInfo.X_000E50_Country' => 42,
+);
+check_method( 'GetParameterNames', 'InternetGatewayDevice.DeviceInfo.SerialNumber' );
+check_method( 'GetParameterValues',
+       'InternetGatewayDevice.DeviceInfo.SerialNumber',
+       'InternetGatewayDevice.DeviceInfo.VendorConfigFile.',
+);
diff --git a/t/methods/GetParameterNames.xml b/t/methods/GetParameterNames.xml
new file mode 100644 (file)
index 0000000..3f7165c
--- /dev/null
@@ -0,0 +1,14 @@
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
+               xmlns:cwmp="urn:dslforum-org:cwmp-1-0"
+               soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
+  <soap:Header>
+    <cwmp:ID mustUnderstand="1">42</cwmp:ID>
+    <cwmp:NoMoreRequests>0</cwmp:NoMoreRequests>
+  </soap:Header>
+  <soap:Body>
+    <cwmp:GetParameterNames>
+      <cwmp:ParameterPath>InternetGatewayDevice.DeviceInfo.SerialNumber</cwmp:ParameterPath>
+      <cwmp:NextLevel>0</cwmp:NextLevel>
+    </cwmp:GetParameterNames>
+  </soap:Body>
+</soap:Envelope>
\ No newline at end of file
diff --git a/t/methods/GetParameterValues.xml b/t/methods/GetParameterValues.xml
new file mode 100644 (file)
index 0000000..0906abe
--- /dev/null
@@ -0,0 +1,17 @@
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
+               xmlns:cwmp="urn:dslforum-org:cwmp-1-0"
+               xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance"
+               soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
+  <soap:Header>
+    <cwmp:ID mustUnderstand="1">42</cwmp:ID>
+    <cwmp:NoMoreRequests>0</cwmp:NoMoreRequests>
+  </soap:Header>
+  <soap:Body>
+    <cwmp:GetParameterValues>
+      <cwmp:ParameterNames>
+        <xsd:string>InternetGatewayDevice.DeviceInfo.SerialNumber</xsd:string>
+        <xsd:string>InternetGatewayDevice.DeviceInfo.VendorConfigFile.</xsd:string>
+      </cwmp:ParameterNames>
+    </cwmp:GetParameterValues>
+  </soap:Body>
+</soap:Envelope>
\ No newline at end of file
diff --git a/t/methods/GetRPCMethods.xml b/t/methods/GetRPCMethods.xml
new file mode 100644 (file)
index 0000000..259756b
--- /dev/null
@@ -0,0 +1,11 @@
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
+               xmlns:cwmp="urn:dslforum-org:cwmp-1-0"
+               soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
+  <soap:Header>
+    <cwmp:ID mustUnderstand="1">42</cwmp:ID>
+    <cwmp:NoMoreRequests>0</cwmp:NoMoreRequests>
+  </soap:Header>
+  <soap:Body>
+    <GetRPCMethods />
+  </soap:Body>
+</soap:Envelope>
\ No newline at end of file
diff --git a/t/methods/InformResponse.xml b/t/methods/InformResponse.xml
new file mode 100644 (file)
index 0000000..8ae94fc
--- /dev/null
@@ -0,0 +1,13 @@
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
+               xmlns:cwmp="urn:dslforum-org:cwmp-1-0"
+               soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
+  <soap:Header>
+    <cwmp:ID mustUnderstand="1">42</cwmp:ID>
+    <cwmp:NoMoreRequests>0</cwmp:NoMoreRequests>
+  </soap:Header>
+  <soap:Body>
+    <cwmp:InformResponse>
+      <cwmp:MaxEnvelopes>1</cwmp:MaxEnvelopes>
+    </cwmp:InformResponse>
+  </soap:Body>
+</soap:Envelope>
\ No newline at end of file
diff --git a/t/methods/Reboot.xml b/t/methods/Reboot.xml
new file mode 100644 (file)
index 0000000..fb92986
--- /dev/null
@@ -0,0 +1,11 @@
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
+               xmlns:cwmp="urn:dslforum-org:cwmp-1-0"
+               soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
+  <soap:Header>
+    <cwmp:ID mustUnderstand="1">42</cwmp:ID>
+    <cwmp:NoMoreRequests>0</cwmp:NoMoreRequests>
+  </soap:Header>
+  <soap:Body>
+    <Reboot />
+  </soap:Body>
+</soap:Envelope>
\ No newline at end of file
diff --git a/t/methods/SetParameterValues.xml b/t/methods/SetParameterValues.xml
new file mode 100644 (file)
index 0000000..2bf5ab3
--- /dev/null
@@ -0,0 +1,24 @@
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
+               xmlns:cwmp="urn:dslforum-org:cwmp-1-0"
+               soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
+  <soap:Header>
+    <cwmp:ID mustUnderstand="1">42</cwmp:ID>
+    <cwmp:NoMoreRequests>0</cwmp:NoMoreRequests>
+  </soap:Header>
+  <soap:Body>
+    <cwmp:SetParameterValues>
+      <cwmp:ParameterList>
+        <cwmp:ParameterNames>
+          <cwmp:ParameterValueStruct>
+            <cwmp:Name>InternetGatewayDevice.DeviceInfo.ProvisioningCode</cwmp:Name>
+            <cwmp:Value>test provision</cwmp:Value>
+          </cwmp:ParameterValueStruct>
+          <cwmp:ParameterValueStruct>
+            <cwmp:Name>InternetGatewayDevice.DeviceInfo.X_000E50_Country</cwmp:Name>
+            <cwmp:Value>42</cwmp:Value>
+          </cwmp:ParameterValueStruct>
+        </cwmp:ParameterNames>
+      </cwmp:ParameterList>
+    </cwmp:SetParameterValues>
+  </soap:Body>
+</soap:Envelope>
\ No newline at end of file
diff --git a/t/response/GetParameterNames.xml b/t/response/GetParameterNames.xml
deleted file mode 100644 (file)
index 3f7165c..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
-               xmlns:cwmp="urn:dslforum-org:cwmp-1-0"
-               soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
-  <soap:Header>
-    <cwmp:ID mustUnderstand="1">42</cwmp:ID>
-    <cwmp:NoMoreRequests>0</cwmp:NoMoreRequests>
-  </soap:Header>
-  <soap:Body>
-    <cwmp:GetParameterNames>
-      <cwmp:ParameterPath>InternetGatewayDevice.DeviceInfo.SerialNumber</cwmp:ParameterPath>
-      <cwmp:NextLevel>0</cwmp:NextLevel>
-    </cwmp:GetParameterNames>
-  </soap:Body>
-</soap:Envelope>
\ No newline at end of file
diff --git a/t/response/GetParameterValues.xml b/t/response/GetParameterValues.xml
deleted file mode 100644 (file)
index 0906abe..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
-               xmlns:cwmp="urn:dslforum-org:cwmp-1-0"
-               xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance"
-               soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
-  <soap:Header>
-    <cwmp:ID mustUnderstand="1">42</cwmp:ID>
-    <cwmp:NoMoreRequests>0</cwmp:NoMoreRequests>
-  </soap:Header>
-  <soap:Body>
-    <cwmp:GetParameterValues>
-      <cwmp:ParameterNames>
-        <xsd:string>InternetGatewayDevice.DeviceInfo.SerialNumber</xsd:string>
-        <xsd:string>InternetGatewayDevice.DeviceInfo.VendorConfigFile.</xsd:string>
-      </cwmp:ParameterNames>
-    </cwmp:GetParameterValues>
-  </soap:Body>
-</soap:Envelope>
\ No newline at end of file
diff --git a/t/response/GetRPCMethods.xml b/t/response/GetRPCMethods.xml
deleted file mode 100644 (file)
index 259756b..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
-               xmlns:cwmp="urn:dslforum-org:cwmp-1-0"
-               soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
-  <soap:Header>
-    <cwmp:ID mustUnderstand="1">42</cwmp:ID>
-    <cwmp:NoMoreRequests>0</cwmp:NoMoreRequests>
-  </soap:Header>
-  <soap:Body>
-    <GetRPCMethods />
-  </soap:Body>
-</soap:Envelope>
\ No newline at end of file
diff --git a/t/response/InformResponse.xml b/t/response/InformResponse.xml
deleted file mode 100644 (file)
index 8ae94fc..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
-               xmlns:cwmp="urn:dslforum-org:cwmp-1-0"
-               soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
-  <soap:Header>
-    <cwmp:ID mustUnderstand="1">42</cwmp:ID>
-    <cwmp:NoMoreRequests>0</cwmp:NoMoreRequests>
-  </soap:Header>
-  <soap:Body>
-    <cwmp:InformResponse>
-      <cwmp:MaxEnvelopes>1</cwmp:MaxEnvelopes>
-    </cwmp:InformResponse>
-  </soap:Body>
-</soap:Envelope>
\ No newline at end of file
diff --git a/t/response/Reboot.xml b/t/response/Reboot.xml
deleted file mode 100644 (file)
index fb92986..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
-               xmlns:cwmp="urn:dslforum-org:cwmp-1-0"
-               soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
-  <soap:Header>
-    <cwmp:ID mustUnderstand="1">42</cwmp:ID>
-    <cwmp:NoMoreRequests>0</cwmp:NoMoreRequests>
-  </soap:Header>
-  <soap:Body>
-    <Reboot />
-  </soap:Body>
-</soap:Envelope>
\ No newline at end of file