@Test
 public void testValidGlobalStorageLimitation() throws Exception {
   List<String> messages = new ArrayList<String>();
   Quota quota = mockGeneralStorageQuota();
   quota.setIsDefaultQuota(false);
   mockStorageDomains();
   assertTrue(quotaHelper.checkQuotaValidationForAdd(quota, messages));
   assertTrue(quotaHelper.checkQuotaValidationForEdit(quota, messages));
 }
  @Test
  public void testMultiSpecificVdsGroupQuota() throws Exception {
    List<String> messages = new ArrayList<String>();
    Quota quota = mockMultiSpecificVdsGroupQuota();

    boolean isQuotaValid = quotaHelper.checkQuotaValidationForAdd(quota, messages);
    assertTrue(isQuotaValid);

    isQuotaValid = quotaHelper.checkQuotaValidationForEdit(quota, messages);
    assertTrue(isQuotaValid);
  }
 @Test
 public void testStorageEmptyQuota() throws Exception {
   List<String> messages = new ArrayList<String>();
   Quota quota = mockGeneralStorageQuota();
   quota.setIsDefaultQuota(false);
   quota.setGlobalQuotaStorage(null);
   boolean isQuotaValid = quotaHelper.checkQuotaValidationForAdd(quota, messages);
   assertTrue(isQuotaValid);
   isQuotaValid = quotaHelper.checkQuotaValidationForEdit(quota, messages);
   assertTrue(isQuotaValid);
 }
  @Test
  public void testRamEmptyQuota() throws Exception {
    List<String> messages = new ArrayList<String>();
    Quota quota = mockSpecificVdsGroupQuota();
    for (QuotaVdsGroup quotaVdsGroup : quota.getQuotaVdsGroups()) {
      quotaVdsGroup.setMemSizeMB(null);
    }
    quota.setGlobalQuotaVdsGroup(null);

    boolean isQuotaValid = quotaHelper.checkQuotaValidationForAdd(quota, messages);
    assertTrue(isQuotaValid);

    isQuotaValid = quotaHelper.checkQuotaValidationForEdit(quota, messages);
    assertTrue(isQuotaValid);
  }
  @Test
  public void testValidSpecificStorageLimitation() throws Exception {
    List<String> messages = new ArrayList<String>();
    firstStorageDomains.setused_disk_size(0);
    firstStorageDomains.setavailable_disk_size(100);
    Quota quota = mockGeneralStorageQuota();
    quota.setIsDefaultQuota(false);
    when(storageDomainDAO.getForStoragePool(firstStorageDomainUUID, storagePoolUUID))
        .thenReturn(firstStorageDomains);

    boolean isQuotaValid = quotaHelper.checkQuotaValidationForAdd(quota, messages);
    assertTrue(isQuotaValid);

    isQuotaValid = quotaHelper.checkQuotaValidationForEdit(quota, messages);
    assertTrue(isQuotaValid);
  }
  @Test
  public void testAddSpecificVdsGroupAndStorageQuota() throws Exception {
    List<String> messages = new ArrayList<String>();

    // Get quota for specific Vds Groups
    Quota quota = mockMultiSpecificVdsGroupQuota();

    // Get specific storage quota to initialize the vds group quota fetched before with its storage
    // list.
    Quota quotaStorage = mockMultiSpecificStorageQuota();
    quota.setQuotaStorages(quotaStorage.getQuotaStorages());

    // Set global limitation with null value to specify the quota is only for specific storage
    // limitations.
    quota.setGlobalQuotaStorage(null);

    // Mock storage domains with enough space for request.
    mockStorageDomains();
    assertTrue(quotaHelper.checkQuotaValidationForAdd(quota, messages));
    assertTrue(quotaHelper.checkQuotaValidationForEdit(quota, messages));
  }
  @Test
  public void testGlobalAndSpecificRamForVdsGroup() throws Exception {
    List<String> messages = new ArrayList<String>();
    Quota quota = mockSpecificVdsGroupQuota();

    // Set new global quota for vds group.
    QuotaVdsGroup quotaVdsGroup = new QuotaVdsGroup();
    quotaVdsGroup.setMemSizeMB(2l);
    quota.setGlobalQuotaVdsGroup(quotaVdsGroup);

    boolean isQuotaValid = quotaHelper.checkQuotaValidationForAdd(quota, messages);
    assertTrue(
        messages.contains(
            VdcBllMessages.ACTION_TYPE_FAILED_QUOTA_LIMIT_IS_SPECIFIC_AND_GENERAL.toString()));
    assertFalse(isQuotaValid);

    isQuotaValid = quotaHelper.checkQuotaValidationForEdit(quota, messages);
    assertTrue(
        messages.contains(
            VdcBllMessages.ACTION_TYPE_FAILED_QUOTA_LIMIT_IS_SPECIFIC_AND_GENERAL.toString()));
    assertFalse(isQuotaValid);
  }
  @Test
  public void testSpecificRamWithGlobalCpuQuota() throws Exception {
    List<String> messages = new ArrayList<String>();

    // Get specific quota for vds Quota, which will be configured as general.
    Quota quota = mockSpecificVdsGroupQuota();

    // Iterate over all the vds groups and set the virtual cpu to null.
    for (QuotaVdsGroup quotaVdsGroup : quota.getQuotaVdsGroups()) {
      quotaVdsGroup.setVirtualCpu(null);
    }

    // Set the global limitation of cpu to specific number.
    // Set new global quota for vds group.
    QuotaVdsGroup quotaVdsGroup = new QuotaVdsGroup();
    quotaVdsGroup.setVirtualCpu(20);
    quota.setGlobalQuotaVdsGroup(quotaVdsGroup);

    boolean isQuotaValid = quotaHelper.checkQuotaValidationForAdd(quota, messages);
    assertFalse(isQuotaValid);

    isQuotaValid = quotaHelper.checkQuotaValidationForEdit(quota, messages);
    assertFalse(isQuotaValid);
  }