defmodule SnmpKit.SNMPTest do use ExUnit.Case, async: true alias SnmpKit.SNMP # Invalid target that will fail quickly @invalid_target %{host: "240.0.0.1", port: 161, version: :v2c, community: "public"} @test_oid "1.3.6.1.2.1.1.1.0" @timeout 1 describe "get_bulk!/3" do test "raises on error" do # Test both arities by calling with and without opts assert_raise RuntimeError, ~r/get_bulk! failed/, fn -> SNMP.get_bulk!(@invalid_target, @test_oid) end assert_raise RuntimeError, ~r/get_bulk! failed/, fn -> SNMP.get_bulk!(@invalid_target, @test_oid, timeout: @timeout) end end end describe "bulk_walk!/3" do test "raises on error" do # Test both arities assert_raise RuntimeError, ~r/bulk_walk! failed/, fn -> SNMP.bulk_walk!(@invalid_target, @test_oid) end assert_raise RuntimeError, ~r/bulk_walk! failed/, fn -> SNMP.bulk_walk!(@invalid_target, @test_oid, timeout: @timeout) end end end describe "delegated functions" do # Call each delegate to ensure 100% coverage (with fast 1ms timeout) test "all core operations delegate correctly" do assert {:error, _} = SNMP.get(@invalid_target, @test_oid) assert {:error, _} = SNMP.get(@invalid_target, @test_oid, timeout: @timeout) assert {:error, _} = SNMP.get_next(@invalid_target, @test_oid) assert {:error, _} = SNMP.get_next(@invalid_target, @test_oid, timeout: @timeout) assert {:error, _} = SNMP.set(@invalid_target, @test_oid, "test") assert {:error, _} = SNMP.set(@invalid_target, @test_oid, "test", timeout: @timeout) end test "all bulk operations delegate correctly" do assert {:error, _} = SNMP.get_bulk(@invalid_target, @test_oid) assert {:error, _} = SNMP.get_bulk(@invalid_target, @test_oid, timeout: @timeout) assert {:error, _} = SNMP.bulk_walk(@invalid_target, @test_oid) assert {:error, _} = SNMP.bulk_walk(@invalid_target, @test_oid, timeout: @timeout) end test "all walk operations delegate correctly" do assert {:error, _} = SNMP.walk(@invalid_target, @test_oid) assert {:error, _} = SNMP.walk(@invalid_target, @test_oid, timeout: @timeout) assert {:error, _} = SNMP.walk_table(@invalid_target, @test_oid) assert {:error, _} = SNMP.walk_table(@invalid_target, @test_oid, timeout: @timeout) assert {:error, _} = SNMP.get_column(@invalid_target, @test_oid, 1) assert {:error, _} = SNMP.get_column(@invalid_target, @test_oid, 1, timeout: @timeout) end test "all pretty operations delegate correctly" do assert {:error, _} = SNMP.get_pretty(@invalid_target, @test_oid) assert {:error, _} = SNMP.get_pretty(@invalid_target, @test_oid, timeout: @timeout) assert {:error, _} = SNMP.walk_pretty(@invalid_target, @test_oid) assert {:error, _} = SNMP.walk_pretty(@invalid_target, @test_oid, timeout: @timeout) assert {:error, _} = SNMP.bulk_pretty(@invalid_target, @test_oid) assert {:error, _} = SNMP.bulk_pretty(@invalid_target, @test_oid, timeout: @timeout) assert {:error, _} = SNMP.bulk_walk_pretty(@invalid_target, @test_oid) assert {:error, _} = SNMP.bulk_walk_pretty(@invalid_target, @test_oid, timeout: @timeout) end test "async operations delegate correctly" do # async operations may return Task references, errors, or other values # Just verify they execute without crashing SNMP.get_async(@invalid_target, @test_oid) SNMP.get_async(@invalid_target, @test_oid, timeout: @timeout) SNMP.get_bulk_async(@invalid_target, @test_oid) SNMP.get_bulk_async(@invalid_target, @test_oid, timeout: @timeout) end end end