bug-wget
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Bug-wget] [PATCH 14/25] New test: Detect when there are no good Met


From: Giuseppe Scrivano
Subject: Re: [Bug-wget] [PATCH 14/25] New test: Detect when there are no good Metalink url resources
Date: Sun, 11 Sep 2016 22:55:03 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux)

Matthew White <address@hidden> writes:

> [Coverity Scan is ok, make syntax-check is ok, make check-valgrind is ok, 
> contrib/check-hard is ok]
>
> This adds a new Metalink test.
>
> The following description is verbatim from the patch:
> -----
> Test if when there are no good Metalink url resources there is any
> segmentation fault.
> -----
>
> Regards,
> Matthew
>
> -- 
> Matthew White <address@hidden>
>
> From fe1c53b831387742e0d21c5e0fd1935596f4b1ed Mon Sep 17 00:00:00 2001
> From: Matthew White <address@hidden>
> Date: Tue, 23 Aug 2016 04:57:33 +0200
> Subject: [PATCH 14/25] New test: Detect when there are no good Metalink url
>  resources
>
> * testenv/Makefile.am: Add new file
> * testenv/Test-metalink-xml-nourls.py: New file. Metalink/XML unknown
>   urls tests
>
> Test if when there are no good Metalink url resources there is any
> segmentation fault.
> ---
>  testenv/Makefile.am                 |   3 +-
>  testenv/Test-metalink-xml-nourls.py | 196 
> ++++++++++++++++++++++++++++++++++++
>  2 files changed, 198 insertions(+), 1 deletion(-)
>  create mode 100755 testenv/Test-metalink-xml-nourls.py
>
> diff --git a/testenv/Makefile.am b/testenv/Makefile.am
> index 5a67822..3d9ea44 100644
> --- a/testenv/Makefile.am
> +++ b/testenv/Makefile.am
> @@ -45,7 +45,8 @@ if METALINK_IS_ENABLED
>      Test-metalink-xml-absprefix-trust.py            \
>      Test-metalink-xml-homeprefix-trust.py           \
>      Test-metalink-xml-continue.py                   \
> -    Test-metalink-xml-size.py
> +    Test-metalink-xml-size.py                       \
> +    Test-metalink-xml-nourls.py
>  else
>    METALINK_TESTS =
>  endif
> diff --git a/testenv/Test-metalink-xml-nourls.py 
> b/testenv/Test-metalink-xml-nourls.py
> new file mode 100755
> index 0000000..60a748b
> --- /dev/null
> +++ b/testenv/Test-metalink-xml-nourls.py
> @@ -0,0 +1,196 @@
> +#!/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 Metalink/XML with unknown url types.
> +
> +    With --trust-server-names, trust the metalink:file names.
> +
> +    Without --trust-server-names, don't trust the metalink:file names:
> +    use the basename of --input-metalink, and add a sequential number
> +    (e.g. .#1, .#2, etc.).
> +
> +    Strip the directory from unsafe paths.
> +"""
> +############# File Definitions 
> ###############################################
> +bad = "Ouch!"
> +
> +File1 = "Would you like some Tea?"
> +File1_lowPref = "Do not take this"
> +File1_sha256 = hashlib.sha256 (File1.encode ('UTF-8')).hexdigest ()
> +
> +File2 = "This is gonna be good"
> +File2_lowPref = "Not this one too"
> +File2_sha256 = hashlib.sha256 (File2.encode ('UTF-8')).hexdigest ()
> +
> +File3 = "A little more, please"
> +File3_lowPref = "That's just too much"
> +File3_sha256 = hashlib.sha256 (File3.encode ('UTF-8')).hexdigest ()
> +
> +File4 = "Maybe a biscuit?"
> +File4_lowPref = "No, thanks"
> +File4_sha256 = hashlib.sha256 (File4.encode ('UTF-8')).hexdigest ()
> +
> +File5 = "More Tea...?"
> +File5_lowPref = "I have to go..."
> +File5_sha256 = hashlib.sha256 (File5.encode ('UTF-8')).hexdigest ()
> +
> +MetaXml = \
> +"""<?xml version="1.0" encoding="utf-8"?>
> +<metalink version="3.0" xmlns="http://www.metalinker.org/";>
> +  <publisher>
> +    <name>GNU Wget</name>
> +  </publisher>
> +  <license>
> +    <name>GNU GPL</name>
> +    <url>http://www.gnu.org/licenses/gpl.html</url>
> +  </license>
> +  <identity>Wget Test Files</identity>
> +  <version>1.2.3</version>
> +  <description>Wget Test Files description</description>
> +  <files>
> +    <file name="File1">
> +      <verification>
> +        <hash type="sha256">{{FILE1_HASH}}</hash>
> +      </verification>
> +      <resources>
> +        <url type="http" 
> preference="35">http://{{SRV_HOST}}:{{SRV_PORT}}/wrong_file</url>
> +        <url type="http" 
> preference="40">http://{{SRV_HOST}}:{{SRV_PORT}}/404</url>
> +        <url type="http" 
> preference="25">http://{{SRV_HOST}}:{{SRV_PORT}}/File1_lowPref</url>
> +        <url type="http" 
> preference="30">http://{{SRV_HOST}}:{{SRV_PORT}}/File1</url>
> +      </resources>
> +    </file>
> +    <file name="File2"> <!-- all unknown resources, test SIGSEGV -->
> +      <verification>
> +        <hash type="sha256">{{FILE2_HASH}}</hash>
> +      </verification>
> +      <resources>
> +        <url type="unknown" 
> preference="35">http://{{SRV_HOST}}:{{SRV_PORT}}/wrong_file</url>
> +        <url type="unknown" 
> preference="40">http://{{SRV_HOST}}:{{SRV_PORT}}/404</url>
> +        <url type="unknown" 
> preference="25">http://{{SRV_HOST}}:{{SRV_PORT}}/File2_lowPref</url>
> +        <url type="unknown" 
> preference="30">http://{{SRV_HOST}}:{{SRV_PORT}}/File2</url>
> +      </resources>
> +    </file>
> +    <file name="File3">
> +      <verification>
> +        <hash type="sha256">{{FILE3_HASH}}</hash>
> +      </verification>
> +      <resources>
> +        <url type="http" 
> preference="35">http://{{SRV_HOST}}:{{SRV_PORT}}/wrong_file</url>
> +        <url type="http" 
> preference="40">http://{{SRV_HOST}}:{{SRV_PORT}}/404</url>
> +        <url type="http" 
> preference="25">http://{{SRV_HOST}}:{{SRV_PORT}}/File3_lowPref</url>
> +        <url type="http" 
> preference="30">http://{{SRV_HOST}}:{{SRV_PORT}}/File3</url>
> +      </resources>
> +    </file>
> +    <file name="File4"> <!-- only one good resource -->
> +      <verification>
> +        <hash type="sha256">{{FILE4_HASH}}</hash>
> +      </verification>
> +      <resources>
> +        <url type="unknown" 
> preference="35">http://{{SRV_HOST}}:{{SRV_PORT}}/wrong_file</url>
> +        <url type="unknown" 
> preference="40">http://{{SRV_HOST}}:{{SRV_PORT}}/404</url>
> +        <url type="unknown" 
> preference="25">http://{{SRV_HOST}}:{{SRV_PORT}}/File4_lowPref</url>
> +        <url type="http" 
> preference="30">http://{{SRV_HOST}}:{{SRV_PORT}}/File4</url>
> +      </resources>
> +    </file>
> +    <file name="File5">
> +      <verification>
> +        <hash type="sha256">{{FILE5_HASH}}</hash>
> +      </verification>
> +      <resources>
> +        <url type="http" 
> preference="35">http://{{SRV_HOST}}:{{SRV_PORT}}/wrong_file</url>
> +        <url type="http" 
> preference="40">http://{{SRV_HOST}}:{{SRV_PORT}}/404</url>
> +        <url type="http" 
> preference="25">http://{{SRV_HOST}}:{{SRV_PORT}}/File5_lowPref</url>
> +        <url type="http" 
> preference="30">http://{{SRV_HOST}}:{{SRV_PORT}}/File5</url>
> +      </resources>
> +    </file>
> +  </files>
> +</metalink>
> +"""
> +
> +wrong_file = WgetFile ("wrong_file", bad)
> +
> +File1_orig = WgetFile ("File1", File1)
> +File1_down = WgetFile ("test.meta4.#1", File1)
> +File1_nono = WgetFile ("File1_lowPref", File1_lowPref)
> +
> +# all unknown resources, test SIGSEGV
> +File2_orig = WgetFile ("File2", File2)
> +File2_nono = WgetFile ("File2_lowPref", File2_lowPref)
> +
> +File3_orig = WgetFile ("File3", File3)
> +File3_down = WgetFile ("test.meta4.#3", File3)
> +File3_nono = WgetFile ("File3_lowPref", File3_lowPref)
> +
> +File4_orig = WgetFile ("File4", File4)
> +File4_down = WgetFile ("test.meta4.#4", File4)
> +File4_nono = WgetFile ("File4_lowPref", File4_lowPref)
> +
> +File5_orig = WgetFile ("File5", File5)
> +File5_down = WgetFile ("test.meta4.#5", File5)
> +File5_nono = WgetFile ("File5_lowPref", File5_lowPref)
> +
> +MetaFile = WgetFile ("test.meta4", MetaXml)
> +
> +WGET_OPTIONS = "--input-metalink test.meta4"
> +WGET_URLS = [[]]
> +
> +Files = [[
> +    wrong_file,
> +    File1_orig, File1_nono,
> +    File2_orig, File2_nono,
> +    File3_orig, File3_nono,
> +    File4_orig, File4_nono,
> +    File5_orig, File5_nono
> +]]
> +Existing_Files = [MetaFile]
> +
> +ExpectedReturnCode = 1
> +ExpectedDownloadedFiles = [
> +    File1_down,
> +    File3_down,
> +    File4_down,
> +    File5_down,
> +    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'{{FILE2_HASH}}', File2_sha256, MetaXml)
> +MetaXml = re.sub (r'{{FILE3_HASH}}', File3_sha256, MetaXml)
> +MetaXml = re.sub (r'{{FILE4_HASH}}', File4_sha256, MetaXml)
> +MetaXml = re.sub (r'{{FILE5_HASH}}', File5_sha256, MetaXml)
> +MetaXml = re.sub (r'{{SRV_HOST}}', srv_host, MetaXml)
> +MetaXml = re.sub (r'{{SRV_PORT}}', str (srv_port), MetaXml)
> +MetaFile.content = MetaXml

and here again could we skip the re module?  ACK with it changed.

Giuseppe



reply via email to

[Prev in Thread] Current Thread [Next in Thread]