tool_operate: make --etag-compare always accept a non-existing file

Consider it a blank etag. It allows for more use cases when the file
just might not have been created yet.

Closes #15737
This commit is contained in:
Daniel Stenberg 2024-12-12 23:06:19 +01:00
parent c64c3527e5
commit 7347ddc9e2
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2
3 changed files with 14 additions and 11 deletions

View file

@ -21,7 +21,8 @@ Make a conditional HTTP request for the specific ETag read from the given file
by sending a custom If-None-Match header using the stored ETag.
For correct results, make sure that the specified file contains only a single
line with the desired ETag. An empty file is parsed as an empty ETag.
line with the desired ETag. A non-existing or empty file is treated as an
empty ETag.
Use the option --etag-save to first save the ETag from a response, and then
use this option to compare against the saved ETag in a subsequent request.

View file

@ -1940,12 +1940,9 @@ static CURLcode single_transfer(struct GlobalConfig *global,
/* open file for reading: */
FILE *file = fopen(config->etag_compare_file, FOPEN_READTEXT);
if(!file && !config->etag_save_file) {
errorf(global,
"Failed to open %s", config->etag_compare_file);
result = CURLE_READ_ERROR;
break;
}
if(!file)
warnf(global, "Failed to open %s: %s", config->etag_compare_file,
strerror(errno));
if((PARAM_OK == file2string(&etag_from_file, file)) &&
etag_from_file) {

View file

@ -36,7 +36,7 @@ chunky-trailer: header data
http
</server>
<name>
Try to open a non existing file with --etag-compare should return an error
A non existing file with --etag-compare is just a blank
</name>
<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --etag-compare %LOGDIR/etag%TESTNUMBER
@ -46,9 +46,14 @@ http://%HOSTIP:%HTTPPORT/%TESTNUMBER --etag-compare %LOGDIR/etag%TESTNUMBER
#
# Verify data after the test has been "shot"
<verify>
<errorcode>
26
</errorcode>
<protocol>
GET /%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
If-None-Match: ""
</protocol>
</verify>
</testcase>