Bug 1062282 (httpress)

Summary: Review Request: httpress - HTTP stress & benchmark utility
Product: [Fedora] Fedora Reporter: Nikos Mavrogiannopoulos <nmavrogi>
Component: Package ReviewAssignee: Adrien Devresse <adev88>
Status: CLOSED ERRATA QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: medium Docs Contact:
Priority: medium    
Version: rawhideCC: adev88, alexandre.beche, e, mail, package-review
Target Milestone: ---Flags: adev88: fedora-review+
gwync: fedora-cvs+
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: httpress-1.1.0-1.fc20 Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2014-03-20 13:25:44 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 563471    

Description Nikos Mavrogiannopoulos 2014-02-06 15:07:05 UTC
Spec URL: http://people.redhat.com/nmavrogi/fedora/httpress.spec
SRPM URL: http://people.redhat.com/nmavrogi/fedora/httpress-1.1-1.hgd8c968cead5a.fc20.src.rpm
Description: High performance HTTP server stress & benchmark utility inspired by the weighttp tool. It is event-driven, multi-threaded and provides support for SSL.
Fedora Account System Username: nmav

Comment 1 Alexandre Beche 2014-02-25 10:43:55 UTC
Hi,

I am currently doing an informal review of your package.
Do you plan to put your package under EPEL5/6 reposiroty?

Cheers,
Alexandre

Comment 2 Nikos Mavrogiannopoulos 2014-02-25 11:57:45 UTC
Thanks. I wasn't really planning for that, but if there are no issues compiling there it could be an option.

Comment 4 Alexandre Beche 2014-02-27 09:53:44 UTC
It seems the package does not compile for EPEL5/6 so lets focus on ferora release.

Before going through the main review, can I ask you the following small fixes:

- Put the license in a LICENSE file instead of the sources (not mandatory but get the package a bit cleaner).

- Remove the commit number from the spec file (including the Release line and the changelog).

- Clean the changelog (keep only the newest line properly formated as described in [1]).

Cheers,
Alexandre

[1]: https://fedoraproject.org/wiki/Packaging:Guidelines?rd=Packaging/Guidelines#Changelogs

Comment 5 Nikos Mavrogiannopoulos 2014-02-27 10:58:05 UTC
Hello,
 On the LICENSE, I think that I should wait for upstream to add a license file instead rather than putting a license for him (he's been contacted, and such a file will probably be added on the next release). 

The commit number it is part of the sources downloaded from bitbucket so it cannot be removed. What I can remove is from it being part of the version. Would that address your issue?

Comment 7 Alexandre Beche 2014-02-27 11:38:26 UTC
Hello, 

Please find below my informal review (note that it is my first one :) so I may have been too strict or permissive on some points). I think it will answers your two previous comments.

If you have doubt on any point, let me know.

Cheers,
Alex

__ = To be corrected
OK = Accepted
NA = Not Applicable

####
#
# MUST 
#
####

[__] - rpmlint on source and binary rpm (report enclosed below)
rpmlint httpress-1.1.0-1.fc20.src.rpm
httpress.src: W: spelling-error %description -l en_US weighttp -> weight
httpress.src: W: spelling-error %description -l en_US multi -> mulch, mufti
httpress.src: W: invalid-url Source0: httpress-1.1.0.tar.gz

rpmlint httpress-1.1.0-1.fc20.x86_64.rpm
httpress.x86_64: W: spelling-error %description -l en_US weighttp -> weight
httpress.x86_64: W: spelling-error %description -l en_US multi -> mulch, mufti
httpress.x86_64: W: no-documentation
httpress.x86_64: W: no-manual-page-for-binary httpress
1 packages and 0 specfiles checked; 0 errors, 4 warnings.

Could you please have a look to the following warning:
httpress.src: W: invalid-url Source0: httpress-1.1.0.tar.gz
rpmlint -I invalid-url
The value should be a valid, public HTTP, HTTPS, or FTP URL.

In addition (not mandatory but part of the SHOULD section), is there any chance you to add doc/man page. I know it's probably not meaningful, but warning should go away.


[OK] - The package must be named according to the Package Naming Guidelines.
[OK] - The spec file name must match the base package %{name}

[__] - The package must meet the Packaging Guidelines
 * Compilation flags does not seems to be correct (https://fedoraproject.org/wiki/Packaging:Guidelines#Compiler_flags), I would rather suggest:
   CFLAGS="${CFLAGS:-%optflags}" ; export CFLAGS ;
   CXXFLAGS="${CXXFLAGS:-%optflags}" ; export CXXFLAGS ;

[OK] - The package must be licensed with a Fedora approved license and meet the Licensing Guidelines.
[OK] - The License field in the package spec file must match the actual license.
[OK] - If (and only if) the source package includes the text of the license(s) in its own file, then that file, containing the text of the license(s) for the package must be included in %doc.
[OK] - The spec file must be written in American English.
[OK] - The spec file for the package MUST be legible.

[OK] - The sources used to build the package must match the upstream source, as provided in the spec URL. 
86413b065d85b7d9e0af63a205465310853fe67dbfe8d15b92cdbd7fda17a642  httpress-1.1.0.tar.gz (srcrpm)
86413b065d85b7d9e0af63a205465310853fe67dbfe8d15b92cdbd7fda17a642  httpress-1.1.0.tar.gz (https://bitbucket.org/yarosla/httpress/get/httpress-1.1.0.tar.gz)

[OK] - The package MUST successfully compile and build into binary rpms on at least one primary architecture.
rawhide: http://koji.fedoraproject.org/koji/taskinfo?taskID=6576209
f21    : http://koji.fedoraproject.org/koji/taskinfo?taskID=6576227
f20    : http://koji.fedoraproject.org/koji/taskinfo?taskID=6576231

[OK] - If the package does not successfully compile, build or work on an architecture, then those architectures should be listed in the spec in ExcludeArch.
[OK] - All build dependencies must be listed in BuildRequires.
[NA] - The spec file MUST handle locales properly.
[NA] - Every binary RPM package (or subpackage) which stores shared library files (not just symlinks) in any of the dynamic linker's default paths, must call ldconfig in %post and %postun.
[OK] - Packages must NOT bundle copies of system libraries.
[NA] - If the package is designed to be relocatable, the packager must state this fact in the request for review, along with the rationalization for relocation of that specific package.
[NA] - A package must own all directories that it creates.
[OK] - A Fedora package must not list a file more than once in the spec file's %files listings.
[OK] - Permissions on files must be set properly.
[OK] - Each package must consistently use macros.
[OK] - The package must contain code, or permissable content
[NA] - Large documentation files must go in a -doc subpackage. 
[NA] - If a package includes something as %doc, it must not affect the runtime of the application. To summarize: If it is in %doc, the program must run properly if it is not present.
[NA] - Static libraries must be in a -static package.
[NA] - Development files must be in a -devel package.
[NA] - In the vast majority of cases, devel packages must require the base package using a fully versioned dependency: Requires: %{name}%{?_isa} = %{version}-%{release}
[OK] - Packages must NOT contain any .la libtool archives, these must be removed in the spec if they are built.
[NA] - Packages containing GUI applications must include a %{name}.
[OK] - Packages must not own files or directories already owned by other packages.
[OK] - All filenames in rpm packages must be valid UTF-8.

####
#
# SHOULD
#
####

[__] - If the source package does not include license text(s) as a separate file from upstream, the packager SHOULD query upstream to include it.
[NA] - The description and summary sections in the package spec file should contain translations for supported Non-English languages, if available.
[OK] - The reviewer should test that the package builds in mock.
[OK] - The package should compile and build into binary rpms on all supported architectures.

[__] - The reviewer should test that the package functions as described. A package should not segfault instead of running, for example.
Could you please give me an example of how I can run it? 

[NA] - If scriptlets are used, those scriptlets must be sane. This is vague, and left up to the reviewers judgement to determine sanity. 
[NA] - Usually, subpackages other than devel should require the base package using a fully versioned dependency. 
[NA] - The placement of pkgconfig(.pc) files depends on their usecase, and this is usually for development purposes, so should be placed in a -devel pkg. A reasonable exception is that the main pkg itself is a devel tool not installed in a user runtime, e.g. gcc or gdb.
[NA] - If the package has file dependencies outside of /etc, /bin, /sbin, /usr/bin, or /usr/sbin consider requiring the package which provides the file instead of the file itself.

[__] - your package should contain man pages for binaries/scripts. If it doesn't, work with upstream to add them where they make sense.
See rpmlint comments

Comment 8 Nikos Mavrogiannopoulos 2014-02-27 13:04:10 UTC
Thanks.

[__] - rpmlint on source and binary rpm (report enclosed below)
rpmlint httpress-1.1.0-1.fc20.src.rpm
httpress.src: W: spelling-error %description -l en_US weighttp -> weight
httpress.src: W: spelling-error %description -l en_US multi -> mulch, mufti

These are not intentional rather than spelling errors, so I've not corrected them.

httpress.src: W: invalid-url Source0: httpress-1.1.0.tar.gz

Now it includes the URL as well as a rule to rename the obtained file.

httpress.x86_64: W: no-documentation
httpress.x86_64: W: no-manual-page-for-binary httpress

I've hacked a man page that I plan to send upstream.

(the package is updated in-place of the old one)

Comment 9 Nikos Mavrogiannopoulos 2014-02-27 13:05:19 UTC
(btw. you may want to set the fedora-review flag to '?' so that the package is marked as under review)

Comment 10 Adrien Devresse 2014-03-05 10:01:47 UTC
Hi Nikos,

Alexandre is doing this review as part of his process to become packager.
I'm his sponsor, I know take the responsability of this review.


First thing, it seems to be recent, which explain that you did not see it but YOur package does not compile anymore for rawhide, due to a missing pkgconfig file.


http://koji.fedoraproject.org/koji/taskinfo?taskID=6599181


+ cd /builddir/build/BUILD
+ cd yarosla-httpress-d8c968cead5a
++ pkg-config libev --cflags
Package libev was not found in the pkg-config search path.
Perhaps you should add the directory containing `libev.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libev' found

Comment 11 Nikos Mavrogiannopoulos 2014-03-05 12:46:42 UTC
(In reply to Adrien Devresse from comment #10)
> Hi Nikos,
> 
> Alexandre is doing this review as part of his process to become packager.
> I'm his sponsor, I know take the responsability of this review.
> 
> 
> First thing, it seems to be recent, which explain that you did not see it
> but YOur package does not compile anymore for rawhide, due to a missing
> pkgconfig file.
> http://koji.fedoraproject.org/koji/taskinfo?taskID=6599181

Hello Adrien,
 I see that httpress.spec has libev-devel as dependency so the libev.pc pkg-config should exist in rawhide. Could it be than an older version of the rpm was fed into koji? I can successfully run mock on f20 and f21 locally.

Comment 12 Nikos Mavrogiannopoulos 2014-03-17 08:50:38 UTC
Hello,
 Is that package still under review?

Comment 13 Adrien Devresse 2014-03-17 11:23:49 UTC
Hi Nikos,

I aplogize for the delay, I take care of this ASAP. Today if possible.

Comment 14 Adrien Devresse 2014-03-18 22:04:38 UTC
Hi Nikos,


The problem concerning the compilation on rawhide still exist : 

http://koji.fedoraproject.org/koji/taskinfo?taskID=6648099

The pkgconfig file seems to not exist anymore for libev in rawhide.
Can you try to see with the libev package maintainer if he can revert this change or try to patch your package to not use pkgconfig on rawhide.


Adev

Comment 15 Nikos Mavrogiannopoulos 2014-03-19 10:16:23 UTC
I see. libev dropped pkg-config support for some reason. I've now hard coded the -I path in the spec.

Comment 16 Adrien Devresse 2014-03-19 23:04:13 UTC

Legend:
X -> valid
! -> Invalid
N∕A -> not concerned


[X]: rpmlint must be run on the source rpm and all binary rpms the build produces. The output should be posted in the review.[1]

httpress.src: W: spelling-error %description -l en_US weighttp -> weighty, weightily, weightless
httpress.src: W: spelling-error %description -l en_US multi -> mulch, mufti
httpress.src:39: E: files-attr-not-set
httpress.src:40: E: files-attr-not-set
httpress.src: W: no-cleaning-of-buildroot %install
httpress.src: W: no-cleaning-of-buildroot %clean
httpress.src: W: no-buildroot-tag
httpress.src: W: no-%clean-section
httpress.x86_64: W: spelling-error %description -l en_US weighttp -> weighty, weightily, weightless
httpress.x86_64: W: spelling-error %description -l en_US multi -> mulch, mufti
3 packages and 0 specfiles checked; 2 errors, 8 warnings

	-> Error and warning concern only EPEL5/6. If you confirm me you don't target EPEL, this is fine

[X]: The package must be named according to the Package Naming Guidelines .
[X]: The spec file name must match the base package %{name}, in the format %{name}.spec unless your package has an exemption. [2] .
[X]: The package must meet the Packaging Guidelines .
[X]: The package must be licensed with a Fedora approved license and meet the Licensing Guidelines .
		-> BSD
[X]: The License field in the package spec file must match the actual license. [3]
[X]: If (and only if) the source package includes the text of the license(s) in its own file, then that file, containing the text of the license(s) for the package must be included in %doc.[4]
[X]: The spec file must be written in American English. [5]
[X]: The spec file for the package MUST be legible. [6]
[X]: The sources used to build the package must match the upstream source, as provided in the spec URL. Reviewers should use sha256sum for this task as it is used by the sources file once imported into git. If no upstream URL can be specified for this package, please see the Source URL Guidelines for how to deal with this.

86413b065d85b7d9e0af63a205465310853fe67dbfe8d15b92cdbd7fda17a642  httpress-1.1.0-1.fc20.x86_64/httpress-1.1.0.tar.gz               
86413b065d85b7d9e0af63a205465310853fe67dbfe8d15b92cdbd7fda17a642  1.1.0.tar.gz


[X]: The package MUST successfully compile and build into binary rpms on at least one primary architecture. [7]

	rawhide : http://koji.fedoraproject.org/koji/taskinfo?taskID=6653211


[N/A]: If the package does not successfully compile, build or work on an architecture, then those architectures should be listed in the spec in ExcludeArch. Each architecture listed in ExcludeArch MUST have a bug filed in bugzilla, describing the reason that the package does not compile/build/work on that architecture. The bug number MUST be placed in a comment, next to the corresponding ExcludeArch line. [8]
[X]: All build dependencies must be listed in BuildRequires, except for any that are listed in the exceptions section of the Packaging Guidelines ; inclusion of those as BuildRequires is optional. Apply common sense.
[N/A]: The spec file MUST handle locales properly. This is done by using the %find_lang macro. Using %{_datadir}/locale/* is strictly forbidden.[9]
[N/A]: Every binary RPM package (or subpackage) which stores shared library files (not just symlinks) in any of the dynamic linker's default paths, must call ldconfig in %post and %postun. [10]
[N/A]: Packages must NOT bundle copies of system libraries.[11]
[N/A]: If the package is designed to be relocatable, the packager must state this fact in the request for review, along with the rationalization for relocation of that specific package. Without this, use of Prefix: /usr is considered a blocker. [12]
[X]: A package must own all directories that it creates. If it does not create a directory that it uses, then it should require a package which does create that directory. [13]
[X]: A Fedora package must not list a file more than once in the spec file's %files listings. (Notable exception: license texts in specific situations)[14]
[X]: Permissions on files must be set properly. Executables should be set with executable permissions, for example. [15]
[X]: Each package must consistently use macros. [16]

	-> see comments
[X]: The package must contain code, or permissable content. [17]
[N/A]: Large documentation files must go in a -doc subpackage. (The definition of large is left up to the packager's best judgement, but is not restricted to size. Large can refer to either size or quantity). [18]
[X]: If a package includes something as %doc, it must not affect the runtime of the application. To summarize: If it is in %doc, the program must run properly if it is not present. [18]
[N/A]: Static libraries must be in a -static package. [19]
[N/A]: Development files must be in a -devel package. [20]
[N/A]: In the vast majority of cases, devel packages must require the base package using a fully versioned dependency: Requires: %{name}%{?_isa} = %{version}-%{release} [21]
[X]: Packages must NOT contain any .la libtool archives, these must be removed in the spec if they are built.[19]
[N/A]: Packages containing GUI applications must include a %{name}.desktop file, and that file must be properly installed with desktop-file-install in the %install section. If you feel that your packaged GUI application does not need a .desktop file, you must put a comment in the spec file with your explanation. [22]
[X]: Packages must not own files or directories already owned by other packages. The rule of thumb here is that the first package to be installed should own the files or directories that other packages may rely upon. This means, for example, that no package in Fedora should ever share ownership with any of the files or directories owned by the filesystem or man package. If you feel that you have a good reason to own a file or directory that another package owns, then please present that at package review time. [23]
[X]: All filenames in rpm packages must be valid UTF-8. [24]



Important.png
SHOULD Items:
Items marked as SHOULD are things that the package (or reviewer) SHOULD do, but is not required to do.

[!]: If the source package does not include license text(s) as a separate file from upstream, the packager SHOULD query upstream to include it. [25]
[N/A]: The description and summary sections in the package spec file should contain translations for supported Non-English languages, if available. [26]
[X]: The reviewer should test that the package builds in mock. [27]

INFO: Done(httpress-1.1.0-1.fc20.src.rpm) Config(fedora-rawhide-x86_64) 7 minutes 59 seconds
INFO: Results and/or logs in: /var/lib/mock/fedora-rawhide-x86_64/result
Finish: run


[X]: The package should compile and build into binary rpms on all supported architectures. [28]

http://koji.fedoraproject.org/koji/taskinfo?taskID=6653211


[X]: The reviewer should test that the package functions as described. A package should not segfault instead of running, for example.


<mock-chroot>[]# httpress 
missing url argument

httpress <options> <url>
  -n num   number of requests     (default: 1)
  -t num   number of threads      (default: 1)
  -c num   concurrent connections (default: 1)
  -k       keep alive             (default: no)
  -q       no progress indication (default: no)
  -z pri   GNUTLS cipher priority (default: NORMAL)
  -h       show this help

example: httpress -n 10000 -c 100 -t 4 -k http://localhost:8080/index.html

<mock-chroot>[]# ldd -r `which httpress`
	linux-vdso.so.1 =>  (0x00007ffff8d98000)
	libev.so.4 => /lib64/libev.so.4 (0x00007f10f6e40000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f10f6c20000)
	libgnutls.so.28 => /lib64/libgnutls.so.28 (0x00007f10f6908000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f10f6540000)
	libm.so.6 => /lib64/libm.so.6 (0x00007f10f6238000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f10f7058000)
	libz.so.1 => /lib64/libz.so.1 (0x00007f10f6020000)
	libp11-kit.so.0 => /lib64/libp11-kit.so.0 (0x00007f10f5dd8000)
	libtspi.so.1 => /lib64/libtspi.so.1 (0x00007f10f5b68000)
	libtasn1.so.6 => /lib64/libtasn1.so.6 (0x00007f10f5950000)
	libnettle.so.4 => /lib64/libnettle.so.4 (0x00007f10f5718000)
	libhogweed.so.2 => /lib64/libhogweed.so.2 (0x00007f10f54f0000)
	libgmp.so.10 => /lib64/libgmp.so.10 (0x00007f10f5278000)
	libffi.so.6 => /lib64/libffi.so.6 (0x00007f10f5070000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f10f4e68000)
	libcrypto.so.10 => /lib64/libcrypto.so.10 (0x00007f10f4a80000)
	libssl.so.10 => /lib64/libssl.so.10 (0x00007f10f4810000)
	libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007f10f45c0000)
	libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007f10f42d8000)
	libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007f10f40d0000)
	libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007f10f3e98000)
	libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007f10f3c88000)
	libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007f10f3a80000)
	libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f10f3860000)
	libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f10f3638000)
	libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f10f33c8000)
	liblzma.so.5 => /lib64/liblzma.so.5 (0x00007f10f31a0000)



[N/A]: If scriptlets are used, those scriptlets must be sane. This is vague, and left up to the reviewers judgement to determine sanity. [29]
[N/A]: Usually, subpackages other than devel should require the base package using a fully versioned dependency. [21]
[N/A]: The placement of pkgconfig(.pc) files depends on their usecase, and this is usually for development purposes, so should be placed in a -devel pkg. A reasonable exception is that the main pkg itself is a devel tool not installed in a user runtime, e.g. gcc or gdb. [30]
[N/A]: If the package has file dependencies outside of /etc, /bin, /sbin, /usr/bin, or /usr/sbin consider requiring the package which provides the file instead of the file itself. [31]
[X]: your package should contain man pages for binaries/scripts. If it doesn't, work with upstream to add them where they make sense.[32]

Must :
0 fails

Should:
-> please report upstream the license file problem and include it in future
-> please report the man page upstream

Comments:
-> No compatibility of EPEL, please specify if needed


no major problems, everything has already been corrected: package accepted

Adev

Comment 17 Nikos Mavrogiannopoulos 2014-03-20 06:35:58 UTC
Thank you Adrien.

Comment 18 Nikos Mavrogiannopoulos 2014-03-20 06:36:36 UTC
Package Change Request
======================
Package Name: httpress
New Branches: f20 
Owners: nmav

Comment 19 Gwyn Ciesla 2014-03-20 11:47:34 UTC
Package does not appear to exist in pkgdb currently, if this is a new
package use a New Package Request.

Comment 20 Nikos Mavrogiannopoulos 2014-03-20 12:55:16 UTC
New Package SCM Request
=======================
Package Name: httpress
Short Description: HTTP stress & benchmark utility
Owners: nmav
Branches: f20
InitialCC:

Comment 21 Gwyn Ciesla 2014-03-20 13:06:09 UTC
Git done (by process-git-requests).

Comment 22 Nikos Mavrogiannopoulos 2014-03-20 13:25:44 UTC
Thank you.

Comment 23 Fedora Update System 2014-03-20 13:34:34 UTC
httpress-1.1.0-1.fc20 has been submitted as an update for Fedora 20.
https://admin.fedoraproject.org/updates/httpress-1.1.0-1.fc20

Comment 24 Fedora Update System 2014-06-27 21:52:57 UTC
httpress-1.1.0-1.fc20 has been pushed to the Fedora 20 stable repository.

Comment 25 Nikos Mavrogiannopoulos 2014-08-11 12:28:12 UTC
Package Change Request
======================
Package Name: httpress
New Branches: epel7
Owners: nmav
InitialCC:

Comment 26 Gwyn Ciesla 2014-08-11 12:40:43 UTC
Git done (by process-git-requests).