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)); + } +}