/******************************************************************************
* Copyright (c) 2014-2015 VMware, Inc. All Rights Reserved.
* Licensed 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 com.vmware.bdd.usermgmt;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Map;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import com.vmware.bdd.apitypes.UserMgmtServer;
import com.vmware.bdd.exception.ValidationException;
import com.vmware.bdd.validation.ValidationError;
/**
* Created By xiaoliangl on 12/1/14.
*/
@ContextConfiguration(locations = "classpath:/com/vmware/bdd/usermgmt/userMgmtServerValidService-test-context.xml")
public class TestUserMgmtServerValidService_Ldap extends AbstractTestNGSpringContextTests {
@Autowired
private UserMgmtServerValidService validService;
public static UserMgmtServer loadTestData(String fileName) throws IOException {
ObjectMapper objectMapper = new ObjectMapper();
InputStream ris = TestUserMgmtServerValidService_Ldap.class.getResourceAsStream("/com/vmware/bdd/usermgmt/" + fileName);
return objectMapper.readValue(new InputStreamReader(ris), UserMgmtServer.class);
}
@BeforeClass
public void setup() throws IOException {
TestSssdConfigurationGenerator.setupSssdTemplates();
}
@AfterClass
public void teardown() {
TestSssdConfigurationGenerator.teardownSssdTemplates();
}
@Test
public void testValidateServerInfo() throws IOException {
UserMgmtServer userMgmtServer = loadTestData("ldap-server.json");
validService.validateServerInfo(userMgmtServer, false);
}
@Test(expectedExceptions = {ValidationException.class})
public void testValidateServerInfo_DnNotFound() throws IOException {
UserMgmtServer userMgmtServer = loadTestData("ldap-server-dnnotfound.json");
try {
validService.validateServerInfo(userMgmtServer, false);
} catch (ValidationException ve) {
Assert.assertFalse(ve.getErrors().isEmpty());
Map<String, ValidationError> errorMap = ve.getErrors();
Assert.assertEquals(errorMap.size(), 2);
ValidationError validationError = errorMap.get("BaseUserDn");
Assert.assertNotNull(validationError);
Assert.assertEquals(validationError.getPrimaryCode(), "BASE_USER_DN.NOT_FOUND");
validationError = errorMap.get("BaseGroupDn");
Assert.assertNotNull(validationError);
Assert.assertEquals(validationError.getPrimaryCode(), "BASE_GROUP_DN.NOT_FOUND");
throw ve;
}
}
@Test(expectedExceptions = {ValidationException.class})
public void testValidateServerInfo_AdmGroupNotFound() throws IOException {
UserMgmtServer userMgmtServer = loadTestData("ldap-server-admgroupnotfound.json");
try {
validService.validateServerInfo(userMgmtServer, false);
} catch (ValidationException ve) {
Assert.assertFalse(ve.getErrors().isEmpty());
Map<String, ValidationError> errorMap = ve.getErrors();
Assert.assertEquals(errorMap.size(), 1);
ValidationError validationError = errorMap.get("AdminGroup");
Assert.assertNotNull(validationError);
Assert.assertEquals(validationError.getPrimaryCode(), "ADMIN_GROUP.NOT_FOUND");
throw ve;
}
}
@Test(expectedExceptions = {ValidationException.class})
public void testValidateServerInfo_wrongCredential() {
Gson gson = new Gson();
InputStream ris = TestUserMgmtServerValidService_Ldap.class.getResourceAsStream("/com/vmware/bdd/usermgmt/ldap-server-badcredential.json");
UserMgmtServer userMgmtServer = gson.fromJson(new InputStreamReader(ris), UserMgmtServer.class);
try {
validService.validateServerInfo(userMgmtServer, false);
} catch (ValidationException ve) {
Assert.assertFalse(ve.getErrors().isEmpty());
Map<String, ValidationError> errorMap = ve.getErrors();
Assert.assertEquals(errorMap.size(), 1);
ValidationError validationError = errorMap.get("UserCredential");
Assert.assertNotNull(validationError);
Assert.assertEquals(validationError.getPrimaryCode(), "UserCredential.Invalid");
throw ve;
}
}
@Test(expectedExceptions = {ValidationException.class})
public void testValidateServerInfo_invalidUserName() throws IOException {
UserMgmtServer userMgmtServer = loadTestData("ldap-server-invalidusername.json");
try {
validService.validateServerInfo(userMgmtServer, false);
} catch (ValidationException ve) {
Assert.assertFalse(ve.getErrors().isEmpty());
Map<String, ValidationError> errorMap = ve.getErrors();
Assert.assertEquals(errorMap.size(), 1);
ValidationError validationError = errorMap.get("UserName");
Assert.assertNotNull(validationError);
Assert.assertEquals(validationError.getPrimaryCode(), "USERNAME.INVALID_DN");
throw ve;
}
}
@Test(expectedExceptions = {ValidationException.class})
public void testValidateServerInfo_invalidDn() throws IOException {
UserMgmtServer userMgmtServer = loadTestData("ldap-server-invaliddn.json");
try {
validService.validateServerInfo(userMgmtServer, false);
} catch (ValidationException ve) {
Assert.assertFalse(ve.getErrors().isEmpty());
Map<String, ValidationError> errorMap = ve.getErrors();
Assert.assertEquals(errorMap.size(), 2);
ValidationError validationError = errorMap.get("BaseUserDn");
Assert.assertNotNull(validationError);
Assert.assertEquals(validationError.getPrimaryCode(), "BASE_USER_DN.INVALID_DN");
validationError = errorMap.get("BaseGroupDn");
Assert.assertNotNull(validationError);
Assert.assertEquals(validationError.getPrimaryCode(), "BASE_GROUP_DN.INVALID_DN");
throw ve;
}
}
@Test(expectedExceptions = {ValidationException.class})
public void testValidateServerInfo_badUrl() throws IOException {
UserMgmtServer userMgmtServer = loadTestData("ldap-server-badurl.json");
try {
validService.validateServerInfo(userMgmtServer, false);
} catch (ValidationException ve) {
Assert.assertFalse(ve.getErrors().isEmpty());
Map<String, ValidationError> errorMap = ve.getErrors();
Assert.assertEquals(errorMap.size(), 1);
ValidationError validationError = errorMap.get("PrimaryUrl");
Assert.assertNotNull(validationError);
Assert.assertEquals(validationError.getPrimaryCode(), "PrimaryUrl.CannotConnect");
throw ve;
}
}
@Test
public void testValidateServerInfo_goodAd() throws IOException {
UserMgmtServer userMgmtServer = loadTestData("ad-server.json");
try {
validService.validateServerInfo(userMgmtServer, false);
} catch (ValidationException ve) {
Assert.assertFalse(ve.getErrors().isEmpty());
Map<String, ValidationError> errorMap = ve.getErrors();
Assert.assertEquals(errorMap.size(), 1);
ValidationError validationError = errorMap.get("PrimaryUrl");
Assert.assertNotNull(validationError);
Assert.assertEquals(validationError.getPrimaryCode(), "PrimaryUrl.CannotConnect");
throw ve;
}
}
}