""" Runs all unit tests for the netsnmp package.   """
# Copyright (c) 2006 Andy Gross.  See LICENSE.txt for details.

import sys
import unittest
import netsnmp
import time

class BasicTests(unittest.TestCase):
    def testFuncs(self):        
        print ""
        var = netsnmp.Varbind('sysDescr.0')
        var = netsnmp.Varbind('sysDescr','0')
        var = netsnmp.Varbind(
            '.iso.org.dod.internet.mgmt.mib-2.system.sysDescr','0')
        var = netsnmp.Varbind(
            '.iso.org.dod.internet.mgmt.mib-2.system.sysDescr.0')
        var = netsnmp.Varbind('.1.3.6.1.2.1.1.1.0')

        var = netsnmp.Varbind('.1.3.6.1.2.1.1.1','0')

        print "----------------------------------------\n"
        res = netsnmp.snmpget(var,
                              Version = 1,
                              DestHost='localhost',
                              Community='public')

        print "v1 snmpget result: ", res, "\n"

        print "v1 get var: ",  var.tag, var.iid, "=", var.val, '(',var.type,')'
        
        print "----------------------------------------\n"
        res = netsnmp.snmpgetnext(var,
                                  Version = 1,
                                  DestHost='localhost',
                                  Community='public')

        print "v1 snmpgetnext result: ", res, "\n"
                
        print "v1 getnext var: ",  var.tag, var.iid, "=", var.val, '(',var.type,')'
        
        print "----------------------------------------\n"
        var = netsnmp.Varbind('sysLocation','0', 'my new location')
        res = netsnmp.snmpset(var,
                        Version = 1,
                        DestHost='localhost',
                        Community='public')

        print "v1 snmpset result: ", res, "\n"

        print "v1 set var: ",  var.tag, var.iid, "=", var.val, '(',var.type,')'
        
        print "----------------------------------------\n"
        vars = netsnmp.VarList(netsnmp.Varbind('system'))

        print "v1 varlist walk in: "
        for var in vars:
            print "  ",var.tag, var.iid, "=", var.val, '(',var.type,')'

        res = netsnmp.snmpwalk(vars,
                               Version = 1,
                               DestHost='localhost',
                               Community='public')
        print "v1 snmpwalk result: ", res, "\n"

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(',var.type,')'
       
        
        print "----------------------------------------\n"

        print "v1 varbind walk in: "
        var = netsnmp.Varbind('system')
        res = netsnmp.snmpwalk(var,
                               Version = 1,
                               DestHost='localhost',
                               Community='public')
        print "v1 snmpwalk result (should be = orig): ", res, "\n"

        print var.tag, var.iid, "=", var.val, '(',var.type,')'
        
        print "----------------------------------------\n"
        sess = netsnmp.Session(Version=1,
                               DestHost='localhost',
                               Community='public')
        
        vars = netsnmp.VarList(netsnmp.Varbind('sysUpTime', 0),
                               netsnmp.Varbind('sysContact', 0),
                               netsnmp.Varbind('sysLocation', 0))
        vals = sess.get(vars)
        print "v1 sess.get result: ", vals, "\n"

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(',var.type,')'
       
        vals = sess.getnext(vars)
        print "v1 sess.getnext result: ", vals, "\n"

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(',var.type,')'
       
        vars = netsnmp.VarList(netsnmp.Varbind('sysUpTime'),
                               netsnmp.Varbind('sysORLastChange'),
                               netsnmp.Varbind('sysORID'),
                               netsnmp.Varbind('sysORDescr'),
                               netsnmp.Varbind('sysORUpTime'))

        vals = sess.getbulk(2, 8, vars)
        print "v1 sess.getbulk result: ", vals, "\n"

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(',var.type,')'

        print "----------------------------------------\n"

        vars = netsnmp.VarList(
            netsnmp.Varbind('sysLocation', '0', 'my newer location'))
        res = sess.set(vars)
        print "v1 sess.set result: ", res, "\n"

        print "----------------------------------------\n"
        vars = netsnmp.VarList(netsnmp.Varbind('system'))
                
        vals = sess.walk(vars)
        print "v1 sess.walk result: ", vals, "\n"
        
        for var in vars:
            print "  ",var.tag, var.iid, "=", var.val, '(',var.type,')'
            
        print "----------------------------------------\n"

        sess = netsnmp.Session(Version=2,
                               DestHost='localhost',
                               Community='public')

        sess.UseEnums = 1
        sess.UseLongNames = 1
        
        vars = netsnmp.VarList(netsnmp.Varbind('sysUpTime', 0),
                               netsnmp.Varbind('sysContact', 0),
                               netsnmp.Varbind('sysLocation', 0))
        vals = sess.get(vars)
        print "v2 sess.get result: ", vals, "\n"

        print "----------------------------------------\n"

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(',var.type,')'
        print "\n"
       
        vals = sess.getnext(vars)
        print "v2 sess.getnext result: ", vals, "\n"

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(',var.type,')'
        print "\n"
       
        print "----------------------------------------\n"

        vars = netsnmp.VarList(netsnmp.Varbind('sysUpTime'),
                               netsnmp.Varbind('sysORLastChange'),
                               netsnmp.Varbind('sysORID'),
                               netsnmp.Varbind('sysORDescr'),
                               netsnmp.Varbind('sysORUpTime'))

        vals = sess.getbulk(2, 8, vars)
        print "v2 sess.getbulk result: ", vals, "\n"

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(',var.type,')'
        print "\n"

        print "----------------------------------------\n"

        vars = netsnmp.VarList(
            netsnmp.Varbind('sysLocation','0','my even newer location'))
        
        res = sess.set(vars)
        print "v2 sess.set result: ", res, "\n"

        print "----------------------------------------\n"
        vars = netsnmp.VarList(netsnmp.Varbind('system'))
                
        vals = sess.walk(vars)
        print "v2 sess.walk result: ", vals, "\n"
        
        for var in vars:
            print "  ",var.tag, var.iid, "=", var.val, '(',var.type,')'
            
        print "----------------------------------------\n"
        sess = netsnmp.Session(Version=3,
                               DestHost='localhost',
                               SecLevel='authPriv',
                               SecName='initial',
                               PrivPass='priv_pass',
                               AuthPass='auth_pass')

        sess.UseSprintValue = 1

        vars = netsnmp.VarList(netsnmp.Varbind('sysUpTime', 0),
                               netsnmp.Varbind('sysContact', 0),
                               netsnmp.Varbind('sysLocation', 0))
        print "----------------------------------------\n"
        vals = sess.get(vars)
        print "v3 sess.get result: ", vals, "\n"
        
        for var in vars:
            print var.tag, var.iid, "=", var.val, '(',var.type,')'
        print "\n"

        print "----------------------------------------\n"
       
        vals = sess.getnext(vars)
        print "v3 sess.getnext result: ", vals, "\n"

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(',var.type,')'
        print "\n"
       
        vars = netsnmp.VarList(netsnmp.Varbind('sysUpTime'),
                               netsnmp.Varbind('sysORLastChange'),
                               netsnmp.Varbind('sysORID'),
                               netsnmp.Varbind('sysORDescr'),
                               netsnmp.Varbind('sysORUpTime'))

        vals = sess.getbulk(2, 8, vars)
        print "v3 sess.getbulk result: ", vals, "\n"

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(',var.type,')'
        print "\n"

        print "----------------------------------------\n"

        vars = netsnmp.VarList(
            netsnmp.Varbind('sysLocation','0', 'my final destination'))
        res = sess.set(vars)
        print "v3 sess.set result: ", res, "\n"
        
        print "----------------------------------------\n"
        vars = netsnmp.VarList(netsnmp.Varbind('system'))
                
        vals = sess.walk(vars)
        print "v3 sess.walk result: ", vals, "\n"
        
        for var in vars:
            print "  ",var.tag, var.iid, "=", var.val, '(',var.type,')'
            

class SetTests(unittest.TestCase):
    def testFuncs(self):        
        print "\n-------------- SET Test Start ----------------------------\n"

        var = netsnmp.Varbind('sysUpTime','0')
        res = netsnmp.snmpget(var, Version = 1, DestHost='localhost',
                        Community='public')
        print "uptime = ", res[0]

        
        var = netsnmp.Varbind('versionRestartAgent','0', 1)
        res = netsnmp.snmpset(var, Version = 1, DestHost='localhost',
                        Community='public')

        var = netsnmp.Varbind('sysUpTime','0')
        res = netsnmp.snmpget(var, Version = 1, DestHost='localhost',
                        Community='public')
        print "uptime = ", res[0]

        var = netsnmp.Varbind('nsCacheEntry')
        res = netsnmp.snmpgetnext(var, Version = 1, DestHost='localhost',
                        Community='public')
        print "var = ", var.tag, var.iid, "=", var.val, '(',var.type,')'

        var.val = 65
        res = netsnmp.snmpset(var, Version = 1, DestHost='localhost',
                        Community='public')
        res = netsnmp.snmpget(var, Version = 1, DestHost='localhost',
                        Community='public')
        print "var = ", var.tag, var.iid, "=", var.val, '(',var.type,')'

        sess = netsnmp.Session(Version = 1, DestHost='localhost',
                        Community='public')

        vars = netsnmp.VarList(netsnmp.Varbind('.1.3.6.1.6.3.12.1.2.1.2.116.101.115.116','','.1.3.6.1.6.1.1'),
                              netsnmp.Varbind('.1.3.6.1.6.3.12.1.2.1.3.116.101.115.116','','1234'),
                              netsnmp.Varbind('.1.3.6.1.6.3.12.1.2.1.9.116.101.115.116','', 4))
        res = sess.set(vars)

        print "res = ", res

        vars = netsnmp.VarList(netsnmp.Varbind('snmpTargetAddrTDomain'),
                               netsnmp.Varbind('snmpTargetAddrTAddress'),
                               netsnmp.Varbind('snmpTargetAddrRowStatus'))

        res = sess.getnext(vars)

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(',var.type,')'
        print "\n"

        vars = netsnmp.VarList(netsnmp.Varbind('.1.3.6.1.6.3.12.1.2.1.9.116.101.115.116','', 6))      

        res = sess.set(vars)

        print "res = ", res

        vars = netsnmp.VarList(netsnmp.Varbind('snmpTargetAddrTDomain'),
                               netsnmp.Varbind('snmpTargetAddrTAddress'),
                               netsnmp.Varbind('snmpTargetAddrRowStatus'))

        res = sess.getnext(vars)

        for var in vars:
            print var.tag, var.iid, "=", var.val, '(',var.type,')'
        print "\n"

        print "\n-------------- SET Test End ----------------------------\n"
        

if __name__=='__main__':
    unittest.main()
