+
+ private Path repository;
+ Properties properties = new Properties();
+ StdEngine stdEngine = null;
+
+ @Rule
+ public ExpectedException expectedException = ExpectedException.none();
+
+ @BeforeClass
+ public static void setUpClass() throws IOException{
+ new File("target/test/resources/pdps").mkdirs();
+ new File("target/test/resources/emptyPapGroupsDefault").mkdirs();
+ Files.copy(Paths.get("src/test/resources/pdps/xacml.properties"), Paths.get("target/test/resources/pdps/xacml.properties"), StandardCopyOption.REPLACE_EXISTING);
+ Files.copy(Paths.get("src/test/resources/emptyPapGroupsDefault/xacml.properties"), Paths.get("target/test/resources/emptyPapGroupsDefault/xacml.properties"), StandardCopyOption.REPLACE_EXISTING);
+ }
+
+ @Before
+ public void setUp() throws PAPException, IOException {
+
+ repository = Paths.get("target/test/resources/pdps");
+ stdEngine = new StdEngine(repository);
+ }
+
+ @Test
+ public void testGetDefaultGroup() throws PAPException {
+ assertTrue(stdEngine.getDefaultGroup() != null);
+ }
+
+ @Test
+ public void testGetGroup() throws PAPException {
+ assertTrue(stdEngine.getGroup("1") == null);
+ }
+
+ @Test
+ public void testGetOnapPDPGroups() throws PAPException {
+ assertTrue(stdEngine.getOnapPDPGroups() != null);
+ }
+
+ @Test
+ public void testGetPDP() throws PAPException {
+ assertTrue(stdEngine.getPDP("1") == null);
+ }
+
+ @Test
+ public void testGetPDPGroup() throws PAPException {
+ assertTrue(stdEngine.getPDPGroup(null) == null);
+ }
+
+ @Test
+ public void testNoRepository() throws PAPException, IOException {
+ expectedException.expect(PAPException.class);
+ expectedException.expectMessage("No repository specified.");
+ new StdEngine((Path)null);
+ }
+
+ @Test
+ public void testRepositoryDoesNotExist() throws PAPException, IOException {
+ repository = Paths.get("target/test/resources/nonExisting");
+ new StdEngine(repository);
+
+ assertTrue(Files.exists(Paths.get("target/test/resources/nonExisting/default/xacml.pip.properties")));
+ assertTrue(Files.exists(Paths.get("target/test/resources/nonExisting/default/xacml.policy.properties")));
+ assertTrue(Files.exists(Paths.get("target/test/resources/nonExisting/xacml.properties")));
+ FileUtils.deleteDirectory(repository.toFile());
+ }
+
+ @Test
+ public void testEmptyPapGroupsDefault() throws PAPException, IOException {
+ System.setProperty("xacml.pap.groups.default", "");
+ repository = Paths.get("target/test/resources/emptyPapGroupsDefault");
+ new StdEngine(repository);
+
+ assertTrue(Files.exists(Paths.get("target/test/resources/emptyPapGroupsDefault/default/xacml.pip.properties")));
+ assertTrue(Files.exists(Paths.get("target/test/resources/emptyPapGroupsDefault/default/xacml.policy.properties")));
+ assertTrue(Files.exists(Paths.get("target/test/resources/emptyPapGroupsDefault/xacml.properties")));
+ }
+
+ @Test
+ public void testNewGroupAndRemoveGroup() throws NullPointerException, PAPException, IOException {
+ OnapPDPGroup newGroup = createGroup("newGroup", "Description of new group");
+ assertNotNull(newGroup);
+
+ stdEngine.removeGroup(stdEngine.getGroup("newGroup"), null);
+ assertNull(stdEngine.getGroup("newGroup"));
+ }
+
+ @Test
+ public void testRemoveGroupNull() throws NullPointerException, PAPException, IOException {
+ expectedException.expect(NullPointerException.class);
+ stdEngine.removeGroup(null, null);
+ assertNull(stdEngine.getGroup("newGroup"));
+ }
+
+ @Test
+ public void testRemoveGroupUnknown() throws NullPointerException, PAPException, IOException {
+ OnapPDPGroup unknownGroup = new StdPDPGroup("unknownId", null);
+
+ expectedException.expect(PAPException.class);
+ expectedException.expectMessage("The group 'unknownId' does not exist");
+ stdEngine.removeGroup(unknownGroup, null);
+ }
+
+ @Test
+ public void testRemoveGroupDefault() throws NullPointerException, PAPException, IOException {
+ OnapPDPGroup defaultGroup = stdEngine.getDefaultGroup();
+
+ expectedException.expect(PAPException.class);
+ expectedException.expectMessage("You cannot delete the default group.");
+ stdEngine.removeGroup(defaultGroup, null);
+ }
+
+ @Test
+ public void testSetDefaultGroup() throws NullPointerException, PAPException, IOException {
+ OnapPDPGroup newGroup = createGroup("newGroup", "Description of new group");
+ assertNotNull(newGroup);
+
+ OnapPDPGroup defaultGroup = stdEngine.getDefaultGroup();
+ assertEquals("default", defaultGroup.getName());
+ stdEngine.setDefaultGroup(newGroup);
+ assertEquals(newGroup, stdEngine.getDefaultGroup());
+
+ stdEngine.setDefaultGroup(defaultGroup);
+ stdEngine.removeGroup(stdEngine.getGroup("newGroup"), null);
+ }
+
+ @Test
+ public void testPdps() throws NullPointerException, PAPException{
+ OnapPDPGroup group1 = createGroup("newGroup", "Description of new group");
+ assertEquals(0, group1.getPdps().size());
+
+ stdEngine.newPDP("newPdp", group1, "newPdpName", "A new pdp", 1);
+ assertEquals(1, group1.getPdps().size());
+ assertEquals("newPdp", group1.getPdps().iterator().next().getId());
+ assertEquals("newPdpName", group1.getPdps().iterator().next().getName());
+ assertEquals("A new pdp", group1.getPdps().iterator().next().getDescription());
+
+ OnapPDPGroup group2 = createGroup("anotherNewGroup", "Description of new group");
+ assertEquals(0, group2.getPdps().size());
+
+ stdEngine.movePDP(group1.getOnapPdps().iterator().next(), group2);
+ assertEquals(0, group1.getPdps().size());
+ assertEquals(1, group2.getPdps().size());
+
+ OnapPDP pdp = group2.getOnapPdps().iterator().next();
+ pdp.setName("AnUpdatedName");;
+ pdp.setDescription("An updated description");
+ stdEngine.updatePDP(pdp);
+ assertEquals("AnUpdatedName", group2.getPdps().iterator().next().getName());
+ assertEquals("An updated description", group2.getPdps().iterator().next().getDescription());
+
+ stdEngine.removePDP(group2.getOnapPdps().iterator().next());
+ assertEquals(0, group1.getPdps().size());
+ assertEquals(0, group2.getPdps().size());
+ }
+
+ @Test
+ public void testNewPdpNullGroup() throws NullPointerException, PAPException{
+ expectedException.expect(PAPException.class);
+ expectedException.expectMessage("You must specify which group the PDP will belong to.");
+ stdEngine.newPDP("newPdp", null, "newPdpName", "A new pdp", 1);
+ }
+
+ @Test
+ public void testNewPdpUnknownGroup() throws NullPointerException, PAPException{
+ OnapPDPGroup unknownGroup = new StdPDPGroup("unknownId", null);
+
+ expectedException.expect(PAPException.class);
+ expectedException.expectMessage("Unknown group, not in our list.");
+ stdEngine.newPDP("newPdp", unknownGroup, "newPdpName", "A new pdp", 1);
+ }
+
+ @Test
+ public void testNewPdpAlreadyExistingPdp() throws NullPointerException, PAPException{
+ OnapPDPGroup group1 = createGroup("newGroup", "Description of new group");
+ assertEquals(0, group1.getPdps().size());
+
+ stdEngine.newPDP("newPdp", group1, "newPdpName", "A new pdp", 1);
+ assertEquals(1, group1.getPdps().size());
+
+ expectedException.expect(PAPException.class);
+ expectedException.expectMessage("A PDP with this ID exists.");
+ stdEngine.newPDP("newPdp", group1, "newPdpName", "A new pdp", 1);
+ }
+
+ @Test
+ public void testRemoveGroupWithPdps() throws NullPointerException, PAPException{
+ OnapPDPGroup group1 = createGroup("newGroup", "Description of new group");
+
+ stdEngine.newPDP("newPdp", group1, "newPdpName", "A new pdp", 1);
+ assertEquals(1, group1.getPdps().size());
+
+ OnapPDPGroup group2 = createGroup("anotherNewGroup", "Description of new group");
+ assertEquals(0, group2.getPdps().size());
+
+ stdEngine.removeGroup(group1, group2);
+ assertNull(stdEngine.getGroup("newGroup"));
+ assertEquals(1, group2.getPdps().size());
+ }
+
+ @Test
+ public void testRemoveGroupWithPdpsNoTarget() throws NullPointerException, PAPException{
+ OnapPDPGroup group1 = createGroup("newGroup", "Description of new group");
+
+ stdEngine.newPDP("newPdp", group1, "newPdpName", "A new pdp", 1);
+ assertEquals(1, group1.getPdps().size());
+
+ OnapPDPGroup group2 = createGroup("anotherNewGroup", "Description of new group");
+ assertEquals(0, group2.getPdps().size());
+
+ expectedException.expect(NullPointerException.class);
+ expectedException.expectMessage("Group targeted for deletion has PDPs, you must provide a new group for them.");
+ stdEngine.removeGroup(group1, null);
+ }
+
+ @Test
+ public void testUpdateGroupName() throws NullPointerException, PAPException, IOException {
+ OnapPDPGroup newGroup = createGroup("newGroup", "Description of new group");
+
+ OnapPDPGroup updatedGroup = new StdPDPGroup(newGroup);
+ updatedGroup.setName("AnUpdatedName");
+ stdEngine.updateGroup(updatedGroup);
+ assertNull(stdEngine.getGroup("newGroup"));
+ assertNotNull(stdEngine.getGroup("AnUpdatedName"));
+ assertEquals("AnUpdatedName", stdEngine.getGroup("AnUpdatedName").getName());
+ assertEquals("Description of new group", stdEngine.getGroup("AnUpdatedName").getDescription());
+ }
+
+ @Test
+ public void testUpdateGroupDescription() throws NullPointerException, PAPException, IOException {
+ OnapPDPGroup newGroup = createGroup("newGroup", "Description of new group");
+
+ OnapPDPGroup updatedGroup = new StdPDPGroup(newGroup.getId(), newGroup.getName(), "An updated description", Paths.get("target/test/resources/pdps/newGroup"));
+ updatedGroup.setDescription("An updated description");
+ stdEngine.updateGroup(updatedGroup);
+ assertEquals("newGroup", stdEngine.getGroup("newGroup").getName());
+ assertEquals("An updated description", stdEngine.getGroup("newGroup").getDescription());
+ }
+
+ @Test
+ public void testUpdateGroupNull() throws NullPointerException, PAPException, IOException {
+ expectedException.expect(PAPException.class);
+ expectedException.expectMessage("Group or id is null");
+ stdEngine.updateGroup(null);
+ }
+
+ @Test
+ public void testUpdateGroupIdNull() throws NullPointerException, PAPException, IOException {
+ StdPDPGroup group = new StdPDPGroup(null, null);
+ expectedException.expect(PAPException.class);
+ expectedException.expectMessage("Group or id is null");
+ stdEngine.updateGroup(group);
+ }
+
+ @Test
+ public void testUpdateGroupNameNull() throws NullPointerException, PAPException, IOException {
+ StdPDPGroup group = new StdPDPGroup("groupId", null);
+ expectedException.expect(PAPException.class);
+ expectedException.expectMessage("New name for group cannot be null or blank");
+ stdEngine.updateGroup(group);
+ }
+
+ @Test
+ public void testUpdateGroupNameEmptyString() throws NullPointerException, PAPException, IOException {
+ StdPDPGroup group = new StdPDPGroup("groupId", "", "description", null);
+ expectedException.expect(PAPException.class);
+ expectedException.expectMessage("New name for group cannot be null or blank");
+ stdEngine.updateGroup(group);
+ }
+
+ @Test
+ public void testUpdateGroupUnknown() throws NullPointerException, PAPException, IOException {
+ StdPDPGroup group = new StdPDPGroup("groupId", "groupName", "description", null);
+ expectedException.expect(PAPException.class);
+ expectedException.expectMessage("Update found no existing group with id 'groupId'");
+ stdEngine.updateGroup(group);
+ }
+
+ @Test
+ public void testPublishAndRemovePolicy() throws NullPointerException, PAPException, FileNotFoundException{
+ OnapPDPGroup newGroup = createGroup("newGroup", "Description of new group");
+ InputStream inputStream = new FileInputStream("src/test/resources/pdps/default/com.Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.xml");
+ stdEngine.publishPolicy("com.Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.xml", "Config_BRMS_Param_BRMSParamvFWDemoPolicy", true, inputStream, newGroup);
+ PDPPolicy policy = newGroup.getPolicy("com.Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.xml");
+ assertNotNull(policy);
+
+ stdEngine.removePolicy(policy, newGroup);
+ assertNull(newGroup.getPolicy("com.Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.xml"));
+ }
+
+ @Test
+ public void testPublishPolicyNull() throws NullPointerException, PAPException, FileNotFoundException{
+ expectedException.expect(NullPointerException.class);
+ stdEngine.publishPolicy(null, null, true, null, null);
+ }
+
+ @Test
+ public void testPublishPolicyUnknownGroup() throws NullPointerException, PAPException, FileNotFoundException{
+ OnapPDPGroup unknownGroup = new StdPDPGroup("unknownId", null);
+
+ expectedException.expect(PAPException.class);
+ expectedException.expectMessage("Unknown PDP Group: unknownId");
+ stdEngine.publishPolicy(null, null, true, null, unknownGroup);
+ }
+
+ @Test
+ public void testRemovePolicyNull() throws NullPointerException, PAPException, FileNotFoundException{
+ expectedException.expect(NullPointerException.class);
+ stdEngine.removePolicy(null, null);
+ }
+
+ @Test
+ public void testRemovePolicyUnknownGroup() throws NullPointerException, PAPException, FileNotFoundException{
+ OnapPDPGroup unknownGroup = new StdPDPGroup("unknownId", null);
+
+ expectedException.expect(PAPException.class);
+ expectedException.expectMessage("Unknown PDP Group: unknownId");
+ stdEngine.removePolicy(null, unknownGroup);
+ }
+
+ private OnapPDPGroup createGroup(final String name, final String description) throws NullPointerException, PAPException{
+ ensureGroupDoesntExist(name);
+ stdEngine.newGroup(name, description);
+ return stdEngine.getGroup(name);
+ }
+
+ @After
+ public void tearDown() throws PAPException{
+ ensureGroupDoesntExist("newGroup");
+ ensureGroupDoesntExist("anotherNewGroup");
+ ensureGroupDoesntExist("AnUpdatedName");
+ }
+
+ private void ensureGroupDoesntExist(final String groupName) throws PAPException{
+ OnapPDPGroup group = stdEngine.getGroup(groupName);
+ if (group != null){
+ for (OnapPDP pdp: group.getOnapPdps()){
+ stdEngine.removePDP(pdp);
+ }
+ stdEngine.removeGroup(group, null);
+ }
+ }