def test_info(self): job = Job.oarsub_cluster( username=self.user, cluster=self.cluster, walltime=Time(minutes=5), nb_nodes=self.nb_nodes, deploy=False, ) info = job.platform_information() self.assertEqual(info['deployment'], False) self.assertIn('command', info) self.assertEqual(info['jobid'], job.jobid) self.assertEqual(info['site'], self.site) self.assertEqual(info['cluster'], self.cluster) for host in job.hostnames: self.assertIn(host, info) for key in ['arp', 'cpu', 'kernel', 'mpi', 'version']: self.assertIn(key, info[host]) git_hash = '61888b8576a7913c9fa7c40c2918f92bcc1f5c17' url = 'https://github.com/dylanbeattie/rockstar.git' job.git_clone(url, 'rockstar', checkout=git_hash) new_info = job.platform_information() self.assertEqual(new_info['git_repositories'], [{ 'path': 'rockstar', 'url': url, 'hash': git_hash }]) del new_info['git_repositories'] self.assertEqual(new_info, info)
def test_job(self): job = Job.oarsub_cluster( username=self.user, cluster=self.cluster, walltime=Time(minutes=5), nb_nodes=self.nb_nodes, deploy=False, ) result = job.frontend.run_unique('hostname -f').stdout.strip() self.assertEqual(result, 'f%s.%s.grid5000.fr' % (self.site, self.site)) hosts = job.hostnames jobs = Job.get_jobs(self.site, self.user) self.assertTrue(any(j.hostnames == hosts for j in jobs)) self.assertEqual(len(set(hosts)), self.nb_nodes) for host in hosts: self.assertEqual(host[:len(self.cluster)], self.cluster) self.assertEqual(set(job.hostnames), set(job.nodes.hostnames)) result = job.nodes.run('hostname -f') for node, res in result.items(): self.assertEqual(node.host, res.stdout.strip()) result = job.nodes.run_unique('pwd') self.assertEqual(result.stdout.strip(), '/tmp') expected_cores = [[i, i + 12] for i in list(range(0, 12, 2)) + list(range(1, 12, 2))] self.assertEqual(job.nodes.cores, expected_cores) self.assertEqual(set(job.nodes.hyperthreads), set(range(12, 24))) job.add_content_to_archive('hello, world!', 'file_hello') job.add_content_to_archive('foo bar' * 50, 'file_foo') with open('/tmp/bla', 'w') as f: f.write('this is a test') job.add_file_to_archive('/tmp/bla', 'file_test') job.get_archive() self.assertTrue(os.path.isfile(job.archive_name)) archive = zipfile.ZipFile(job.archive_name) self.assertEqual(set(archive.namelist()), {'file_hello', 'file_foo', 'file_test'}) self.assertEqual( archive.read('file_hello').decode('ascii'), 'hello, world!') self.assertEqual( archive.read('file_foo').decode('ascii'), 'foo bar' * 50) self.assertEqual( archive.read('file_test').decode('ascii'), 'this is a test') job.add_information_to_archive() job.get_archive() archive = zipfile.ZipFile(job.archive_name) for name in [ 'info.yaml', 'oarstat.yaml', 'commands.log', 'history.json' ]: self.assertIn(name, archive.namelist()) for host in job.hostnames: for name in [ 'cpuinfo.txt', 'environment.txt', 'topology.xml', 'topology.pdf', 'lspci.txt', 'dmidecode.txt' ]: name = os.path.join('information', host, name) self.assertIn(name, archive.namelist()) os.remove(job.archive_name)
def test_job_deploy(self): self.job = Job.oarsub_cluster( username=self.user, cluster=self.cluster, walltime=Time(minutes=15), nb_nodes=self.nb_nodes, deploy='debian9-x64-min', ) self.job.kadeploy().apt_install('hwloc', 'cpufrequtils', 'linux-cpupower') nb = len(self.job.nodes.hyperthreads) self.assert_run(str(nb * 2), 'grep processor /proc/cpuinfo | wc -l') self.job.nodes.disable_hyperthreading() self.assert_run(str(nb), 'grep processor /proc/cpuinfo | wc -l') self.job.nodes.enable_hyperthreading() self.assert_run(str(nb * 2), 'grep processor /proc/cpuinfo | wc -l') freq_info = self.job.nodes.frequency_information self.assertEqual(freq_info.governor, ('performance', 'powersave')) self.assertEqual(freq_info.min_freq, 1200000) self.assertEqual(freq_info.max_freq, 2800000) for _ in range(2): for governor in freq_info.governor: min_freq = random.randint(freq_info.min_freq, freq_info.max_freq) max_freq = random.randint(min_freq, freq_info.max_freq) self.job.nodes.set_frequency_information( governor, min_freq, max_freq) self.assertEqual(self.job.nodes.current_frequency_information, (governor, min_freq, max_freq)) self.job.nodes.reset_frequency_information() self.assertEqual(self.job.nodes.current_frequency_information, ('powersave', freq_info.min_freq, freq_info.max_freq)) self.job.nodes.set_frequency_performance() self.assertEqual( self.job.nodes.current_frequency_information, ('performance', freq_info.max_freq, freq_info.max_freq)) with self.assertRaises(ValueError): self.job.nodes.set_frequency_information(governor='bla') with self.assertRaises(ValueError): self.job.nodes.set_frequency_information(min_freq=42) with self.assertRaises(ValueError): self.job.nodes.set_frequency_information(max_freq=42) with self.assertRaises(ValueError): self.job.nodes.set_frequency_information( min_freq=freq_info.min_freq + 100, max_freq=freq_info.min_freq)