/** * Copyright 2014 Lockheed Martin Corporation * * 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 streamflow.datastore.mongodb.impl; import com.github.fakemongo.junit.FongoRule; import java.util.List; import streamflow.model.ResourceEntry; import streamflow.model.test.IntegrationTest; import static org.junit.Assert.*; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.experimental.categories.Category; import org.mongodb.morphia.Datastore; import org.mongodb.morphia.Morphia; @Category(IntegrationTest.class) public class MongoResourceEntryDaoTest { @Rule public FongoRule fongoRule = new FongoRule(); private MongoResourceEntryDao resourceEntryDao; @Before public void setUp() { Datastore datastore = new Morphia().createDatastore(fongoRule.getMongo(), "streamflow"); resourceEntryDao = new MongoResourceEntryDao(datastore); // Preload some items into the datastore ResourceEntry resourceEntry1 = new ResourceEntry(); resourceEntry1.setId("first"); resourceEntry1.setName("First Resource Entry"); resourceEntry1.setResource("resource-1"); resourceEntry1.setUserId("user1"); ResourceEntry resourceEntry2 = new ResourceEntry(); resourceEntry2.setId("second"); resourceEntry2.setName("Second Resource Entry"); resourceEntry2.setResource("resource-1"); resourceEntry2.setUserId("user2"); ResourceEntry resourceEntry3 = new ResourceEntry(); resourceEntry3.setId("third"); resourceEntry3.setName("Third Resource Entry"); resourceEntry3.setResource("resource-1"); resourceEntry3.setUserId("user1"); ResourceEntry resourceEntry4 = new ResourceEntry(); resourceEntry4.setId("fourth"); resourceEntry4.setName("First Resource Entry"); resourceEntry4.setResource("resource-1"); resourceEntry4.setUserId(null); ResourceEntry resourceEntry5 = new ResourceEntry(); resourceEntry5.setId("fifth"); resourceEntry5.setName("Fifth Resource Entry"); resourceEntry5.setResource("resource-2"); resourceEntry5.setUserId("user1"); ResourceEntry resourceEntry6 = new ResourceEntry(); resourceEntry6.setId("sixth"); resourceEntry6.setName("Sixth Resource Entry"); resourceEntry6.setResource("resource-2"); resourceEntry6.setUserId(null); resourceEntryDao.save(resourceEntry1); resourceEntryDao.save(resourceEntry2); resourceEntryDao.save(resourceEntry3); resourceEntryDao.save(resourceEntry4); resourceEntryDao.save(resourceEntry5); resourceEntryDao.save(resourceEntry6); } @Test public void saveResourceEntryForUser() { ResourceEntry requestResourceEntry = new ResourceEntry(); requestResourceEntry.setId("seventh"); requestResourceEntry.setName("Seventh Resource"); requestResourceEntry.setResource("resource-1"); requestResourceEntry.setUserId("userToOverride"); ResourceEntry responseTopology = resourceEntryDao.save(requestResourceEntry, "user1"); assertEquals("Response resource entry should override original user id in the resource entry", "user1", responseTopology.getUserId()); assertEquals("The resource entry count should increase to 3 for user1", 3, resourceEntryDao.findAllWithResource(requestResourceEntry.getResource(), "user1").size()); } @Test public void saveResourceEntryForAnonymous() { ResourceEntry requestResourceEntry = new ResourceEntry(); requestResourceEntry.setId("seventh"); requestResourceEntry.setName("Seventh Resource"); requestResourceEntry.setResource("resource-1"); requestResourceEntry.setUserId("userToOverride"); ResourceEntry responseTopology = resourceEntryDao.save(requestResourceEntry, null); assertNull("Response resource entry should override original user id in the resource entry", responseTopology.getUserId()); assertEquals("The resource entry count should increase to 2 for anonymous", 2, resourceEntryDao.findAllWithResource(requestResourceEntry.getResource(), null).size()); } @Test public void updateResourceEntryForUser() { ResourceEntry requestResourceEntry = new ResourceEntry(); requestResourceEntry.setId("first"); requestResourceEntry.setName("Updated Name"); requestResourceEntry.setDescription("Updated Description"); requestResourceEntry.setResource("resource-1"); ResourceEntry responseResourceEntry = resourceEntryDao.update(requestResourceEntry, "user1"); assertNotNull("The updated entry should be returned after saving", responseResourceEntry); assertEquals("Response entry name should match the requested entry name", requestResourceEntry.getName(), responseResourceEntry.getName()); assertEquals("The datastore should still have 2 entries for the specified user", 2, resourceEntryDao.findAllWithResource(requestResourceEntry.getResource(), "user1").size()); } @Test public void updateResourceEntryForAnonymous() { ResourceEntry requestResourceEntry = new ResourceEntry(); requestResourceEntry.setId("fourth"); requestResourceEntry.setName("Updated Name"); requestResourceEntry.setDescription("Updated Description"); requestResourceEntry.setResource("resource-1"); ResourceEntry responseResourceEntry = resourceEntryDao.update(requestResourceEntry, null); assertNotNull("The updated entry should be returned after saving", responseResourceEntry); assertEquals("Response entry name should match the requested entry name", requestResourceEntry.getName(), responseResourceEntry.getName()); assertEquals("The datastore should still have 1 entry for the specified user", 1, resourceEntryDao.findAllWithResource(requestResourceEntry.getResource(), null).size()); } @Test public void checkIfResourceEntryExistsForUser() { assertTrue("Exists should return true for an entity with a valid ID", resourceEntryDao.exists("first", "user1")); assertFalse("Exists should return false for an entity with a invalid ID", resourceEntryDao.exists("second", "user1")); } @Test public void checkIfResourceEntryExistsForAnonymous() { assertTrue("Exists should return true for an entity with a valid ID", resourceEntryDao.exists("fourth", null)); assertFalse("Exists should return false for an entity with a invalid ID", resourceEntryDao.exists("second", null)); } @Test public void findAllWithResourceForUser() { List<ResourceEntry> resource1Entries = resourceEntryDao.findAllWithResource("resource-1", "user1"); assertEquals("There should be 2 entry for the user", 2, resource1Entries.size()); // Check proper sorting of the elements by label assertEquals("The first item in the entry list should have and id of \"first\"", "first", resource1Entries.get(0).getId()); assertEquals("The second item in the entry list should have and id of \"third\"", "third", resource1Entries.get(1).getId()); List<ResourceEntry> resource2Entries = resourceEntryDao.findAllWithResource("resource-2", "user1"); assertEquals("There should be 1 entry for the user", 1, resource2Entries.size()); // Check proper sorting of the elements by label assertEquals("The first item in the entry list should have and id of \"fifth\"", "fifth", resource2Entries.get(0).getId()); } @Test public void findAllWithResourceForAnonymous() { List<ResourceEntry> resource1Entries = resourceEntryDao.findAllWithResource("resource-1", null); assertEquals("There should be 2 entry for the user", 1, resource1Entries.size()); // Check proper sorting of the elements by label assertEquals("The first item in the entry list should have and id of \"fourth\"", "fourth", resource1Entries.get(0).getId()); List<ResourceEntry> resource2Entries = resourceEntryDao.findAllWithResource("resource-2", null); assertEquals("There should be 1 entry for the user", 1, resource2Entries.size()); // Check proper sorting of the elements by label assertEquals("The first item in the entry list should have and id of \"sixth\"", "sixth", resource2Entries.get(0).getId()); } @Test public void findResourceEntryByIdForUser() { ResourceEntry validResourceEntry = resourceEntryDao.findById("first", "user1"); assertNotNull("The returned entry should not be null with valid query values", validResourceEntry); ResourceEntry invalidTopology = resourceEntryDao.findById("second", "user1"); assertNull("The returned entry should be null with invalid query values", invalidTopology); } @Test public void findResourceEntryByIdForAnonymous() { ResourceEntry validResourceEntry = resourceEntryDao.findById("fourth", null); assertNotNull("The returned entry should not be null with valid query values", validResourceEntry); ResourceEntry invalidResourceEntry = resourceEntryDao.findById("second", null); assertNull("The returned entry should be null with invalid query values", invalidResourceEntry); } @Test public void findResourceEntryByResourceAndNameForUser() { ResourceEntry validResourceEntry = resourceEntryDao.findByResourceAndName( "resource-1", "First Resource Entry", "user1"); assertNotNull("The returned entry should not be null with valid query values", validResourceEntry); ResourceEntry invalidResourceEntry = resourceEntryDao.findByResourceAndName( "resource-1", "Fifth Resource Entry", "user1"); assertNull("The returned entry should be null with invalid query values", invalidResourceEntry); } @Test public void findResourceEntryByResourceAndNameForAnonymous() { ResourceEntry validResourceEntry = resourceEntryDao.findByResourceAndName( "resource-2", "Sixth Resource Entry", null); assertNotNull("The returned entry should not be null with valid query values", validResourceEntry); ResourceEntry invalidResourceEntry = resourceEntryDao.findByResourceAndName( "resource-2", "First Resource Entry", null); assertNull("The returned entry should be null with invalid query values", invalidResourceEntry); } @Test public void deleteResourceEntryByReferenceForUser() { ResourceEntry resourceEntry = resourceEntryDao.findById("first", "user1"); resourceEntryDao.delete(resourceEntry, "user1"); assertEquals("The datastore should have 1 entity after the delete", 1, resourceEntryDao.findAllWithResource("resource-1", "user1").size()); assertEquals("The datastore should have 1 entity after the delete", 1, resourceEntryDao.findAllWithResource("resource-2", "user1").size()); } @Test public void deleteResourceEntryByReferenceForAnonymous() { ResourceEntry resourceEntry = resourceEntryDao.findById("fourth", null); resourceEntryDao.delete(resourceEntry, null); assertEquals("The datastore should have 0 entities after the delete", 0, resourceEntryDao.findAllWithResource("resource-1", null).size()); assertEquals("The datastore should have 1 entity after the delete", 1, resourceEntryDao.findAllWithResource("resource-2", null).size()); } @Test public void deleteResourceEntryByIdForUser() { resourceEntryDao.deleteById("first", "user1"); assertEquals("The datastore should have 1 entity after the delete", 1, resourceEntryDao.findAllWithResource("resource-1", "user1").size()); assertEquals("The datastore should have 1 entity after the delete", 1, resourceEntryDao.findAllWithResource("resource-2", null).size()); resourceEntryDao.deleteById("second", "user1"); assertEquals("The datastore should have 0 entities after the delete", 1, resourceEntryDao.findAllWithResource("resource-1", "user1").size()); assertEquals("The datastore should have 1 entity after the delete", 1, resourceEntryDao.findAllWithResource("resource-2", null).size()); } @Test public void deleteResourceEntryByIdForAnonymous() { resourceEntryDao.deleteById("fourth", null); assertEquals("The datastore should have 0 entities after the delete", 0, resourceEntryDao.findAllWithResource("resource-1", null).size()); assertEquals("The datastore should have 1 entity after the delete", 1, resourceEntryDao.findAllWithResource("resource-2", null).size()); resourceEntryDao.deleteById("second", null); assertEquals("The datastore should have 0 entities after the delete", 0, resourceEntryDao.findAllWithResource("resource-1", null).size()); assertEquals("The datastore should have 1 entity after the delete", 1, resourceEntryDao.findAllWithResource("resource-2", null).size()); } }