mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-14 17:58:59 +00:00
Merged 5.2.N-AUDIT-API (5.2.2) to 5.2.N (5.2.2)
137925 aforascu: REPO-2555 / REPO-2598 - Retrieve Application Audit Entries - added Junit positive and negative tests for audit entries: checked response codes and basic audit entry details git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/DEV/5.2.N/root@137970 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -36,8 +36,11 @@ import java.util.Map;
|
|||||||
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import org.alfresco.repo.security.authentication.AuthenticationException;
|
||||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||||
|
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
|
||||||
import org.alfresco.rest.AbstractSingleNetworkSiteTest;
|
import org.alfresco.rest.AbstractSingleNetworkSiteTest;
|
||||||
|
import org.alfresco.rest.api.tests.client.data.AuditEntry;
|
||||||
import org.alfresco.rest.api.tests.client.PublicApiClient;
|
import org.alfresco.rest.api.tests.client.PublicApiClient;
|
||||||
import org.alfresco.rest.api.tests.client.PublicApiClient.AuditApps;
|
import org.alfresco.rest.api.tests.client.PublicApiClient.AuditApps;
|
||||||
import org.alfresco.rest.api.tests.client.PublicApiClient.ListResponse;
|
import org.alfresco.rest.api.tests.client.PublicApiClient.ListResponse;
|
||||||
@@ -94,6 +97,12 @@ public class AuditAppTest extends AbstractSingleNetworkSiteTest
|
|||||||
{
|
{
|
||||||
|
|
||||||
final AuditApps auditAppsProxy = publicApiClient.auditApps();
|
final AuditApps auditAppsProxy = publicApiClient.auditApps();
|
||||||
|
String appId = null;
|
||||||
|
|
||||||
|
// Get one of the audit app ids (default tagging)
|
||||||
|
setRequestContext(networkOne.getId(), networkAdmin, DEFAULT_ADMIN_PWD);
|
||||||
|
ListResponse<AuditApp> apps = auditAppsProxy.getAuditApps(null, "Getting audit apps error ", HttpServletResponse.SC_OK);
|
||||||
|
appId = (apps.getList().size()>0) ? apps.getList().get(0).getId() : "tagging";
|
||||||
|
|
||||||
// Enable system audit
|
// Enable system audit
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(networkAdmin);
|
AuthenticationUtil.setFullyAuthenticatedUser(networkAdmin);
|
||||||
@@ -117,19 +126,12 @@ public class AuditAppTest extends AbstractSingleNetworkSiteTest
|
|||||||
// Get an enabled audit application
|
// Get an enabled audit application
|
||||||
setRequestContext(networkOne.getId(), networkAdmin, DEFAULT_ADMIN_PWD);
|
setRequestContext(networkOne.getId(), networkAdmin, DEFAULT_ADMIN_PWD);
|
||||||
|
|
||||||
int skipCount = 0;
|
|
||||||
int maxItems = 4;
|
|
||||||
Paging paging = getPaging(skipCount, maxItems);
|
|
||||||
|
|
||||||
ListResponse<AuditApp> auditApps = getAuditApps(paging);
|
|
||||||
AuditApp auditApp = auditAppsProxy.getAuditApp(auditApps.getList().get(0).getId());
|
|
||||||
|
|
||||||
// Disable system audit
|
// Disable system audit
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(networkAdmin);
|
AuthenticationUtil.setFullyAuthenticatedUser(networkAdmin);
|
||||||
disableSystemAudit();
|
disableSystemAudit();
|
||||||
|
|
||||||
// Check response code
|
// Check response code
|
||||||
auditAppsProxy.getAuditApp(auditApp.getId(), HttpServletResponse.SC_NOT_IMPLEMENTED);
|
auditAppsProxy.getAuditApp(appId, HttpServletResponse.SC_NOT_IMPLEMENTED);
|
||||||
|
|
||||||
// Re-enable system audit
|
// Re-enable system audit
|
||||||
enableSystemAudit();
|
enableSystemAudit();
|
||||||
@@ -141,14 +143,8 @@ public class AuditAppTest extends AbstractSingleNetworkSiteTest
|
|||||||
// Get the list of audit applications in the system
|
// Get the list of audit applications in the system
|
||||||
setRequestContext(networkOne.getId(), networkAdmin, DEFAULT_ADMIN_PWD);
|
setRequestContext(networkOne.getId(), networkAdmin, DEFAULT_ADMIN_PWD);
|
||||||
|
|
||||||
int skipCount = 0;
|
|
||||||
int maxItems = 4;
|
|
||||||
Paging paging = getPaging(skipCount, maxItems);
|
|
||||||
|
|
||||||
ListResponse<AuditApp> auditApps = getAuditApps(paging);
|
|
||||||
|
|
||||||
// Get audit application info
|
// Get audit application info
|
||||||
AuditApp auditApp = auditAppsProxy.getAuditApp(auditApps.getList().get(0).getId());
|
AuditApp auditApp = auditAppsProxy.getAuditApp(appId);
|
||||||
validateAuditApplicationFields(auditApp);
|
validateAuditApplicationFields(auditApp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -225,6 +221,24 @@ public class AuditAppTest extends AbstractSingleNetworkSiteTest
|
|||||||
assertTrue(auditApp.getIsEnabled());
|
assertTrue(auditApp.getIsEnabled());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void validateAuditEntryFields(AuditEntry auditEntry, AuditApp auditApp)
|
||||||
|
{
|
||||||
|
String auditAppid = auditApp.getId();
|
||||||
|
|
||||||
|
assertNotNull(auditEntry);
|
||||||
|
assertNotNull(auditEntry.getId());
|
||||||
|
assertNotNull(auditEntry.getAuditApplicationId());
|
||||||
|
assertNotNull(auditEntry.getCreatedAt());
|
||||||
|
assertNotNull(auditEntry.getCreatedByUser());
|
||||||
|
assertFalse(auditEntry.getId().toString().isEmpty());
|
||||||
|
assertFalse(auditEntry.getAuditApplicationId().isEmpty());
|
||||||
|
|
||||||
|
if (auditApp.getId().equals("alfresco-access"))
|
||||||
|
{
|
||||||
|
assertTrue(auditEntry.getAuditApplicationId().toString().equals(auditAppid));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testEnableDisableAuditApplication() throws Exception
|
public void testEnableDisableAuditApplication() throws Exception
|
||||||
@@ -300,4 +314,71 @@ public class AuditAppTest extends AbstractSingleNetworkSiteTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetAuditEntries() throws Exception
|
||||||
|
{
|
||||||
|
final AuditApps auditAppsProxy = publicApiClient.auditApps();
|
||||||
|
|
||||||
|
// Get and enable audit app
|
||||||
|
setRequestContext(networkOne.getId(), networkAdmin, DEFAULT_ADMIN_PWD);
|
||||||
|
AuditApp auditApp = auditAppsProxy.getAuditApp("alfresco-access");
|
||||||
|
|
||||||
|
// Positive tests
|
||||||
|
ListResponse<AuditEntry> auditEntries = auditAppsProxy.getAuditAppEntries(auditApp.getId(), null, HttpServletResponse.SC_OK);
|
||||||
|
for (AuditEntry ae : auditEntries.getList())
|
||||||
|
{
|
||||||
|
validateAuditEntryFields(ae, auditApp);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Negative tests
|
||||||
|
// 400
|
||||||
|
Map<String, String> wrongParams = new HashMap<String, String>();
|
||||||
|
wrongParams.put("wrongkey", "wrongvalue");
|
||||||
|
wrongParams.put("wrongkey1", "wrongvalue1");
|
||||||
|
|
||||||
|
setRequestContext(networkOne.getId(), networkAdmin, DEFAULT_ADMIN_PWD);
|
||||||
|
auditAppsProxy.getAuditAppEntries(auditApp.getId(), wrongParams, HttpServletResponse.SC_BAD_REQUEST);
|
||||||
|
// 401
|
||||||
|
setRequestContext(networkOne.getId(), networkAdmin, "wrongPassword");
|
||||||
|
auditAppsProxy.getAuditAppEntries(auditApp.getId(), null, HttpServletResponse.SC_UNAUTHORIZED);
|
||||||
|
// 403
|
||||||
|
setRequestContext(networkOne.getId(), user1, null);
|
||||||
|
auditAppsProxy.getAuditAppEntries(auditApp.getId(), null, HttpServletResponse.SC_FORBIDDEN);
|
||||||
|
// 404
|
||||||
|
setRequestContext(networkOne.getId(), networkAdmin, DEFAULT_ADMIN_PWD);
|
||||||
|
auditAppsProxy.getAuditAppEntries("randomId", null, HttpServletResponse.SC_NOT_FOUND);
|
||||||
|
// 501
|
||||||
|
setRequestContext(networkOne.getId(), networkAdmin, DEFAULT_ADMIN_PWD);
|
||||||
|
AuthenticationUtil.setFullyAuthenticatedUser(networkAdmin);
|
||||||
|
disableSystemAudit();
|
||||||
|
auditAppsProxy.getAuditAppEntries("randomId", null, HttpServletResponse.SC_NOT_IMPLEMENTED);
|
||||||
|
enableSystemAudit();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform a login attempt (to be used to create audit entries)
|
||||||
|
*/
|
||||||
|
private void login(final String username, final String password) throws Exception
|
||||||
|
{
|
||||||
|
// Force a failed login
|
||||||
|
RunAsWork<Void> failureWork = new RunAsWork<Void>()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public Void doWork() throws Exception
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
authenticationService.authenticate(username, password.toCharArray());
|
||||||
|
fail("Failed to force authentication failure");
|
||||||
|
}
|
||||||
|
catch (AuthenticationException e)
|
||||||
|
{
|
||||||
|
// Expected
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
AuthenticationUtil.runAs(failureWork, AuthenticationUtil.getSystemUserName());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -43,6 +43,7 @@ import javax.servlet.http.HttpServletResponse;
|
|||||||
|
|
||||||
import org.alfresco.cmis.client.impl.AlfrescoObjectFactoryImpl;
|
import org.alfresco.cmis.client.impl.AlfrescoObjectFactoryImpl;
|
||||||
import org.alfresco.opencmis.CMISDispatcherRegistry.Binding;
|
import org.alfresco.opencmis.CMISDispatcherRegistry.Binding;
|
||||||
|
import org.alfresco.rest.api.tests.client.data.AuditEntry;
|
||||||
import org.alfresco.rest.api.model.SiteUpdate;
|
import org.alfresco.rest.api.model.SiteUpdate;
|
||||||
import org.alfresco.rest.api.tests.TestPeople;
|
import org.alfresco.rest.api.tests.TestPeople;
|
||||||
import org.alfresco.rest.api.tests.TestSites;
|
import org.alfresco.rest.api.tests.TestSites;
|
||||||
@@ -2493,6 +2494,23 @@ public class PublicApiClient
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ListResponse<AuditEntry> getAuditAppEntries(String applicationId, Map<String, String> params, int expectedStatus)
|
||||||
|
throws PublicApiException, ParseException
|
||||||
|
{
|
||||||
|
HttpResponse response = getAll("audit-applications", applicationId, "audit-entries", null, params,
|
||||||
|
"Failed to get audit entries for " + applicationId, expectedStatus);
|
||||||
|
|
||||||
|
if (response != null && response.getJsonResponse() != null)
|
||||||
|
{
|
||||||
|
JSONObject jsonList = (JSONObject) response.getJsonResponse().get("list");
|
||||||
|
if (jsonList != null)
|
||||||
|
{
|
||||||
|
return AuditEntry.parseAuditEntries(response.getJsonResponse());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,134 @@
|
|||||||
|
/*
|
||||||
|
* #%L
|
||||||
|
* Alfresco Remote API
|
||||||
|
* %%
|
||||||
|
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||||
|
* %%
|
||||||
|
* This file is part of the Alfresco software.
|
||||||
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
|
* the paid license agreement will prevail. Otherwise, the software is
|
||||||
|
* provided under the following open source license terms:
|
||||||
|
*
|
||||||
|
* Alfresco is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Alfresco is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
* #L%
|
||||||
|
*/
|
||||||
|
package org.alfresco.rest.api.tests.client.data;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertNotNull;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.alfresco.rest.api.tests.client.PublicApiClient.ExpectedPaging;
|
||||||
|
import org.alfresco.rest.api.tests.client.PublicApiClient.ListResponse;
|
||||||
|
import org.alfresco.util.ISO8601DateFormat;
|
||||||
|
import org.json.simple.JSONArray;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A representation of an Audit Application Entry in JUnit Test
|
||||||
|
*
|
||||||
|
* @author Andrei Forascu
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class AuditEntry extends org.alfresco.rest.api.model.AuditEntry implements Serializable, ExpectedComparison
|
||||||
|
{
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
public AuditEntry(Long id, String auditApplicationId, org.alfresco.rest.api.model.UserInfo createdByUser, Date createdAt, Map<String, Serializable> values)
|
||||||
|
{
|
||||||
|
super(id, auditApplicationId, createdByUser, createdAt, values);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void expected(Object o)
|
||||||
|
{
|
||||||
|
assertTrue("o is an instance of " + o.getClass(), o instanceof AuditEntry);
|
||||||
|
|
||||||
|
AuditEntry other = (AuditEntry) o;
|
||||||
|
|
||||||
|
AssertUtil.assertEquals("id", getId(), other.getId());
|
||||||
|
AssertUtil.assertEquals("auditApplicationId", getAuditApplicationId(), other.getAuditApplicationId());
|
||||||
|
AssertUtil.assertEquals("values", getValues(), other.getValues());
|
||||||
|
AssertUtil.assertEquals("createdByUser", getCreatedByUser(), other.getCreatedByUser());
|
||||||
|
AssertUtil.assertEquals("createdAt", getCreatedAt(), other.getCreatedAt());
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public JSONObject toJSON()
|
||||||
|
{
|
||||||
|
JSONObject auditEntryJson = new JSONObject();
|
||||||
|
if (getId() != null)
|
||||||
|
{
|
||||||
|
auditEntryJson.put("id", getId());
|
||||||
|
}
|
||||||
|
auditEntryJson.put("auditApplicationId", getAuditApplicationId());
|
||||||
|
if (createdByUser != null)
|
||||||
|
{
|
||||||
|
auditEntryJson.put("createdByUser", new UserInfo(createdByUser.getId(), createdByUser.getDisplayName()).toJSON());
|
||||||
|
}
|
||||||
|
auditEntryJson.put("values", getValues());
|
||||||
|
auditEntryJson.put("createdAt", getCreatedAt());
|
||||||
|
|
||||||
|
return auditEntryJson;
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public static AuditEntry parseAuditEntry(JSONObject jsonObject)
|
||||||
|
{
|
||||||
|
Long id = (Long) jsonObject.get("id");
|
||||||
|
String auditApplicationId = (String) jsonObject.get("auditApplicationId");
|
||||||
|
Map<String, Serializable> values = (Map<String, Serializable>) jsonObject.get("values");
|
||||||
|
UserInfo createdByUser = null;
|
||||||
|
JSONObject createdByUserJson = (JSONObject) jsonObject.get("createdByUser");
|
||||||
|
if (createdByUserJson != null)
|
||||||
|
{
|
||||||
|
String userId = (String) createdByUserJson.get("id");
|
||||||
|
String displayName = (String) createdByUserJson.get("displayName");
|
||||||
|
createdByUser = new UserInfo(userId, displayName);
|
||||||
|
}
|
||||||
|
Date createdAt = ISO8601DateFormat.parse((String) jsonObject.get("createdAt"));
|
||||||
|
|
||||||
|
AuditEntry auditEntry = new AuditEntry(id, auditApplicationId, createdByUser, createdAt, values);
|
||||||
|
return auditEntry;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ListResponse<AuditEntry> parseAuditEntries(JSONObject jsonObject)
|
||||||
|
{
|
||||||
|
List<AuditEntry> entries = new ArrayList<>();
|
||||||
|
|
||||||
|
JSONObject jsonList = (JSONObject) jsonObject.get("list");
|
||||||
|
assertNotNull(jsonList);
|
||||||
|
|
||||||
|
JSONArray jsonEntries = (JSONArray) jsonList.get("entries");
|
||||||
|
assertNotNull(jsonEntries);
|
||||||
|
|
||||||
|
for (int i = 0; i < jsonEntries.size(); i++)
|
||||||
|
{
|
||||||
|
JSONObject jsonEntry = (JSONObject) jsonEntries.get(i);
|
||||||
|
JSONObject entry = (JSONObject) jsonEntry.get("entry");
|
||||||
|
entries.add(parseAuditEntry(entry));
|
||||||
|
}
|
||||||
|
|
||||||
|
ExpectedPaging paging = ExpectedPaging.parsePagination(jsonList);
|
||||||
|
ListResponse<AuditEntry> resp = new ListResponse<AuditEntry>(paging, entries);
|
||||||
|
return resp;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -28,13 +28,17 @@ package org.alfresco.rest.api.tests.client.data;
|
|||||||
|
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Representation of a user info (initially for client tests for File Folder API)
|
* Representation of a user info (initially for client tests for File Folder API)
|
||||||
*
|
*
|
||||||
* @author janv
|
* @author janv
|
||||||
*/
|
*/
|
||||||
public class UserInfo
|
public class UserInfo extends org.alfresco.rest.api.model.UserInfo implements ExpectedComparison
|
||||||
{
|
{
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
private String id;
|
private String id;
|
||||||
private String displayName;
|
private String displayName;
|
||||||
|
|
||||||
@@ -90,4 +94,17 @@ public class UserInfo
|
|||||||
AssertUtil.assertEquals("id", id, other.getId());
|
AssertUtil.assertEquals("id", id, other.getId());
|
||||||
AssertUtil.assertEquals("displayName", displayName, other.getDisplayName());
|
AssertUtil.assertEquals("displayName", displayName, other.getDisplayName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public JSONObject toJSON()
|
||||||
|
{
|
||||||
|
JSONObject userInfoJson = new JSONObject();
|
||||||
|
if (getId() != null)
|
||||||
|
{
|
||||||
|
userInfoJson.put("id", getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
userInfoJson.put("displayName", getDisplayName());
|
||||||
|
|
||||||
|
return userInfoJson;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user