[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