/*
* Copyright (C) 2015 Orange
*
* This software is distributed under the terms and conditions of the 'GNU GENERAL PUBLIC LICENSE
* Version 2' license which can be found in the file 'LICENSE.txt' in this package distribution or
* at 'http://www.gnu.org/licenses/gpl-2.0-standalone.html'.
*/
package com.orange.cepheus.broker.persistence;
import com.orange.cepheus.broker.Application;
import com.orange.cepheus.broker.exception.RegistrationPersistenceException;
import com.orange.cepheus.broker.exception.SubscriptionPersistenceException;
import com.orange.cepheus.broker.model.Registration;
import com.orange.cepheus.broker.model.Subscription;
import com.orange.ngsi.model.RegisterContext;
import com.orange.ngsi.model.SubscribeContext;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.net.URISyntaxException;
import java.sql.SQLException;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.Map;
import static com.orange.cepheus.broker.Util.createRegisterContextTemperature;
import static com.orange.cepheus.broker.Util.createSubscribeContextTemperature;
/**
* Tests for RegistrationsRepository
*/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@TestPropertySource(locations="classpath:test.properties")
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
public class RegistrationsRepositoryTest {
@Rule
public ExpectedException thrown= ExpectedException.none();
@Autowired
RegistrationsRepository registrationsRepository;
@Autowired
protected JdbcTemplate jdbcTemplate;
@Before
public void init() throws SQLException {
jdbcTemplate.execute("delete from t_registrations");
}
@Test
public void saveRegistrationTest() throws URISyntaxException, RegistrationPersistenceException {
RegisterContext registerContext = createRegisterContextTemperature();
registerContext.setRegistrationId("12345");
Registration registration = new Registration(Instant.now().plus(1, ChronoUnit.DAYS), registerContext);
registrationsRepository.saveRegistration(registration);
Map<String, Registration> registrations = registrationsRepository.getAllRegistrations();
Assert.assertEquals(1, registrations.size());
Assert.assertEquals(registration.getExpirationDate(), registrations.get("12345").getExpirationDate());
Assert.assertEquals(registerContext.getDuration(), registrations.get("12345").getRegisterContext().getDuration());
}
@Test
public void saveRegistrationWithDuplicateKeyExceptionTest() throws URISyntaxException, RegistrationPersistenceException {
thrown.expect(RegistrationPersistenceException.class);
RegisterContext registerContext = createRegisterContextTemperature();
registerContext.setRegistrationId("12345");
Registration registration = new Registration(Instant.now().plus(1, ChronoUnit.DAYS), registerContext);
registrationsRepository.saveRegistration(registration);
registrationsRepository.saveRegistration(registration);
}
@Test
public void updateRegistrationTest() throws URISyntaxException, RegistrationPersistenceException {
RegisterContext registerContext = createRegisterContextTemperature();
registerContext.setRegistrationId("12345");
Registration registration = new Registration(Instant.now().plus(1, ChronoUnit.DAYS), registerContext);
registrationsRepository.saveRegistration(registration);
Map<String, Registration> registrations = registrationsRepository.getAllRegistrations();
Assert.assertEquals(1, registrations.size());
Assert.assertEquals("PT10S", registrations.get("12345").getRegisterContext().getDuration());
registerContext.setDuration("PT1D");
registration.setExpirationDate(Instant.now().plus(1, ChronoUnit.DAYS));
registrationsRepository.updateRegistration(registration);
registrations = registrationsRepository.getAllRegistrations();
Assert.assertEquals(1, registrations.size());
Assert.assertEquals("PT1D", registrations.get("12345").getRegisterContext().getDuration());
Assert.assertEquals(registration.getExpirationDate(), registrations.get("12345").getExpirationDate());
}
@Test
public void updateRegistrationWithExceptionTest() throws URISyntaxException, RegistrationPersistenceException {
thrown.expect(RegistrationPersistenceException.class);
Registration registration = new Registration();
registration.setRegisterContext(new RegisterContext());
registrationsRepository.updateRegistration(registration);
}
@Test
public void removeRegistrationTest() throws URISyntaxException, RegistrationPersistenceException {
RegisterContext registerContext = createRegisterContextTemperature();
registerContext.setRegistrationId("12345");
Registration registration = new Registration(Instant.now().plus(1, ChronoUnit.DAYS), registerContext);
registrationsRepository.saveRegistration(registration);
Assert.assertEquals(1, registrationsRepository.getAllRegistrations().size());
registrationsRepository.removeRegistration("12345");
Assert.assertEquals(0, registrationsRepository.getAllRegistrations().size());
}
@Test
public void getAllRegistrationsTest() throws URISyntaxException, RegistrationPersistenceException {
RegisterContext registerContext = createRegisterContextTemperature();
registerContext.setRegistrationId("12345");
Registration registration = new Registration(Instant.now().plus(1, ChronoUnit.DAYS), registerContext);
registrationsRepository.saveRegistration(registration);
RegisterContext registerContext2 = createRegisterContextTemperature();
registerContext2.setRegistrationId("12346");
Registration registration2 = new Registration(Instant.now().plus(1, ChronoUnit.DAYS), registerContext2);
registrationsRepository.saveRegistration(registration2);
RegisterContext registerContext3 = createRegisterContextTemperature();
registerContext3.setRegistrationId("12347");
Registration registration3 = new Registration(Instant.now().plus(1, ChronoUnit.DAYS), registerContext3);
registrationsRepository.saveRegistration(registration3);
Assert.assertEquals(3, registrationsRepository.getAllRegistrations().size());
}
@Test
public void getAllRegistrationsWithExceptionTest() throws URISyntaxException, RegistrationPersistenceException {
thrown.expect(RegistrationPersistenceException.class);
Instant expirationDate = Instant.now().plus(1, ChronoUnit.DAYS);
jdbcTemplate.update("insert into t_registrations(id,expirationDate,registerContext) values(?,?,?)", "12345", expirationDate.toString(), "aaaaaa");
Map<String, Registration> registrations = registrationsRepository.getAllRegistrations();
}
@Test
public void getAllRegistrationsEmptyTest() throws URISyntaxException, RegistrationPersistenceException {
Assert.assertEquals(0, registrationsRepository.getAllRegistrations().size());
}
@Test
public void getRegistrationTest() throws URISyntaxException, RegistrationPersistenceException, EmptyResultDataAccessException {
RegisterContext registerContext = createRegisterContextTemperature();
registerContext.setRegistrationId("12345");
Instant expirationDate = Instant.now().plus(1, ChronoUnit.DAYS);
Registration registration = new Registration(expirationDate, registerContext);
registrationsRepository.saveRegistration(registration);
Registration foundRegistration = registrationsRepository.getRegistration("12345");
Assert.assertNotNull(foundRegistration);
Assert.assertEquals(expirationDate, foundRegistration.getExpirationDate());
}
@Test
public void getRegistrationWhichNotExistTest() throws URISyntaxException, RegistrationPersistenceException, EmptyResultDataAccessException {
thrown.expect(EmptyResultDataAccessException.class);
registrationsRepository.getRegistration("12345");
}
@Test
public void getRegistrationWithExceptionTest() throws URISyntaxException, RegistrationPersistenceException, EmptyResultDataAccessException {
thrown.expect(RegistrationPersistenceException.class);
Instant expirationDate = Instant.now().plus(1, ChronoUnit.DAYS);
jdbcTemplate.update("insert into t_registrations(id,expirationDate,registerContext) values(?,?,?)", "12345", expirationDate.toString(), "aaaaaa");
Registration foundRegistration = registrationsRepository.getRegistration("12345");
}
}