/* * Copyright 2014-2016 CyberVision, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.kaaproject.kaa.server.common.dao.impl.sql; import static org.apache.commons.lang.StringUtils.isBlank; import static org.kaaproject.kaa.server.common.dao.impl.DaoUtil.convertDtoList; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.kaaproject.kaa.common.dto.TenantDto; import org.kaaproject.kaa.common.dto.ctl.CTLSchemaDto; import org.kaaproject.kaa.server.common.dao.CtlService; import org.kaaproject.kaa.server.common.dao.model.sql.CtlSchema; import org.kaaproject.kaa.server.common.dao.model.sql.CtlSchemaMetaInfo; import org.kaaproject.kaa.server.common.dao.model.sql.Tenant; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.transaction.annotation.Transactional; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.UUID; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "/common-dao-test-context.xml") @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS) @Transactional public class HibernateCtlSchemaDaoTest extends HibernateAbstractTest { private static final Logger LOG = LoggerFactory.getLogger(HibernateCtlSchemaDaoTest.class); private static final String SYSTEM_FQN = "org.kaaproject.kaa.ctl.SystemSchema"; @Autowired private CtlService ctlService; private TenantDto tenant; private CTLSchemaDto firstSchema; private CTLSchemaDto secondSchema; private CTLSchemaDto thirdSchema; private CTLSchemaDto fourthSchema; private CTLSchemaDto mainSchema; private CTLSchemaDto systemSchema; @Before public void before() { clearDBData(); if (tenant == null) { tenant = userService.findTenantByName(SUPER_TENANT); if (tenant == null) { TenantDto tn = new TenantDto(); tn.setName(SUPER_TENANT); tenant = userService.saveTenant(tn); } } Set<CTLSchemaDto> dependency = new HashSet<>(); firstSchema = ctlService.saveCtlSchema(generateCTLSchemaDto(DEFAULT_FQN + 1, tenant.getId(), null, 1)); dependency.add(firstSchema); secondSchema = ctlService.saveCtlSchema(generateCTLSchemaDto(DEFAULT_FQN + 2, tenant.getId(), null, 2)); dependency.add(secondSchema); thirdSchema = ctlService.saveCtlSchema(generateCTLSchemaDto(DEFAULT_FQN + 3, tenant.getId(), null, 3)); dependency.add(thirdSchema); fourthSchema = ctlService.saveCtlSchema(generateCTLSchemaDto(DEFAULT_FQN + 4, tenant.getId(), null, 4)); dependency.add(fourthSchema); mainSchema = generateCTLSchemaDto(DEFAULT_FQN + 5, tenant.getId(), null, 7); mainSchema.setDependencySet(dependency); mainSchema = ctlService.saveCtlSchema(mainSchema); systemSchema = ctlService.saveCtlSchema(generateCTLSchemaDto(SYSTEM_FQN, null, null, 50)); } @Test(expected = Exception.class) public void saveCTLSchemaWithSameFqnAndVersion() { ctlSchemaDao.save(generateCTLSchema(DEFAULT_FQN, new Tenant(tenant), 11, null)); ctlSchemaDao.save(generateCTLSchema(DEFAULT_FQN, null, 11, null)); } private CtlSchema generateCTLSchema(String fqn, Tenant tenant, int version, String body) { CtlSchema ctlSchema = new CtlSchema(); if (tenant == null) { tenant = generateTenant(); } ctlSchema.setMetaInfo(new CtlSchemaMetaInfo(fqn, tenant, null)); ctlSchema.setVersion(version); if (isBlank(body)) { body = UUID.randomUUID().toString(); } ctlSchema.setBody(body); return ctlSchema; } @Test public void saveCTLSchemaWithDependency() throws InterruptedException { List<CTLSchemaDto> dep = convertDtoList(ctlSchemaDao.findDependentSchemas(mainSchema.getId())); Assert.assertTrue(dep.isEmpty()); List<CTLSchemaDto> expected = Arrays.asList(mainSchema); dep = convertDtoList(ctlSchemaDao.findDependentSchemas(firstSchema.getId())); Assert.assertEquals(expected.size(), dep.size()); dep = convertDtoList(ctlSchemaDao.findDependentSchemas(secondSchema.getId())); Assert.assertEquals(expected.size(), dep.size()); dep = convertDtoList(ctlSchemaDao.findDependentSchemas(thirdSchema.getId())); Assert.assertEquals(expected.size(), dep.size()); dep = convertDtoList(ctlSchemaDao.findDependentSchemas(fourthSchema.getId())); Assert.assertEquals(expected.size(), dep.size()); } @Test public void testFindByFqnAndVerAndTenantIdAndApplicationId() { CtlSchema found = ctlSchemaDao.findByFqnAndVerAndTenantIdAndApplicationId(firstSchema.getMetaInfo().getFqn(), firstSchema.getVersion(), firstSchema.getMetaInfo().getTenantId(), firstSchema.getMetaInfo().getApplicationId()); Assert.assertEquals(firstSchema, found.toDto()); } @Test public void testFindSystemByFqnAndVerAndTenantIdAndApplicationId() { CtlSchema found = ctlSchemaDao.findByFqnAndVerAndTenantIdAndApplicationId(systemSchema.getMetaInfo().getFqn(), systemSchema.getVersion(), null, null); Assert.assertEquals(systemSchema, found.toDto()); } @Test public void testFindSystemSchemas() { List<CtlSchema> found = ctlSchemaDao.findSystemSchemas(); Assert.assertEquals(getIdsDto(Arrays.asList(systemSchema)), getIds(found)); } @Test public void testFindLatestByFqn() { CtlSchema latest = ctlSchemaDao.findLatestByFqnAndTenantIdAndApplicationId(SYSTEM_FQN, null, null); Assert.assertEquals(systemSchema, latest.toDto()); } @Test public void testFindAvailableSchemasForTenant() { List<CtlSchema> found = ctlSchemaDao.findAvailableSchemasForTenant(tenant.getId()); Assert.assertEquals(getIdsDto(Arrays.asList(firstSchema, secondSchema, thirdSchema, fourthSchema, mainSchema, systemSchema)), getIds(found)); } }