def topology(request): topology = create_topology({ReplicaRole.STANDALONE: 1}, None) def fin(): if DEBUGGING: topology.standalone.stop() else: topology.standalone.delete() request.addfinalizer(fin) topology.logcap = LogCapture() return topology
def topology_st(request): """Create DS standalone instance""" topology = create_topology({ReplicaRole.STANDALONE: 1}) def fin(): if topology.standalone.exists(): topology.standalone.delete() request.addfinalizer(fin) return topology
def topology_m3(request): """Create Replication Deployment with three suppliers""" topology = create_topology({ReplicaRole.SUPPLIER: 3}) def fin(): if DEBUGGING: [inst.stop() for inst in topology] else: [inst.delete() for inst in topology] request.addfinalizer(fin) return topology
def topology_m2(request): """Create Replication Deployment with two masters""" topology = create_topology({ReplicaRole.MASTER: 2}) def fin(): if DEBUGGING: [inst.stop() for inst in topology] else: [inst.delete() for inst in topology] request.addfinalizer(fin) return topology
def topology_st_fn(request): """Create DS standalone instance for each test case""" topology = create_topology({ReplicaRole.STANDALONE: 1}) def fin(): # Kill the hanging process at the end of test to prevent failures in the following tests if DEBUGGING: [_kill_ns_slapd(inst) for inst in topology] else: [_kill_ns_slapd(inst) for inst in topology] assert _remove_ssca_db(topology) [inst.stop() for inst in topology if inst.exists()] [inst.delete() for inst in topology if inst.exists()] request.addfinalizer(fin) topology.logcap = LogCapture() return topology
def topology_be_001003006(request): topology = create_topology({ReplicaRole.STANDALONE: 1}, None) topology.standalone.backends.create(properties={ 'cn': 'userRoot', 'nsslapd-suffix': DEFAULT_SUFFIX, }) # Now apply sample entries centries = get_sample_entries('001003006') cent = centries(topology.standalone, DEFAULT_SUFFIX) cent.apply() def fin(): if DEBUGGING: topology.standalone.stop() else: topology.standalone.delete() request.addfinalizer(fin) topology.logcap = LogCapture() return topology
def topo_with_sigkill(request): """Create Replication Deployment with two suppliers""" topology = create_topology({ReplicaRole.SUPPLIER: 2}) def _kill_ns_slapd(inst): pid = str(pid_from_file(inst.ds_paths.pid_file)) cmd = ['kill', '-9', pid] subprocess.Popen(cmd, stdout=subprocess.PIPE) def fin(): # Kill the hanging process at the end of test to prevent failures in the following tests if DEBUGGING: [_kill_ns_slapd(inst) for inst in topology] else: [_kill_ns_slapd(inst) for inst in topology] assert _remove_ssca_db(topology) [inst.stop() for inst in topology if inst.exists()] [inst.delete() for inst in topology if inst.exists()] request.addfinalizer(fin) return topology
def initInstance(self): if (self._instance): return self._instance uidpath = self.getFilePath("uids") nb_uids = 0 try: with open(uidpath, 'r') as f: while f.readline(): nb_uids += 1 except FileNotFoundError: pass nb_users = self._options['nbUsers'] need_rebuild = True if (nb_uids == nb_users): # Lets try to reuse existing instance try: self._instance = DirSrv(verbose=True) self._instance.local_simple_allocate(serverid="standalone1", password=PW_DM) self._instance.open() if (self._instance.exists()): if (self._instance.get_db_lib() == get_default_db_lib()): need_rebuild = False else: print( f"db is {self._instance.get_db_lib()} instead of {get_default_db_lib()} ==> instance must be rebuild" ) else: print(f"missing instance ==> instance must be rebuild") except Exception: pass else: print( f"Instance has {nb_uids} users instead of {nb_users} ==> instance must be rebuild" ) if (need_rebuild): print("Rebuilding standalone1 instance") # Should rebuild the instance from scratch topology = create_topology({ReplicaRole.STANDALONE: 1}) self._instance = topology.standalone # Adjust db size if needed (i.e about 670 K users) defaultDBsize = 1073741824 entrySize = 1600 # Real size is around 1525 if (self._instance.get_db_lib() == "mdb" and nb_users * entrySize > defaultDBsize): mdb_config = LMDB_LDBMConfig(self._instance) mdb_config.replace("nsslapd-mdb-max-size", str(nb_users * entrySize)) self._instance.restart() # Then populate the users useraccounts = UserAccounts(self._instance, self._options['suffix']) with open(uidpath, 'w') as f: uidgen = IdGeneratorWithNumbers(nb_users) cnGen = IdGeneratorWithNames(100) snGen = IdGeneratorWithNames(100) for uid in uidgen: cn = cnGen.random() sn = snGen.random() rdn = f"uid={uid}" osuid = uidgen.getIdx() + 1000 osgid = int(osuid % 100) + 1000 properties = { 'uid': uid, 'cn': cn, 'sn': sn, 'uidNumber': str(osuid), 'gidNumber': str(osgid), 'homeDirectory': f'/home/{uid}' } super(UserAccounts, useraccounts).create(rdn, properties) f.write(f'{uid}\n') return self._instance