Project

General

Profile

1
package eu.dnetlib.data.mdstore;
2

    
3
import java.util.List;
4

    
5
import com.google.common.collect.Lists;
6
import com.mongodb.BasicDBObject;
7
import com.mongodb.client.MongoCollection;
8
import com.mongodb.client.model.Filters;
9
import eu.dnetlib.data.mdstore.model.MDStoreManagerInfo;
10
import org.apache.commons.lang3.StringUtils;
11
import org.bson.Document;
12
import org.junit.Before;
13
import org.junit.Test;
14
import org.junit.Test.None;
15
import org.springframework.beans.factory.annotation.Autowired;
16

    
17
import static eu.dnetlib.data.mdstore.MDStoreConstants.*;
18
import static org.junit.Assert.*;
19

    
20
/**
21
 * Created by claudio on 22/03/2017.
22
 */
23
public class MDStoreTransactionManagerTest extends AbstractMDStoreTest {
24

    
25
	@Autowired
26
	private MDStoreTransactionManager transactionManager;
27

    
28
	@Before
29
	public void setUp() throws MDStoreException {
30
		getCollection(METADATA_NAME, MDStoreManagerInfo.class).deleteMany(new BasicDBObject());
31
		getCollection(METADATA_MANAGER_TABLE, MDStoreManagerInfo.class).deleteMany(new BasicDBObject());
32
	}
33

    
34
	@Test(expected = None.class)
35
	public void testInit() throws MDStoreException {
36
		final MongoCollection<MDStoreManagerInfo> managerTable = getCollection(METADATA_MANAGER_TABLE, MDStoreManagerInfo.class);
37
		final List<Document> indexes = Lists.newArrayList(managerTable.listIndexes());
38
		assertEquals(2, indexes.size());
39
		assertTrue(indexes.stream().anyMatch(idx -> ((Document) idx.get("key")).containsKey(MDID)));
40
		transactionManager.verifyConsistency();
41
	}
42

    
43
	@Test
44
	public void testCreateDrop() throws MDStoreException {
45
		final MongoCollection<MDStoreManagerInfo> managerTable = getCollection(METADATA_MANAGER_TABLE, MDStoreManagerInfo.class);
46

    
47
		final String mdId = mockMDID();
48
		final String internalId = transactionManager.createMDStore(mdId);
49
		assertTrue(StringUtils.isNotBlank(internalId));
50
		final MDStoreManagerInfo find = managerTable.find(Filters.eq(CURRENT_ID, internalId)).first();
51
		assertNotNull(find);
52
		assertEquals(internalId, find.getCurrentId());
53

    
54
		transactionManager.dropMDStore(mdId);
55
		assertNull(managerTable.find(Filters.eq(MDID, mdId)).first());
56
	}
57

    
58
	@Test
59
	public void testTransaction() throws MDStoreException {
60
		final String mdId = mockMDID();
61
		transactionManager.createMDStore(mdId);
62
		final String transactionId = transactionManager.startTransaction(mdId, true);
63

    
64
		final MongoCollection<MDStoreManagerInfo> managerTable = getCollection(METADATA_MANAGER_TABLE, MDStoreManagerInfo.class);
65
		final MDStoreManagerInfo find = managerTable.find(Filters.eq(MDID, mdId)).first();
66
		assertEquals(1, find.getTransactions().size());
67
		assertTrue(find.getTransactions().stream().anyMatch(t -> transactionId.equals(t.getId())));
68

    
69
	}
70

    
71
}
(5-5/5)