#!/bin/sh

. ../support/simple_eval_tools.sh

HEADER com2sec6 directive

SKIPIFNOT NETSNMP_TRANSPORT_UDPIPV6_DOMAIN
SKIPIF NETSNMP_NO_DEBUGGING

#
# Begin test
#

# 601a Test missing CONTEXT
CONFIGAGENT 'com2sec6 -Cn'
# 601b Test empty CONTEXT
CONFIGAGENT 'com2sec6 -Cn ""'
# 601c Test overlong CONTEXT (33 chars)
CONFIGAGENT 'com2sec6 -Cn 123456789012345678901234567890123'

# 602a Test missing secName
CONFIGAGENT 'com2sec6'
# 602b Test empty secName
CONFIGAGENT 'com2sec6 ""'
# 602c Test overlong secName (33 chars)
CONFIGAGENT 'com2sec6 123456789012345678901234567890123'
# 602d Test valid context and missing secName
CONFIGAGENT 'com2sec6 -Cn 12345678901234567890123456789012'
# 602e Test valid context and empty secName
CONFIGAGENT 'com2sec6 -Cn 12345678901234567890123456789012 ""'

# 603a Test missing network address
CONFIGAGENT 'com2sec6 t603a'
# 603b Test empty network address
CONFIGAGENT 'com2sec6 t603b ""'
# 603c Test forbidden value
CONFIGAGENT 'com2sec6 t603c NETWORK'

# 604a Test missing COMMUNITY
CONFIGAGENT 'com2sec6 t604a default'
# 604b 'Error: empty COMMUNITY parameter'
CONFIGAGENT 'com2sec6 t604b default ""'
# 604c Test overlong COMMUNITY
CONFIGAGENT 'com2sec6 t604c default 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567'
# 604d Test barely valid community
CONFIGAGENT 'com2sec6 t604d default 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456'
# 604e Test forbidden value
CONFIGAGENT 'com2sec6 t604e default COMMUNITY'

# 605a Test 'default' configuration
CONFIGAGENT 'com2sec6 t605a default c605a'
# 605b Test ip address configuration
CONFIGAGENT 'com2sec6 t605b aa00:: c605b'
# 605c Test valid numeric mask
CONFIGAGENT 'com2sec6 t605c aa00::/8 c605c'
# 605d Test invalid numeric mask (too big)
CONFIGAGENT 'com2sec6 t605d aa00::/129 c605d'
# 605e Test invalid numeric mask (negative)
CONFIGAGENT 'com2sec6 t605e aa00::/-1 c605e'
# 605f Test valid ip address mask
CONFIGAGENT 'com2sec6 t605f aa00::/ff00:: c605f'
# 605g Test invalid ip address mask
CONFIGAGENT 'com2sec6 t605g aa00::/fffff:: c605g'
# 605h Test invalid ip address mask
CONFIGAGENT 'com2sec6 t605h aa00::/gg00:: c605h'
# 605i Test address with 1 bits not covered by the mask
CONFIGAGENT 'com2sec6 t605i aa00::/0ff0:: c605i'

# 606a Test maximally long address/mask
CONFIGAGENT 'com2sec6 t606a ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff c606a'

# 607a Test non existant host name
CONFIGAGENT 'com2sec6 t607a no.such.address. c607a'
# 607b Test maximally long host name/mask
CONFIGAGENT 'com2sec6 t607b a23456789012345678901234567890123456789012345678901234567890123.a23456789012345678901234567890123456789012345678901234567890123.a23456789012345678901234567890123456789012345678901234567890123.a234567890123456789012345678901234567890123456789012345678901./ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff c607b'

# 608 Lookup tests, require network access
# 608a Test lookup returning a single host
CONFIGAGENT 'com2sec6 t608a oneAAAA.net-snmp.org c608a'
# 608b Test lookup returning multiple hosts
CONFIGAGENT 'com2sec6 t608b twoAAAA.net-snmp.org c608b'

# Default agent setup
CONFIGAGENT "[snmp] persistentdir $SNMP_TMP_PERSISTENTDIR"
# Dummy config to prevent the basic_setup warning
CONFIGAGENT 'rocommunity public 127.0.0.0/8'

AGENT_FLAGS='-Dnetsnmp_udp_parse_security,netsnmp_udp6_parse_security,netsnmp_unix_parse_security'

STARTAGENT

SAVECHECKAGENT() {
    CHECKAGENT "$@"
    if [ "x$return_value" != "x0" ] ; then
        FINISHED
    fi
}

# 601
SAVECHECKAGENT 'line 1: Error: missing CONTEXT_NAME parameter'
SAVECHECKAGENT 'line 2: Error: missing NAME parameter'
SAVECHECKAGENT 'line 3: Error: context name too long'
# 602
CHECKAGENTCOUNT atleastone 'line 4: Error: Blank line following com2sec6 token.'
SAVECHECKAGENT 'line 5: Error: empty NAME parameter'
SAVECHECKAGENT 'line 6: Error: security name too long'
SAVECHECKAGENT 'line 7: Error: missing NAME parameter'
SAVECHECKAGENT 'line 8: Error: empty NAME parameter'
# 603
SAVECHECKAGENT 'line 9: Error: missing SOURCE parameter'
SAVECHECKAGENT 'line 10: Error: empty SOURCE parameter'
SAVECHECKAGENT 'line 11: Error: example config NETWORK not properly configured'
# 604
SAVECHECKAGENT 'line 12: Error: missing COMMUNITY parameter'
SAVECHECKAGENT 'line 13: Error: empty COMMUNITY parameter'
SAVECHECKAGENT 'line 14: Error: community name too long'
SAVECHECKAGENT '<"1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456", ::/::> => "t604d"'
SAVECHECKAGENT 'line 16: Error: example config COMMUNITY not properly configured'
# 605
SAVECHECKAGENT '<"c605a", ::/::> => "t605a"'
SAVECHECKAGENT '<"c605b", aa00::/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff> => "t605b"'
SAVECHECKAGENT '<"c605c", aa00::/ff00::> => "t605c"'
SAVECHECKAGENT 'line 20: Error: bad mask length'
SAVECHECKAGENT 'line 21: Error: bad mask length'
SAVECHECKAGENT '<"c605f", aa00::/ff00::> => "t605f"'
SAVECHECKAGENT 'line 23: Error: bad mask'
SAVECHECKAGENT 'line 24: Error: bad mask'
SAVECHECKAGENT 'line 25: Error: source/mask mismatch'
# 606
SAVECHECKAGENT '<"c606a", ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff> => "t606a"'
# 607
SAVECHECKAGENT 'line 27: Error:'
SAVECHECKAGENT 'line 28: Error:'

# 608
CHECKAGENT '<"c608a"'
if [ "$snmp_last_test_result" -eq 0 ] ; then
  CHECKAGENT 'line 29: Error:'
  errnum=`expr $errnum - 1`
  if [ "$snmp_last_test_result" -ne 1 ] ; then
    FINISHED
  fi
elif [ "$snmp_last_test_result" -ne 1 ] ; then
  FINISHED
fi

CHECKAGENTCOUNT atleastone '<"c608b"'
if [ "$snmp_last_test_result" -eq 0 ] ; then
  CHECKAGENT 'line 30: Error:'
  if [ "$snmp_last_test_result" -eq 1 ] ; then
    errnum=`expr $errnum - 1`
  fi
fi

FINISHED
