def test_kitchen_sink(self):
        if DEBUG:
            print >> sys.stderr, "===============testConfigContext_kitchen_sink(pyConfigContextTest)"
            for j in range(1, 5):
                proj_class_incr_debug('NetAddr')
        strings = [
            # The next two originally failed intermittently
            '{"a":["1.2.3.4"]}',
            '{"cmdline":["192.168.122.1"]}',
            # All the remaining ones originally failed pretty reliably...
            '{"cmdline":["/usr/sbin/dnsmasq","-u","libvirt-dnsmasq","--strict-order","--bind-interfaces","--pid-file=/var/run/libvirt/network/default.pid","--conf-file=","--except-interface","lo","--listen-address","192.168.122.1"]}',
            '{"cmdline":["--listen-address","192.168.122.1"]}',
            '{"cmdline":["/usr/sbin/dnsmasq","-u","libvirt-dnsmasq","--strict-order","--bind-interfaces","--pid-file=/var/run/libvirt/network/default.pid","--conf-file=","--except-interface","lo","--listen-address","192.168.122.1","--dhcp-range","192.168.122.2,192.168.122.254","--dhcp-leasefile=/var/lib/libvirt/dnsmasq/default.leases","--dhcp-lease-max=253","--dhcp-no-override" ]}',
            '{"cmdline":["--listen-address","192.168.122.1","--dhcp-range","192.168.122.2,192.168.122.254","--dhcp-leasefile=/var/lib/libvirt/dnsmasq/default.leases","--dhcp-lease-max=253","--dhcp-no-override" ]}',
            '{"cmdline":["--listen-address","192.168.122.1","--dhcp-range"]}',
            '{"cmdline":["192.168.122.1","--dhcp-range"]}',
            '{"cmdline":["192.168.122.1","anything"]}',
            '{"cmdline":["192.168.122.1",1]}',
            '{"cmdline":["192.168.122.1",false]}',
        ]
        for s in strings:
            if DEBUG:
                print >> sys.stderr, ('Creating pyConfigContext("%s")' % s)
            sc = pyConfigContext(s)
            if DEBUG: print >> sys.stderr, ('sc.keys() == %s' % sc.keys())
            for key in sc.keys():
                elemcount = 0
                if DEBUG:
                    print >> sys.stderr, ('Looking at key %s: sc[key] = %s' %
                                          (key, sc[key]))
                for elem in sc[key]:
                    if DEBUG:
                        print >> sys.stderr, ('Looking at element %s' %
                                              str(elem))
                    self.assertNotEqual(str(elem), "")
                    if isinstance(elem, pyAssimObj):
                        if DEBUG:
                            print '++++++++++++++++++ REFCOUNT(%s): %d' % (
                                str(elem), elem.refcount())
                        #CCref(elem._Cstruct)
                        self.assertEqual(elem.refcount(), 2)
                        if DEBUG:
                            gc.collect()
                            print >> sys.stderr, ":::::::::::::GC GARBAGE: %s" % gc.garbage
                        foo = elem._Cstruct[0]
                        while (hasattr(foo, 'baseclass')):
                            foo = foo.baseclass
                        if DEBUG:
                            print >> sys.stderr, ":::::::::::::GC refcount %d, REFERRERS: %s" % (
                                sys.getrefcount(elem), gc.get_referrers(elem))
                            print >> sys.stderr, ":::::::::::::FOO: %s" % foo
                        del elem
                        if DEBUG:
                            print '++++++++++++++++++ REFCOUNT SECOND VERSE: %s' % (
                                foo._refcount)

                elemcount += 1
        if DEBUG:
            for j in range(1, 5):
                proj_class_decr_debug('NetAddr')
    def test_kitchen_sink(self):
        if DEBUG:
            print >> sys.stderr, "===============testConfigContext_kitchen_sink(pyConfigContextTest)"
            for j in range(1, 5):
                proj_class_incr_debug("NetAddr")
        strings = [
            # The next two originally failed intermittently
            '{"a":["1.2.3.4"]}',
            '{"cmdline":["192.168.122.1"]}',
            # All the remaining ones originally failed pretty reliably...
            '{"cmdline":["/usr/sbin/dnsmasq","-u","libvirt-dnsmasq","--strict-order","--bind-interfaces","--pid-file=/var/run/libvirt/network/default.pid","--conf-file=","--except-interface","lo","--listen-address","192.168.122.1"]}',
            '{"cmdline":["--listen-address","192.168.122.1"]}',
            '{"cmdline":["/usr/sbin/dnsmasq","-u","libvirt-dnsmasq","--strict-order","--bind-interfaces","--pid-file=/var/run/libvirt/network/default.pid","--conf-file=","--except-interface","lo","--listen-address","192.168.122.1","--dhcp-range","192.168.122.2,192.168.122.254","--dhcp-leasefile=/var/lib/libvirt/dnsmasq/default.leases","--dhcp-lease-max=253","--dhcp-no-override" ]}',
            '{"cmdline":["--listen-address","192.168.122.1","--dhcp-range","192.168.122.2,192.168.122.254","--dhcp-leasefile=/var/lib/libvirt/dnsmasq/default.leases","--dhcp-lease-max=253","--dhcp-no-override" ]}',
            '{"cmdline":["--listen-address","192.168.122.1","--dhcp-range"]}',
            '{"cmdline":["192.168.122.1","--dhcp-range"]}',
            '{"cmdline":["192.168.122.1","anything"]}',
            '{"cmdline":["192.168.122.1",1]}',
            '{"cmdline":["192.168.122.1",false]}',
        ]
        for s in strings:
            if DEBUG:
                print >> sys.stderr, ('Creating pyConfigContext("%s")' % s)
            sc = pyConfigContext(s)
            if DEBUG:
                print >> sys.stderr, ("sc.keys() == %s" % sc.keys())
            for key in sc.keys():
                elemcount = 0
                if DEBUG:
                    print >> sys.stderr, ("Looking at key %s: sc[key] = %s" % (key, sc[key]))
                for elem in sc[key]:
                    if DEBUG:
                        print >> sys.stderr, ("Looking at element %s" % str(elem))
                    self.assertNotEqual(str(elem), "")
                    if isinstance(elem, pyAssimObj):
                        if DEBUG:
                            print "++++++++++++++++++ REFCOUNT(%s): %d" % (str(elem), elem.refcount())
                        # CCref(elem._Cstruct)
                        self.assertEqual(elem.refcount(), 2)
                        if DEBUG:
                            gc.collect()
                            print >> sys.stderr, ":::::::::::::GC GARBAGE: %s" % gc.garbage
                        foo = elem._Cstruct[0]
                        while hasattr(foo, "baseclass"):
                            foo = foo.baseclass
                        if DEBUG:
                            print >> sys.stderr, ":::::::::::::GC refcount %d, REFERRERS: %s" % (
                                sys.getrefcount(elem),
                                gc.get_referrers(elem),
                            )
                            print >> sys.stderr, ":::::::::::::FOO: %s" % foo
                        del elem
                        if DEBUG:
                            print "++++++++++++++++++ REFCOUNT SECOND VERSE: %s" % (foo._refcount)

                elemcount += 1
        if DEBUG:
            for j in range(1, 5):
                proj_class_decr_debug("NetAddr")
    def test_ipv6_strinit(self):
        'Test constructing ipv6 addresses from strings.'
        if DEBUG:
            for j in range(1, 5):
                proj_class_incr_debug('NetAddr')
        if DEBUG:
            print >> sys.stderr, "===============test_ipv6_strinit(pyNetAddrTest)"
        ipv6 = pyNetAddr('::1')
        self.assertEqual(str(ipv6), '::1')

        ipv6 = pyNetAddr('::')
        self.assertEqual(str(ipv6), '::')

        ipv6 = pyNetAddr('0:1:2:3:4:5:6:7')
        self.assertEqual(str(ipv6), '0:1:2:3:4:5:6:7')

        ipv6 = pyNetAddr('::2:3:4:5:6:7')
        self.assertEqual(str(ipv6), '::2:3:4:5:6:7')

        ipv6 = pyNetAddr('[::]:1984')
        self.assertEqual(str(ipv6), '[::]:1984')

        ipv6 = pyNetAddr('[::1]:80')
        self.assertEqual(str(ipv6), '[::1]:80')

        ipv6 = pyNetAddr('[0:1:2:3:4:5:6:7]:8080')
        self.assertEqual(str(ipv6), '[0:1:2:3:4:5:6:7]:8080')

        ipv6 = pyNetAddr('::2:3:4:5:6:7')
        self.assertEqual(str(ipv6), '::2:3:4:5:6:7')

        ipv6 = pyNetAddr('::a:b:c:d:e:f')
        self.assertEqual(str(ipv6), '::a:b:c:d:e:f')

        ipv6 = pyNetAddr('::ffff:1.2.3.4')
        self.assertEqual(str(ipv6), '::ffff:1.2.3.4')

        ipv6 = pyNetAddr('[::ffff:1.2.3.4]:80')
        self.assertEqual(str(ipv6), '[::ffff:1.2.3.4]:80')

        ipv6 = pyNetAddr('[::ffff:255.255.255.255]:65535')
        self.assertEqual(str(ipv6), '[::ffff:255.255.255.255]:65535')

        self.assertRaises(ValueError, pyNetAddr, '0:1:2:3:4:5:6:7::')
        self.assertRaises(ValueError, pyNetAddr, '::fffff')
        self.assertRaises(ValueError, pyNetAddr, '[0:1:2:3:4:5:6:7]10')
        self.assertRaises(ValueError, pyNetAddr, '[0:1:2:3:4:5:6:7]:ff')
        self.assertRaises(ValueError, pyNetAddr, '0:1:2:3:4:5g:6:7')
        self.assertRaises(ValueError, pyNetAddr, '[0:1:2:3:4:5g:6:7]:10')
        self.assertRaises(ValueError, pyNetAddr, 'ffff:1.2.3.256')
        self.assertRaises(ValueError, pyNetAddr, 'ffff:1.2.3:4')
        self.assertRaises(ValueError, pyNetAddr, '[ffff:1.2.3:4]:99')
        self.assertRaises(ValueError, pyNetAddr, '[ffff:1.2.3.4]:65536')
        if DEBUG:
            for j in range(1, 5):
                proj_class_decr_debug('NetAddr')
    def test_ipv6_strinit(self):
        "Test constructing ipv6 addresses from strings."
        if DEBUG:
            for j in range(1, 5):
                proj_class_incr_debug("NetAddr")
        if DEBUG:
            print >> sys.stderr, "===============test_ipv6_strinit(pyNetAddrTest)"
        ipv6 = pyNetAddr("::1")
        self.assertEqual(str(ipv6), "::1")

        ipv6 = pyNetAddr("::")
        self.assertEqual(str(ipv6), "::")

        ipv6 = pyNetAddr("0:1:2:3:4:5:6:7")
        self.assertEqual(str(ipv6), "0:1:2:3:4:5:6:7")

        ipv6 = pyNetAddr("::2:3:4:5:6:7")
        self.assertEqual(str(ipv6), "::2:3:4:5:6:7")

        ipv6 = pyNetAddr("[::]:1984")
        self.assertEqual(str(ipv6), "[::]:1984")

        ipv6 = pyNetAddr("[::1]:80")
        self.assertEqual(str(ipv6), "[::1]:80")

        ipv6 = pyNetAddr("[0:1:2:3:4:5:6:7]:8080")
        self.assertEqual(str(ipv6), "[0:1:2:3:4:5:6:7]:8080")

        ipv6 = pyNetAddr("::2:3:4:5:6:7")
        self.assertEqual(str(ipv6), "::2:3:4:5:6:7")

        ipv6 = pyNetAddr("::a:b:c:d:e:f")
        self.assertEqual(str(ipv6), "::a:b:c:d:e:f")

        ipv6 = pyNetAddr("::ffff:1.2.3.4")
        self.assertEqual(str(ipv6), "::ffff:1.2.3.4")

        ipv6 = pyNetAddr("[::ffff:1.2.3.4]:80")
        self.assertEqual(str(ipv6), "[::ffff:1.2.3.4]:80")

        ipv6 = pyNetAddr("[::ffff:255.255.255.255]:65535")
        self.assertEqual(str(ipv6), "[::ffff:255.255.255.255]:65535")

        self.assertRaises(ValueError, pyNetAddr, "0:1:2:3:4:5:6:7::")
        self.assertRaises(ValueError, pyNetAddr, "::fffff")
        self.assertRaises(ValueError, pyNetAddr, "[0:1:2:3:4:5:6:7]10")
        self.assertRaises(ValueError, pyNetAddr, "[0:1:2:3:4:5:6:7]:ff")
        self.assertRaises(ValueError, pyNetAddr, "0:1:2:3:4:5g:6:7")
        self.assertRaises(ValueError, pyNetAddr, "[0:1:2:3:4:5g:6:7]:10")
        self.assertRaises(ValueError, pyNetAddr, "ffff:1.2.3.256")
        self.assertRaises(ValueError, pyNetAddr, "ffff:1.2.3:4")
        self.assertRaises(ValueError, pyNetAddr, "[ffff:1.2.3:4]:99")
        self.assertRaises(ValueError, pyNetAddr, "[ffff:1.2.3.4]:65536")
        if DEBUG:
            for j in range(1, 5):
                proj_class_decr_debug("NetAddr")
    def test_ipv6_strinit(self): 
        'Test constructing ipv6 addresses from strings.'
        if DEBUG:
            for j in range(1,5):
                proj_class_incr_debug('NetAddr')
        if DEBUG: print >>sys.stderr, "===============test_ipv6_strinit(pyNetAddrTest)"
        ipv6 = pyNetAddr('::1')
        self.assertEqual(str(ipv6),'::1')

        ipv6 = pyNetAddr('::')
        self.assertEqual(str(ipv6),'::')

        ipv6 = pyNetAddr('0:1:2:3:4:5:6:7')
        self.assertEqual(str(ipv6),'0:1:2:3:4:5:6:7')

        ipv6 = pyNetAddr('::2:3:4:5:6:7')
        self.assertEqual(str(ipv6),'::2:3:4:5:6:7')

        ipv6 = pyNetAddr('[::]:1984')
        self.assertEqual(str(ipv6),'[::]:1984')

        ipv6 = pyNetAddr('[::1]:80')
        self.assertEqual(str(ipv6),'[::1]:80')

        ipv6 = pyNetAddr('[0:1:2:3:4:5:6:7]:8080')
        self.assertEqual(str(ipv6),'[0:1:2:3:4:5:6:7]:8080')

        ipv6 = pyNetAddr('::2:3:4:5:6:7')
        self.assertEqual(str(ipv6),'::2:3:4:5:6:7')

        ipv6 = pyNetAddr('::a:b:c:d:e:f')
        self.assertEqual(str(ipv6),'::a:b:c:d:e:f')

        ipv6 = pyNetAddr('::ffff:1.2.3.4')
        self.assertEqual(str(ipv6),'::ffff:1.2.3.4')

        ipv6 = pyNetAddr('[::ffff:1.2.3.4]:80')
        self.assertEqual(str(ipv6),'[::ffff:1.2.3.4]:80')

        ipv6 = pyNetAddr('[::ffff:255.255.255.255]:65535')
        self.assertEqual(str(ipv6), '[::ffff:255.255.255.255]:65535')

        self.assertRaises(ValueError, pyNetAddr, '0:1:2:3:4:5:6:7::')
        self.assertRaises(ValueError, pyNetAddr, '::fffff')
        self.assertRaises(ValueError, pyNetAddr, '[0:1:2:3:4:5:6:7]10')
        self.assertRaises(ValueError, pyNetAddr, '[0:1:2:3:4:5:6:7]:ff')
        self.assertRaises(ValueError, pyNetAddr, '0:1:2:3:4:5g:6:7')
        self.assertRaises(ValueError, pyNetAddr, '[0:1:2:3:4:5g:6:7]:10')
        self.assertRaises(ValueError, pyNetAddr, 'ffff:1.2.3.256')
        self.assertRaises(ValueError, pyNetAddr, 'ffff:1.2.3:4')
        self.assertRaises(ValueError, pyNetAddr, '[ffff:1.2.3:4]:99')
        self.assertRaises(ValueError, pyNetAddr, '[ffff:1.2.3.4]:65536')
        if DEBUG:
            for j in range(1,5):
                proj_class_decr_debug('NetAddr')
    def test_dns_strinit(self):
        'Test constructing DNS addresses from strings.'
        if DEBUG:
            for j in range(1, 5):
                proj_class_incr_debug('NetAddr')
        if DEBUG:
            print >> sys.stderr, "===============test_DNS_strinit(pyNetAddrTest)"
        addr1 = pyNetAddr('www.linux-ha.org:80')
        self.assertEqual(addr1.port(), 80)
        try:
            addr2 = pyNetAddr('www.linux-ha.org:http')
        except ValueError:
            # Some systems use www instead of http...
            addr2 = pyNetAddr('www.linux-ha.org:www')
        # Note that this next test assumes that we're not getting round robin DNS...
        self.assertEqual(addr1, addr2)

        self.assertRaises(ValueError, pyNetAddr, 'www.google.com:')
        self.assertRaises(ValueError, pyNetAddr, 'www.google.com:nosuchport')
        self.assertRaises(ValueError, pyNetAddr, 'www.google.com:65536')
        self.assertRaises(ValueError, pyNetAddr, 'www.google.com:65537')
        self.assertRaises(ValueError, pyNetAddr, 'www.google.com:-1')
        # These next two may fail to raise ValueError - if your DNS is broken...
        try:
            pyNetAddr('www.frodo.middleearth')
        except ValueError:
            # This is correct behavior
            pass
        else:
            if not BROKENDNS:
                raise ValueError(
                    'Your DNS seems to be broken. Set environment variable BROKENDNS'
                )
        try:
            pyNetAddr('www.frodo.middleearth:80')
        except ValueError:
            # This is correct behavior
            pass
        else:
            if not BROKENDNS:
                raise ValueError('Your DNS is broken - in kind of a weird way')

        if DEBUG:
            for j in range(1, 5):
                proj_class_decr_debug('NetAddr')
    def test_dns_strinit(self):
        "Test constructing DNS addresses from strings."
        if DEBUG:
            for j in range(1, 5):
                proj_class_incr_debug("NetAddr")
        if DEBUG:
            print >> sys.stderr, "===============test_DNS_strinit(pyNetAddrTest)"
        addr1 = pyNetAddr("www.linux-ha.org:80")
        self.assertEqual(addr1.port(), 80)
        try:
            addr2 = pyNetAddr("www.linux-ha.org:http")
        except ValueError:
            # Some systems use www instead of http...
            addr2 = pyNetAddr("www.linux-ha.org:www")
        # Note that this next test assumes that we're not getting round robin DNS...
        self.assertEqual(addr1, addr2)

        self.assertRaises(ValueError, pyNetAddr, "www.google.com:")
        self.assertRaises(ValueError, pyNetAddr, "www.google.com:nosuchport")
        self.assertRaises(ValueError, pyNetAddr, "www.google.com:65536")
        self.assertRaises(ValueError, pyNetAddr, "www.google.com:65537")
        self.assertRaises(ValueError, pyNetAddr, "www.google.com:-1")
        # These next two may fail to raise ValueError - if your DNS is broken...
        try:
            pyNetAddr("www.frodo.middleearth")
        except ValueError:
            # This is correct behavior
            pass
        else:
            if not BROKENDNS:
                raise ValueError("Your DNS seems to be broken. Set environment variable BROKENDNS")
        try:
            pyNetAddr("www.frodo.middleearth:80")
        except ValueError:
            # This is correct behavior
            pass
        else:
            if not BROKENDNS:
                raise ValueError("Your DNS is broken - in kind of a weird way")

        if DEBUG:
            for j in range(1, 5):
                proj_class_decr_debug("NetAddr")