using System.Globalization; namespace LibNftables.Tests; internal static class NativeTestSupport { internal static bool HasCapNetAdmin() { const int capNetAdminBit = 12; const ulong mask = 1UL << capNetAdminBit; try { foreach (var line in File.ReadLines("/proc/self/status")) { if (!line.StartsWith("CapEff:", StringComparison.Ordinal)) { continue; } var hex = line["CapEff:".Length..].Trim(); if (ulong.TryParse(hex, NumberStyles.AllowHexSpecifier, CultureInfo.InvariantCulture, out var value)) { return (value & mask) != 0; } } } catch { // If capability probing fails, keep tests conservative. } return false; } internal static bool TryCreateContext(out NftContext context) { try { context = new NftContext(); return true; } catch (DllNotFoundException) { context = null!; return false; } catch (TypeInitializationException ex) when (ex.InnerException is DllNotFoundException) { context = null!; return false; } catch (BadImageFormatException) { context = null!; return false; } catch (EntryPointNotFoundException) { context = null!; return false; } } }