Re: [Bug-wget] [PATCH 01/25] Add two Metalink/XML tests

2016-09-13 Thread Matthew White
On Tue, 13 Sep 2016 10:10:49 +0200
Giuseppe Scrivano  wrote:

> Hi Matthew,
> 
> Matthew White  writes:
> 
> > Next patches add more conditions to testenv/Test-metalink-xml-relpath.py.
> >
> > Also variants are introduced, like:
> > * testenv/Test-metalink-xml-trust.py
> > * testenv/Test-metalink-xml-homepath.py
> > * testenv/Test-metalink-xml-homepath-trust.py
> > * testenv/Test-metalink-xml-abspath-trust.py
> > * testenv/Test-metalink-xml-relpath-trust.py
> >
> > And there will be other tests with other meanings too.
> >
> > So, I don't know if it's a good idea to mix specific tests together.
> >
> > This topic also applies to Patch 05/25, Patch 10/25, and Patch 17/25:
> > http://lists.gnu.org/archive/html/bug-wget/2016-09/msg00046.html
> > http://lists.gnu.org/archive/html/bug-wget/2016-09/msg00050.html
> > http://lists.gnu.org/archive/html/bug-wget/2016-09/msg00057.html
> >
> > WDYT?
> 
> Could we have a base file, that is shared by these files?  I agree it is
> good to have a separate file for each different test, but if the
> difference is only for one line, I think we can refactor them a bit.  It
> will make maintainance easier later.

I'll work on it.

> 
> Regards,
> Giuseppe

Regards,
Matthew

-- 
Matthew White 


pgpHumFkSxT3S.pgp
Description: PGP signature


Re: [Bug-wget] [PATCH 01/25] Add two Metalink/XML tests

2016-09-13 Thread Giuseppe Scrivano
Hi Matthew,

Matthew White  writes:

> Next patches add more conditions to testenv/Test-metalink-xml-relpath.py.
>
> Also variants are introduced, like:
> * testenv/Test-metalink-xml-trust.py
> * testenv/Test-metalink-xml-homepath.py
> * testenv/Test-metalink-xml-homepath-trust.py
> * testenv/Test-metalink-xml-abspath-trust.py
> * testenv/Test-metalink-xml-relpath-trust.py
>
> And there will be other tests with other meanings too.
>
> So, I don't know if it's a good idea to mix specific tests together.
>
> This topic also applies to Patch 05/25, Patch 10/25, and Patch 17/25:
> http://lists.gnu.org/archive/html/bug-wget/2016-09/msg00046.html
> http://lists.gnu.org/archive/html/bug-wget/2016-09/msg00050.html
> http://lists.gnu.org/archive/html/bug-wget/2016-09/msg00057.html
>
> WDYT?

Could we have a base file, that is shared by these files?  I agree it is
good to have a separate file for each different test, but if the
difference is only for one line, I think we can refactor them a bit.  It
will make maintainance easier later.

Regards,
Giuseppe



Re: [Bug-wget] [PATCH 01/25] Add two Metalink/XML tests

2016-09-12 Thread Matthew White
On Sun, 11 Sep 2016 21:52:16 +0200
Giuseppe Scrivano  wrote:

> Hi Matthew,
> 
> thanks for all your work, I am going to comment on each patch separately:
> 
> Matthew White  writes:
> 
> 
> > index 000..041d772
> > --- /dev/null
> > +++ b/testenv/Test-metalink-xml-relpath.py
> > @@ -0,0 +1,87 @@
> > +#!/usr/bin/env python3
> > +from sys import exit
> > +from test.http_test import HTTPTest
> > +from misc.wget_file import WgetFile
> > +import re
> > +import hashlib
> > +
> > +"""
> > +This is to test if Metalink XML file escapes current directory.
> > +"""
> > +# File Definitions 
> > ###
> > +File1 = "Would you like some Tea?"
> > +File1_lowPref = "Do not take this"
> > +File1_sha256 = hashlib.sha256 (File1.encode ('UTF-8')).hexdigest ()
> > +MetaXml = \
> > +"""
> > +http://www.metalinker.org/";>
> > +  
> > +GNU Wget
> > +  
> > +  
> > +GNU GPL
> > +http://www.gnu.org/licenses/gpl.html
> > +  
> > +  Wget Test File 1
> > +  1.2.3
> > +  Wget Test File 1 description
> > +  
> > +
> 
> If the difference between the two files is only here, could we have only
> one test file and another template substition for file name?  Somethging
> like ?

Next patches add more conditions to testenv/Test-metalink-xml-relpath.py.

Also variants are introduced, like:
* testenv/Test-metalink-xml-trust.py
* testenv/Test-metalink-xml-homepath.py
* testenv/Test-metalink-xml-homepath-trust.py
* testenv/Test-metalink-xml-abspath-trust.py
* testenv/Test-metalink-xml-relpath-trust.py

And there will be other tests with other meanings too.

So, I don't know if it's a good idea to mix specific tests together.

This topic also applies to Patch 05/25, Patch 10/25, and Patch 17/25:
http://lists.gnu.org/archive/html/bug-wget/2016-09/msg00046.html
http://lists.gnu.org/archive/html/bug-wget/2016-09/msg00050.html
http://lists.gnu.org/archive/html/bug-wget/2016-09/msg00057.html

WDYT?

> 
> 
> > +MetaXml = re.sub (r'{{FILE1_HASH}}', File1_sha256, MetaXml)
> > +MetaXml = re.sub (r'{{SRV_HOST}}', srv_host, MetaXml)
> > +MetaXml = re.sub (r'{{SRV_PORT}}', str (srv_port), MetaXml)
> > +MetaFile.content = MetaXml
> 
> should be enough to use replace instead of the re module?
> 
> MetaXml = MetaXml.replace('{{FILE1_HASH}}', File1_sha256)

Fixed. Posting after final decisions are taken about open topics in this series 
of patches.

> 
> Thanks,
> Giuseppe

Regards,
Matthew

-- 
Matthew White 


pgpWPg7fpxWDk.pgp
Description: PGP signature


Re: [Bug-wget] [PATCH 01/25] Add two Metalink/XML tests

2016-09-11 Thread Giuseppe Scrivano
Hi Matthew,

thanks for all your work, I am going to comment on each patch separately:

Matthew White  writes:


> index 000..041d772
> --- /dev/null
> +++ b/testenv/Test-metalink-xml-relpath.py
> @@ -0,0 +1,87 @@
> +#!/usr/bin/env python3
> +from sys import exit
> +from test.http_test import HTTPTest
> +from misc.wget_file import WgetFile
> +import re
> +import hashlib
> +
> +"""
> +This is to test if Metalink XML file escapes current directory.
> +"""
> +# File Definitions 
> ###
> +File1 = "Would you like some Tea?"
> +File1_lowPref = "Do not take this"
> +File1_sha256 = hashlib.sha256 (File1.encode ('UTF-8')).hexdigest ()
> +MetaXml = \
> +"""
> +http://www.metalinker.org/";>
> +  
> +GNU Wget
> +  
> +  
> +GNU GPL
> +http://www.gnu.org/licenses/gpl.html
> +  
> +  Wget Test File 1
> +  1.2.3
> +  Wget Test File 1 description
> +  
> +

If the difference between the two files is only here, could we have only
one test file and another template substition for file name?  Somethging
like ?


> +MetaXml = re.sub (r'{{FILE1_HASH}}', File1_sha256, MetaXml)
> +MetaXml = re.sub (r'{{SRV_HOST}}', srv_host, MetaXml)
> +MetaXml = re.sub (r'{{SRV_PORT}}', str (srv_port), MetaXml)
> +MetaFile.content = MetaXml

should be enough to use replace instead of the re module?

MetaXml = MetaXml.replace('{{FILE1_HASH}}', File1_sha256)

Thanks,
Giuseppe



[Bug-wget] [PATCH 01/25] Add two Metalink/XML tests

2016-09-10 Thread Matthew White
[Coverity Scan is ok, make syntax-check is ok, make check-valgrind is ok, 
contrib/check-hard is ok]

Patch provided by Tim, slightly amended to make the tests to return a proper 
result that conforms to the RFC5854 standard [1].

References:
 [1] https://tools.ietf.org/html/rfc5854#section-4.1.2.1

This adds two new Metalink tests to testenv:
* testenv/Test-metalink-xml-relpath.py: Test if Metalink/XML forbids relative 
paths
* testenv/Test-metalink-xml-abspath.py: Test if Metalink/XML forbids absolute 
paths

Regards,
Matthew

-- 
Matthew White 
>From 6dda91458cf0e8978be8de029b4b8a84bab449ce Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tim=20R=C3=BChsen?= 
Date: Tue, 9 Aug 2016 21:07:19 +0200
Subject: [PATCH 01/25] Add two Metalink/XML tests

* testenv/Test-metalink-xml-abspath.py: Reject absolute paths
* testenv/Test-metalink-xml-relpath.py: Reject relative paths
* testenv/Makefile.am: Add both new files to metalink tests
---
 testenv/Makefile.am  |  6 ++-
 testenv/Test-metalink-xml-abspath.py | 87 
 testenv/Test-metalink-xml-relpath.py | 87 
 3 files changed, 178 insertions(+), 2 deletions(-)
 create mode 100755 testenv/Test-metalink-xml-abspath.py
 create mode 100755 testenv/Test-metalink-xml-relpath.py

diff --git a/testenv/Makefile.am b/testenv/Makefile.am
index deef18e..41bf902 100644
--- a/testenv/Makefile.am
+++ b/testenv/Makefile.am
@@ -27,8 +27,10 @@
 
 
 if METALINK_IS_ENABLED
-  METALINK_TESTS = Test-metalink-xml.py \
-Test-metalink-http.py
+  METALINK_TESTS = Test-metalink-xml.py \
+Test-metalink-http.py   \
+Test-metalink-xml-relpath.py\
+Test-metalink-xml-abspath.py
 else
   METALINK_TESTS =
 endif
diff --git a/testenv/Test-metalink-xml-abspath.py b/testenv/Test-metalink-xml-abspath.py
new file mode 100755
index 000..62aabb9
--- /dev/null
+++ b/testenv/Test-metalink-xml-abspath.py
@@ -0,0 +1,87 @@
+#!/usr/bin/env python3
+from sys import exit
+from test.http_test import HTTPTest
+from misc.wget_file import WgetFile
+import re
+import hashlib
+
+"""
+This is to test if Metalink XML file escapes current directory.
+"""
+# File Definitions ###
+File1 = "Would you like some Tea?"
+File1_lowPref = "Do not take this"
+File1_sha256 = hashlib.sha256 (File1.encode ('UTF-8')).hexdigest ()
+MetaXml = \
+"""
+http://www.metalinker.org/";>
+  
+GNU Wget
+  
+  
+GNU GPL
+http://www.gnu.org/licenses/gpl.html
+  
+  Wget Test File 1
+  1.2.3
+  Wget Test File 1 description
+  
+
+  
+{{FILE1_HASH}}
+  
+  
+http://broken.example/File1
+http://{{SRV_HOST}}:{{SRV_PORT}}/File1_lowPref
+http://{{SRV_HOST}}:{{SRV_PORT}}/File1
+  
+
+  
+
+"""
+
+A_File = WgetFile ("File1", File1)
+B_File = WgetFile ("File1_lowPref", File1_lowPref)
+MetaFile = WgetFile ("test.meta4", MetaXml)
+
+WGET_OPTIONS = "--input-metalink test.meta4"
+WGET_URLS = [[]]
+
+Files = [[A_File, B_File]]
+Existing_Files = [MetaFile]
+
+ExpectedReturnCode = 0
+ExpectedDownloadedFiles = [MetaFile]
+
+ Pre and Post Test Hooks #
+pre_test = {
+"ServerFiles"   : Files,
+"LocalFiles": Existing_Files
+}
+test_options = {
+"WgetCommands"  : WGET_OPTIONS,
+"Urls"  : WGET_URLS
+}
+post_test = {
+"ExpectedFiles" : ExpectedDownloadedFiles,
+"ExpectedRetcode"   : ExpectedReturnCode
+}
+
+http_test = HTTPTest (
+pre_hook=pre_test,
+test_params=test_options,
+post_hook=post_test,
+)
+
+http_test.server_setup()
+### Get and use dynamic server sockname
+srv_host, srv_port = http_test.servers[0].server_inst.socket.getsockname ()
+
+MetaXml = re.sub (r'{{FILE1_HASH}}', File1_sha256, MetaXml)
+MetaXml = re.sub (r'{{SRV_HOST}}', srv_host, MetaXml)
+MetaXml = re.sub (r'{{SRV_PORT}}', str (srv_port), MetaXml)
+MetaFile.content = MetaXml
+
+err = http_test.begin ()
+
+exit (err)
diff --git a/testenv/Test-metalink-xml-relpath.py b/testenv/Test-metalink-xml-relpath.py
new file mode 100755
index 000..041d772
--- /dev/null
+++ b/testenv/Test-metalink-xml-relpath.py
@@ -0,0 +1,87 @@
+#!/usr/bin/env python3
+from sys import exit
+from test.http_test import HTTPTest
+from misc.wget_file import WgetFile
+import re
+import hashlib
+
+"""
+This is to test if Metalink XML file escapes current directory.
+"""
+# File Definitions ###
+File1 = "Would you like some Tea?"
+File1_lowPref = "Do not take this"
+File1_sha256 = hashlib.sha256 (File1.encode ('UTF-8')).hexdigest ()
+MetaXml = \
+"""
+http://www.metalinker.org/";>
+  
+GNU Wget
+  
+  
+GNU GPL
+http://www.gnu.org/licenses/gpl.html
+  
+  Wget Test File 1
+  1.2.3
+  Wget Test File 1 description
+  
+
+  
+{{FILE1_HASH}}
+