diff --git a/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java b/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java index 94e79ec6ea75..0d6bb704ad46 100644 --- a/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java +++ b/server/src/main/java/com/cloud/network/vpc/NetworkACLServiceImpl.java @@ -1109,7 +1109,7 @@ private NetworkACLItem createACLRuleFromMap(Map ruleMap, long ac throw new InvalidParameterValueException("Protocol is required"); } String action = (String) ruleMap.getOrDefault(ApiConstants.ACTION, "deny"); - String trafficType = (String) ruleMap.getOrDefault(ApiConstants.TRAFFIC_TYPE, NetworkACLItem.TrafficType.Ingress); + String trafficType = (String) ruleMap.getOrDefault(ApiConstants.TRAFFIC_TYPE, NetworkACLItem.TrafficType.Ingress.toString()); String forDisplay = (String) ruleMap.getOrDefault(ApiConstants.FOR_DISPLAY, "true"); // Create ACL rule using the service diff --git a/server/src/test/java/com/cloud/network/vpc/NetworkACLServiceImplTest.java b/server/src/test/java/com/cloud/network/vpc/NetworkACLServiceImplTest.java index b24136972ad8..f7d6318a961d 100644 --- a/server/src/test/java/com/cloud/network/vpc/NetworkACLServiceImplTest.java +++ b/server/src/test/java/com/cloud/network/vpc/NetworkACLServiceImplTest.java @@ -38,7 +38,10 @@ import com.cloud.utils.net.NetUtils; import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.command.user.network.CreateNetworkACLCmd; +import org.mockito.ArgumentCaptor; +import org.springframework.test.util.ReflectionTestUtils; import org.apache.cloudstack.api.command.user.network.MoveNetworkAclItemCmd; import org.apache.cloudstack.api.command.user.network.UpdateNetworkACLItemCmd; import org.apache.cloudstack.api.command.user.network.UpdateNetworkACLListCmd; @@ -1506,4 +1509,17 @@ public void validateAclAssociatedToVpcTestNullVpcShouldThrowInvalidParameterValu networkAclServiceImpl.validateAclAssociatedToVpc(networkMockVpcMockId, accountMock, SOME_UUID); } + + @Test + public void createACLRuleFromMapDefaultsTrafficTypeToIngress() { + Map ruleMap = new HashMap<>(); + ruleMap.put(ApiConstants.PROTOCOL, "tcp"); + Mockito.doReturn(Mockito.mock(NetworkACLItem.class)).when(networkAclServiceImpl).createNetworkACLItem(Mockito.any()); + + ReflectionTestUtils.invokeMethod(networkAclServiceImpl, "createACLRuleFromMap", ruleMap, 1L); + + ArgumentCaptor captor = ArgumentCaptor.forClass(CreateNetworkACLCmd.class); + Mockito.verify(networkAclServiceImpl).createNetworkACLItem(captor.capture()); + Assert.assertEquals(NetworkACLItem.TrafficType.Ingress, captor.getValue().getTrafficType()); + } }