# Tests Makefile.am for utun - all tests with new ll_queue library # All available tests (check_PROGRAMS runs via automake check-TESTS) check_PROGRAMS = \ test_etcp_crypto \ test_etcp_two_instances \ test_etcp_simple_traffic \ test_ipv6_sockets \ test_etcp_minimal \ test_etcp_100_packets \ test_etcp_reconnect \ test_pkt_normalizer_etcp \ test_pkt_normalizer_standalone \ test_etcp_api \ test_ll_queue \ test_serialize \ test_intensive_memory_pool \ test_memory_pool_and_config \ test_packet_dump \ test_u_async_comprehensive \ test_u_async_performance \ test_u_async_timeouts \ test_debug_categories \ test_config_debug \ test_route_lib \ test_bgp_route_exchange \ test_etcp_ping \ test_route_ping \ test_nat_detection \ test_nat_engine \ test_nat_transport \ test_nat_stress \ test_etcp_reinit_inflight \ test_tcp_proxy \ test_etcp_router \ test_remote_proxy \ test_udp_proxy \ test_icmp_proxy \ test_radix \ test_route6_lib \ bench_timeout_heap \ bench_uasync_timeouts # Долгие тесты: запускаются только вручную, не включаются в make check # test_etcp_congestion — 25+ секунд, congestion control simulation # test_tcp_proxy_remote — 2-node TCP через etcp, требует fix g_tcp_proxy singleton noinst_PROGRAMS = test_etcp_congestion # test_crypto and test_ecc_encrypt only needed for TinyCrypt (not when using OpenSSL) if USE_OPENSSL else check_PROGRAMS += test_crypto test_ecc_encrypt endif # Basic includes AM_CFLAGS = -g -I$(top_srcdir)/src -I$(top_srcdir)/lib -I$(top_srcdir)/tinycrypt/lib/include -I$(top_srcdir)/tinycrypt/lib/source # TinyCrypt source files TINYCRYPT_SRCDIR = $(top_srcdir)/tinycrypt/lib/source # TinyCrypt object files (built by src/Makefile.am with utun- prefix) TINYCRYPT_OBJS = \ $(top_builddir)/src/utun-aes_encrypt.o \ $(top_builddir)/src/utun-aes_decrypt.o \ $(top_builddir)/src/utun-ccm_mode.o \ $(top_builddir)/src/utun-cmac_mode.o \ $(top_builddir)/src/utun-ctr_mode.o \ $(top_builddir)/src/utun-ecc.o \ $(top_builddir)/src/utun-ecc_dh.o \ $(top_builddir)/src/utun-ecc_dsa.o \ $(top_builddir)/src/utun-sha256.o \ $(top_builddir)/src/utun-ecc_platform_specific.o \ $(top_builddir)/src/utun-utils.o # Secure channel and CRC objects (built in src directory) SECURE_CHANNEL_OBJS = $(top_builddir)/src/utun-secure_channel.o $(top_builddir)/src/utun-crc32.o # ETCP core objects ETCP_CORE_OBJS = \ $(top_builddir)/src/utun-etcp.o \ $(top_builddir)/src/utun-etcp_connections.o \ $(top_builddir)/src/utun-etcp_loadbalancer.o \ $(top_builddir)/src/utun-pkt_normalizer.o \ $(top_builddir)/src/utun-etcp_api.o \ $(top_builddir)/src/utun-etcp_debug.o \ $(top_builddir)/src/utun-etcp_dump.o # Platform-specific TUN objects if OS_WINDOWS TUN_PLATFORM_OBJ = $(top_builddir)/src/utun-tun_windows.o else if OS_FREEBSD TUN_PLATFORM_OBJ = $(top_builddir)/src/utun-tun_freebsd.o else TUN_PLATFORM_OBJ = $(top_builddir)/src/utun-tun_linux.o endif endif # Full ETCP objects ETCP_FULL_OBJS = \ $(top_builddir)/src/utun-config_parser.o \ $(top_builddir)/src/utun-config_updater.o \ $(top_builddir)/src/utun-route_lib.o \ $(top_builddir)/src/utun-route_bgp.o \ $(top_builddir)/src/utun-route_ping.o \ $(top_builddir)/src/utun-route_node.o \ $(top_builddir)/src/utun-route_connectivity.o \ $(top_builddir)/src/utun-routing.o \ $(top_builddir)/src/utun-tun_if.o \ $(top_builddir)/src/utun-tun_route.o \ $(top_builddir)/src/utun-packet_dump.o \ $(top_builddir)/src/utun-firewall.o \ $(top_builddir)/src/utun-eim_nat.o \ $(top_builddir)/src/utun-nat_transport.o \ $(top_builddir)/src/utun-control_server.o \ $(TUN_PLATFORM_OBJ) \ $(top_builddir)/src/utun-utun_instance.o \ $(top_builddir)/src/utun-tcp_proxy.o \ $(top_builddir)/src/utun-etcp_router.o \ $(top_builddir)/src/utun-remote_proxy.o \ $(top_builddir)/src/utun-udp_proxy.o \ $(top_builddir)/src/utun-icmp_proxy.o \ $(top_builddir)/src/lwip_tcp/utun-lwip_pbuf.o \ $(top_builddir)/src/lwip_tcp/utun-lwip_tcp.o \ $(top_builddir)/src/lwip_tcp/utun-lwip_tcp_in.o \ $(top_builddir)/src/lwip_tcp/utun-lwip_tcp_out.o \ $(ETCP_CORE_OBJS) # Windows-specific libraries (advapi32 for CryptGenRandom, ws2_32 for sockets) if OS_WINDOWS WIN_LIBS = -lws2_32 -liphlpapi -ladvapi32 -lbcrypt -ldbghelp else WIN_LIBS = endif # Common libraries (libuasync.a from lib directory) COMMON_LIBS = $(top_builddir)/lib/libuasync.a -lpthread $(WIN_LIBS) # Crypto libraries (conditional) if USE_OPENSSL CRYPTO_LIBS = -lcrypto TINYCRYPT_BUILT = else CRYPTO_LIBS = $(TINYCRYPT_OBJS) TINYCRYPT_BUILT = tinycrypt-objects endif # Tests run via check-local (with timing and colored output), not TESTS # Build TinyCrypt objects as a group (only when not using OpenSSL) if USE_OPENSSL else tinycrypt-objects: $(TINYCRYPT_OBJS) endif # Ensure TinyCrypt objects are built before tests that need them if USE_OPENSSL BUILT_SOURCES = else BUILT_SOURCES = $(TINYCRYPT_OBJS) $(TINYCRYPT_OBJS): $(top_builddir)/src/utun @$(MAKE) -C $(top_builddir)/src tinycrypt-objects endif # Test definitions test_etcp_crypto_SOURCES = test_etcp_crypto.c test_etcp_crypto_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/lib -I$(top_srcdir)/tinycrypt/lib/include -I$(top_srcdir)/tinycrypt/lib/source test_etcp_crypto_LDADD = $(SECURE_CHANNEL_OBJS) $(CRYPTO_LIBS) $(COMMON_LIBS) if USE_OPENSSL else test_crypto_SOURCES = test_crypto.c test_crypto_CFLAGS = -I$(top_srcdir)/tinycrypt/lib/include -I$(top_srcdir)/tinycrypt/lib/source -I$(top_srcdir)/lib test_crypto_LDADD = $(TINYCRYPT_OBJS) $(COMMON_LIBS) endif test_etcp_two_instances_SOURCES = test_etcp_two_instances.c test_etcp_two_instances_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/lib -I$(top_srcdir)/tinycrypt/lib/include -I$(top_srcdir)/tinycrypt/lib/source test_etcp_two_instances_LDADD = $(ETCP_FULL_OBJS) $(SECURE_CHANNEL_OBJS) $(CRYPTO_LIBS) $(COMMON_LIBS) test_etcp_simple_traffic_SOURCES = test_etcp_simple_traffic.c test_etcp_simple_traffic_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/lib -I$(top_srcdir)/tinycrypt/lib/include -I$(top_srcdir)/tinycrypt/lib/source test_etcp_simple_traffic_LDADD = $(ETCP_FULL_OBJS) $(SECURE_CHANNEL_OBJS) $(CRYPTO_LIBS) $(COMMON_LIBS) test_ipv6_sockets_SOURCES = test_ipv6_sockets.c test_ipv6_sockets_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/lib -I$(top_srcdir)/tinycrypt/lib/include -I$(top_srcdir)/tinycrypt/lib/source test_ipv6_sockets_LDADD = $(ETCP_FULL_OBJS) $(SECURE_CHANNEL_OBJS) $(CRYPTO_LIBS) $(COMMON_LIBS) test_etcp_congestion_SOURCES = test_etcp_congestion.c test_etcp_congestion_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/lib -I$(top_srcdir)/tinycrypt/lib/include -I$(top_srcdir)/tinycrypt/lib/source test_etcp_congestion_LDADD = $(top_builddir)/src/utun-dummynet.o $(ETCP_FULL_OBJS) $(SECURE_CHANNEL_OBJS) $(CRYPTO_LIBS) $(COMMON_LIBS) test_etcp_reinit_inflight_SOURCES = test_etcp_reinit_inflight.c test_etcp_reinit_inflight_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/lib -I$(top_srcdir)/tinycrypt/lib/include -I$(top_srcdir)/tinycrypt/lib/source test_etcp_reinit_inflight_LDADD = $(top_builddir)/src/utun-dummynet.o $(ETCP_FULL_OBJS) $(SECURE_CHANNEL_OBJS) $(CRYPTO_LIBS) $(COMMON_LIBS) test_tcp_proxy_SOURCES = test_tcp_proxy.c test_tcp_proxy_LDADD = $(ETCP_FULL_OBJS) $(SECURE_CHANNEL_OBJS) $(CRYPTO_LIBS) $(COMMON_LIBS) test_etcp_router_SOURCES = test_etcp_router.c test_etcp_router_LDADD = $(ETCP_FULL_OBJS) $(SECURE_CHANNEL_OBJS) $(CRYPTO_LIBS) $(COMMON_LIBS) test_remote_proxy_SOURCES = test_remote_proxy.c test_remote_proxy_LDADD = $(ETCP_FULL_OBJS) $(SECURE_CHANNEL_OBJS) $(CRYPTO_LIBS) $(COMMON_LIBS) test_udp_proxy_SOURCES = test_udp_proxy.c test_udp_proxy_LDADD = $(ETCP_FULL_OBJS) $(SECURE_CHANNEL_OBJS) $(CRYPTO_LIBS) $(COMMON_LIBS) test_icmp_proxy_SOURCES = test_icmp_proxy.c test_icmp_proxy_LDADD = $(ETCP_FULL_OBJS) $(SECURE_CHANNEL_OBJS) $(CRYPTO_LIBS) $(COMMON_LIBS) test_radix_SOURCES = test_radix.c test_radix_CFLAGS = -I$(top_srcdir)/lib test_radix_LDADD = $(COMMON_LIBS) test_route6_lib_SOURCES = test_route6_lib.c test_route6_lib_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/lib test_route6_lib_LDADD = $(top_builddir)/src/utun-route6_lib.o \ $(top_builddir)/src/utun-route_node.o \ $(top_builddir)/src/utun-etcp_debug.o \ $(COMMON_LIBS) test_etcp_minimal_LDADD = $(ETCP_FULL_OBJS) $(SECURE_CHANNEL_OBJS) $(CRYPTO_LIBS) $(COMMON_LIBS) test_etcp_100_packets_SOURCES = test_etcp_100_packets.c test_etcp_100_packets_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/lib -I$(top_srcdir)/tinycrypt/lib/include -I$(top_srcdir)/tinycrypt/lib/source test_etcp_100_packets_LDADD = $(ETCP_FULL_OBJS) $(SECURE_CHANNEL_OBJS) $(CRYPTO_LIBS) $(COMMON_LIBS) test_etcp_reconnect_SOURCES = test_etcp_reconnect.c test_etcp_reconnect_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/lib -I$(top_srcdir)/tinycrypt/lib/include -I$(top_srcdir)/tinycrypt/lib/source test_etcp_reconnect_LDADD = $(ETCP_FULL_OBJS) $(SECURE_CHANNEL_OBJS) $(CRYPTO_LIBS) $(COMMON_LIBS) test_pkt_normalizer_etcp_SOURCES = test_pkt_normalizer_etcp.c test_pkt_normalizer_etcp_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/lib -I$(top_srcdir)/tinycrypt/lib/include -I$(top_srcdir)/tinycrypt/lib/source test_pkt_normalizer_etcp_LDADD = $(ETCP_FULL_OBJS) $(SECURE_CHANNEL_OBJS) $(CRYPTO_LIBS) $(COMMON_LIBS) test_pkt_normalizer_standalone_SOURCES = test_pkt_normalizer_standalone.c test_pkt_normalizer_standalone_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/lib -I$(top_srcdir)/tinycrypt/lib/include -I$(top_srcdir)/tinycrypt/lib/source test_pkt_normalizer_standalone_LDADD = $(ETCP_FULL_OBJS) $(SECURE_CHANNEL_OBJS) $(CRYPTO_LIBS) $(COMMON_LIBS) test_etcp_api_SOURCES = test_etcp_api.c test_etcp_api_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/lib -I$(top_srcdir)/tinycrypt/lib/include -I$(top_srcdir)/tinycrypt/lib/source test_etcp_api_LDADD = $(ETCP_FULL_OBJS) $(SECURE_CHANNEL_OBJS) $(CRYPTO_LIBS) $(COMMON_LIBS) test_etcp_ping_SOURCES = test_etcp_ping.c test_etcp_ping_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/lib -I$(top_srcdir)/tinycrypt/lib/include -I$(top_srcdir)/tinycrypt/lib/source test_etcp_ping_LDADD = $(ETCP_FULL_OBJS) $(SECURE_CHANNEL_OBJS) $(CRYPTO_LIBS) $(COMMON_LIBS) test_route_ping_SOURCES = test_route_ping.c test_route_ping_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/lib -I$(top_srcdir)/tinycrypt/lib/include -I$(top_srcdir)/tinycrypt/lib/source test_route_ping_LDADD = $(ETCP_FULL_OBJS) $(SECURE_CHANNEL_OBJS) $(CRYPTO_LIBS) $(COMMON_LIBS) test_nat_detection_SOURCES = test_nat_detection.c test_nat_detection_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/lib -I$(top_srcdir)/tinycrypt/lib/include -I$(top_srcdir)/tinycrypt/lib/source test_nat_detection_LDADD = $(ETCP_FULL_OBJS) $(SECURE_CHANNEL_OBJS) $(CRYPTO_LIBS) $(COMMON_LIBS) test_nat_engine_SOURCES = test_nat_engine.c test_nat_engine_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/lib test_nat_engine_LDADD = $(top_builddir)/src/utun-eim_nat.o $(top_builddir)/src/utun-config_parser.o $(COMMON_LIBS) test_nat_transport_SOURCES = test_nat_transport.c test_nat_transport_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/lib -I$(top_srcdir)/tinycrypt/lib/include -I$(top_srcdir)/tinycrypt/lib/source test_nat_transport_LDADD = $(ETCP_FULL_OBJS) $(SECURE_CHANNEL_OBJS) $(CRYPTO_LIBS) $(COMMON_LIBS) test_nat_stress_SOURCES = test_nat_stress.c test_nat_stress_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/lib test_nat_stress_LDADD = $(top_builddir)/src/utun-eim_nat.o $(top_builddir)/src/utun-config_parser.o $(COMMON_LIBS) test_ll_queue_SOURCES = test_ll_queue.c test_ll_queue_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/lib test_ll_queue_LDADD = $(COMMON_LIBS) test_serialize_SOURCES = test_serialize.c test_serialize_CFLAGS = -I$(top_srcdir)/lib test_serialize_LDADD = $(COMMON_LIBS) if USE_OPENSSL else test_ecc_encrypt_SOURCES = test_ecc_encrypt.c test_ecc_encrypt_CFLAGS = -I$(top_srcdir)/tinycrypt/lib/include -I$(top_srcdir)/tinycrypt/lib/source -I$(top_srcdir)/lib test_ecc_encrypt_LDADD = $(SECURE_CHANNEL_OBJS) $(CRYPTO_LIBS) $(COMMON_LIBS) -lcrypto endif test_intensive_memory_pool_SOURCES = test_intensive_memory_pool.c test_intensive_memory_pool_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/lib test_intensive_memory_pool_LDADD = $(COMMON_LIBS) test_memory_pool_and_config_SOURCES = test_memory_pool_and_config.c test_memory_pool_and_config_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/lib test_memory_pool_and_config_LDADD = $(COMMON_LIBS) test_packet_dump_SOURCES = test_packet_dump.c test_packet_dump_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/lib test_packet_dump_LDADD = $(COMMON_LIBS) test_u_async_comprehensive_SOURCES = test_u_async_comprehensive.c test_u_async_comprehensive_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/lib test_u_async_comprehensive_LDADD = $(COMMON_LIBS) test_u_async_performance_SOURCES = test_u_async_performance.c test_u_async_performance_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/lib test_u_async_performance_LDADD = $(COMMON_LIBS) test_u_async_timeouts_SOURCES = test_u_async_timeouts.c test_u_async_timeouts_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/lib test_u_async_timeouts_LDADD = $(COMMON_LIBS) test_debug_categories_SOURCES = test_debug_categories.c test_debug_categories_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/lib test_debug_categories_LDADD = $(COMMON_LIBS) test_config_debug_SOURCES = test_config_debug.c test_config_debug_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/lib test_config_debug_LDADD = $(top_builddir)/src/utun-config_parser.o $(COMMON_LIBS) test_route_lib_SOURCES = test_route_lib.c test_route_lib_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/lib -I$(top_srcdir)/src -I$(top_srcdir)/tinycrypt/lib/include test_route_lib_LDADD = $(top_builddir)/src/utun-route_lib.o $(top_builddir)/src/utun-route_node.o $(top_builddir)/src/utun-etcp_debug.o $(COMMON_LIBS) test_bgp_route_exchange_SOURCES = test_bgp_route_exchange.c test_bgp_route_exchange_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/lib -I$(top_srcdir)/tinycrypt/lib/include -I$(top_srcdir)/tinycrypt/lib/source test_bgp_route_exchange_LDADD = $(top_builddir)/src/utun-dummynet.o $(ETCP_FULL_OBJS) $(SECURE_CHANNEL_OBJS) $(CRYPTO_LIBS) $(COMMON_LIBS) # test_dummynet временно исключен (медленный) # test_dummynet_SOURCES = test_dummynet.c # test_dummynet_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/lib # test_dummynet_LDADD = $(top_builddir)/src/utun-dummynet.o $(COMMON_LIBS) bench_timeout_heap_SOURCES = bench_timeout_heap.c bench_timeout_heap_CFLAGS = -I$(top_srcdir)/lib bench_timeout_heap_LDADD = $(COMMON_LIBS) bench_uasync_timeouts_SOURCES = bench_uasync_timeouts.c bench_uasync_timeouts_CFLAGS = -I$(top_srcdir)/lib bench_uasync_timeouts_LDADD = $(COMMON_LIBS) # Build tinycrypt objects before tests that need them BUILT_SOURCES = $(TINYCRYPT_BUILT) # Copy test configs to build directory (tests run from build/tests/) all-local: copy-test-configs copy-test-configs: $(check_PROGRAMS) @for conf in $(srcdir)/test_*.conf $(srcdir)/test_*.json; do \ if test -f "$$conf"; then \ cp -f "$$conf" "$(top_builddir)/tests/" 2>/dev/null || true; \ fi; \ done 2>/dev/null || true # Clean clean-local: -rm -f $(check_PROGRAMS) -rm -f $(top_builddir)/tests/test_*.conf $(top_builddir)/tests/test_*.json 2>/dev/null || true -rm -rf $(top_builddir)/tests/logs 2>/dev/null || true # Test logs directory TEST_LOG_DIR = $(top_builddir)/tests/logs # Custom check target that runs tests and saves logs to files check-local: $(check_PROGRAMS) @$(MKDIR_P) $(TEST_LOG_DIR); \ G='\033[0;32m'; R='\033[0;31m'; Y='\033[0;33m'; N='\033[0m'; \ passed=0; \ failed=0; \ skipped=0; \ total=0; \ failed_tests=""; \ for test in $(check_PROGRAMS); do \ total=$$((total + 1)); \ logfile="$(TEST_LOG_DIR)/$$test.log"; \ if test -f "./$$test"; then \ start=$$(date +%s%N); \ if "./$$test" > "$$logfile" 2>&1; then \ end=$$(date +%s%N); \ elapsed_ms=$$(( (end - start) / 1000000 )); \ printf "$${G}[PASS]$${N} %s (%sms)\n" "$$test" "$$elapsed_ms"; \ passed=$$((passed + 1)); \ else \ end=$$(date +%s%N); \ elapsed_ms=$$(( (end - start) / 1000000 )); \ printf "$${R}[FAIL]$${N} %s (%sms) (see %s)\n" "$$test" "$$elapsed_ms" "$$logfile"; \ failed=$$((failed + 1)); \ if test -z "$$failed_tests"; then \ failed_tests="$$test"; \ else \ failed_tests="$$failed_tests $$test"; \ fi; \ fi; \ else \ printf "$${Y}[SKIP]$${N} %s (not built)\n" "$$test"; \ skipped=$$((skipped + 1)); \ fi; \ done; \ echo ""; \ echo "=========================================="; \ echo "Test Results: $$passed passed, $$failed failed, $$skipped skipped ($$total total)"; \ echo "Log directory: $(TEST_LOG_DIR)"; \ echo "=========================================="; \ if test $$failed -gt 0; then \ echo ""; \ echo "Failed tests: $$failed_tests"; \ echo "Run 'cat $(TEST_LOG_DIR)/.log' to see details"; \ exit 1; \ fi