Skip to content

Commit c04dbf7

Browse files
authored
Cleanup of SubscriptionRepeatHandlerDB Subscription is updated (#91)
* Added SubscriptionRepeatHandlerDB cleanup when Subscription is updated or removed. * Added unit tests. * Added one stacktrace to log error message. * Added one stacktrace to log error message. * Fix merge conflicts. * Changed one varaible name. * Updated according to review comments. * Fix issues after merge. * Fixed more merge issues. * Solved more merge issues. * Fixed more merge issues. * Updates according to review comments.
1 parent 92628cf commit c04dbf7

File tree

4 files changed

+125
-4
lines changed

4 files changed

+125
-4
lines changed

src/main/java/com/ericsson/ei/repository/ISubscriptionRepository.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
import java.util.ArrayList;
2020

21+
import com.ericsson.ei.mongodbhandler.MongoDBHandler;
22+
2123
public interface ISubscriptionRepository {
2224

2325
ArrayList<String> getSubscription(String name);
@@ -28,4 +30,6 @@ public interface ISubscriptionRepository {
2830

2931
boolean addSubscription(String subscription);
3032

33+
MongoDBHandler getMongoDbHandler();
34+
3135
}

src/main/java/com/ericsson/ei/repository/SubscriptionRepository.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
import com.ericsson.ei.mongodbhandler.MongoDBHandler;
2626

27+
2728
@Component
2829
public class SubscriptionRepository implements ISubscriptionRepository {
2930

@@ -57,4 +58,8 @@ public boolean deleteSubscription(String query) {
5758
return mongoDBHandler.dropDocument(dataBaseName, collectionName, query);
5859
}
5960

61+
@Override
62+
public MongoDBHandler getMongoDbHandler() {
63+
return mongoDBHandler;
64+
}
6065
}

src/main/java/com/ericsson/ei/services/SubscriptionService.java

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,22 @@
2828

2929
import com.ericsson.ei.controller.model.Subscription;
3030
import com.ericsson.ei.exception.SubscriptionNotFoundException;
31+
import com.ericsson.ei.mongodbhandler.MongoDBHandler;
3132
import com.ericsson.ei.repository.ISubscriptionRepository;
3233
import com.fasterxml.jackson.core.JsonProcessingException;
3334
import com.fasterxml.jackson.databind.ObjectMapper;
3435

3536
@Component
3637
public class SubscriptionService implements ISubscriptionService {
3738

38-
@Value("${spring.application.name}")
39-
private String SpringApplicationName;
39+
@Value("${spring.application.name}") private String SpringApplicationName;
40+
41+
@Value("${spring.data.mongodb.database}") private String dataBaseName;
42+
43+
@Value("${subscription.collection.repeatFlagHandlerName}") private String repeatFlagHandlerCollection;
4044

4145
private static final String SUBSCRIPTION_NAME = "{'subscriptionName':'%s'}";
46+
private static final String SUBSCRIPTION_ID = "{'subscriptionId':'%s'}";
4247
private static final String USER_NAME = "{'userName':'%s'}";
4348

4449
@Autowired
@@ -93,19 +98,38 @@ public boolean doSubscriptionExist(String name, String userName) {
9398
@Override
9499
public boolean modifySubscription(Subscription subscription, String name, String userName) {
95100
ObjectMapper mapper = new ObjectMapper();
101+
boolean result = false;
96102
try {
97103
String StringSubscription = mapper.writeValueAsString(subscription);
104+
98105
String query = generateQuery(name, userName);
99-
return subscriptionRepository.modifySubscription(query, StringSubscription);
106+
result = subscriptionRepository.modifySubscription(query, StringSubscription);
107+
if (result) {
108+
String subscriptionIdQuery = String.format(SUBSCRIPTION_ID, name);
109+
if (!cleanSubscriptionRepeatFlagHandlerDb(subscriptionIdQuery)) {
110+
LOG.error("Failed to clean subscription \"" + name + "\" matched AggregatedObjIds from RepeatFlagHandler database");
111+
}
112+
}
113+
100114
} catch (JsonProcessingException e) {
115+
LOG.error(e.getMessage(), e);
101116
return false;
102117
}
118+
return result;
103119
}
104120

105121
@Override
106122
public boolean deleteSubscription(String name, String userName) {
107123
String query = generateQuery(name, userName);
108-
return subscriptionRepository.deleteSubscription(query);
124+
boolean result = subscriptionRepository.deleteSubscription(query);
125+
126+
if (result) {
127+
String subscriptionIdQuery = String.format(SUBSCRIPTION_ID, name);
128+
if(!cleanSubscriptionRepeatFlagHandlerDb(subscriptionIdQuery)) {
129+
LOG.error("Failed to clean subscription \"" + name + "\" matched AggregatedObjIds from RepeatFlagHandler database");
130+
}
131+
}
132+
return result;
109133
}
110134

111135
@Override
@@ -130,6 +154,12 @@ public List<Subscription> getSubscription() throws SubscriptionNotFoundException
130154
}
131155
return subscriptions;
132156
}
157+
158+
private boolean cleanSubscriptionRepeatFlagHandlerDb(String subscriptionNameQuery) {
159+
LOG.debug("Cleaning and removing matched subscriptions AggrObjIds in ReapeatHandlerFlag database with query: " + subscriptionNameQuery);
160+
MongoDBHandler mongoDbHandler = subscriptionRepository.getMongoDbHandler();
161+
return mongoDbHandler.dropDocument(dataBaseName, repeatFlagHandlerCollection, subscriptionNameQuery);
162+
}
133163

134164
/**
135165
* This method generate query for mongoDB

src/test/java/com/ericsson/ei/subscription/SubscriptionServiceTest.java

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.slf4j.Logger;
3737
import org.slf4j.LoggerFactory;
3838
import org.springframework.beans.factory.annotation.Autowired;
39+
import org.springframework.beans.factory.annotation.Value;
3940
import org.springframework.boot.test.context.SpringBootTest;
4041
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
4142

@@ -45,6 +46,7 @@
4546
import com.ericsson.ei.mongodbhandler.MongoDBHandler;
4647
import com.ericsson.ei.services.ISubscriptionService;
4748
import com.fasterxml.jackson.databind.ObjectMapper;
49+
import com.mongodb.BasicDBObject;
4850
import com.mongodb.MongoClient;
4951

5052
import de.flapdoodle.embed.mongo.distribution.Version;
@@ -56,6 +58,10 @@ public class SubscriptionServiceTest {
5658

5759
final static Logger LOGGER = (Logger) LoggerFactory.getLogger(SubscriptionServiceTest.class);
5860

61+
@Value("${spring.data.mongodb.database}") private String dataBaseName;
62+
63+
@Value("${subscription.collection.repeatFlagHandlerName}") private String repeatFlagHandlerCollection;
64+
5965
String subscriptionName;
6066
String userName = "ABC"; // initialized with "ABC", as test json file has this name as userName
6167

@@ -226,6 +232,82 @@ public void testDeleteSubscriptionsByName() {
226232
} catch (IOException | JSONException e) {
227233
}
228234
}
235+
236+
@Test
237+
public void testDeleteSubscriptionsByNameAndCleanUpOfRepeatHandlerDb() {
238+
// Insert Subscription
239+
Subscription subscription2;
240+
try {
241+
subscription2 = mapper.readValue(jsonArray.getJSONObject(0).toString(), Subscription.class);
242+
243+
244+
subscriptionService.addSubscription(subscription2);
245+
String expectedSubscriptionName = subscription2.getSubscriptionName();
246+
247+
// Inserting a matched subscription AggrObjIds document to RepeatHandlerDb database collection.
248+
BasicDBObject docInput = new BasicDBObject();
249+
docInput.put("subscriptionId", expectedSubscriptionName);
250+
mongoDBHandler.insertDocument(dataBaseName, repeatFlagHandlerCollection, docInput.toString());
251+
252+
boolean deleteSubscription = subscriptionService.deleteSubscription(expectedSubscriptionName, "");
253+
assertEquals(deleteSubscription, true);
254+
255+
// Checking if it removes the Subscription Matched AggrObjIds document from RepeatHandlerDb database collection.
256+
String subscriptionIdMatchedAggrIdObjQuery = "{ \"subscriptionId\" : \"" + expectedSubscriptionName + "\"}";
257+
ArrayList<String> result = mongoDBHandler.find(dataBaseName, repeatFlagHandlerCollection, subscriptionIdMatchedAggrIdObjQuery);
258+
259+
assertEquals("[]", result.toString());
260+
} catch (IOException | JSONException e) {
261+
LOGGER.error(e.getMessage(), e);
262+
}
263+
}
264+
265+
@Test
266+
public void testUpdateSubscriptionAndCleanUpOfRepeatHandlerDb() {
267+
Subscription subscription;
268+
try {
269+
// Insert Subscription
270+
Subscription subscription2 = mapper.readValue(jsonArray.getJSONObject(0).toString(), Subscription.class);
271+
String expectedSubscriptionName = subscription2.getSubscriptionName();
272+
subscriptionService.addSubscription(subscription2);
273+
// Fetch the inserted subscription
274+
subscription2 = null;
275+
subscription2 = subscriptionService.getSubscription(expectedSubscriptionName, null);
276+
subscriptionName = subscription2.getSubscriptionName();
277+
String subscriptionUserName = subscription2.getUserName();
278+
279+
assertEquals(subscriptionName, expectedSubscriptionName);
280+
281+
// Inserting a matched subscription AggrObjIds document to RepeatHandlerDb database collection.
282+
BasicDBObject docInput = new BasicDBObject();
283+
docInput.put("subscriptionId", subscriptionName);
284+
mongoDBHandler.insertDocument(dataBaseName, repeatFlagHandlerCollection, docInput.toString());
285+
286+
// Updating subscription2(subscriptionName=Subscription_Test) with
287+
// the subscription(subscriptionName=Subscription_Test_Modify)
288+
subscription = mapper.readValue(jsonArray.getJSONObject(1).toString(), Subscription.class);
289+
String expectedModifiedSubscriptionName = subscription2.getSubscriptionName();
290+
boolean addSubscription = subscriptionService.modifySubscription(subscription, subscriptionName, null);
291+
292+
// test update done successfully
293+
assertEquals(addSubscription, true);
294+
subscription = null;
295+
subscription = subscriptionService.getSubscription(expectedModifiedSubscriptionName, null);
296+
subscriptionName = subscription.getSubscriptionName();
297+
assertEquals(subscriptionName, expectedModifiedSubscriptionName);
298+
299+
// Checking if it removes the Subscription Matched AggrObjIds document from RepeatHandlerDb database collection.
300+
String subscriptionIdMatchedAggrIdObjQuery = "{ \"subscriptionId\" : \"" + subscriptionName + "\"}";
301+
List<String> result = mongoDBHandler.find(dataBaseName, repeatFlagHandlerCollection, subscriptionIdMatchedAggrIdObjQuery);
302+
303+
assertEquals("[]", result.toString());
304+
305+
// deleting the test data
306+
deleteSubscriptionsByName(subscriptionName, "");
307+
} catch (Exception e) {
308+
}
309+
}
310+
229311

230312
@Test(expected = SubscriptionNotFoundException.class)
231313
public void testExceptionGetSubscriptionsByName() throws SubscriptionNotFoundException {

0 commit comments

Comments
 (0)