Revision 87a86b71 snf-tools/synnefo_tools/burnin/common.py

b/snf-tools/synnefo_tools/burnin/common.py
223 223
        self.info("Pithos url is %s", self.clients.pithos_url)
224 224
        self.info("Image url is %s", self.clients.image_url)
225 225

  
226
        user_uuid = self._get_uuid()
226 227
        self.quotas = self._get_quotas()
227
        self.info("  Disk usage is %s bytes",
228
                  self.quotas['system']['cyclades.disk']['usage'])
229
        self.info("  VM usage is %s",
230
                  self.quotas['system']['cyclades.vm']['usage'])
231
        self.info("  DiskSpace usage is %s bytes",
232
                  self.quotas['system']['pithos.diskspace']['usage'])
233
        self.info("  Ram usage is %s bytes",
234
                  self.quotas['system']['cyclades.ram']['usage'])
235
        self.info("  Floating IPs usage is %s",
236
                  self.quotas['system']['cyclades.floating_ip']['usage'])
237
        self.info("  CPU usage is %s",
238
                  self.quotas['system']['cyclades.cpu']['usage'])
239
        self.info("  Network usage is %s",
240
                  self.quotas['system']['cyclades.network.private']['usage'])
228
        for puuid, quotas in self.quotas.items():
229
            project_name = self._get_project_name(puuid, user_uuid)
230
            self.info("  Project %s:", project_name)
231
            self.info("    Disk usage is         %s bytes",
232
                      quotas['cyclades.disk']['usage'])
233
            self.info("    VM usage is           %s",
234
                      quotas['cyclades.vm']['usage'])
235
            self.info("    DiskSpace usage is    %s bytes",
236
                      quotas['pithos.diskspace']['usage'])
237
            self.info("    Ram usage is          %s bytes",
238
                      quotas['cyclades.ram']['usage'])
239
            self.info("    Floating IPs usage is %s",
240
                      quotas['cyclades.floating_ip']['usage'])
241
            self.info("    CPU usage is          %s",
242
                      quotas['cyclades.cpu']['usage'])
243
            self.info("    Network usage is      %s",
244
                      quotas['cyclades.network.private']['usage'])
241 245

  
242 246
    def _run_tests(self, tcases):
243 247
        """Run some generated testcases"""
......
508 512
    def _get_quotas(self):
509 513
        """Get quotas"""
510 514
        self.info("Getting quotas")
511
        return self.clients.astakos.get_quotas()
515
        return dict(self.clients.astakos.get_quotas())
512 516

  
513 517
    # Invalid argument name. pylint: disable-msg=C0103
514 518
    # Too many arguments. pylint: disable-msg=R0913
515
    def _check_quotas(self, disk=None, vm=None, diskspace=None,
519
    def _check_quotas(self, puuid=None, disk=None, vm=None, diskspace=None,
516 520
                      ram=None, ip=None, cpu=None, network=None):
517
        """Check that quotas' changes are consistent"""
521
        """Check that quotas' changes are consistent
522

  
523
        @param puuid: The uuid of the project, quotas are assigned to
524

  
525
        """
526

  
518 527
        assert any(v is None for v in
519 528
                   [disk, vm, diskspace, ram, ip, cpu, network]), \
520 529
            "_check_quotas require arguments"
......
524 533
        new_quotas = self._get_quotas()
525 534
        self.quotas = new_quotas
526 535

  
527
        # Check Disk usage
528
        self._check_quotas_aux(
529
            old_quotas, new_quotas, 'cyclades.disk', disk)
530
        # Check VM usage
531
        self._check_quotas_aux(
532
            old_quotas, new_quotas, 'cyclades.vm', vm)
533
        # Check DiskSpace usage
534
        self._check_quotas_aux(
535
            old_quotas, new_quotas, 'pithos.diskspace', diskspace)
536
        # Check Ram usage
537
        self._check_quotas_aux(
538
            old_quotas, new_quotas, 'cyclades.ram', ram)
539
        # Check Floating IPs usage
540
        self._check_quotas_aux(
541
            old_quotas, new_quotas, 'cyclades.floating_ip', ip)
542
        # Check CPU usage
543
        self._check_quotas_aux(
544
            old_quotas, new_quotas, 'cyclades.cpu', cpu)
545
        # Check Network usage
546
        self._check_quotas_aux(
547
            old_quotas, new_quotas, 'cyclades.network.private', network)
548

  
549
    def _check_quotas_aux(self, old_quotas, new_quotas, resource, value):
536
        user_uuid = self._get_uuid()
537
        if puuid is None:
538
            puuid = user_uuid
539

  
540
        self.assertListEqual(sorted(old_quotas.keys()),
541
                             sorted(new_quotas.keys()))
542
        for project in old_quotas.keys():
543
            # Check Disk usage
544
            project_name = self._get_project_name(project, user_uuid)
545
            self._check_quotas_aux(old_quotas[project], new_quotas[project],
546
                                   project_name, "cyclades.disk",
547
                                   disk, project == puuid)
548
            # Check VM usage
549
            self._check_quotas_aux(old_quotas[project], new_quotas[project],
550
                                   project_name, "cyclades.vm",
551
                                   vm, project == puuid)
552
            # Check DiskSpace usage
553
            self._check_quotas_aux(old_quotas[project], new_quotas[project],
554
                                   project_name, "pithos.diskspace",
555
                                   diskspace, project == puuid)
556
            # Check Ram usage
557
            self._check_quotas_aux(old_quotas[project], new_quotas[project],
558
                                   project_name, "cyclades.ram",
559
                                   ram, project == puuid)
560
            # Check Floating IPs usage
561
            self._check_quotas_aux(old_quotas[project], new_quotas[project],
562
                                   project_name, "cyclades.floating_ip",
563
                                   ip, project == puuid)
564
            # Check CPU usage
565
            self._check_quotas_aux(old_quotas[project], new_quotas[project],
566
                                   project_name, "cyclades.cpu",
567
                                   cpu, project == puuid)
568
            # Check Network usage
569
            self._check_quotas_aux(old_quotas[project], new_quotas[project],
570
                                   project_name, "cyclades.network.private",
571
                                   network, project == puuid)
572

  
573
    def _check_quotas_aux(self, old_quotas, new_quotas,
574
                          project_name, resource, value, check):
550 575
        """Auxiliary function for _check_quotas"""
551
        old_value = old_quotas['system'][resource]['usage']
552
        new_value = new_quotas['system'][resource]['usage']
553
        if value is not None:
576
        old_value = old_quotas[resource]['usage']
577
        new_value = new_quotas[resource]['usage']
578
        if check and value is not None:
554 579
            assert isinstance(value, int), \
555 580
                "%s value has to be integer" % resource
556 581
            old_value += value
557 582
        self.assertEqual(old_value, new_value,
558
                         "%s quotas don't match" % resource)
583
                         "Project %s: %s quotas don't match" %
584
                         (project_name, resource))
585

  
586
    # ----------------------------------
587
    # Projects
588
    def _get_project_name(self, puuid, uuid=None):
589
        """Get the name of a project"""
590
        if uuid is None:
591
            uuid = self._get_uuid()
592
        if puuid == uuid:
593
            return "base"
594
        else:
595
            project_info = self.clients.astakos.get_project(puuid)
596
            return project_info['name']
559 597

  
560 598

  
561 599
# --------------------------------------------------------------------

Also available in: Unified diff