Java tutorial
/* * 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.SubscribeContext; import org.hamcrest.Matcher; import org.hamcrest.MatcherAssert; 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.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.createSubscribeContextTemperature; /** * Tests for SubscriptionsRepository */ @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = Application.class) @TestPropertySource(locations = "classpath:test.properties") @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD) public class SubscriptionsRepositoryTest { @Rule public ExpectedException thrown = ExpectedException.none(); @Autowired SubscriptionsRepository subscriptionsRepository; @Autowired protected JdbcTemplate jdbcTemplate; @Before public void init() throws SQLException { jdbcTemplate.execute("delete from t_subscriptions"); } @Test public void saveSubscriptionTest() throws URISyntaxException, SubscriptionPersistenceException { SubscribeContext subscribeContext = createSubscribeContextTemperature(); Subscription subscription = new Subscription("12345", Instant.now().plus(1, ChronoUnit.DAYS), subscribeContext); subscriptionsRepository.saveSubscription(subscription); Map<String, Subscription> subscriptions = subscriptionsRepository.getAllSubscriptions(); Assert.assertEquals(1, subscriptions.size()); Assert.assertEquals(subscription.getSubscriptionId(), subscriptions.get("12345").getSubscriptionId()); Assert.assertEquals(subscription.getExpirationDate(), subscriptions.get("12345").getExpirationDate()); Assert.assertEquals(subscribeContext.getDuration(), subscriptions.get("12345").getSubscribeContext().getDuration()); } @Test public void saveSubscriptionWithExceptionTest() throws URISyntaxException, SubscriptionPersistenceException { thrown.expect(SubscriptionPersistenceException.class); Subscription subscription = new Subscription(); subscription.setSubscribeContext(new SubscribeContext()); subscriptionsRepository.saveSubscription(subscription); } @Test public void saveSubscriptionWithDuplicateKeyExceptionTest() throws URISyntaxException, SubscriptionPersistenceException { thrown.expect(SubscriptionPersistenceException.class); SubscribeContext subscribeContext = createSubscribeContextTemperature(); Subscription subscription = new Subscription("12345", Instant.now().plus(1, ChronoUnit.DAYS), subscribeContext); subscriptionsRepository.saveSubscription(subscription); subscriptionsRepository.saveSubscription(subscription); } @Test public void updateSubscriptionTest() throws URISyntaxException, SubscriptionPersistenceException { SubscribeContext subscribeContext = createSubscribeContextTemperature(); Subscription subscription = new Subscription("12345", Instant.now().plus(1, ChronoUnit.DAYS), subscribeContext); subscriptionsRepository.saveSubscription(subscription); Map<String, Subscription> subscriptions = subscriptionsRepository.getAllSubscriptions(); Assert.assertEquals(1, subscriptions.size()); Assert.assertEquals("P1M", subscriptions.get("12345").getSubscribeContext().getDuration()); subscribeContext.setDuration("PT1D"); subscription.setExpirationDate(Instant.now().plus(1, ChronoUnit.DAYS)); subscriptionsRepository.updateSubscription(subscription); subscriptions = subscriptionsRepository.getAllSubscriptions(); Assert.assertEquals(1, subscriptions.size()); Assert.assertEquals("PT1D", subscriptions.get("12345").getSubscribeContext().getDuration()); Assert.assertEquals(subscription.getExpirationDate(), subscriptions.get("12345").getExpirationDate()); } @Test public void updateSubscriptionWithExceptionTest() throws URISyntaxException, SubscriptionPersistenceException { thrown.expect(SubscriptionPersistenceException.class); Subscription subscription = new Subscription(); subscription.setSubscribeContext(new SubscribeContext()); subscriptionsRepository.updateSubscription(subscription); } @Test public void removeSubscriptionTest() throws URISyntaxException, SubscriptionPersistenceException { SubscribeContext subscribeContext = createSubscribeContextTemperature(); Subscription subscription = new Subscription("12345", Instant.now().plus(1, ChronoUnit.DAYS), subscribeContext); subscriptionsRepository.saveSubscription(subscription); Assert.assertEquals(1, subscriptionsRepository.getAllSubscriptions().size()); subscriptionsRepository.removeSubscription("12345"); Assert.assertEquals(0, subscriptionsRepository.getAllSubscriptions().size()); } @Test public void getAllSubscriptionsTest() throws URISyntaxException, SubscriptionPersistenceException { SubscribeContext subscribeContext = createSubscribeContextTemperature(); Subscription subscription = new Subscription("12345", Instant.now().plus(1, ChronoUnit.DAYS), subscribeContext); subscriptionsRepository.saveSubscription(subscription); SubscribeContext subscribeContext2 = createSubscribeContextTemperature(); Subscription subscription2 = new Subscription("12346", Instant.now().plus(1, ChronoUnit.DAYS), subscribeContext2); subscriptionsRepository.saveSubscription(subscription2); SubscribeContext subscribeContext3 = createSubscribeContextTemperature(); Subscription subscription3 = new Subscription("12347", Instant.now().plus(1, ChronoUnit.DAYS), subscribeContext3); subscriptionsRepository.saveSubscription(subscription3); Assert.assertEquals(3, subscriptionsRepository.getAllSubscriptions().size()); } @Test public void getAllSubscriptionsWithExceptionTest() throws SubscriptionPersistenceException { thrown.expect(SubscriptionPersistenceException.class); Instant expirationDate = Instant.now().plus(1, ChronoUnit.DAYS); jdbcTemplate.update("insert into t_subscriptions(id,expirationDate,subscribeContext) values(?,?,?)", "12345", expirationDate.toString(), "aaaaaa"); Map<String, Subscription> subscriptions = subscriptionsRepository.getAllSubscriptions(); } }