def testInit(self): """An automount object correctly sets map-specific attributes.""" updater = map_updater.AutomountUpdater( config.MAP_AUTOMOUNT, self.workdir, {}) self.assertEqual(updater.local_master, False) conf = {map_updater.AutomountUpdater.OPT_LOCAL_MASTER: 'yes'} updater = map_updater.AutomountUpdater( config.MAP_AUTOMOUNT, self.workdir, conf) self.assertEqual(updater.local_master, True) conf = {map_updater.AutomountUpdater.OPT_LOCAL_MASTER: 'no'} updater = map_updater.AutomountUpdater( config.MAP_AUTOMOUNT, self.workdir, conf) self.assertEqual(updater.local_master, False)
def testUpdateCatchesMissingMaster(self): """Gracefully handle a missing local master maps.""" # use an empty master map from the source, to avoid mocking out already # tested code master_map = automount.AutomountMap() source_mock = self.mox.CreateMockAnything() source_mock.GetAutomountMasterMap().AndReturn(master_map) cache_mock = self.mox.CreateMock(caches.Cache) # raise error on GetMap() cache_mock.GetMap().AndRaise(error.CacheNotFound) skip = map_updater.AutomountUpdater.OPT_LOCAL_MASTER cache_options = {skip: 'yes'} self.mox.StubOutWithMock(cache_factory, 'Create') cache_factory.Create( cache_options, 'automount', automount_mountpoint=None).AndReturn(cache_mock) self.mox.ReplayAll() updater = map_updater.AutomountUpdater( config.MAP_AUTOMOUNT, self.workdir, cache_options) return_value = updater.UpdateFromSource(source_mock) self.assertEqual(return_value, 1)
def _Updater(self, map_name, source, cache_options, conf): # Bit ugly. This just checks the class attribute UPDATER # to determine which type of updater the source uses. At the moment # there's only two, so not a huge deal. If we add another we should # refactor though. if hasattr(source, 'UPDATER') and source.UPDATER == config.UPDATER_FILE: if map_name == config.MAP_AUTOMOUNT: return files_updater.FileAutomountUpdater( map_name, conf.timestamp_dir, cache_options) else: return files_updater.FileMapUpdater(map_name, conf.timestamp_dir, cache_options, can_do_incremental=True) else: if map_name == config.MAP_AUTOMOUNT: return map_updater.AutomountUpdater(map_name, conf.timestamp_dir, cache_options) else: return map_updater.MapUpdater(map_name, conf.timestamp_dir, cache_options, can_do_incremental=True)
def testUpdateNoMaster(self): """An update skips updating the master map, and approprate sub maps.""" source_entry1 = automount.AutomountMapEntry() source_entry2 = automount.AutomountMapEntry() source_entry1.key = '/home' source_entry2.key = '/auto' source_entry1.location = 'ou=auto.home,ou=automounts' source_entry2.location = 'ou=auto.auto,ou=automounts' source_master = automount.AutomountMap([source_entry1, source_entry2]) local_entry1 = automount.AutomountMapEntry() local_entry2 = automount.AutomountMapEntry() local_entry1.key = '/home' local_entry2.key = '/auto' local_entry1.location = '/etc/auto.home' local_entry2.location = '/etc/auto.null' local_master = automount.AutomountMap([local_entry1, local_entry2]) source_mock = self.mox.CreateMock(source.Source) # return the source master map source_mock.GetAutomountMasterMap().AndReturn(source_master) # the auto.home cache cache_home = self.mox.CreateMock(caches.Cache) # GetMapLocation() is called, and set to the master map map_entry cache_home.GetMapLocation().AndReturn('/etc/auto.home') # the auto.auto cache cache_auto = self.mox.CreateMock(caches.Cache) # GetMapLocation() is called, and set to the master map map_entry cache_auto.GetMapLocation().AndReturn('/etc/auto.auto') # the auto.master cache, which should not be written to cache_master = self.mox.CreateMock(caches.Cache) cache_master.GetMap().AndReturn(local_master) self.mox.StubOutWithMock(cache_factory, 'Create') cache_factory.Create(mox.IgnoreArg(), mox.IgnoreArg(), automount_mountpoint=None).AndReturn(cache_master) cache_factory.Create(mox.IgnoreArg(), mox.IgnoreArg(), automount_mountpoint='/home').AndReturn(cache_home) cache_factory.Create(mox.IgnoreArg(), mox.IgnoreArg(), automount_mountpoint='/auto').AndReturn(cache_auto) skip = map_updater.AutomountUpdater.OPT_LOCAL_MASTER updater = map_updater.AutomountUpdater( config.MAP_AUTOMOUNT, self.workdir, {skip: 'yes'}) self.mox.StubOutClassWithMocks(map_updater, 'MapUpdater') updater_home = map_updater.MapUpdater(config.MAP_AUTOMOUNT, self.workdir, {'local_automount_master': 'yes'}, automount_mountpoint='/home') updater_home.UpdateCacheFromSource(cache_home, source_mock, True, False, 'ou=auto.home,ou=automounts').AndReturn(0) self.mox.ReplayAll() updater.UpdateFromSource(source_mock)
def testUpdate(self): """An update gets a master map and updates each entry.""" map_entry1 = automount.AutomountMapEntry() map_entry2 = automount.AutomountMapEntry() map_entry1.key = '/home' map_entry2.key = '/auto' map_entry1.location = 'ou=auto.home,ou=automounts' map_entry2.location = 'ou=auto.auto,ou=automounts' master_map = automount.AutomountMap([map_entry1, map_entry2]) source_mock = self.mox.CreateMock(source.Source) # return the master map source_mock.GetAutomountMasterMap().AndReturn(master_map) # the auto.home cache cache_home = self.mox.CreateMock(caches.Cache) # GetMapLocation() is called, and set to the master map map_entry cache_home.GetMapLocation().AndReturn('/etc/auto.home') # the auto.auto cache cache_auto = self.mox.CreateMock(caches.Cache) # GetMapLocation() is called, and set to the master map map_entry cache_auto.GetMapLocation().AndReturn('/etc/auto.auto') # the auto.master cache cache_master = self.mox.CreateMock(caches.Cache) self.mox.StubOutWithMock(cache_factory, 'Create') cache_factory.Create(mox.IgnoreArg(), 'automount', automount_mountpoint='/home').AndReturn(cache_home) cache_factory.Create(mox.IgnoreArg(), 'automount', automount_mountpoint='/auto').AndReturn(cache_auto) cache_factory.Create(mox.IgnoreArg(), 'automount', automount_mountpoint=None).AndReturn(cache_master) updater = map_updater.AutomountUpdater( config.MAP_AUTOMOUNT, self.workdir, {}) self.mox.StubOutClassWithMocks(map_updater, 'MapUpdater') updater_home = map_updater.MapUpdater(config.MAP_AUTOMOUNT, self.workdir, {}, automount_mountpoint='/home') updater_home.UpdateCacheFromSource(cache_home, source_mock, True, False, 'ou=auto.home,ou=automounts').AndReturn(0) updater_auto = map_updater.MapUpdater(config.MAP_AUTOMOUNT, self.workdir, {}, automount_mountpoint='/auto') updater_auto.UpdateCacheFromSource(cache_auto, source_mock, True, False, 'ou=auto.auto,ou=automounts').AndReturn(0) updater_master = map_updater.MapUpdater(config.MAP_AUTOMOUNT, self.workdir, {}) updater_master.FullUpdateFromMap(cache_master, master_map).AndReturn(0) self.mox.ReplayAll() updater.UpdateFromSource(source_mock) self.assertEqual(map_entry1.location, '/etc/auto.home') self.assertEqual(map_entry2.location, '/etc/auto.auto')