import unittest

from network_inventory import InventoryFailure, network_record
from network_test_fixture import network


class BuiltinNetworkTests(unittest.TestCase):
    def test_builtin_host_and_null_empty_ipam_shapes_do_not_hide_other_allocations(self):
        for driver in ('host', 'null'):
            for pools in (None, []):
                row = network('builtin', '172.28.0.0/24', Driver=driver,
                              IPAM={'Driver': 'default', 'Options': None, 'Config': pools})
                observed, excluded = network_record(row)
                self.assertEqual(observed['IPAM']['Config'], [])
                self.assertEqual(excluded, set())
        row = network('other', '172.28.0.0/16')
        self.assertEqual(network_record(row)[1], {'172.28.0.0/16'})

    def test_unknown_or_missing_ipam_is_not_treated_as_empty_capacity(self):
        for driver, ipam in (('bridge', {'Driver': 'default', 'Config': None}),
                             ('host', {'Driver': 'unknown', 'Config': None}),
                             ('null', {'Driver': 'default'}), ('host', None)):
            with self.assertRaises(InventoryFailure):
                network_record(network('fixture', '172.28.0.0/24', Driver=driver, IPAM=ipam))


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