Ejemplo n.º 1
0
    def test_user_total_usage(self):
        user = self.user_factory.new_user()
        with user:
            job_spec = {'cpus': 0.11, 'mem': 123, 'command': 'sleep 600'}
            pools, _ = util.active_pools(self.cook_url)
            job_uuids = []
            try:
                for pool in pools:
                    job_uuid, resp = util.submit_job(self.cook_url,
                                                     pool=pool['name'],
                                                     **job_spec)
                    self.assertEqual(201, resp.status_code, resp.text)
                    job_uuids.append(job_uuid)

                util.wait_for_jobs(self.cook_url, job_uuids, 'running')
                resp = util.user_current_usage(self.cook_url,
                                               user=user.name,
                                               group_breakdown='true')
                self.assertEqual(resp.status_code, 200, resp.content)
                usage_data = resp.json()
                total_usage = usage_data['total_usage']

                self.assertEqual(job_spec['mem'] * len(job_uuids),
                                 total_usage['mem'], total_usage)
                self.assertEqual(job_spec['cpus'] * len(job_uuids),
                                 total_usage['cpus'], total_usage)
                self.assertEqual(len(job_uuids), total_usage['jobs'],
                                 total_usage)
            finally:
                util.kill_jobs(self.cook_url, job_uuids)
Ejemplo n.º 2
0
 def test_multi_user_usage(self):
     users = self.user_factory.new_users(6)
     job_resources = {'cpus': 0.1, 'mem': 123}
     all_job_uuids = []
     pools, _ = util.all_pools(self.cook_url)
     try:
         # Start jobs for several users
         for i, user in enumerate(users):
             with user:
                 for j in range(i):
                     job_uuid, resp = util.submit_job(self.cook_url,
                                                      command='sleep 480',
                                                      max_retries=2,
                                                      **job_resources)
                     self.assertEqual(resp.status_code, 201, resp.content)
                     all_job_uuids.append(job_uuid)
                     job = util.load_job(self.cook_url, job_uuid)
                     self.assertEqual(user.name, job['user'], job)
         # Don't query until the jobs are all running
         util.wait_for_jobs(self.cook_url, all_job_uuids, 'running')
         # Check the usage for each of our users
         for i, user in enumerate(users):
             with user:
                 # Get the current usage
                 resp = util.user_current_usage(self.cook_url,
                                                user=user.name)
                 self.assertEqual(resp.status_code, 200, resp.content)
                 usage_data = resp.json()
                 # Check that the response structure looks as expected
                 if pools:
                     self.assertEqual(list(usage_data.keys()),
                                      ['total_usage', 'pools'], usage_data)
                 else:
                     self.assertEqual(list(usage_data.keys()),
                                      ['total_usage'], usage_data)
                 self.assertEqual(len(usage_data['total_usage']), 4,
                                  usage_data)
                 # Check that each user's usage is as expected
                 self.assertEqual(usage_data['total_usage']['mem'],
                                  job_resources['mem'] * i, usage_data)
                 self.assertEqual(usage_data['total_usage']['cpus'],
                                  job_resources['cpus'] * i, usage_data)
                 self.assertEqual(usage_data['total_usage']['gpus'], 0,
                                  usage_data)
                 self.assertEqual(usage_data['total_usage']['jobs'], i,
                                  usage_data)
     finally:
         for job_uuid in all_job_uuids:
             job = util.load_job(self.cook_url, job_uuid)
             for instance in job['instances']:
                 if instance['status'] == 'failed':
                     mesos.dump_sandbox_files(util.session, instance, job)
         # Terminate all of the jobs
         if all_job_uuids:
             with self.user_factory.admin():
                 util.kill_jobs(self.cook_url,
                                all_job_uuids,
                                assert_response=False)
Ejemplo n.º 3
0
 def test_multi_user_usage(self):
     users = self.user_factory.new_users(6)
     job_resources = {'cpus': 0.1, 'mem': 123}
     all_job_uuids = []
     try:
         # Start jobs for several users
         for i, user in enumerate(users):
             with user:
                 for j in range(i):
                     job_uuid, resp = util.submit_job(self.cook_url,
                                                      command='sleep 480',
                                                      **job_resources)
                     self.assertEqual(resp.status_code, 201, resp.content)
                     all_job_uuids.append(job_uuid)
         # Don't query until the jobs are all running
         util.wait_for_jobs(self.cook_url, all_job_uuids, 'running')
         # Check the usage for each of our users
         for i, user in enumerate(users):
             with user:
                 # Get the current usage
                 resp = util.user_current_usage(self.cook_url,
                                                user=user.name)
                 self.assertEqual(resp.status_code, 200, resp.content)
                 usage_data = resp.json()
                 # Check that the response structure looks as expected
                 self.assertEqual(list(usage_data.keys()), ['total_usage'],
                                  usage_data)
                 self.assertEqual(len(usage_data['total_usage']), 4,
                                  usage_data)
                 # Check that each user's usage is as expected
                 self.assertEqual(usage_data['total_usage']['mem'],
                                  job_resources['mem'] * i, usage_data)
                 self.assertEqual(usage_data['total_usage']['cpus'],
                                  job_resources['cpus'] * i, usage_data)
                 self.assertEqual(usage_data['total_usage']['gpus'], 0,
                                  usage_data)
                 self.assertEqual(usage_data['total_usage']['jobs'], i,
                                  usage_data)
     finally:
         # Terminate all of the jobs
         if all_job_uuids:
             with self.user_factory.admin():
                 util.kill_jobs(self.cook_url, all_job_uuids)