Files
ESP32_Serial_Swiss_Army_Knife/tests/mdns_phase12/run.py
T
Commander1024 8902b25d78 Complete Phase 12 dual-stack networking
Add IPv6-aware Wi-Fi state, HTTPS/SSH listeners, mDNS service
reconciliation, and browser Wi-Fi administration.

Include a guarded build-local fix for mDNS 1.12.0 membership handling,
focused regression suites, and Phase 12 acceptance documentation.
2026-09-20 22:35:34 +02:00

86 lines
3.0 KiB
Python

#!/usr/bin/env python3
"""Compile the production mDNS owner against bounded host fakes; no IDF build."""
import pathlib
import subprocess
import tempfile
ROOT = pathlib.Path(__file__).resolve().parents[2]
with tempfile.TemporaryDirectory(prefix="mdns-phase12-") as tmp:
p = pathlib.Path(tmp)
(p / "freertos").mkdir()
headers = {
"esp_err.h": """#pragma once
typedef int esp_err_t;
#define ESP_OK 0
#define ESP_ERR_INVALID_ARG 1
#define ESP_ERR_INVALID_STATE 2
#define ESP_ERR_NO_MEM 3
#define ESP_ERR_NOT_FOUND 4
#define ESP_ERR_TIMEOUT 5
""",
"sdkconfig.h": """#define CONFIG_MDNS_PREDEF_NETIF_STA 1
#define CONFIG_MDNS_PREDEF_NETIF_AP 0
#define CONFIG_MDNS_PREDEF_NETIF_ETH 0
#define CONFIG_LWIP_IPV6_NUM_ADDRESSES 3
""",
"freertos/FreeRTOS.h": """#pragma once
#define portMAX_DELAY 100
#define pdTRUE 1
typedef int portMUX_TYPE;
#define portMUX_INITIALIZER_UNLOCKED 0
void fake_enter(portMUX_TYPE *);
void fake_exit(portMUX_TYPE *);
#define portENTER_CRITICAL(m) fake_enter(m)
#define portEXIT_CRITICAL(m) fake_exit(m)
""",
"freertos/semphr.h": """#pragma once
typedef void *SemaphoreHandle_t;
SemaphoreHandle_t xSemaphoreCreateMutex(void);
int xSemaphoreTake(SemaphoreHandle_t, int);
int xSemaphoreGive(SemaphoreHandle_t);
""",
"esp_timer.h": """#pragma once
#include <stdint.h>
int64_t esp_timer_get_time(void);
""",
"esp_netif.h": """#pragma once
#include <stdbool.h>
#include <stdint.h>
#include "esp_err.h"
typedef struct { int unused; } esp_netif_t;
typedef struct { uint32_t addr; } esp_ip4_addr_t;
typedef struct { uint32_t addr[4]; } esp_ip6_addr_t;
typedef struct { esp_ip4_addr_t ip; } esp_netif_ip_info_t;
esp_netif_t *esp_netif_get_handle_from_ifkey(const char *);
bool esp_netif_is_netif_up(esp_netif_t *);
esp_err_t esp_netif_get_ip_info(esp_netif_t *, esp_netif_ip_info_t *);
int esp_netif_get_all_ip6(esp_netif_t *, esp_ip6_addr_t *);
esp_err_t esp_netif_tcpip_exec(esp_err_t (*)(void *), void *);
""",
"mdns.h": """#pragma once
#include <stddef.h>
#include <stdint.h>
#include "esp_err.h"
#include "esp_netif.h"
typedef enum {
MDNS_EVENT_ENABLE_IP4 = 1 << 1, MDNS_EVENT_ENABLE_IP6 = 1 << 2,
MDNS_EVENT_DISABLE_IP4 = 1 << 5, MDNS_EVENT_DISABLE_IP6 = 1 << 6
} mdns_event_actions_t;
esp_err_t mdns_netif_action(esp_netif_t *, mdns_event_actions_t);
esp_err_t mdns_init(void);
void mdns_free(void);
esp_err_t mdns_hostname_set(const char *);
esp_err_t mdns_instance_name_set(const char *);
esp_err_t mdns_service_add(const char *, const char *, const char *, uint16_t, void *, size_t);
esp_err_t mdns_service_remove(const char *, const char *);
""",
}
for name, text in headers.items():
(p / name).write_text(text)
exe = p / "test"
subprocess.run(["cc", "-std=c11", "-Wall", "-Wextra", "-Werror", "-I", tmp,
"-I", str(ROOT / "src"), str(pathlib.Path(__file__).with_name("test.c")),
"-o", str(exe)], check=True)
for case in ("normal", "init-failure", "hostname-failure", "instance-failure"):
subprocess.run([str(exe), case], check=True)