http://git-wip-us.apache.org/repos/asf/ambari/blob/af13ef73/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/ComponentEventCreatorTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/ComponentEventCreatorTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/ComponentEventCreatorTest.java
new file mode 100644
index 0000000..59f6ff2
--- /dev/null
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/ComponentEventCreatorTest.java
@@ -0,0 +1,229 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.ambari.server.audit.request.creator;
+
+import junit.framework.Assert;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.ambari.server.api.services.Request;
+import org.apache.ambari.server.api.services.Result;
+import org.apache.ambari.server.api.services.ResultStatus;
+import org.apache.ambari.server.api.util.TreeNode;
+import org.apache.ambari.server.api.util.TreeNodeImpl;
+import org.apache.ambari.server.audit.event.AuditEvent;
+import 
org.apache.ambari.server.audit.event.request.StartOperationRequestAuditEvent;
+import 
org.apache.ambari.server.audit.request.eventcreator.ComponentEventCreator;
+import 
org.apache.ambari.server.controller.internal.HostComponentResourceProvider;
+import org.apache.ambari.server.controller.internal.RequestOperationLevel;
+import org.apache.ambari.server.controller.internal.RequestResourceProvider;
+import org.apache.ambari.server.controller.internal.ResourceImpl;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.apache.ambari.server.controller.utilities.PropertyHelper;
+import org.junit.Test;
+
+public class ComponentEventCreatorTest extends AuditEventCreatorTestBase {
+
+  @Test
+  public void deleteTest() {
+    ComponentEventCreator creator = new ComponentEventCreator();
+
+    Map<String,Object> properties = new HashMap<>();
+    
properties.put(HostComponentResourceProvider.HOST_COMPONENT_HOST_NAME_PROPERTY_ID,
 "ambari1.example.com");
+
+    Map<Resource.Type,String> resource = new HashMap<>();
+    resource.put(Resource.Type.HostComponent, "MyComponent");
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.DELETE, 
Resource.Type.HostComponent, properties, resource);
+
+    TreeNode<Resource> resultTree = new TreeNodeImpl<>(null, null, null);
+    addRequestId(resultTree, 1L);
+
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK), resultTree);
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(Delete component MyComponent), Host name(ambari1.example.com), 
RequestId(1), Status(Successfully queued)";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
StartOperationRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+
+  @Test
+  public void putForAllHostsTest() {
+    allHostsTest(Request.Type.PUT);
+  }
+  @Test
+  public void postForAllHostsTest() {
+    allHostsTest(Request.Type.POST);
+  }
+
+  private void allHostsTest(Request.Type type) {
+    ComponentEventCreator creator = new ComponentEventCreator();
+
+    Map<String,Object> properties = new HashMap<>();
+    
properties.put(HostComponentResourceProvider.HOST_COMPONENT_HOST_NAME_PROPERTY_ID,
 "ambari1.example.com");
+    
properties.put(HostComponentResourceProvider.HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID,
 "mycluster");
+    
properties.put(HostComponentResourceProvider.HOST_COMPONENT_STATE_PROPERTY_ID, 
"STARTED");
+
+    Request request = AuditEventCreatorTestHelper.createRequest(type, 
Resource.Type.HostComponent, properties, null);
+    
request.getBody().addRequestInfoProperty(RequestOperationLevel.OPERATION_LEVEL_ID,
 "CLUSTER");
+    
request.getBody().addRequestInfoProperty(RequestOperationLevel.OPERATION_CLUSTER_ID,
 "mycluster");
+    request.getBody().setQueryString("hostname.in(a,b,c)");
+
+    TreeNode<Resource> resultTree = new TreeNodeImpl<>(null, null, null);
+    addRequestId(resultTree, 1L);
+
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK), resultTree);
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(STARTED: all services on all hosts that matches hostname.in(a,b,c) 
(mycluster)), Host name(ambari1.example.com), RequestId(1), Status(Successfully 
queued)";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
StartOperationRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+
+  @Test
+  public void hostTest() {
+    ComponentEventCreator creator = new ComponentEventCreator();
+
+    Map<String,Object> properties = new HashMap<>();
+    
properties.put(HostComponentResourceProvider.HOST_COMPONENT_HOST_NAME_PROPERTY_ID,
 "ambari1.example.com");
+    
properties.put(HostComponentResourceProvider.HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID,
 "mycluster");
+    
properties.put(HostComponentResourceProvider.HOST_COMPONENT_STATE_PROPERTY_ID, 
"STARTED");
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.PUT, 
Resource.Type.HostComponent, properties, null);
+    
request.getBody().addRequestInfoProperty(RequestOperationLevel.OPERATION_LEVEL_ID,
 "HOST");
+    
request.getBody().addRequestInfoProperty(RequestOperationLevel.OPERATION_HOST_NAME,
 "ambari1.example.com");
+    
request.getBody().addRequestInfoProperty(RequestOperationLevel.OPERATION_CLUSTER_ID,
 "mycluster");
+    request.getBody().addRequestInfoProperty("query", 
"host_component.in(MYCOMPONENT,MYCOMPONENT2)");
+
+    TreeNode<Resource> resultTree = new TreeNodeImpl<>(null, null, null);
+    addRequestId(resultTree, 1L);
+
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK), resultTree);
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(STARTED: MYCOMPONENT,MYCOMPONENT2 on ambari1.example.com 
(mycluster)), Host name(ambari1.example.com), RequestId(1), Status(Successfully 
queued)";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
StartOperationRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+
+  @Test
+  public void hostComponentTest() {
+    ComponentEventCreator creator = new ComponentEventCreator();
+
+    Map<String,Object> properties = new HashMap<>();
+    
properties.put(HostComponentResourceProvider.HOST_COMPONENT_HOST_NAME_PROPERTY_ID,
 "ambari1.example.com");
+    
properties.put(HostComponentResourceProvider.HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID,
 "mycluster");
+    
properties.put(HostComponentResourceProvider.HOST_COMPONENT_STATE_PROPERTY_ID, 
"STARTED");
+    
properties.put(HostComponentResourceProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID,
 "MYCOMPONENT");
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.PUT, 
Resource.Type.HostComponent, properties, null);
+    
request.getBody().addRequestInfoProperty(RequestOperationLevel.OPERATION_LEVEL_ID,
 "HOST_COMPONENT");
+    
request.getBody().addRequestInfoProperty(RequestOperationLevel.OPERATION_SERVICE_ID,
 "MYSERVICE");
+    
request.getBody().addRequestInfoProperty(RequestOperationLevel.OPERATION_HOST_NAME,
 "ambari1.example.com");
+    
request.getBody().addRequestInfoProperty(RequestOperationLevel.OPERATION_CLUSTER_ID,
 "mycluster");
+
+    TreeNode<Resource> resultTree = new TreeNodeImpl<>(null, null, null);
+    addRequestId(resultTree, 1L);
+
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK), resultTree);
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(STARTED: MYCOMPONENT/MYSERVICE on ambari1.example.com (mycluster)), 
Host name(ambari1.example.com), RequestId(1), Status(Successfully queued)";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
StartOperationRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+
+  @Test
+  public void maintenanceModeTest() {
+    ComponentEventCreator creator = new ComponentEventCreator();
+
+    Map<String,Object> properties = new HashMap<>();
+    
properties.put(HostComponentResourceProvider.HOST_COMPONENT_HOST_NAME_PROPERTY_ID,
 "ambari1.example.com");
+    
properties.put(HostComponentResourceProvider.HOST_COMPONENT_MAINTENANCE_STATE_PROPERTY_ID,
 "ON");
+    
properties.put(HostComponentResourceProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID,
 "MYCOMPONENT");
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.PUT, 
Resource.Type.HostComponent, properties, null);
+
+    TreeNode<Resource> resultTree = new TreeNodeImpl<>(null, null, null);
+    addRequestId(resultTree, 1L);
+
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK), resultTree);
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(Turn ON Maintenance Mode for MYCOMPONENT), Host 
name(ambari1.example.com), RequestId(1), Status(Successfully queued)";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
StartOperationRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+
+  @Test
+  public void failureTest() {
+    ComponentEventCreator creator = new ComponentEventCreator();
+
+    Map<String,Object> properties = new HashMap<>();
+    
properties.put(HostComponentResourceProvider.HOST_COMPONENT_HOST_NAME_PROPERTY_ID,
 "ambari1.example.com");
+    
properties.put(HostComponentResourceProvider.HOST_COMPONENT_MAINTENANCE_STATE_PROPERTY_ID,
 "ON");
+    
properties.put(HostComponentResourceProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID,
 "MYCOMPONENT");
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.PUT, 
Resource.Type.HostComponent, properties, null);
+
+    TreeNode<Resource> resultTree = new TreeNodeImpl<>(null, null, null);
+    addRequestId(resultTree, 1L);
+
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.BAD_REQUEST, "Failed for testing"), 
resultTree);
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(Turn ON Maintenance Mode for MYCOMPONENT), Host 
name(ambari1.example.com), RequestId(1), Status(Failed to queue), Reason(Failed 
for testing)";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
StartOperationRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+
+  private void addRequestId(TreeNode<Resource> resultTree, Long requestId) {
+    Resource resource = new ResourceImpl(Resource.Type.Request);
+    
resource.addCategory(PropertyHelper.getPropertyCategory(RequestResourceProvider.REQUEST_ID_PROPERTY_ID));
+    resource.setProperty(RequestResourceProvider.REQUEST_ID_PROPERTY_ID, 
requestId);
+    TreeNode<Resource> requestNode = new TreeNodeImpl<>(resultTree, resource, 
"request");
+    resultTree.addChild(requestNode);
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/af13ef73/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/ConfigurationChangeEventCreatorTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/ConfigurationChangeEventCreatorTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/ConfigurationChangeEventCreatorTest.java
new file mode 100644
index 0000000..a0a06fb
--- /dev/null
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/ConfigurationChangeEventCreatorTest.java
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.ambari.server.audit.request.creator;
+
+import junit.framework.Assert;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.ambari.server.api.services.Request;
+import org.apache.ambari.server.api.services.Result;
+import org.apache.ambari.server.api.services.ResultStatus;
+import org.apache.ambari.server.api.util.TreeNode;
+import org.apache.ambari.server.api.util.TreeNodeImpl;
+import org.apache.ambari.server.audit.event.AuditEvent;
+import 
org.apache.ambari.server.audit.event.request.ClusterNameChangeRequestAuditEvent;
+import 
org.apache.ambari.server.audit.event.request.ConfigurationChangeRequestAuditEvent;
+import 
org.apache.ambari.server.audit.request.eventcreator.ConfigurationChangeEventCreator;
+import org.apache.ambari.server.controller.internal.ClusterResourceProvider;
+import org.apache.ambari.server.controller.internal.ResourceImpl;
+import 
org.apache.ambari.server.controller.internal.ServiceConfigVersionResourceProvider;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.junit.Test;
+
+public class ConfigurationChangeEventCreatorTest extends 
AuditEventCreatorTestBase {
+
+  @Test
+  public void clusterNameChangeTest() {
+    ConfigurationChangeEventCreator creator = new 
ConfigurationChangeEventCreator();
+
+    Map<String,Object> properties = new HashMap<>();
+    properties.put(ClusterResourceProvider.CLUSTER_NAME_PROPERTY_ID, 
"newname");
+
+    Map<Resource.Type,String> resource = new HashMap<>();
+    resource.put(Resource.Type.Cluster, "oldname");
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.PUT, 
Resource.Type.Cluster, properties, resource);
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK));
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(Cluster name change), RequestType(PUT), 
url(http://example.com:8080/api/v1/test), ResultStatus(200 OK), Old 
name(oldname), New name(newname)";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
ClusterNameChangeRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+
+  @Test
+  public void configurationChangeTest() {
+    ConfigurationChangeEventCreator creator = new 
ConfigurationChangeEventCreator();
+
+
+    TreeNode<Resource> resultTree = new TreeNodeImpl<>(null, null, null);
+    Resource resource = new ResourceImpl(Resource.Type.Cluster);
+    TreeNode<Resource> resourceNode = new TreeNodeImpl<>(resultTree, resource, 
"resources");
+    Resource version = new ResourceImpl(Resource.Type.Cluster);
+    
version.setProperty(ServiceConfigVersionResourceProvider.SERVICE_CONFIG_VERSION_PROPERTY_ID,
 "1");
+    
version.setProperty(ServiceConfigVersionResourceProvider.SERVICE_CONFIG_VERSION_NOTE_PROPERTY_ID,
 "note");
+    TreeNode<Resource> versionNode = new TreeNodeImpl<>(resourceNode, version, 
"");
+    resourceNode.addChild(versionNode);
+    resultTree.addChild(resourceNode);
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.PUT, 
Resource.Type.Cluster, new HashMap<String, Object>(), null);
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK), resultTree);
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(Configuration change), RequestType(PUT), 
url(http://example.com:8080/api/v1/test), ResultStatus(200 OK), 
VersionNumber(V1), VersionNote(note)";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
ConfigurationChangeRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/af13ef73/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/CredentialEventCreatorTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/CredentialEventCreatorTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/CredentialEventCreatorTest.java
new file mode 100644
index 0000000..fda478e
--- /dev/null
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/CredentialEventCreatorTest.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.ambari.server.audit.request.creator;
+
+import junit.framework.Assert;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.ambari.server.api.services.Request;
+import org.apache.ambari.server.api.services.Result;
+import org.apache.ambari.server.api.services.ResultStatus;
+import org.apache.ambari.server.audit.event.AuditEvent;
+import 
org.apache.ambari.server.audit.event.request.AddCredentialRequestAuditEvent;
+import 
org.apache.ambari.server.audit.request.eventcreator.CredentialEventCreator;
+import org.apache.ambari.server.controller.internal.CredentialResourceProvider;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.junit.Test;
+
+public class CredentialEventCreatorTest extends AuditEventCreatorTestBase{
+
+  @Test
+  public void postTest() {
+    CredentialEventCreator creator = new CredentialEventCreator();
+
+    Map<String,Object> properties = new HashMap<>();
+    
properties.put(CredentialResourceProvider.CREDENTIAL_CLUSTER_NAME_PROPERTY_ID, 
"mycluster");
+    properties.put(CredentialResourceProvider.CREDENTIAL_TYPE_PROPERTY_ID, 
"USER");
+    properties.put(CredentialResourceProvider.CREDENTIAL_ALIAS_PROPERTY_ID, 
"Alias");
+    
properties.put(CredentialResourceProvider.CREDENTIAL_PRINCIPAL_PROPERTY_ID, 
"newuser");
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.POST, 
Resource.Type.Credential, properties, null);
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK));
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(Credential addition), RequestType(POST), 
url(http://example.com:8080/api/v1/test), ResultStatus(200 OK), Type(USER), 
Principal(newuser), Alias(Alias), Cluster name(mycluster)";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
AddCredentialRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/af13ef73/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/DefaultEventCreatorTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/DefaultEventCreatorTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/DefaultEventCreatorTest.java
new file mode 100644
index 0000000..56aaaed
--- /dev/null
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/DefaultEventCreatorTest.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.ambari.server.audit.request.creator;
+
+import junit.framework.Assert;
+
+import org.apache.ambari.server.api.services.Request;
+import org.apache.ambari.server.api.services.Result;
+import org.apache.ambari.server.api.services.ResultStatus;
+import org.apache.ambari.server.audit.event.AuditEvent;
+import org.apache.ambari.server.audit.request.RequestAuditEvent;
+import org.apache.ambari.server.audit.request.eventcreator.DefaultEventCreator;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.junit.Test;
+
+public class DefaultEventCreatorTest extends AuditEventCreatorTestBase{
+
+  @Test
+  public void postTest() {
+    DefaultEventCreator creator = new DefaultEventCreator();
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.POST, 
Resource.Type.Credential, null, null);
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK));
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
RequestType(POST), url(http://example.com:8080/api/v1/test), ResultStatus(200 
OK)";
+
+    Assert.assertTrue("Class mismatch", event instanceof RequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/af13ef73/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/GroupEventCreatorTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/GroupEventCreatorTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/GroupEventCreatorTest.java
new file mode 100644
index 0000000..7d5ad79
--- /dev/null
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/GroupEventCreatorTest.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.ambari.server.audit.request.creator;
+
+import junit.framework.Assert;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.ambari.server.api.services.Request;
+import org.apache.ambari.server.api.services.Result;
+import org.apache.ambari.server.api.services.ResultStatus;
+import org.apache.ambari.server.audit.event.AuditEvent;
+import 
org.apache.ambari.server.audit.event.request.CreateGroupRequestAuditEvent;
+import 
org.apache.ambari.server.audit.event.request.DeleteGroupRequestAuditEvent;
+import org.apache.ambari.server.audit.request.eventcreator.GroupEventCreator;
+import org.apache.ambari.server.controller.internal.GroupResourceProvider;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.junit.Test;
+
+public class GroupEventCreatorTest extends AuditEventCreatorTestBase{
+
+  @Test
+  public void postTest() {
+    GroupEventCreator creator = new GroupEventCreator();
+
+    Map<String,Object> properties = new HashMap<>();
+    properties.put(GroupResourceProvider.GROUP_GROUPNAME_PROPERTY_ID, 
"GroupName");
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.POST, 
Resource.Type.Group, properties, null);
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK));
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(Group creation), RequestType(POST), 
url(http://example.com:8080/api/v1/test), ResultStatus(200 OK), 
Group(GroupName)";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
CreateGroupRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+
+  @Test
+  public void deleteTest() {
+    GroupEventCreator creator = new GroupEventCreator();
+
+    Map<Resource.Type,String> resource = new HashMap<>();
+    resource.put(Resource.Type.Group, "GroupName");
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.DELETE, 
Resource.Type.Group, null, resource);
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK));
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(Group delete), RequestType(DELETE), 
url(http://example.com:8080/api/v1/test), ResultStatus(200 OK), 
Group(GroupName)";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
DeleteGroupRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/af13ef73/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/HostEventCreatorTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/HostEventCreatorTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/HostEventCreatorTest.java
new file mode 100644
index 0000000..ae7ba9d
--- /dev/null
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/HostEventCreatorTest.java
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.ambari.server.audit.request.creator;
+
+import junit.framework.Assert;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.ambari.server.api.services.Request;
+import org.apache.ambari.server.api.services.Result;
+import org.apache.ambari.server.api.services.ResultStatus;
+import org.apache.ambari.server.audit.event.AuditEvent;
+import 
org.apache.ambari.server.audit.event.request.AddComponentToHostRequestAuditEvent;
+import org.apache.ambari.server.audit.event.request.AddHostRequestAuditEvent;
+import 
org.apache.ambari.server.audit.event.request.DeleteHostRequestAuditEvent;
+import org.apache.ambari.server.audit.request.eventcreator.HostEventCreator;
+import 
org.apache.ambari.server.controller.internal.HostComponentResourceProvider;
+import org.apache.ambari.server.controller.internal.HostResourceProvider;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.junit.Test;
+
+public class HostEventCreatorTest extends AuditEventCreatorTestBase{
+
+  @Test
+  public void postTest() {
+    HostEventCreator creator = new HostEventCreator();
+
+    Map<String,Object> properties = new HashMap<>();
+    properties.put(HostResourceProvider.HOST_NAME_PROPERTY_ID, 
"ambari1.example.com");
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.POST, 
Resource.Type.Host, properties, null);
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK));
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(Host addition), RequestType(POST), 
url(http://example.com:8080/api/v1/test), ResultStatus(200 OK), 
Hostname(ambari1.example.com)";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
AddHostRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+
+  @Test
+  public void queryPostTest() {
+    HostEventCreator creator = new HostEventCreator();
+
+    Map<String,Object> properties = new HashMap<>();
+
+    Set<Map<String,String>> set = new HashSet<>();
+    Map<String,String> map = new HashMap<>();
+    
map.put(HostComponentResourceProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID,
 "MYCOMPONENT");
+    set.add(map);
+
+    properties.put("host_components", set);
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.QUERY_POST, 
Resource.Type.Host, properties, null, 
HostResourceProvider.HOST_NAME_PROPERTY_ID + "=ambari1.example.com");
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK));
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(Component addition to host), RequestType(QUERY_POST), 
url(http://example.com:8080/api/v1/testHosts/host_name=ambari1.example.com), 
ResultStatus(200 OK), Hostname(ambari1.example.com), Component(MYCOMPONENT)";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
AddComponentToHostRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+
+  @Test
+  public void deleteTest() {
+    HostEventCreator creator = new HostEventCreator();
+
+    Map<Resource.Type,String> resource = new HashMap<>();
+    resource.put(Resource.Type.Host, "ambari1.example.com");
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.DELETE, 
Resource.Type.Host, null, resource);
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK));
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(Host deletion), RequestType(DELETE), 
url(http://example.com:8080/api/v1/test), ResultStatus(200 OK), 
Hostname(ambari1.example.com)";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
DeleteHostRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/af13ef73/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/MemberEventCreatorTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/MemberEventCreatorTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/MemberEventCreatorTest.java
new file mode 100644
index 0000000..6e9ec0f
--- /dev/null
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/MemberEventCreatorTest.java
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.ambari.server.audit.request.creator;
+
+import junit.framework.Assert;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.ambari.server.api.services.Request;
+import org.apache.ambari.server.api.services.Result;
+import org.apache.ambari.server.api.services.ResultStatus;
+import org.apache.ambari.server.audit.event.AuditEvent;
+import 
org.apache.ambari.server.audit.event.request.AddUserToGroupRequestAuditEvent;
+import 
org.apache.ambari.server.audit.event.request.MembershipChangeRequestAuditEvent;
+import 
org.apache.ambari.server.audit.event.request.RemoveUserFromGroupRequestAuditEvent;
+import org.apache.ambari.server.audit.request.eventcreator.MemberEventCreator;
+import org.apache.ambari.server.controller.internal.MemberResourceProvider;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.junit.Test;
+
+public class MemberEventCreatorTest extends AuditEventCreatorTestBase{
+
+  @Test
+  public void postTest() {
+    MemberEventCreator creator = new MemberEventCreator();
+
+    Map<Resource.Type,String> resource = new HashMap<>();
+    resource.put(Resource.Type.Group, "GroupName");
+    resource.put(Resource.Type.Member, "MemberName");
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.POST, 
Resource.Type.Member, null, resource);
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK));
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(User addition to group), RequestType(POST), 
url(http://example.com:8080/api/v1/test), ResultStatus(200 OK), 
Group(GroupName), Affected username(MemberName)";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
AddUserToGroupRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+
+  @Test
+  public void putTest() {
+    MemberEventCreator creator = new MemberEventCreator();
+
+    Map<String,Object> properties = new HashMap<>();
+    properties.put(MemberResourceProvider.MEMBER_GROUP_NAME_PROPERTY_ID, 
"GroupName");
+    properties.put(MemberResourceProvider.MEMBER_USER_NAME_PROPERTY_ID, 
"MemberName");
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.PUT, 
Resource.Type.Member, properties, null);
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK));
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(Membership change), RequestType(PUT), 
url(http://example.com:8080/api/v1/test), ResultStatus(200 OK), 
Group(GroupName), Members(MemberName)";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
MembershipChangeRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+
+  @Test
+  public void deleteTest() {
+    MemberEventCreator creator = new MemberEventCreator();
+
+    Map<Resource.Type,String> resource = new HashMap<>();
+    resource.put(Resource.Type.Group, "GroupName");
+    resource.put(Resource.Type.Member, "MemberName");
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.DELETE, 
Resource.Type.Member, null, resource);
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK));
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(User removal from group), RequestType(DELETE), 
url(http://example.com:8080/api/v1/test), ResultStatus(200 OK), 
Group(GroupName), Affected username(MemberName)";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
RemoveUserFromGroupRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/af13ef73/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/PrivilegeEventCreatorTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/PrivilegeEventCreatorTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/PrivilegeEventCreatorTest.java
new file mode 100644
index 0000000..ff4abd6
--- /dev/null
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/PrivilegeEventCreatorTest.java
@@ -0,0 +1,112 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.ambari.server.audit.request.creator;
+
+import junit.framework.Assert;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.ambari.server.api.services.NamedPropertySet;
+import org.apache.ambari.server.api.services.Request;
+import org.apache.ambari.server.api.services.Result;
+import org.apache.ambari.server.api.services.ResultStatus;
+import org.apache.ambari.server.audit.event.AuditEvent;
+import 
org.apache.ambari.server.audit.event.request.ClusterPrivilegeChangeRequestAuditEvent;
+import 
org.apache.ambari.server.audit.event.request.PrivilegeChangeRequestAuditEvent;
+import 
org.apache.ambari.server.audit.request.eventcreator.PrivilegeEventCreator;
+import org.apache.ambari.server.controller.internal.PrivilegeResourceProvider;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.junit.Test;
+
+public class PrivilegeEventCreatorTest extends AuditEventCreatorTestBase{
+
+  @Test
+  public void postTest() {
+    PrivilegeEventCreator creator = new PrivilegeEventCreator();
+
+    Map<String,Object> properties = new HashMap<>();
+    properties.put(PrivilegeResourceProvider.PRINCIPAL_TYPE_PROPERTY_ID, 
"USER");
+    properties.put(PrivilegeResourceProvider.PERMISSION_NAME_PROPERTY_ID, 
"Permission2");
+    properties.put(PrivilegeResourceProvider.PRINCIPAL_NAME_PROPERTY_ID, 
userName + "2");
+
+    NamedPropertySet nps = new NamedPropertySet("1",properties);
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.POST, 
Resource.Type.ClusterPrivilege, null, null);
+    request.getBody().addPropertySet(nps);
+
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK));
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(User role change), RequestType(POST), 
url(http://example.com:8080/api/v1/test), ResultStatus(200 OK), 
Role(Permission2), User(" + userName + "2)";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
PrivilegeChangeRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+
+  @Test
+  public void putTest() {
+    PrivilegeEventCreator creator = new PrivilegeEventCreator();
+
+    Map<String,Object> properties = new HashMap<>();
+    properties.put(PrivilegeResourceProvider.PRINCIPAL_TYPE_PROPERTY_ID, 
"USER");
+    properties.put(PrivilegeResourceProvider.PERMISSION_NAME_PROPERTY_ID, 
"Permission1");
+    properties.put(PrivilegeResourceProvider.PRINCIPAL_NAME_PROPERTY_ID, 
userName);
+
+    Map<String,Object> properties2 = new HashMap<>();
+    properties2.put(PrivilegeResourceProvider.PRINCIPAL_TYPE_PROPERTY_ID, 
"USER");
+    properties2.put(PrivilegeResourceProvider.PERMISSION_NAME_PROPERTY_ID, 
"Permission2");
+    properties2.put(PrivilegeResourceProvider.PRINCIPAL_NAME_PROPERTY_ID, 
userName + "2");
+
+    Map<String,Object> properties3 = new HashMap<>();
+    properties3.put(PrivilegeResourceProvider.PRINCIPAL_TYPE_PROPERTY_ID, 
"GROUP");
+    properties3.put(PrivilegeResourceProvider.PERMISSION_NAME_PROPERTY_ID, 
"Permission1");
+    properties3.put(PrivilegeResourceProvider.PRINCIPAL_NAME_PROPERTY_ID, 
"testgroup");
+
+    NamedPropertySet nps = new NamedPropertySet("1",properties);
+    NamedPropertySet nps2 = new NamedPropertySet("2",properties2);
+    NamedPropertySet nps3 = new NamedPropertySet("3",properties3);
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.PUT, 
Resource.Type.ClusterPrivilege, null, null);
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK));
+
+    request.getBody().addPropertySet(nps);
+    request.getBody().addPropertySet(nps2);
+    request.getBody().addPropertySet(nps3);
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(Role change), RequestType(PUT), 
url(http://example.com:8080/api/v1/test), ResultStatus(200 OK), Roles(\n" +
+      "Permission2: \n" +
+      "  Users: " + userName + "2\n" +
+      "Permission1: \n" +
+      "  Users: " + userName + "\n" +
+      "  Groups: testgroup)";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
ClusterPrivilegeChangeRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/af13ef73/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/RecomendationIgnoreEventCreatorTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/RecomendationIgnoreEventCreatorTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/RecomendationIgnoreEventCreatorTest.java
new file mode 100644
index 0000000..d5ffcf4
--- /dev/null
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/RecomendationIgnoreEventCreatorTest.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.ambari.server.audit.request.creator;
+
+import org.apache.ambari.server.api.services.Request;
+import org.apache.ambari.server.api.services.Result;
+import org.apache.ambari.server.api.services.ResultStatus;
+import 
org.apache.ambari.server.audit.request.eventcreator.RecommendationIgnoreEventCreator;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.junit.Test;
+
+public class RecomendationIgnoreEventCreatorTest extends 
AuditEventCreatorTestBase{
+
+  @Test(expected = AssertionError.class)
+  public void postTest() {
+    RecommendationIgnoreEventCreator creator = new 
RecommendationIgnoreEventCreator();
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.POST, 
Resource.Type.Recommendation, null, null);
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK));
+
+    AuditEventCreatorTestHelper.getEvent(creator, request, result);
+  }
+
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/af13ef73/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/RepositoryEventCreatorTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/RepositoryEventCreatorTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/RepositoryEventCreatorTest.java
new file mode 100644
index 0000000..3479334
--- /dev/null
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/RepositoryEventCreatorTest.java
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.ambari.server.audit.request.creator;
+
+import junit.framework.Assert;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.ambari.server.api.services.Request;
+import org.apache.ambari.server.api.services.Result;
+import org.apache.ambari.server.api.services.ResultStatus;
+import org.apache.ambari.server.audit.event.AuditEvent;
+import 
org.apache.ambari.server.audit.event.request.AddRepositoryRequestAuditEvent;
+import 
org.apache.ambari.server.audit.event.request.UpdateRepositoryRequestAuditEvent;
+import 
org.apache.ambari.server.audit.request.eventcreator.RepositoryEventCreator;
+import org.apache.ambari.server.controller.internal.RepositoryResourceProvider;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.junit.Test;
+
+public class RepositoryEventCreatorTest extends AuditEventCreatorTestBase{
+
+  @Test
+  public void postTest() {
+    RepositoryEventCreator creator = new RepositoryEventCreator();
+
+    Map<String,Object> properties = new HashMap<>();
+    properties.put(RepositoryResourceProvider.REPOSITORY_REPO_ID_PROPERTY_ID, 
"Repo1");
+    
properties.put(RepositoryResourceProvider.REPOSITORY_STACK_NAME_PROPERTY_ID, 
"StackName");
+    
properties.put(RepositoryResourceProvider.REPOSITORY_STACK_VERSION_PROPERTY_ID, 
"1.2-56");
+    properties.put(RepositoryResourceProvider.REPOSITORY_OS_TYPE_PROPERTY_ID, 
"redhat7");
+    properties.put(RepositoryResourceProvider.REPOSITORY_BASE_URL_PROPERTY_ID, 
"http://example.com";);
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.POST, 
Resource.Type.Repository, properties, null);
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK));
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(Repository addition), RequestType(POST), 
url(http://example.com:8080/api/v1/test), ResultStatus(200 OK), 
Stack(StackName), Stack version(1.2-56), OS(redhat7), Repo id(Repo1), Base 
URL(http://example.com)";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
AddRepositoryRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+
+  @Test
+  public void putTest() {
+    RepositoryEventCreator creator = new RepositoryEventCreator();
+
+    Map<String,Object> properties = new HashMap<>();
+    properties.put(RepositoryResourceProvider.REPOSITORY_REPO_ID_PROPERTY_ID, 
"Repo1");
+    
properties.put(RepositoryResourceProvider.REPOSITORY_STACK_NAME_PROPERTY_ID, 
"StackName");
+    
properties.put(RepositoryResourceProvider.REPOSITORY_STACK_VERSION_PROPERTY_ID, 
"1.2-56");
+    properties.put(RepositoryResourceProvider.REPOSITORY_OS_TYPE_PROPERTY_ID, 
"redhat7");
+    properties.put(RepositoryResourceProvider.REPOSITORY_BASE_URL_PROPERTY_ID, 
"http://example.com";);
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.PUT, 
Resource.Type.Repository, properties, null);
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK));
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(Repository update), RequestType(PUT), 
url(http://example.com:8080/api/v1/test), ResultStatus(200 OK), 
Stack(StackName), Stack version(1.2-56), OS(redhat7), Repo id(Repo1), Base 
URL(http://example.com)";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
UpdateRepositoryRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/af13ef73/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/RepositoryVersionEventCreatorTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/RepositoryVersionEventCreatorTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/RepositoryVersionEventCreatorTest.java
new file mode 100644
index 0000000..18e2d3f
--- /dev/null
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/RepositoryVersionEventCreatorTest.java
@@ -0,0 +1,163 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.ambari.server.audit.request.creator;
+
+import junit.framework.Assert;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.ambari.server.api.services.Request;
+import org.apache.ambari.server.api.services.Result;
+import org.apache.ambari.server.api.services.ResultStatus;
+import org.apache.ambari.server.audit.event.AuditEvent;
+import 
org.apache.ambari.server.audit.event.request.AddRepositoryVersionRequestAuditEvent;
+import 
org.apache.ambari.server.audit.event.request.ChangeRepositoryVersionRequestAuditEvent;
+import 
org.apache.ambari.server.audit.event.request.DeleteRepositoryVersionRequestAuditEvent;
+import 
org.apache.ambari.server.audit.request.eventcreator.RepositoryVersionEventCreator;
+import 
org.apache.ambari.server.controller.internal.OperatingSystemResourceProvider;
+import org.apache.ambari.server.controller.internal.RepositoryResourceProvider;
+import 
org.apache.ambari.server.controller.internal.RepositoryVersionResourceProvider;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.junit.Test;
+
+public class RepositoryVersionEventCreatorTest extends 
AuditEventCreatorTestBase{
+
+  @Test
+  public void postTest() {
+    RepositoryVersionEventCreator creator = new 
RepositoryVersionEventCreator();
+
+    Map<String,Object> properties = new HashMap<>();
+    
properties.put(RepositoryVersionResourceProvider.REPOSITORY_VERSION_STACK_NAME_PROPERTY_ID,
 "StackName");
+    
properties.put(RepositoryVersionResourceProvider.REPOSITORY_VERSION_STACK_VERSION_PROPERTY_ID,
 "1.9");
+    
properties.put(RepositoryVersionResourceProvider.REPOSITORY_VERSION_DISPLAY_NAME_PROPERTY_ID,
 "MyStack");
+    
properties.put(RepositoryVersionResourceProvider.REPOSITORY_VERSION_REPOSITORY_VERSION_PROPERTY_ID,
 "1.2-56");
+
+    properties.put("operating_systems", createOperatingSystems());
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.POST, 
Resource.Type.RepositoryVersion, properties, null);
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK));
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(Repository version addition), RequestType(POST), 
url(http://example.com:8080/api/v1/test), ResultStatus(200 OK), 
Stack(StackName), Stack version(1.9), Display name(MyStack), Repo 
version(1.2-56), Repositories(\n" +
+      "Operating system: redhat6\n" +
+      "    Repository ID(2), Repository name(MyRepo6), Base 
url(http://example6.com)\n" +
+      "Operating system: redhat7\n" +
+      "    Repository ID(1), Repository name(MyRepo), Base 
url(http://example.com)\n" +
+      ")";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
AddRepositoryVersionRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+
+  @Test
+  public void putTest() {
+    RepositoryVersionEventCreator creator = new 
RepositoryVersionEventCreator();
+
+    Map<String,Object> properties = new HashMap<>();
+    
properties.put(RepositoryVersionResourceProvider.REPOSITORY_VERSION_STACK_NAME_PROPERTY_ID,
 "StackName");
+    
properties.put(RepositoryVersionResourceProvider.REPOSITORY_VERSION_STACK_VERSION_PROPERTY_ID,
 "1.9");
+    
properties.put(RepositoryVersionResourceProvider.REPOSITORY_VERSION_DISPLAY_NAME_PROPERTY_ID,
 "MyStack");
+    
properties.put(RepositoryVersionResourceProvider.REPOSITORY_VERSION_REPOSITORY_VERSION_PROPERTY_ID,
 "1.2-56");
+
+    properties.put("operating_systems", createOperatingSystems());
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.PUT, 
Resource.Type.RepositoryVersion, properties, null);
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK));
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(Repository version change), RequestType(PUT), 
url(http://example.com:8080/api/v1/test), ResultStatus(200 OK), 
Stack(StackName), Stack version(1.9), Display name(MyStack), Repo 
version(1.2-56), Repositories(\n" +
+      "Operating system: redhat6\n" +
+      "    Repository ID(2), Repository name(MyRepo6), Base 
url(http://example6.com)\n" +
+      "Operating system: redhat7\n" +
+      "    Repository ID(1), Repository name(MyRepo), Base 
url(http://example.com)\n" +
+      ")";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
ChangeRepositoryVersionRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+
+  @Test
+  public void deleteTest() {
+    RepositoryVersionEventCreator creator = new 
RepositoryVersionEventCreator();
+
+    Map<Resource.Type,String> resource = new HashMap<>();
+    resource.put(Resource.Type.Stack, "HDP");
+    resource.put(Resource.Type.StackVersion, "1.9");
+    resource.put(Resource.Type.RepositoryVersion, "1.2-56");
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.DELETE, 
Resource.Type.RepositoryVersion, null, resource);
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK));
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(Repository version removal), RequestType(DELETE), 
url(http://example.com:8080/api/v1/test), ResultStatus(200 OK), Stack(HDP), 
Stack version(1.9), Repo version ID(1.2-56)";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
DeleteRepositoryVersionRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+
+  private Set<Map<String, Object>> createOperatingSystems() {
+    Set<Map<String, Object>> operatingSystems = new HashSet<>();
+
+    // ***
+    Map<String, Object> operatingSystem = new HashMap<>();
+    
operatingSystem.put(OperatingSystemResourceProvider.OPERATING_SYSTEM_OS_TYPE_PROPERTY_ID,
 "redhat7");
+
+    Set<Map<String,String>> repositories = new HashSet<>();
+
+    Map<String, String> repository = new HashMap<>();
+    repository.put(RepositoryResourceProvider.REPOSITORY_REPO_ID_PROPERTY_ID, 
"1");
+    
repository.put(RepositoryResourceProvider.REPOSITORY_REPO_NAME_PROPERTY_ID, 
"MyRepo");
+    repository.put(RepositoryResourceProvider.REPOSITORY_BASE_URL_PROPERTY_ID, 
"http://example.com";);
+    repositories.add(repository);
+
+    operatingSystem.put("repositories", repositories);
+    // ***
+    Map<String, Object> operatingSystem2 = new HashMap<>();
+    
operatingSystem2.put(OperatingSystemResourceProvider.OPERATING_SYSTEM_OS_TYPE_PROPERTY_ID,
 "redhat6");
+
+    Set<Map<String,String>> repositories2 = new HashSet<>();
+
+    Map<String, String> repository2 = new HashMap<>();
+    repository2.put(RepositoryResourceProvider.REPOSITORY_REPO_ID_PROPERTY_ID, 
"2");
+    
repository2.put(RepositoryResourceProvider.REPOSITORY_REPO_NAME_PROPERTY_ID, 
"MyRepo6");
+    
repository2.put(RepositoryResourceProvider.REPOSITORY_BASE_URL_PROPERTY_ID, 
"http://example6.com";);
+    repositories2.add(repository2);
+
+    operatingSystem2.put("repositories", repositories2);
+    // ***
+
+    operatingSystems.add(operatingSystem);
+    operatingSystems.add(operatingSystem2);
+    return operatingSystems;
+  }
+
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/af13ef73/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/RequestEventCreatorTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/RequestEventCreatorTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/RequestEventCreatorTest.java
new file mode 100644
index 0000000..1074f0e
--- /dev/null
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/RequestEventCreatorTest.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.ambari.server.audit.request.creator;
+
+import junit.framework.Assert;
+
+import org.apache.ambari.server.api.services.Request;
+import org.apache.ambari.server.api.services.Result;
+import org.apache.ambari.server.api.services.ResultStatus;
+import org.apache.ambari.server.audit.event.AuditEvent;
+import 
org.apache.ambari.server.audit.event.request.AddRequestRequestAuditEvent;
+import org.apache.ambari.server.audit.request.eventcreator.RequestEventCreator;
+import org.apache.ambari.server.controller.internal.RequestOperationLevel;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.junit.Test;
+
+public class RequestEventCreatorTest extends AuditEventCreatorTestBase{
+
+  @Test
+  public void postTest() {
+    RequestEventCreator creator = new RequestEventCreator();
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.POST, 
Resource.Type.Request, null, null);
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK));
+    request.getBody().addRequestInfoProperty("command", "MyCommand");
+    
request.getBody().addRequestInfoProperty(RequestOperationLevel.OPERATION_CLUSTER_ID,
 "mycluster");
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(Request from server), RequestType(POST), 
url(http://example.com:8080/api/v1/test), ResultStatus(200 OK), 
Command(MyCommand), Cluster name(mycluster)";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
AddRequestRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/af13ef73/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/ServiceConfigDownloadEventCreatorTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/ServiceConfigDownloadEventCreatorTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/ServiceConfigDownloadEventCreatorTest.java
new file mode 100644
index 0000000..52bfd35
--- /dev/null
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/ServiceConfigDownloadEventCreatorTest.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.ambari.server.audit.request.creator;
+
+import junit.framework.Assert;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.ambari.server.api.services.Request;
+import org.apache.ambari.server.api.services.Result;
+import org.apache.ambari.server.api.services.ResultStatus;
+import org.apache.ambari.server.audit.event.AuditEvent;
+import 
org.apache.ambari.server.audit.event.request.ClientConfigDownloadRequestAuditEvent;
+import 
org.apache.ambari.server.audit.request.eventcreator.ServiceConfigDownloadEventCreator;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.junit.Test;
+
+public class ServiceConfigDownloadEventCreatorTest extends 
AuditEventCreatorTestBase{
+
+  @Test
+  public void getTest() {
+    ServiceConfigDownloadEventCreator creator = new 
ServiceConfigDownloadEventCreator();
+
+    Map<Resource.Type,String> resource = new HashMap<>();
+    resource.put(Resource.Type.Service, "MYSERVICE");
+    resource.put(Resource.Type.Component, "MYCOMPONENT");
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.GET, 
Resource.Type.ClientConfig, null, resource);
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK));
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(Client config download), RequestType(GET), 
url(http://example.com:8080/api/v1/test), ResultStatus(200 OK), 
Service(MYSERVICE), Component(MYCOMPONENT)";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
ClientConfigDownloadRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/af13ef73/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/ServiceEventCreatorTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/ServiceEventCreatorTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/ServiceEventCreatorTest.java
new file mode 100644
index 0000000..01cc1e3
--- /dev/null
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/ServiceEventCreatorTest.java
@@ -0,0 +1,185 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.ambari.server.audit.request.creator;
+
+import junit.framework.Assert;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.ambari.server.api.services.Request;
+import org.apache.ambari.server.api.services.Result;
+import org.apache.ambari.server.api.services.ResultStatus;
+import org.apache.ambari.server.api.util.TreeNode;
+import org.apache.ambari.server.api.util.TreeNodeImpl;
+import org.apache.ambari.server.audit.event.AuditEvent;
+import 
org.apache.ambari.server.audit.event.request.DeleteServiceRequestAuditEvent;
+import 
org.apache.ambari.server.audit.event.request.StartOperationRequestAuditEvent;
+import org.apache.ambari.server.audit.request.eventcreator.ServiceEventCreator;
+import org.apache.ambari.server.controller.internal.RequestOperationLevel;
+import org.apache.ambari.server.controller.internal.RequestResourceProvider;
+import org.apache.ambari.server.controller.internal.ResourceImpl;
+import org.apache.ambari.server.controller.internal.ServiceResourceProvider;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.apache.ambari.server.controller.utilities.PropertyHelper;
+import org.junit.Test;
+
+public class ServiceEventCreatorTest extends AuditEventCreatorTestBase {
+
+  @Test
+  public void deleteTest() {
+    ServiceEventCreator creator = new ServiceEventCreator();
+
+    Map<Resource.Type,String> resource = new HashMap<>();
+    resource.put(Resource.Type.Service, "MyService");
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.DELETE, 
Resource.Type.Service, null, resource);
+
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK));
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(Service deletion), RequestType(DELETE), 
url(http://example.com:8080/api/v1/test), ResultStatus(200 OK), 
Service(MyService)";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
DeleteServiceRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+
+  @Test
+  public void putForAllHostsTest() {
+    clusterTest(Request.Type.PUT);
+  }
+  @Test
+  public void postForAllHostsTest() {
+    clusterTest(Request.Type.POST);
+  }
+
+  private void clusterTest(Request.Type type) {
+    ServiceEventCreator creator = new ServiceEventCreator();
+
+    Map<String,Object> properties = new HashMap<>();
+    properties.put(ServiceResourceProvider.SERVICE_SERVICE_STATE_PROPERTY_ID, 
"STARTED");
+
+    Request request = AuditEventCreatorTestHelper.createRequest(type, 
Resource.Type.Service, properties, null);
+    
request.getBody().addRequestInfoProperty(RequestOperationLevel.OPERATION_LEVEL_ID,
 "CLUSTER");
+    
request.getBody().addRequestInfoProperty(RequestOperationLevel.OPERATION_CLUSTER_ID,
 "mycluster");
+
+    TreeNode<Resource> resultTree = new TreeNodeImpl<>(null, null, null);
+    addRequestId(resultTree, 1L);
+
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK), resultTree);
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(STARTED: all services (mycluster)), RequestId(1), Status(Successfully 
queued)";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
StartOperationRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+
+  @Test
+  public void serviceTest() {
+    ServiceEventCreator creator = new ServiceEventCreator();
+
+    Map<String,Object> properties = new HashMap<>();
+    properties.put(ServiceResourceProvider.SERVICE_SERVICE_STATE_PROPERTY_ID, 
"STARTED");
+    properties.put(ServiceResourceProvider.SERVICE_SERVICE_NAME_PROPERTY_ID, 
"MyService");
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.PUT, 
Resource.Type.Service, properties, null);
+    
request.getBody().addRequestInfoProperty(RequestOperationLevel.OPERATION_LEVEL_ID,
 "SERVICE");
+    
request.getBody().addRequestInfoProperty(RequestOperationLevel.OPERATION_CLUSTER_ID,
 "mycluster");
+
+    TreeNode<Resource> resultTree = new TreeNodeImpl<>(null, null, null);
+    addRequestId(resultTree, 1L);
+
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK), resultTree);
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(STARTED: MyService (mycluster)), RequestId(1), Status(Successfully 
queued)";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
StartOperationRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+
+  @Test
+  public void maintenanceModeTest() {
+    ServiceEventCreator creator = new ServiceEventCreator();
+
+    Map<String,Object> properties = new HashMap<>();
+    
properties.put(ServiceResourceProvider.SERVICE_MAINTENANCE_STATE_PROPERTY_ID, 
"ON");
+    properties.put(ServiceResourceProvider.SERVICE_SERVICE_NAME_PROPERTY_ID, 
"MyService");
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.PUT, 
Resource.Type.Service, properties, null);
+
+    TreeNode<Resource> resultTree = new TreeNodeImpl<>(null, null, null);
+    addRequestId(resultTree, 1L);
+
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK), resultTree);
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(Turn ON Maintenance Mode for MyService), RequestId(1), 
Status(Successfully queued)";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
StartOperationRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+
+  @Test
+  public void failureTest() {
+    ServiceEventCreator creator = new ServiceEventCreator();
+
+    Map<String,Object> properties = new HashMap<>();
+    
properties.put(ServiceResourceProvider.SERVICE_MAINTENANCE_STATE_PROPERTY_ID, 
"ON");
+    properties.put(ServiceResourceProvider.SERVICE_SERVICE_NAME_PROPERTY_ID, 
"MyService");
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.PUT, 
Resource.Type.Service, properties, null);
+
+    TreeNode<Resource> resultTree = new TreeNodeImpl<>(null, null, null);
+    addRequestId(resultTree, 1L);
+
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.BAD_REQUEST, "Failed for testing"), 
resultTree);
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(Turn ON Maintenance Mode for MyService), RequestId(1), Status(Failed 
to queue), Reason(Failed for testing)";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
StartOperationRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+
+  private void addRequestId(TreeNode<Resource> resultTree, Long requestId) {
+    Resource resource = new ResourceImpl(Resource.Type.Request);
+    
resource.addCategory(PropertyHelper.getPropertyCategory(RequestResourceProvider.REQUEST_ID_PROPERTY_ID));
+    resource.setProperty(RequestResourceProvider.REQUEST_ID_PROPERTY_ID, 
requestId);
+    TreeNode<Resource> requestNode = new TreeNodeImpl<>(resultTree, resource, 
"request");
+    resultTree.addChild(requestNode);
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/af13ef73/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/UnauthorizedEventCreatorTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/UnauthorizedEventCreatorTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/UnauthorizedEventCreatorTest.java
new file mode 100644
index 0000000..ffe5462
--- /dev/null
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/UnauthorizedEventCreatorTest.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.ambari.server.audit.request.creator;
+
+import junit.framework.Assert;
+
+import org.apache.ambari.server.api.services.Request;
+import org.apache.ambari.server.api.services.Result;
+import org.apache.ambari.server.api.services.ResultStatus;
+import org.apache.ambari.server.audit.event.AccessUnauthorizedAuditEvent;
+import org.apache.ambari.server.audit.event.AuditEvent;
+import 
org.apache.ambari.server.audit.request.eventcreator.UnauthorizedEventCreator;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.junit.Test;
+
+public class UnauthorizedEventCreatorTest extends AuditEventCreatorTestBase{
+
+  @Test
+  public void unauthorizedTest() {
+    unauthorizedTest(ResultStatus.STATUS.UNAUTHORIZED);
+  }
+
+  @Test
+  public void forbiddenTest() {
+    unauthorizedTest(ResultStatus.STATUS.FORBIDDEN);
+  }
+
+  private void unauthorizedTest(ResultStatus.STATUS status) {
+    UnauthorizedEventCreator creator = new UnauthorizedEventCreator();
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.POST, 
Resource.Type.Service, null, null);
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(status));
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(null), ResourcePath(http://example.com:8080/api/v1/test), 
Status(Failed), Reason(Access not authorized)";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
AccessUnauthorizedAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/af13ef73/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/UpgradeEventCreatorTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/UpgradeEventCreatorTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/UpgradeEventCreatorTest.java
new file mode 100644
index 0000000..57074fd
--- /dev/null
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/UpgradeEventCreatorTest.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.ambari.server.audit.request.creator;
+
+import junit.framework.Assert;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.ambari.server.api.services.Request;
+import org.apache.ambari.server.api.services.Result;
+import org.apache.ambari.server.api.services.ResultStatus;
+import org.apache.ambari.server.audit.event.AuditEvent;
+import 
org.apache.ambari.server.audit.event.request.AddUpgradeRequestAuditEvent;
+import org.apache.ambari.server.audit.request.eventcreator.UpgradeEventCreator;
+import org.apache.ambari.server.controller.internal.UpgradeResourceProvider;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.junit.Test;
+
+public class UpgradeEventCreatorTest extends AuditEventCreatorTestBase{
+
+  @Test
+  public void postTest() {
+    UpgradeEventCreator creator = new UpgradeEventCreator();
+
+    Map<String,Object> properties = new HashMap<>();
+    properties.put(UpgradeResourceProvider.UPGRADE_VERSION, "1.9");
+    properties.put(UpgradeResourceProvider.UPGRADE_TYPE, "ROLLING");
+    properties.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "mycluster");
+
+    Request request = 
AuditEventCreatorTestHelper.createRequest(Request.Type.POST, 
Resource.Type.Upgrade, properties, null);
+    Result result = AuditEventCreatorTestHelper.createResult(new 
ResultStatus(ResultStatus.STATUS.OK));
+
+    AuditEvent event = AuditEventCreatorTestHelper.getEvent(creator, request, 
result);
+
+    String actual = event.getAuditMessage();
+    String expected = "User(" + userName + "), RemoteIp(1.2.3.4), 
Operation(Upgrade addition), RequestType(POST), 
url(http://example.com:8080/api/v1/test), ResultStatus(200 OK), Repository 
version(1.9), Upgrade type(ROLLING), Cluster name(mycluster)";
+
+    Assert.assertTrue("Class mismatch", event instanceof 
AddUpgradeRequestAuditEvent);
+    Assert.assertEquals(expected, actual);
+    Assert.assertTrue(actual.contains(userName));
+  }
+}

Reply via email to