SEDSnet 4.2.4

A memory safe, no_std-capable networking stack with routing, discovery, reliability, and Rust/C/Python bindings.
Documentation
import importlib.util
import unittest
from pathlib import Path
spec = importlib.util.spec_from_file_location("sedsnet_build", Path(__file__).parents[1] / "build.py")
build = importlib.util.module_from_spec(spec)
spec.loader.exec_module(build)
class BuildCliTests(unittest.TestCase):
    def test_cargo_style_embedded_command(self):
        args = build.parse_args(["build", "--release", "--target", "thumbv7em-none-eabihf", "--features", "embedded,compact-packet-store", "--device-id", "RF", "--max-queue-budget", "8192", "--env", "RUSTFLAGS=-C target-cpu=cortex-m4"])
        self.assertTrue(args.release)
        self.assertEqual(args.features, ["embedded", "compact-packet-store"])
        self.assertEqual(args.env_overrides["MAX_QUEUE_BUDGET"], "8192")
        self.assertEqual(args.env_overrides["RUSTFLAGS"], "-C target-cpu=cortex-m4")
    def test_tests_and_repeated_features(self):
        args = build.parse_args(["test", "--full", "--features=timesync", "--features", "timesync fair-admission"])
        self.assertEqual(args.features, ["timesync", "fair-admission"])
        self.assertTrue(args.full)
    def test_standalone_native_cmake_configures(self):
        import shutil, subprocess, tempfile
        if not shutil.which("cmake"):
            self.skipTest("CMake is not installed")
        with tempfile.TemporaryDirectory() as directory:
            result = subprocess.run(["cmake", "-S", str(Path(__file__).parents[1]), "-B", directory,
                "-DCMAKE_BUILD_TYPE=Release", "-DSEDSNET_DEVICE_IDENTIFIER=CLI_TEST",
                "-DSEDSNET_MAX_QUEUE_BUDGET=8192", "-DSEDSNET_ENV_QUEUE_GROW_STEP=1.25"],
                text=True, capture_output=True)
            self.assertEqual(result.returncode, 0, result.stdout + result.stderr)
            self.assertIn("build --release --device-id=CLI_TEST --max-queue-budget=8192", result.stdout)
            self.assertIn("--env QUEUE_GROW_STEP=1.25", result.stdout)

    def test_default_build(self):
        self.assertEqual(build.parse_args([]).command, "build")
        self.assertTrue(build.parse_args(["--release"]).release)
    def test_rejects_invalid_or_obsolete_options(self):
        for args in [["release"], ["embedded"], ["build", "--full"], ["--max-queue-budget", "0"], ["--env", "BAD KEY=x"], ["--features", "unknown"], ["--features", "embedded,python"]]:
            with self.subTest(args=args), self.assertRaises(SystemExit): build.parse_args(args)
if __name__ == "__main__": unittest.main()