Logs are written by several servers and all of them must be finished writing before the test results can be determined. This means each server must have its own lock file rather than sharing a single one, which is how it was done up to now. Previously, the first server to complete a test would clear the lock before the other server was done, which caused flaky tests. Lock files are now all found in their own directory, so counting locks equals counting the files in that directory. The result is that the proxy logs are now reliably written which actually changes the expected output for two tests. Fixes #11231 Closes #11259
96 lines
3.0 KiB
C
96 lines
3.0 KiB
C
#ifndef HEADER_CURL_SERVER_UTIL_H
|
|
#define HEADER_CURL_SERVER_UTIL_H
|
|
/***************************************************************************
|
|
* _ _ ____ _
|
|
* Project ___| | | | _ \| |
|
|
* / __| | | | |_) | |
|
|
* | (__| |_| | _ <| |___
|
|
* \___|\___/|_| \_\_____|
|
|
*
|
|
* Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
*
|
|
* This software is licensed as described in the file COPYING, which
|
|
* you should have received as part of this distribution. The terms
|
|
* are also available at https://curl.se/docs/copyright.html.
|
|
*
|
|
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
* copies of the Software, and permit persons to whom the Software is
|
|
* furnished to do so, under the terms of the COPYING file.
|
|
*
|
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
* KIND, either express or implied.
|
|
*
|
|
* SPDX-License-Identifier: curl
|
|
*
|
|
***************************************************************************/
|
|
#include "server_setup.h"
|
|
|
|
char *data_to_hex(char *data, size_t len);
|
|
void logmsg(const char *msg, ...);
|
|
long timediff(struct timeval newer, struct timeval older);
|
|
|
|
#define TEST_DATA_PATH "%s/data/test%ld"
|
|
#define ALTTEST_DATA_PATH "%s/test%ld"
|
|
#define SERVERLOGS_LOCKDIR "lock" /* within logdir */
|
|
|
|
/* global variable, where to find the 'data' dir */
|
|
extern const char *path;
|
|
|
|
/* global variable, log file name */
|
|
extern const char *serverlogfile;
|
|
|
|
extern const char *cmdfile;
|
|
|
|
#ifdef WIN32
|
|
#include <process.h>
|
|
#include <fcntl.h>
|
|
|
|
#define sleep(sec) Sleep ((sec)*1000)
|
|
|
|
#undef perror
|
|
#define perror(m) win32_perror(m)
|
|
void win32_perror(const char *msg);
|
|
|
|
void win32_init(void);
|
|
void win32_cleanup(void);
|
|
#endif /* WIN32 */
|
|
|
|
/* fopens the test case file */
|
|
FILE *test2fopen(long testno, const char *logdir);
|
|
|
|
int wait_ms(int timeout_ms);
|
|
curl_off_t our_getpid(void);
|
|
int write_pidfile(const char *filename);
|
|
int write_portfile(const char *filename, int port);
|
|
void set_advisor_read_lock(const char *filename);
|
|
void clear_advisor_read_lock(const char *filename);
|
|
int strncasecompare(const char *first, const char *second, size_t max);
|
|
|
|
/* global variable which if set indicates that the program should finish */
|
|
extern volatile int got_exit_signal;
|
|
|
|
/* global variable which if set indicates the first signal handled */
|
|
extern volatile int exit_signal;
|
|
|
|
#ifdef WIN32
|
|
/* global event which if set indicates that the program should finish */
|
|
extern HANDLE exit_event;
|
|
#endif
|
|
|
|
void install_signal_handlers(bool keep_sigalrm);
|
|
void restore_signal_handlers(bool keep_sigalrm);
|
|
|
|
#ifdef USE_UNIX_SOCKETS
|
|
|
|
#include <curl/curl.h> /* for curl_socket_t */
|
|
|
|
#ifdef HAVE_SYS_UN_H
|
|
#include <sys/un.h> /* for sockaddr_un */
|
|
#endif /* HAVE_SYS_UN_H */
|
|
|
|
int bind_unix_socket(curl_socket_t sock, const char *unix_socket,
|
|
struct sockaddr_un *sau);
|
|
#endif /* USE_UNIX_SOCKETS */
|
|
|
|
#endif /* HEADER_CURL_SERVER_UTIL_H */
|