You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by pr...@apache.org on 2020/05/14 15:55:44 UTC

[ranger] branch master updated: RANGER-2808: Service Name must not allow spaces in newly created services

This is an automated email from the ASF dual-hosted git repository.

pradeep pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ranger.git


The following commit(s) were added to refs/heads/master by this push:
     new f4ac66d  RANGER-2808: Service Name must not allow spaces in newly created services
f4ac66d is described below

commit f4ac66d5f2f0014a8b1f6ab043cc1372a55ab6fd
Author: Kishor Gollapalliwar <ki...@gmail.com>
AuthorDate: Thu May 14 20:41:09 2020 +0530

    RANGER-2808: Service Name must not allow spaces in newly created services
    
    Signed-off-by: pradeep <pr...@apache.org>
---
 .../ranger/plugin/errors/ValidationErrorCode.java  |   4 +-
 .../model/validation/RangerServiceValidator.java   |  43 ++---
 .../validation/TestRangerServiceValidator.java     | 195 +++++++++++++++++----
 .../webapp/scripts/modules/globalize/message/en.js |   1 +
 4 files changed, 181 insertions(+), 62 deletions(-)

diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/errors/ValidationErrorCode.java b/agents-common/src/main/java/org/apache/ranger/plugin/errors/ValidationErrorCode.java
index 1498505..971fd50 100644
--- a/agents-common/src/main/java/org/apache/ranger/plugin/errors/ValidationErrorCode.java
+++ b/agents-common/src/main/java/org/apache/ranger/plugin/errors/ValidationErrorCode.java
@@ -35,8 +35,8 @@ public enum ValidationErrorCode {
     SERVICE_VALIDATION_ERR_INVALID_SERVICE_NAME(1006, "Missing service name"),
     SERVICE_VALIDATION_ERR_SERVICE_NAME_CONFICT(1007, "Duplicate service name: name=[{0}]"),
     SERVICE_VALIDATION_ERR_SERVICE_DISPLAY_NAME_CONFICT(3051,"Display name [{0}] is already used by service [{1}]"),
-    SERVICE_VALIDATION_ERR_SPECIAL_CHARACTERS_SERVICE_NAME(3031, "Name should not start with space, it should be less than 256 characters and special characters are not allowed(except _ - and space). : name=[{0}]"),
-    SERVICE_VALIDATION_ERR_SPECIAL_CHARACTERS_SERVICE_DISPLAY_NAME(3050, "Invalid display name [{0}]. It should be not be longer than 256 characters, should not start with space, and should not include special characters (except underscore, hyphen and space)"),
+    SERVICE_VALIDATION_ERR_SPECIAL_CHARACTERS_SERVICE_NAME(3031, "Invalid service name=[{0}]. It should not be longer than 256 characters and special characters are not allowed (except underscore and hyphen)"),
+    SERVICE_VALIDATION_ERR_SPECIAL_CHARACTERS_SERVICE_DISPLAY_NAME(3050, "Invalid service display name [{0}]. It should not be longer than 256 characters, should not start with space, and should not include special characters (except underscore, hyphen and space)"),
     SERVICE_VALIDATION_ERR_ID_NAME_CONFLICT(1008, "Duplicate service name: name=[{0}], id=[{1}]"),
     SERVICE_VALIDATION_ERR_MISSING_SERVICE_DEF(1009, "Missing service def"),
     SERVICE_VALIDATION_ERR_INVALID_SERVICE_DEF(1010, "Service def not found: service-def-name=[{0}]"),
diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerServiceValidator.java b/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerServiceValidator.java
index aa8cf7e..6c4d6c1 100644
--- a/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerServiceValidator.java
+++ b/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerServiceValidator.java
@@ -36,9 +36,11 @@ import com.google.common.collect.Sets;
 
 public class RangerServiceValidator extends RangerValidator {
 	private static final Log LOG = LogFactory.getLog(RangerServiceValidator.class);
-	static final public String VALIDATION_SERVICE_NAME = "^[a-zA-Z0-9_-][a-zA-Z0-9\\s_-]{0,254}";
 
-	static Pattern serviceNameCompiledRegEx;
+	private static final Pattern SERVICE_NAME_VALIDATION_REGEX         = Pattern.compile("^[a-zA-Z0-9_-][a-zA-Z0-9_-]{0,254}", Pattern.CASE_INSENSITIVE);
+	private static final Pattern LEGACY_SERVICE_NAME_VALIDATION_REGEX  = Pattern.compile("^[a-zA-Z0-9_-][a-zA-Z0-9\\s_-]{0,254}", Pattern.CASE_INSENSITIVE);
+	private static final Pattern SERVICE_DISPLAY_NAME_VALIDATION_REGEX = Pattern.compile("^[a-zA-Z0-9_-][a-zA-Z0-9\\s_-]{0,254}", Pattern.CASE_INSENSITIVE);
+
 	public RangerServiceValidator(ServiceStore store) {
 		super(store);
 	}
@@ -104,7 +106,6 @@ public class RangerServiceValidator extends RangerValidator {
 		if (!(action == Action.CREATE || action == Action.UPDATE)) {
 			throw new IllegalArgumentException("isValid(RangerService, ...) is only supported for CREATE/UPDATE");
 		}
-
 		boolean valid = true;
 		if (service == null) {
 			ValidationErrorCode error = ValidationErrorCode.SERVICE_VALIDATION_ERR_NULL_SERVICE_OBJECT;
@@ -151,7 +152,16 @@ public class RangerServiceValidator extends RangerValidator {
 						.build());
 				valid = false;
 			} else {
-				if(!validateString(VALIDATION_SERVICE_NAME, name)){
+				Pattern serviceNameRegex = SERVICE_NAME_VALIDATION_REGEX;
+				if (action == Action.UPDATE) {
+					RangerService rangerService = getService(service.getId());
+					if (rangerService != null && StringUtils.isNotBlank(rangerService.getName()) && rangerService.getName().contains(" ")) {
+						//RANGER-2808 Support for space in services created with space in earlier version
+						serviceNameRegex = LEGACY_SERVICE_NAME_VALIDATION_REGEX;
+					}
+				}
+
+				if(!isValidString(serviceNameRegex, name)){
 					ValidationErrorCode error = ValidationErrorCode.SERVICE_VALIDATION_ERR_SPECIAL_CHARACTERS_SERVICE_NAME;
 					failures.add(new ValidationFailureDetailsBuilder()
 							.field("name")
@@ -185,7 +195,7 @@ public class RangerServiceValidator extends RangerValidator {
 			}
 			// Display name
 			String displayName = service.getDisplayName();
-			if(!validateString(VALIDATION_SERVICE_NAME, displayName)){
+			if(!isValidString(SERVICE_DISPLAY_NAME_VALIDATION_REGEX, displayName)){
 				ValidationErrorCode error = ValidationErrorCode.SERVICE_VALIDATION_ERR_SPECIAL_CHARACTERS_SERVICE_DISPLAY_NAME;
 				failures.add(new ValidationFailureDetailsBuilder()
 						.field("displayName")
@@ -216,7 +226,6 @@ public class RangerServiceValidator extends RangerValidator {
 					valid = false;
 				}
 			}
-
 			String type = service.getType();
 			boolean typeSpecified = StringUtils.isNotBlank(type);
 			if (!typeSpecified) {
@@ -258,7 +267,6 @@ public class RangerServiceValidator extends RangerValidator {
 					valid = false;
 				}
 			}
-
 			String tagServiceName = service.getTagService();
 
 			if (StringUtils.isNotBlank(tagServiceName) && StringUtils.equals(type, EmbeddedServiceDefsUtil.EMBEDDED_SERVICEDEF_TAG_NAME)) {
@@ -271,7 +279,6 @@ public class RangerServiceValidator extends RangerValidator {
 			}
 
 			boolean needToEnsureServiceType = false;
-
 			if (action == Action.UPDATE) {
 				RangerService otherService = getService(name);
 				String otherTagServiceName = otherService == null ? null : otherService.getTagService();
@@ -286,7 +293,6 @@ public class RangerServiceValidator extends RangerValidator {
 					needToEnsureServiceType = true;
 				}
 			}
-
 			if (needToEnsureServiceType) {
 				RangerService maybeTagService = getService(tagServiceName);
 				if (maybeTagService == null || !StringUtils.equals(maybeTagService.getType(), EmbeddedServiceDefsUtil.EMBEDDED_SERVICEDEF_TAG_NAME)) {
@@ -306,22 +312,7 @@ public class RangerServiceValidator extends RangerValidator {
 		return valid;
 	}
 
-	public boolean regExPatternMatch(String expression, String inputStr) {
-		Pattern pattern = serviceNameCompiledRegEx;
-		if (pattern == null) {
-			pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
-			serviceNameCompiledRegEx = pattern;
-		}
-
-		return pattern != null && pattern.matcher(inputStr).matches();
-	}
-
-	public boolean validateString(String regExStr, String str) {
-		try {
-			return regExPatternMatch(regExStr, str);
-		} catch (Throwable t) {
-			LOG.error("Error validating string. str=" + str + " due to reason " + t.getMessage() + ". Stack Trace : " + t.getStackTrace());
-			return false;
-		}
+	public boolean isValidString(final Pattern pattern, final String name) {
+		return pattern != null && StringUtils.isNotBlank(name) && pattern.matcher(name).matches();
 	}
 }
diff --git a/agents-common/src/test/java/org/apache/ranger/plugin/model/validation/TestRangerServiceValidator.java b/agents-common/src/test/java/org/apache/ranger/plugin/model/validation/TestRangerServiceValidator.java
index 02216b6..bb9968b 100644
--- a/agents-common/src/test/java/org/apache/ranger/plugin/model/validation/TestRangerServiceValidator.java
+++ b/agents-common/src/test/java/org/apache/ranger/plugin/model/validation/TestRangerServiceValidator.java
@@ -27,6 +27,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.ranger.plugin.errors.ValidationErrorCode;
 import org.apache.ranger.plugin.model.RangerService;
 import org.apache.ranger.plugin.model.RangerServiceDef;
 import org.apache.ranger.plugin.model.RangerServiceDef.RangerServiceConfigDef;
@@ -37,11 +38,10 @@ import org.junit.Before;
 import org.junit.Test;
 
 public class TestRangerServiceValidator {
-	
+
 	final Action[] cud = new Action[] { Action.CREATE, Action.UPDATE, Action.DELETE };
 	final Action[] cu = new Action[] { Action.CREATE, Action.UPDATE };
 	final Action[] ud = new Action[] { Action.UPDATE, Action.DELETE };
-	String serviceNameValidationErrorMessage = "Name should not start with space, it should be less than 256 characters and special characters are not allowed(except _ - and space). ";
 
 	@Before
 	public void before() {
@@ -75,9 +75,12 @@ public class TestRangerServiceValidator {
 
 	@Test
 	public void testIsValidServiceNameCreationWithOutSpecialCharacters() throws Exception{
+		String serviceName        = "c1_yarn";
+		String serviceDisplayName = serviceName;
+
 		RangerService rangerService = new RangerService();
-		rangerService.setName("c1_yarn");
-		rangerService.setDisplayName("c1_yarn");
+		rangerService.setName(serviceName);
+		rangerService.setDisplayName(serviceDisplayName);
 		rangerService.setType("yarn");
 		rangerService.setTagService("");
 
@@ -103,15 +106,18 @@ public class TestRangerServiceValidator {
 		boolean  valid = _validator.isValid(rangerService, Action.CREATE, _failures);
 		Assert.assertEquals(0, _failures.size());
 		Assert.assertTrue(valid);
-				
+
 	}
-	
+
 	@Test
 	public void testIsValidServiceNameUpdationWithOutSpecialCharacters() throws Exception{
+		String serviceName = "c1_yarn";
+		String serviceDisplayName = serviceName;
+
 		RangerService rangerService = new RangerService();
 		rangerService.setId(1L);
-		rangerService.setName("c1_yarn");
-		rangerService.setDisplayName("c1_yarn");
+		rangerService.setName(serviceName);
+		rangerService.setDisplayName(serviceDisplayName);
 		rangerService.setType("yarn");
 		rangerService.setTagService("");
 
@@ -138,17 +144,23 @@ public class TestRangerServiceValidator {
 		boolean  valid = _validator.isValid(rangerService, Action.UPDATE, _failures);
 		Assert.assertEquals(0, _failures.size());
 		Assert.assertTrue(valid);
-				
+
 	}
-	
+
 	@Test
 	public void testIsValidServiceNameUpdationWithSpecialCharacters() throws Exception{
+		String serviceName  = "<alert>c1_yarn</alert>";
+
+		ValidationErrorCode vErrCod = ValidationErrorCode.SERVICE_VALIDATION_ERR_SPECIAL_CHARACTERS_SERVICE_NAME;
+		String errorMessage         = vErrCod.getMessage(serviceName);
+		int errorCode               = vErrCod.getErrorCode();
+
 		RangerService rangerService = new RangerService();
 		rangerService.setId(1L);
-		rangerService.setName("<alert>c1_yarn</alert>");
+		rangerService.setName(serviceName);
 		rangerService.setType("yarn");
 		rangerService.setTagService("");
-		
+
 		RangerServiceConfigDef configDef = new RangerServiceConfigDef();
 		configDef.setMandatory(true);
 		
@@ -173,18 +185,24 @@ public class TestRangerServiceValidator {
 		ValidationFailureDetails failureMessage = _failures.get(0);
 		Assert.assertFalse(valid);
 		Assert.assertEquals("name",failureMessage.getFieldName());
-		Assert.assertEquals(serviceNameValidationErrorMessage + ": name=[<alert>c1_yarn</alert>]",failureMessage._reason);
-		Assert.assertEquals(3031, failureMessage._errorCode);
-				
+		Assert.assertEquals(errorMessage, failureMessage._reason);
+		Assert.assertEquals(errorCode, failureMessage._errorCode);
+
 	}
-	
+
 	@Test
 	public void testIsValidServiceNameCreationWithSpecialCharacters() throws Exception{
+		String serviceName = "<script>c1_yarn</script>";
+
+		ValidationErrorCode vErrCod = ValidationErrorCode.SERVICE_VALIDATION_ERR_SPECIAL_CHARACTERS_SERVICE_NAME;
+		String errorMessage         = vErrCod.getMessage(serviceName);
+		int errorCode               = vErrCod.getErrorCode();
+
 		RangerService rangerService = new RangerService();
-		rangerService.setName("<script>c1_yarn</script>");
+		rangerService.setName(serviceName);
 		rangerService.setType("yarn");
 		rangerService.setTagService("");
-		
+
 		RangerServiceConfigDef configDef = new RangerServiceConfigDef();
 		configDef.setMandatory(true);
 		
@@ -208,18 +226,121 @@ public class TestRangerServiceValidator {
 		ValidationFailureDetails failureMessage = _failures.get(0);
 		Assert.assertFalse(valid);
 		Assert.assertEquals("name",failureMessage.getFieldName());
-		Assert.assertEquals(serviceNameValidationErrorMessage + ": name=[<script>c1_yarn</script>]",failureMessage._reason);
-		Assert.assertEquals(3031, failureMessage._errorCode);
-				
+		Assert.assertEquals(errorMessage, failureMessage._reason);
+		Assert.assertEquals(errorCode, failureMessage._errorCode);
 	}
-	
+
+	@Test
+	public void testIsValidServiceNameCreationWithSpaceCharacter() throws Exception{
+		String serviceName  = "Cluster 1_c1_yarn";
+		String serviceDisplayName = serviceName;
+
+		ValidationErrorCode vErrCod = ValidationErrorCode.SERVICE_VALIDATION_ERR_SPECIAL_CHARACTERS_SERVICE_NAME;
+		String errorMessage         = vErrCod.getMessage(serviceName);
+		int errorCode               = vErrCod.getErrorCode();
+
+		RangerService rangerService = new RangerService();
+		rangerService.setName(serviceName);
+		rangerService.setDisplayName(serviceDisplayName);
+		rangerService.setType("yarn");
+		rangerService.setTagService("");
+
+		RangerServiceConfigDef configDef = new RangerServiceConfigDef();
+		configDef.setMandatory(true);
+
+		List<RangerServiceConfigDef> listRangerServiceConfigDef = new ArrayList<RangerServiceDef.RangerServiceConfigDef>();
+		listRangerServiceConfigDef.add(configDef);
+
+		configDef.setName("myconfig1");
+
+		Map<String,String> testMap = new HashMap<String, String>();
+		testMap.put("myconfig1", "myconfig1");
+
+		rangerService.setConfigs(testMap);
+
+		RangerServiceDef rangerServiceDef = new RangerServiceDef();
+		rangerServiceDef.setConfigs(listRangerServiceConfigDef);
+
+		when(_store.getServiceDefByName("yarn")).thenReturn(rangerServiceDef);
+		boolean  valid = _validator.isValid(rangerService, _action, _failures);
+		ValidationFailureDetails failureMessage = _failures.get(0);
+		Assert.assertFalse(valid);
+		Assert.assertEquals("name",failureMessage.getFieldName());
+		Assert.assertEquals(errorMessage, failureMessage._reason);
+		Assert.assertEquals(errorCode, failureMessage._errorCode);
+	}
+
+	@Test
+	public void testIsValidServiceNameUpdationWithSpaceCharacter() throws Exception{
+		String serviceName  = "Cluster 1_c1_yarn";
+		String serviceDisplayName = serviceName;
+
+		ValidationErrorCode vErrCod = ValidationErrorCode.SERVICE_VALIDATION_ERR_SPECIAL_CHARACTERS_SERVICE_NAME;
+		String errorMessage         = vErrCod.getMessage(serviceName);
+		int errorCode               = vErrCod.getErrorCode();
+
+		RangerService rangerService = new RangerService();
+		rangerService.setId(1L);
+		rangerService.setName(serviceName);
+		rangerService.setDisplayName(serviceDisplayName);
+		rangerService.setType("yarn");
+		rangerService.setTagService("");
+
+		RangerServiceConfigDef configDef = new RangerServiceConfigDef();
+		configDef.setMandatory(true);
+
+		List<RangerServiceConfigDef> listRangerServiceConfigDef = new ArrayList<RangerServiceDef.RangerServiceConfigDef>();
+		listRangerServiceConfigDef.add(configDef);
+
+		configDef.setName("myconfig1");
+
+		Map<String,String> testMap = new HashMap<String, String>();
+		testMap.put("myconfig1", "myconfig1");
+
+		rangerService.setConfigs(testMap);
+
+		RangerServiceDef rangerServiceDef = new RangerServiceDef();
+		rangerServiceDef.setConfigs(listRangerServiceConfigDef);
+
+		String serviceNameWithoutSpace  = "Cluster_1_c1_yarn";
+		String serviceDisplayNameWithoutSpace = serviceNameWithoutSpace;
+		RangerService rangerServiceWithoutSpace = new RangerService();
+		rangerServiceWithoutSpace.setId(1L);
+		rangerServiceWithoutSpace.setName(serviceNameWithoutSpace);
+		rangerServiceWithoutSpace.setDisplayName(serviceDisplayNameWithoutSpace);
+		rangerServiceWithoutSpace.setType("yarn");
+		rangerServiceWithoutSpace.setTagService("");
+
+		//Case: previous service name does not have space, updating with name containing space
+		when(_store.getService(1L)).thenReturn(rangerServiceWithoutSpace);
+		when(_store.getServiceDefByName("yarn")).thenReturn(rangerServiceDef);
+		boolean  valid = _validator.isValid(rangerService, Action.UPDATE, _failures);
+		ValidationFailureDetails failureMessage = _failures.get(0);
+		Assert.assertFalse(valid);
+		Assert.assertEquals("name",failureMessage.getFieldName());
+		Assert.assertEquals(errorMessage, failureMessage._reason);
+		Assert.assertEquals(errorCode, failureMessage._errorCode);
+
+		//Case: previous service name does have space, updating with name containing space
+		when(_store.getService(1L)).thenReturn(rangerService);
+		when(_store.getServiceDefByName("yarn")).thenReturn(rangerServiceDef);
+		boolean  validWithSpace = _validator.isValid(rangerService, Action.UPDATE, _failures);
+		Assert.assertTrue(validWithSpace);
+	}
+
 	@Test
 	public void testIsValidServiceNameCreationWithGreater255Characters() throws Exception{
+		String serviceName = "c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1";
+
+		ValidationErrorCode vErrCod = ValidationErrorCode.SERVICE_VALIDATION_ERR_SPECIAL_CHARACTERS_SERVICE_NAME;
+		String errorMessage         = vErrCod.getMessage(serviceName);
+		int errorCode               = vErrCod.getErrorCode();
+
 		RangerService rangerService = new RangerService();
-		rangerService.setName("c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1");
+		rangerService.setName(serviceName);
 		rangerService.setType("yarn");
 		rangerService.setTagService("");
-		
+
 		RangerServiceConfigDef configDef = new RangerServiceConfigDef();
 		configDef.setMandatory(true);
 		
@@ -243,19 +364,25 @@ public class TestRangerServiceValidator {
 		ValidationFailureDetails failureMessage = _failures.get(0);
 		Assert.assertFalse(valid);
 		Assert.assertEquals("name",failureMessage.getFieldName());
-		Assert.assertEquals(serviceNameValidationErrorMessage + ": name=[c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1]",failureMessage._reason);
-		Assert.assertEquals(3031, failureMessage._errorCode);
-				
+		Assert.assertEquals(errorMessage, failureMessage._reason);
+		Assert.assertEquals(errorCode, failureMessage._errorCode);
+
 	}
-	
+
 	@Test
 	public void testIsValidServiceNameUpdationWithGreater255Characters() throws Exception{
+		String serviceName = "c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1";
+
+		ValidationErrorCode vErrCod = ValidationErrorCode.SERVICE_VALIDATION_ERR_SPECIAL_CHARACTERS_SERVICE_NAME;
+		String errorMessage         = vErrCod.getMessage(serviceName);
+		int errorCode               = vErrCod.getErrorCode();
+
 		RangerService rangerService = new RangerService();
 		rangerService.setId(1L);
-		rangerService.setName("c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1");
+		rangerService.setName(serviceName);
 		rangerService.setType("yarn");
 		rangerService.setTagService("");
-		
+
 		RangerServiceConfigDef configDef = new RangerServiceConfigDef();
 		configDef.setMandatory(true);
 		
@@ -280,11 +407,11 @@ public class TestRangerServiceValidator {
 		ValidationFailureDetails failureMessage = _failures.get(0);
 		Assert.assertFalse(valid);
 		Assert.assertEquals("name",failureMessage.getFieldName());
-		Assert.assertEquals(serviceNameValidationErrorMessage +": name=[c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1_yarn_c1]",failureMessage._reason);
-		Assert.assertEquals(3031, failureMessage._errorCode);
-				
+		Assert.assertEquals(errorMessage, failureMessage._reason);
+		Assert.assertEquals(errorCode, failureMessage._errorCode);
+
 	}
-	
+
 	@Test
 	public void testIsValid_failures() throws Exception {
 		RangerService service = mock(RangerService.class);
diff --git a/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js b/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js
index f7bd58c..c046821 100644
--- a/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js
+++ b/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js
@@ -527,6 +527,7 @@ define(function(require) {
                 nameValidationMsg      :'Name should not start with space, it should be less than 256 characters and special characters are not allowed(except _ - and space).',
                 roleNameValidationMsg :'1. Role name should be start with alphabet / numeric / underscore / non-us characters.<br> 2. Allowed special character ,._\-+/@= and space. <br>3. Name length should be greater than one.',
                 policyNameValidationMsg   :'Please avoid these characters (&, <, >, \', ", `) for policy name.',
+                serviceNameValidationMsg :'Service name should be less than 256 characters and special characters are not allowed (except _ and -)',
 			},
 			serverMsg : {