package com.thinkbiganalytics.metadata.jpa.feed; /*- * #%L * kylo-operational-metadata-jpa * %% * Copyright (C) 2017 ThinkBig Analytics * %% * 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. * #L% */ import com.thinkbiganalytics.metadata.config.OperationalMetadataConfig; import com.thinkbiganalytics.metadata.core.feed.BaseFeed; import com.thinkbiganalytics.metadata.jpa.TestJpaConfiguration; import com.thinkbiganalytics.metadata.jpa.feed.security.FeedOpsAccessControlRepository; import com.thinkbiganalytics.metadata.jpa.feed.security.JpaFeedOpsAclEntry; import com.thinkbiganalytics.metadata.jpa.support.GenericQueryDslFilter; import com.thinkbiganalytics.security.AccessController; import com.thinkbiganalytics.spring.CommonsSpringConfiguration; import com.thinkbiganalytics.test.security.WithMockJaasUser; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.stream.StreamSupport; @SuppressWarnings("SpringJavaAutowiringInspection") @RunWith(SpringJUnit4ClassRunner.class) @TestPropertySource(locations = "classpath:test-application.properties") @SpringApplicationConfiguration(classes = {CommonsSpringConfiguration.class, OperationalMetadataConfig.class, TestJpaConfiguration.class, OpsManagerFeedRepositoryTest.class}) @Transactional @Configuration public class OpsManagerFeedRepositoryTest { @Bean public AccessController accessController() { AccessController mock = Mockito.mock(AccessController.class); Mockito.when(mock.isEntityAccessControlled()).thenReturn(true); return mock; } @Autowired TestOpsManagerFeedRepository repo; @Autowired FeedOpsAccessControlRepository aclRepo; @WithMockJaasUser(username = "dladmin", password = "secret", authorities = {"admin", "user"}) @Test public void findFeedUsingPrincipalsName_MatchingUserNameAndFeedName() throws Exception { JpaOpsManagerFeed feed = new JpaOpsManagerFeed(OpsManagerFeedId.create(), "dladmin"); repo.save(feed); List<String> feedNames = repo.getFeedNamesForCurrentUser(); Assert.assertEquals(1, feedNames.size()); Assert.assertEquals("dladmin", feedNames.get(0)); } @WithMockJaasUser(username = "dladmin", password = "secret", authorities = {"admin", "user"}) @Test public void findFeedUsingPrincipalsName_NonMatchingUserNameAndFeedName() throws Exception { JpaOpsManagerFeed feed = new JpaOpsManagerFeed(OpsManagerFeedId.create(), "non-matching-feed-name"); repo.save(feed); List<String> feedNames = repo.getFeedNamesForCurrentUser(); Assert.assertEquals(0, feedNames.size()); } @WithMockJaasUser(username = "dladmin", password = "secret", authorities = {"admin", "user"}) @Test public void findFeedNames_MatchingGroupAclEntry() throws Exception { JpaOpsManagerFeed feed = new JpaOpsManagerFeed(OpsManagerFeedId.create(), "feed-name"); repo.save(feed); BaseFeed.FeedId feedId = new BaseFeed.FeedId(feed.getId().getUuid()); JpaFeedOpsAclEntry dladminUserAcl = new JpaFeedOpsAclEntry(feedId, "dladmin", JpaFeedOpsAclEntry.PrincipalType.USER); aclRepo.save(dladminUserAcl); JpaFeedOpsAclEntry adminGroupAcl = new JpaFeedOpsAclEntry(feedId, "admin", JpaFeedOpsAclEntry.PrincipalType.GROUP); aclRepo.save(adminGroupAcl); List<String> feedNames = repo.getFeedNames(); Assert.assertEquals(1, feedNames.size()); Assert.assertEquals("feed-name", feedNames.get(0)); } @WithMockJaasUser(username = "dladmin", password = "secret", authorities = {"admin", "user"}) @Test public void findFeedNames_NoMatchingGroupMatchingUserAclEntry() throws Exception { JpaOpsManagerFeed feed = new JpaOpsManagerFeed(OpsManagerFeedId.create(), "feed-name"); repo.save(feed); BaseFeed.FeedId feedId = new BaseFeed.FeedId(feed.getId().getUuid()); JpaFeedOpsAclEntry dladminUserAcl = new JpaFeedOpsAclEntry(feedId, "dladmin", JpaFeedOpsAclEntry.PrincipalType.USER); aclRepo.save(dladminUserAcl); JpaFeedOpsAclEntry nonMatching = new JpaFeedOpsAclEntry(feedId, "NON_MATCHING", JpaFeedOpsAclEntry.PrincipalType.GROUP); aclRepo.save(nonMatching); List<String> feedNames = repo.getFeedNames(); Assert.assertEquals(1, feedNames.size()); } @WithMockJaasUser(username = "dladmin", password = "secret", authorities = {"admin", "user"}) @Test public void findFeedNames_NoMatchingGroupAclEntry() throws Exception { JpaOpsManagerFeed feed = new JpaOpsManagerFeed(OpsManagerFeedId.create(), "feed-name"); repo.save(feed); BaseFeed.FeedId feedId = new BaseFeed.FeedId(feed.getId().getUuid()); JpaFeedOpsAclEntry nonMatching = new JpaFeedOpsAclEntry(feedId, "NON_MATCHING", JpaFeedOpsAclEntry.PrincipalType.GROUP); aclRepo.save(nonMatching); List<String> feedNames = repo.getFeedNames(); Assert.assertEquals(0, feedNames.size()); } @WithMockJaasUser(username = "dladmin", password = "secret", authorities = {"admin", "user"}) @Test public void findFeedNames_BothMatchingAndNonMatchingGroupsAreSetInAclEntry() throws Exception { JpaOpsManagerFeed feed = new JpaOpsManagerFeed(OpsManagerFeedId.create(), "feed-name"); repo.save(feed); BaseFeed.FeedId feedId = new BaseFeed.FeedId(feed.getId().getUuid()); JpaFeedOpsAclEntry dladminUserAcl = new JpaFeedOpsAclEntry(feedId, "dladmin", JpaFeedOpsAclEntry.PrincipalType.USER); aclRepo.save(dladminUserAcl); JpaFeedOpsAclEntry nonMatching = new JpaFeedOpsAclEntry(feedId, "NON_MATCHING", JpaFeedOpsAclEntry.PrincipalType.GROUP); aclRepo.save(nonMatching); JpaFeedOpsAclEntry adminGroupAcl = new JpaFeedOpsAclEntry(feedId, "admin", JpaFeedOpsAclEntry.PrincipalType.GROUP); aclRepo.save(adminGroupAcl); List<String> feedNames = repo.getFeedNames(); Assert.assertEquals(1, feedNames.size()); Assert.assertEquals("feed-name", feedNames.get(0)); } @WithMockJaasUser(username = "dladmin", password = "secret", authorities = {"admin", "user"}) @Test public void findFeedNames_MultipleMatchingFeedsAndGroups() throws Exception { JpaOpsManagerFeed feed1 = new JpaOpsManagerFeed(OpsManagerFeedId.create(), "feed1-name"); repo.save(feed1); BaseFeed.FeedId feedId = new BaseFeed.FeedId(feed1.getId().getUuid()); JpaFeedOpsAclEntry dladminUserAcl = new JpaFeedOpsAclEntry(feedId, "dladmin", JpaFeedOpsAclEntry.PrincipalType.USER); aclRepo.save(dladminUserAcl); JpaFeedOpsAclEntry nonMatching = new JpaFeedOpsAclEntry(feedId, "NON_MATCHING", JpaFeedOpsAclEntry.PrincipalType.GROUP); aclRepo.save(nonMatching); JpaFeedOpsAclEntry adminGroupAcl = new JpaFeedOpsAclEntry(feedId, "admin", JpaFeedOpsAclEntry.PrincipalType.GROUP); aclRepo.save(adminGroupAcl); JpaOpsManagerFeed feed2 = new JpaOpsManagerFeed(OpsManagerFeedId.create(), "feed2-name"); repo.save(feed2); BaseFeed.FeedId feedId2 = new BaseFeed.FeedId(feed2.getId().getUuid()); JpaFeedOpsAclEntry userGroupAcl = new JpaFeedOpsAclEntry(feedId2, "user", JpaFeedOpsAclEntry.PrincipalType.GROUP); aclRepo.save(userGroupAcl); List<String> feedNames = repo.getFeedNames(); Assert.assertEquals(2, feedNames.size()); Assert.assertTrue(feedNames.contains("feed1-name")); Assert.assertTrue(feedNames.contains("feed2-name")); } @WithMockJaasUser(username = "dladmin", password = "secret", authorities = {"admin", "user"}) @Test public void findAll_NoMatchingGroupMatchingUserAclEntry() throws Exception { JpaOpsManagerFeed feed = new JpaOpsManagerFeed(OpsManagerFeedId.create(), "feed-name"); repo.save(feed); BaseFeed.FeedId feedId = new BaseFeed.FeedId(feed.getId().getUuid()); JpaFeedOpsAclEntry dladminUserAcl = new JpaFeedOpsAclEntry(feedId, "dladmin", JpaFeedOpsAclEntry.PrincipalType.USER); aclRepo.save(dladminUserAcl); JpaFeedOpsAclEntry nonMatching = new JpaFeedOpsAclEntry(feedId, "NON_MATCHING", JpaFeedOpsAclEntry.PrincipalType.GROUP); aclRepo.save(nonMatching); Iterable<JpaOpsManagerFeed> all = repo.findAll(); Assert.assertTrue(StreamSupport.stream(all.spliterator(), false) .allMatch(it -> it.getName().equals("feed-name"))); } @WithMockJaasUser(username = "dladmin", password = "secret", authorities = {"admin", "user"}) @Test public void findAll_NoMatchingGroupAclEntry() throws Exception { JpaOpsManagerFeed feed = new JpaOpsManagerFeed(OpsManagerFeedId.create(), "feed-name"); repo.save(feed); BaseFeed.FeedId feedId = new BaseFeed.FeedId(feed.getId().getUuid()); JpaFeedOpsAclEntry nonMatching = new JpaFeedOpsAclEntry(feedId, "NON_MATCHING", JpaFeedOpsAclEntry.PrincipalType.GROUP); aclRepo.save(nonMatching); Iterable<JpaOpsManagerFeed> all = repo.findAll(); Assert.assertFalse(StreamSupport.stream(all.spliterator(), false) .anyMatch(it -> it.getName().equals("feed-name"))); } @WithMockJaasUser(username = "dladmin", password = "secret", authorities = {"admin", "user"}) @Test public void findAllFilter_NoMatchingGroupMatchingUserAclEntry() throws Exception { JpaOpsManagerFeed feed = new JpaOpsManagerFeed(OpsManagerFeedId.create(), "feed-name"); repo.save(feed); BaseFeed.FeedId feedId = new BaseFeed.FeedId(feed.getId().getUuid()); JpaFeedOpsAclEntry dladminUserAcl = new JpaFeedOpsAclEntry(feedId, "dladmin", JpaFeedOpsAclEntry.PrincipalType.USER); aclRepo.save(dladminUserAcl); JpaFeedOpsAclEntry nonMatching = new JpaFeedOpsAclEntry(feedId, "NON_MATCHING", JpaFeedOpsAclEntry.PrincipalType.GROUP); aclRepo.save(nonMatching); QJpaOpsManagerFeed qFeed = QJpaOpsManagerFeed.jpaOpsManagerFeed; Iterable<JpaOpsManagerFeed> all = repo.findAll(GenericQueryDslFilter.buildFilter(qFeed, "name: feed-name")); Assert.assertTrue(StreamSupport.stream(all.spliterator(), false) .allMatch(it -> it.getName().equals("feed-name"))); } @WithMockJaasUser(username = "dladmin", password = "secret", authorities = {"admin", "user"}) @Test public void findAllFilter_NoMatchingGroupAclEntry() throws Exception { JpaOpsManagerFeed feed = new JpaOpsManagerFeed(OpsManagerFeedId.create(), "feed-name"); repo.save(feed); BaseFeed.FeedId feedId = new BaseFeed.FeedId(feed.getId().getUuid()); JpaFeedOpsAclEntry nonMatching = new JpaFeedOpsAclEntry(feedId, "NON_MATCHING", JpaFeedOpsAclEntry.PrincipalType.GROUP); aclRepo.save(nonMatching); QJpaOpsManagerFeed qFeed = QJpaOpsManagerFeed.jpaOpsManagerFeed; Iterable<JpaOpsManagerFeed> all = repo.findAll(GenericQueryDslFilter.buildFilter(qFeed, "name: feed-name")); Assert.assertFalse(StreamSupport.stream(all.spliterator(), false) .anyMatch(it -> it.getName().equals("feed-name"))); } @WithMockJaasUser(username = "dladmin", password = "secret", authorities = {"admin", "user"}) @Test public void findAllFilter_MatchingGroupButNoMatchingFilter() throws Exception { JpaOpsManagerFeed feed = new JpaOpsManagerFeed(OpsManagerFeedId.create(), "feed-name"); repo.save(feed); BaseFeed.FeedId feedId = new BaseFeed.FeedId(feed.getId().getUuid()); JpaFeedOpsAclEntry dladminUserAcl = new JpaFeedOpsAclEntry(feedId, "dladmin", JpaFeedOpsAclEntry.PrincipalType.USER); aclRepo.save(dladminUserAcl); JpaFeedOpsAclEntry nonMatching = new JpaFeedOpsAclEntry(feedId, "admin", JpaFeedOpsAclEntry.PrincipalType.GROUP); aclRepo.save(nonMatching); QJpaOpsManagerFeed qFeed = QJpaOpsManagerFeed.jpaOpsManagerFeed; Iterable<JpaOpsManagerFeed> all = repo.findAll(GenericQueryDslFilter.buildFilter(qFeed, "name==non-matching-feed-name")); Assert.assertFalse(StreamSupport.stream(all.spliterator(), false) .anyMatch(it -> it.getName().equals("feed-name"))); Assert.assertFalse(StreamSupport.stream(all.spliterator(), false) .anyMatch(it -> it.getName().equals("non-matching-feed-name"))); } @WithMockJaasUser(username = "dladmin", password = "secret", authorities = {"admin", "user"}) @Test public void findAllFilter_MatchingGroupAndMatchingFilter() throws Exception { JpaOpsManagerFeed feed = new JpaOpsManagerFeed(OpsManagerFeedId.create(), "feed-name"); repo.save(feed); BaseFeed.FeedId feedId = new BaseFeed.FeedId(feed.getId().getUuid()); JpaFeedOpsAclEntry dladminUserAcl = new JpaFeedOpsAclEntry(feedId, "dladmin", JpaFeedOpsAclEntry.PrincipalType.USER); aclRepo.save(dladminUserAcl); JpaFeedOpsAclEntry matchingGroup = new JpaFeedOpsAclEntry(feedId, "admin", JpaFeedOpsAclEntry.PrincipalType.GROUP); aclRepo.save(matchingGroup); JpaOpsManagerFeed nonMatchingFeed = new JpaOpsManagerFeed(OpsManagerFeedId.create(), "non-matching-feed-name"); repo.save(nonMatchingFeed); BaseFeed.FeedId nonMatchingFeedId = new BaseFeed.FeedId(nonMatchingFeed.getId().getUuid()); JpaFeedOpsAclEntry dladminUserAcl1 = new JpaFeedOpsAclEntry(nonMatchingFeedId, "dladmin", JpaFeedOpsAclEntry.PrincipalType.USER); aclRepo.save(dladminUserAcl1); JpaFeedOpsAclEntry matchingGroup1 = new JpaFeedOpsAclEntry(nonMatchingFeedId, "admin", JpaFeedOpsAclEntry.PrincipalType.GROUP); aclRepo.save(matchingGroup1); QJpaOpsManagerFeed qFeed = QJpaOpsManagerFeed.jpaOpsManagerFeed; Iterable<JpaOpsManagerFeed> all = repo.findAll(GenericQueryDslFilter.buildFilter(qFeed, "name==feed-name")); Assert.assertTrue(StreamSupport.stream(all.spliterator(), false) .anyMatch(it -> it.getName().equals("feed-name"))); Assert.assertFalse(StreamSupport.stream(all.spliterator(), false) .anyMatch(it -> it.getName().equals("non-matching-feed-name"))); } @WithMockJaasUser(username = "dladmin", password = "secret", authorities = {"admin", "user"}) @Test public void count_ShouldCountOnlyPermittedFeeds() throws Exception { JpaOpsManagerFeed feed1 = new JpaOpsManagerFeed(OpsManagerFeedId.create(), "feed1-name"); repo.save(feed1); BaseFeed.FeedId feed1Id = new BaseFeed.FeedId(feed1.getId().getUuid()); JpaFeedOpsAclEntry acl1 = new JpaFeedOpsAclEntry(feed1Id, "admin", JpaFeedOpsAclEntry.PrincipalType.GROUP); aclRepo.save(acl1); JpaOpsManagerFeed feed2 = new JpaOpsManagerFeed(OpsManagerFeedId.create(), "feed2-name"); repo.save(feed2); BaseFeed.FeedId feed2Id = new BaseFeed.FeedId(feed2.getId().getUuid()); JpaFeedOpsAclEntry acl2 = new JpaFeedOpsAclEntry(feed2Id, "user", JpaFeedOpsAclEntry.PrincipalType.GROUP); aclRepo.save(acl2); JpaOpsManagerFeed feed3 = new JpaOpsManagerFeed(OpsManagerFeedId.create(), "feed3-name"); repo.save(feed3); BaseFeed.FeedId feed3Id = new BaseFeed.FeedId(feed3.getId().getUuid()); JpaFeedOpsAclEntry acl3 = new JpaFeedOpsAclEntry(feed3Id, "NON_MATCHING", JpaFeedOpsAclEntry.PrincipalType.GROUP); aclRepo.save(acl3); long count = repo.count(); Assert.assertEquals(2, count); List<JpaOpsManagerFeed> feeds = repo.findAll(); Assert.assertTrue(feeds.stream() .anyMatch(it -> it.getName().equals("feed1-name"))); Assert.assertTrue(feeds.stream() .anyMatch(it -> it.getName().equals("feed2-name"))); } @WithMockJaasUser(username = "dladmin", password = "secret", authorities = {"admin", "user"}) @Test public void findOne() throws Exception { JpaOpsManagerFeed feed1 = new JpaOpsManagerFeed(OpsManagerFeedId.create(), "feed1-name"); repo.save(feed1); BaseFeed.FeedId feed1Id = new BaseFeed.FeedId(feed1.getId().getUuid()); JpaFeedOpsAclEntry acl1 = new JpaFeedOpsAclEntry(feed1Id, "admin", JpaFeedOpsAclEntry.PrincipalType.GROUP); aclRepo.save(acl1); JpaOpsManagerFeed feed2 = new JpaOpsManagerFeed(OpsManagerFeedId.create(), "feed2-name"); repo.save(feed2); BaseFeed.FeedId feed2Id = new BaseFeed.FeedId(feed2.getId().getUuid()); JpaFeedOpsAclEntry acl2 = new JpaFeedOpsAclEntry(feed2Id, "user", JpaFeedOpsAclEntry.PrincipalType.GROUP); aclRepo.save(acl2); JpaOpsManagerFeed feed3 = new JpaOpsManagerFeed(OpsManagerFeedId.create(), "feed3-name"); repo.save(feed3); BaseFeed.FeedId feed3Id = new BaseFeed.FeedId(feed3.getId().getUuid()); JpaFeedOpsAclEntry acl3 = new JpaFeedOpsAclEntry(feed3Id, "NON_MATCHING", JpaFeedOpsAclEntry.PrincipalType.GROUP); aclRepo.save(acl3); Assert.assertNotNull(repo.findOne(feed1.getId())); Assert.assertNotNull(repo.findOne(feed2.getId())); Assert.assertNull(repo.findOne(feed3.getId())); } @WithMockJaasUser(username = "dladmin", password = "secret", authorities = {"admin", "user"}) @Test public void findAll_TwoPages() throws Exception { JpaOpsManagerFeed feed1 = new JpaOpsManagerFeed(OpsManagerFeedId.create(), "feed1-name"); repo.save(feed1); BaseFeed.FeedId feed1Id = new BaseFeed.FeedId(feed1.getId().getUuid()); JpaFeedOpsAclEntry acl1 = new JpaFeedOpsAclEntry(feed1Id, "admin", JpaFeedOpsAclEntry.PrincipalType.GROUP); aclRepo.save(acl1); JpaOpsManagerFeed feed2 = new JpaOpsManagerFeed(OpsManagerFeedId.create(), "feed2-name"); repo.save(feed2); BaseFeed.FeedId feed2Id = new BaseFeed.FeedId(feed2.getId().getUuid()); JpaFeedOpsAclEntry acl2 = new JpaFeedOpsAclEntry(feed2Id, "user", JpaFeedOpsAclEntry.PrincipalType.GROUP); aclRepo.save(acl2); JpaOpsManagerFeed feed3 = new JpaOpsManagerFeed(OpsManagerFeedId.create(), "feed3-name"); repo.save(feed3); BaseFeed.FeedId feed3Id = new BaseFeed.FeedId(feed3.getId().getUuid()); JpaFeedOpsAclEntry acl3 = new JpaFeedOpsAclEntry(feed3Id, "NON_MATCHING", JpaFeedOpsAclEntry.PrincipalType.GROUP); aclRepo.save(acl3); JpaOpsManagerFeed feed4 = new JpaOpsManagerFeed(OpsManagerFeedId.create(), "feed4-name"); repo.save(feed4); BaseFeed.FeedId feed4Id = new BaseFeed.FeedId(feed4.getId().getUuid()); JpaFeedOpsAclEntry acl4 = new JpaFeedOpsAclEntry(feed4Id, "user", JpaFeedOpsAclEntry.PrincipalType.GROUP); aclRepo.save(acl4); JpaOpsManagerFeed feed5 = new JpaOpsManagerFeed(OpsManagerFeedId.create(), "feed5-name"); repo.save(feed5); BaseFeed.FeedId feed5Id = new BaseFeed.FeedId(feed5.getId().getUuid()); JpaFeedOpsAclEntry acl5 = new JpaFeedOpsAclEntry(feed5Id, "NON_MATCHING", JpaFeedOpsAclEntry.PrincipalType.GROUP); aclRepo.save(acl5); JpaOpsManagerFeed feed6 = new JpaOpsManagerFeed(OpsManagerFeedId.create(), "feed6-name"); repo.save(feed6); BaseFeed.FeedId feed6Id = new BaseFeed.FeedId(feed6.getId().getUuid()); JpaFeedOpsAclEntry acl6 = new JpaFeedOpsAclEntry(feed6Id, "user", JpaFeedOpsAclEntry.PrincipalType.GROUP); aclRepo.save(acl6); Pageable page1Request = new PageRequest(0, 2); Page<JpaOpsManagerFeed> page1 = repo.findAll(page1Request); Assert.assertEquals(0, page1.getNumber()); Assert.assertEquals(2, page1.getNumberOfElements()); Assert.assertEquals(2, page1.getTotalPages()); Assert.assertEquals(4, page1.getTotalElements()); Pageable page2Request = new PageRequest(1, 2); Page<JpaOpsManagerFeed> page2 = repo.findAll(page2Request); Assert.assertEquals(1, page2.getNumber()); Assert.assertEquals(2, page2.getNumberOfElements()); Assert.assertEquals(2, page2.getTotalPages()); Assert.assertEquals(4, page2.getTotalElements()); } @WithMockJaasUser(username = "dladmin", password = "secret", authorities = {"admin", "user"}) @Test public void testCustomMethod_findByName() throws Exception { JpaOpsManagerFeed feed1 = new JpaOpsManagerFeed(OpsManagerFeedId.create(), "feed1-name"); repo.save(feed1); BaseFeed.FeedId feed1Id = new BaseFeed.FeedId(feed1.getId().getUuid()); JpaFeedOpsAclEntry acl1 = new JpaFeedOpsAclEntry(feed1Id, "NON_MATCHING", JpaFeedOpsAclEntry.PrincipalType.GROUP); aclRepo.save(acl1); JpaOpsManagerFeed feed2 = new JpaOpsManagerFeed(OpsManagerFeedId.create(), "feed2-name"); repo.save(feed2); BaseFeed.FeedId feed2Id = new BaseFeed.FeedId(feed2.getId().getUuid()); JpaFeedOpsAclEntry acl2 = new JpaFeedOpsAclEntry(feed2Id, "user", JpaFeedOpsAclEntry.PrincipalType.GROUP); aclRepo.save(acl2); List<JpaOpsManagerFeed> feeds1 = repo.findByName("feed1-name"); Assert.assertTrue(feeds1.isEmpty()); List<JpaOpsManagerFeed> feeds2 = repo.findByName("feed2-name"); Assert.assertEquals(1, feeds2.size()); Assert.assertEquals("feed2-name", feeds2.get(0).getName()); } }