Files
palladum-lightning/cli/test/run-large-input.c
Rusty Russell e120f87083 Makefile: create a library containing common, wire and bitcoin objects.
This means we don't have to manually choose what to link against,
which is much of the complexity of our Makefiles: the compiler will
automatically use any object files it needs to link.

We already do this for ccan as libccan.a, now we have libcommon.a.

We don't link against it for *everything*, as some tests require their own
versions.

Notes:
1. I get rid of the weird plugins/test/Makefile2 (accidental commit?)
2. Many tests change due to update-mocks.
3. In some places I added the missing dependency on the Makefile itself, though most are in the next
   patch.

Before:
	Total program size:     221366528
	Total tests size:       364243856

After:
	Total program size:     190733656
	Total tests size:       337880888

Build time from make clean (RUST=0) (includes building external libs):

Before:
	real    0m38.227000-44.245000(41.8222+/-1.6)s
	user    3m2.105000-33.696000(23.1442+/-8.4)s
	sys     0m35.054000-42.269000(39.7231+/-2)s
After:
	real    0m38.944000-40.416000(40.1131+/-0.4)s
	user    3m6.790000-17.159000(15.0571+/-2.8)s
	sys     0m35.304000-37.336000(36.8942+/-0.57)s

Build time after touch config.vars (RUST=0):

Before:
	real    0m18.928000-22.776000(21.5084+/-1.1)s
	user    2m8.613000-36.567000(27.7281+/-7.7)s
	sys     0m20.458000-23.436000(22.3963+/-0.77)s

After:
	real    0m19.831000-21.862000(21.5528+/-0.58)s
	user    2m15.361000-30.731000(28.4798+/-4.4)s
	sys     0m21.056000-22.339000(22.0346+/-0.35)s

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

rusty@rusty-Framework:~/devel/cvs/lightni
2025-10-23 06:44:04 +10:30

129 lines
3.3 KiB
C

#include "config.h"
#include "config_test.h"
#include <common/amount.h>
#include <common/bigsize.h>
#include <common/channel_id.h>
#include <common/configvar.h>
#include <common/daemon.h>
#include <common/json_stream.h>
#include <common/node_id.h>
#include <common/setup.h>
#include <common/wireaddr.h>
#include <fcntl.h>
#include <sys/socket.h>
int test_main(int argc, char *argv[]);
ssize_t test_read(int fd, void *buf, size_t len);
int test_socket(int domain, int type, int protocol);
int test_connect(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
int test_getpid(void);
int test_printf(const char *format, ...);
int test_chdir(const char *path);
#define main test_main
#define cli_read test_read
#define socket test_socket
#define connect test_connect
#define getpid test_getpid
#define printf test_printf
#define chdir test_chdir
#include "../lightning-cli.c"
#undef main
/* AUTOGENERATED MOCKS START */
/* AUTOGENERATED MOCKS END */
int test_socket(int domain UNUSED, int type UNUSED, int protocol UNUSED)
{
/* We give a real fd, as it writes to it */
return open("/dev/null", O_WRONLY);
}
int test_connect(int sockfd UNUSED, const struct sockaddr *addr UNUSED,
socklen_t addrlen UNUSED)
{
return 0;
}
int test_getpid(void)
{
return 9999;
}
int test_printf(const char *fmt UNUSED, ...)
{
return 0;
}
int test_chdir(const char *path)
{
return 0;
}
static char *response;
static size_t response_off, max_read_return;
ssize_t test_read(int fd UNUSED, void *buf, size_t len)
{
if (len > max_read_return)
len = max_read_return;
if (len > strlen(response + response_off))
len = strlen(response + response_off);
memcpy(buf, response + response_off, len);
response_off += len;
return len;
}
/* Simulate a real log file I captured */
#define NUM_ENTRIES (137772/2)
#define HEADER "{ \"jsonrpc\": \"2.0\",\n" \
" \"id\": \"cli:test#9999\",\n" \
" \"result\" : {\n" \
" \"creation_time\" : \"1515999039.806099043\",\n" \
" \"bytes_used\" : 10787759,\n" \
" \"bytes_max\" : 20971520,\n" \
" \"log\" : [\n"
#define LOG_ENTRY \
" {\"type\": \"SKIPPED\", \"num_skipped\": 22},\n" \
" {\"type\": \"DEBUG\", \"time\": \"241693.051558854\", \"source\": \"lightning_gossipd(14581):\", \"log\": \"TRACE: nonlocal_gossip_broadcast_done\"},\n"
#define TAILER "] } }"
int main(int argc UNUSED, char *argv[])
{
common_setup(argv[0]);
char *fake_argv[] = { argv[0], "--lightning-dir=/tmp/", "test", "-N", "none", NULL };
/* sizeof() is an overestimate, but we don't care. */
response = tal_arr(NULL, char,
sizeof(HEADER)
+ sizeof(LOG_ENTRY) * NUM_ENTRIES
+ sizeof(TAILER));
strcpy(response, HEADER);
response_off = strlen(HEADER);
/* Append a huge log */
for (size_t i = 0; i < NUM_ENTRIES; i++) {
memcpy(response + response_off, LOG_ENTRY, sizeof(LOG_ENTRY)-1);
response_off += sizeof(LOG_ENTRY)-1;
}
memcpy(response + response_off, TAILER, sizeof(TAILER)-1);
response_off += sizeof(TAILER)-1;
response[response_off++] = '\0';
assert(strlen(response) == response_off - 1);
assert(response_off < tal_count(response));
response_off = 0;
max_read_return = -1;
assert(test_main(5, fake_argv) == 0);
tal_free(response);
common_shutdown();
return 0;
}