/*
* Copyright 2014 by SCSK Corporation.
*
* This file is part of PrimeCloud Controller(TM).
*
* PrimeCloud Controller(TM) is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* PrimeCloud Controller(TM) is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with PrimeCloud Controller(TM). If not, see <http://www.gnu.org/licenses/>.
*/
package jp.primecloud.auto.zabbix.client;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;
import jp.primecloud.auto.zabbix.ZabbixClient;
import jp.primecloud.auto.zabbix.ZabbixClientFactory;
import jp.primecloud.auto.zabbix.model.user.User;
import jp.primecloud.auto.zabbix.model.user.UserAuthenticateParam;
import jp.primecloud.auto.zabbix.model.user.UserCreateParam;
import jp.primecloud.auto.zabbix.model.user.UserGetParam;
import jp.primecloud.auto.zabbix.model.user.UserUpdateParam;
import jp.primecloud.auto.zabbix.model.usergroup.Usergroup;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Before;
import org.junit.Test;
/**
* <p>
* {@link UserClient}のテストクラスです。
* </p>
*
*/
public class UserClientTest {
private Log log = LogFactory.getLog(UserClientTest.class);
private ZabbixClient client;
@Before
public void setUp() throws Exception {
if (client == null) {
Properties properties = new Properties();
properties.load(getClass().getResourceAsStream("/zabbix.properties"));
String url = properties.getProperty("zabbix.url");
String username = properties.getProperty("zabbix.username");
String password = properties.getProperty("zabbix.password");
ZabbixClientFactory factory = new ZabbixClientFactory();
factory.setUrl(url);
client = factory.createClient(username, password);
}
}
@Test
public void testLogin() throws Exception {
Properties properties = new Properties();
properties.load(getClass().getResourceAsStream("/zabbix.properties"));
String username = properties.getProperty("zabbix.username");
String password = properties.getProperty("zabbix.password");
UserAuthenticateParam param = new UserAuthenticateParam();
param.setUser(username);
param.setPassword(password);
String sessionId = client.user().login(param);
log.trace(sessionId);
}
@Test
public void testLogin2() {
// 認証情報が誤っている場合
UserAuthenticateParam param = new UserAuthenticateParam();
param.setUser("dummy");
param.setPassword("dummy");
try {
client.user().login(param);
fail();
} catch (Exception ignore) {
log.trace(ignore.getMessage());
}
}
@Test
public void testGetAll() {
// 全件取得
UserGetParam param = new UserGetParam();
param.setOutput("extend");
param.setSelectUsrgrps("extend");
List<User> users = client.user().get(param);
for (User user : users) {
log.trace(ReflectionToStringBuilder.toString(user, ToStringStyle.SHORT_PREFIX_STYLE));
for (Usergroup usergroup : user.getUsrgrps()) {
log.trace(" " + ReflectionToStringBuilder.toString(usergroup, ToStringStyle.SHORT_PREFIX_STYLE));
}
}
assertTrue(users.size() > 0);
}
@Test
public void testGet() {
// useridを指定して取得
UserGetParam param = new UserGetParam();
param.setUserids(Arrays.asList("1"));
param.setOutput("extend");
param.setSelectUsrgrps("extend");
List<User> users = client.user().get(param);
assertEquals(1, users.size());
assertEquals("1", users.get(0).getUserid());
assertTrue(users.get(0).getUsrgrps().size() > 0);
}
@Test
public void testGetNotExist() {
// 存在しないuseridを指定した場合
UserGetParam param = new UserGetParam();
param.setUserids(Arrays.asList("999999"));
param.setOutput("extend");
List<User> users = client.user().get(param);
assertEquals(0, users.size());
}
@Test
public void testCreateUpdateDelete() {
// Create
String userid;
{
UserCreateParam param = new UserCreateParam();
param.setAlias("alias1");
param.setName("name1");
param.setSurname("surname1");
param.setPasswd("passwd1");
param.setUrl("url1");
param.setAutologin(0);
param.setAutologout(1200);
param.setRefresh(60);
param.setType(2);
param.setRowsPerPage(100);
if (client.checkVersion("2.0.0") < 0) {
param.setLang("ja_jp");
param.setTheme("css_ob.css");
} else {
param.setLang("jp_JP");
if (client.checkVersion("3.0.0") < 0) {
param.setTheme("originalblue");
} else {
param.setTheme("blue-theme");
}
// 2.0からusrgrpsの指定が必須
Usergroup usergroup = new Usergroup();
usergroup.setUsrgrpid("8");
param.setUsrgrps(Arrays.asList(usergroup));
}
List<String> userids = client.user().create(param);
assertEquals(1, userids.size());
userid = userids.get(0);
}
// Get
{
UserGetParam param = new UserGetParam();
param.setUserids(Arrays.asList(userid));
param.setOutput("extend");
param.setSelectUsrgrps("extend");
List<User> users = client.user().get(param);
assertEquals(1, users.size());
User user = users.get(0);
assertEquals(userid, user.getUserid());
assertEquals("alias1", user.getAlias());
assertEquals("name1", user.getName());
assertEquals("surname1", user.getSurname());
//assertEquals("passwd1", user.getPasswd()); // Zabbixでハッシュ化されるため検証不能
assertEquals("url1", user.getUrl());
assertEquals(0, user.getAutologin().intValue());
assertEquals(1200, user.getAutologout().intValue());
assertEquals(60, user.getRefresh().intValue());
assertEquals(2, user.getType().intValue());
assertEquals(100, user.getRowsPerPage().intValue());
if (client.checkVersion("2.0.0") < 0) {
assertEquals("ja_jp", user.getLang());
assertEquals("css_ob.css", user.getTheme());
} else {
assertEquals("jp_JP", user.getLang());
if (client.checkVersion("3.0.0") < 0) {
assertEquals("originalblue", user.getTheme());
} else {
assertEquals("blue-theme", user.getTheme());
}
assertEquals(1, user.getUsrgrps().size());
assertEquals("8", user.getUsrgrps().get(0).getUsrgrpid());
}
}
// Update
{
UserUpdateParam param = new UserUpdateParam();
param.setUserid(userid);
param.setAlias("alias2");
param.setName("name2");
param.setSurname("surname2");
param.setPasswd("passwd2");
param.setUrl("url2");
param.setAutologin(1);
param.setAutologout(0);
param.setRefresh(120);
param.setType(3);
param.setRowsPerPage(200);
if (client.checkVersion("2.0.0") < 0) {
param.setLang("en_gb");
param.setTheme("css_bb.css");
} else {
param.setLang("en_GB");
if (client.checkVersion("3.0.0") < 0) {
param.setTheme("darkblue");
} else {
param.setTheme("dark-theme");
}
}
List<String> userids = client.user().update(param);
assertEquals(1, userids.size());
assertEquals(userid, userids.get(0));
}
// Get
{
UserGetParam param = new UserGetParam();
param.setUserids(Arrays.asList(userid));
param.setOutput("extend");
param.setSelectUsrgrps("extend");
List<User> users = client.user().get(param);
assertEquals(1, users.size());
User user = users.get(0);
assertEquals("alias2", user.getAlias());
assertEquals("name2", user.getName());
assertEquals("surname2", user.getSurname());
//assertEquals("passwd2", user.getPasswd()); // Zabbixでハッシュ化されるため検証不能
assertEquals("url2", user.getUrl());
assertEquals(1, user.getAutologin().intValue());
assertEquals(0, user.getAutologout().intValue());
assertEquals(120, user.getRefresh().intValue());
assertEquals(3, user.getType().intValue());
assertEquals(200, user.getRowsPerPage().intValue());
if (client.checkVersion("2.0.0") < 0) {
assertEquals("en_gb", user.getLang());
assertEquals("css_bb.css", user.getTheme());
} else {
assertEquals("en_GB", user.getLang());
if (client.checkVersion("3.0.0") < 0) {
assertEquals("darkblue", user.getTheme());
} else {
assertEquals("dark-theme", user.getTheme());
}
assertEquals(1, user.getUsrgrps().size());
assertEquals("8", user.getUsrgrps().get(0).getUsrgrpid());
}
}
// Delete
{
List<String> userids = client.user().delete(Arrays.asList(userid));
assertEquals(1, userids.size());
assertEquals(userid, userids.get(0));
}
// Get
{
UserGetParam param = new UserGetParam();
param.setUserids(Arrays.asList(userid));
param.setOutput("extend");
param.setSelectUsrgrps("extend");
List<User> users = client.user().get(param);
assertEquals(0, users.size());
}
}
@Test
public void testCreateIllegalArgument() {
// aliasを指定していない場合
UserCreateParam param = new UserCreateParam();
param.setPasswd("passwd1");
Usergroup usergroup = new Usergroup();
usergroup.setUsrgrpid("8");
param.setUsrgrps(Arrays.asList(usergroup));
try {
client.user().create(param);
fail();
} catch (IllegalArgumentException ignore) {
log.trace(ignore.getMessage());
}
}
@Test
public void testCreateIllegalArgument2() {
// passwdを指定していない場合
UserCreateParam param = new UserCreateParam();
param.setAlias("alias1");
Usergroup usergroup = new Usergroup();
usergroup.setUsrgrpid("8");
param.setUsrgrps(Arrays.asList(usergroup));
// passwdの指定は2.0から必須になったため、1.8ではユーザを作成でき、2.0以降ではエラーになる
if (client.checkVersion("2.0") < 0) {
List<String> userids = client.user().create(param);
client.user().delete(userids);
} else {
try {
client.user().create(param);
fail();
} catch (IllegalArgumentException ignore) {
log.trace(ignore.getMessage());
}
}
}
@Test
public void testCreateIllegalArgument3() {
// usrgrpsを指定していない場合
UserCreateParam param = new UserCreateParam();
param.setAlias("alias1");
param.setPasswd("passwd1");
// usrgrpsの指定は2.0から必須になったため、1.8ではユーザを作成でき、2.0以降ではエラーになる
if (client.checkVersion("2.0") < 0) {
List<String> userids = client.user().create(param);
client.user().delete(userids);
} else {
try {
client.user().create(param);
fail();
} catch (IllegalArgumentException ignore) {
log.trace(ignore.getMessage());
}
}
}
@Test
public void testCreateExistAlias() {
// 事前準備
String userid;
{
UserCreateParam param = new UserCreateParam();
param.setAlias("alias1");
param.setPasswd("passwd1");
Usergroup usergroup = new Usergroup();
usergroup.setUsrgrpid("8");
param.setUsrgrps(Arrays.asList(usergroup));
List<String> userids = client.user().create(param);
userid = userids.get(0);
}
// 存在するaliasを指定した場合
try {
UserCreateParam param = new UserCreateParam();
param.setAlias("alias1");
param.setPasswd("passwd1");
Usergroup usergroup = new Usergroup();
usergroup.setUsrgrpid("8");
param.setUsrgrps(Arrays.asList(usergroup));
client.user().create(param);
fail();
} catch (Exception ignore) {
log.trace(ignore.getMessage());
} finally {
// 事後始末
client.user().delete(Arrays.asList(userid));
}
}
@Test
public void testUpdateIllegalArgument() {
// useridを指定していない場合
UserUpdateParam param = new UserUpdateParam();
param.setAlias("alias1");
try {
client.user().update(param);
fail();
} catch (IllegalArgumentException ignore) {
log.trace(ignore.getMessage());
}
}
@Test
public void testUpdateExistAlias() {
// 事前準備
String userid;
{
UserCreateParam param = new UserCreateParam();
param.setAlias("alias1");
param.setPasswd("passwd1");
Usergroup usergroup = new Usergroup();
usergroup.setUsrgrpid("8");
param.setUsrgrps(Arrays.asList(usergroup));
List<String> userids = client.user().create(param);
userid = userids.get(0);
}
String userid2;
{
UserCreateParam param = new UserCreateParam();
param.setAlias("alias2");
param.setPasswd("passwd2");
Usergroup usergroup = new Usergroup();
usergroup.setUsrgrpid("8");
param.setUsrgrps(Arrays.asList(usergroup));
List<String> userids = client.user().create(param);
userid2 = userids.get(0);
}
// 存在するaliasを指定した場合
try {
UserUpdateParam param = new UserUpdateParam();
param.setUserid(userid2);
param.setAlias("alias1");
client.user().update(param);
fail();
} catch (Exception ignore) {
log.trace(ignore.getMessage());
} finally {
// 事後始末
client.user().delete(Arrays.asList(userid, userid2));
}
}
@Test
public void testUpdateNotExist() {
// 存在しないuseridを指定した場合
UserUpdateParam param = new UserUpdateParam();
param.setUserid("999999");
try {
client.user().update(param);
fail();
} catch (Exception ignore) {
log.trace(ignore.getMessage());
}
}
@Test
public void testDeleteIllegalArgument() {
// useridを指定していない場合
try {
client.user().delete(null);
fail();
} catch (IllegalArgumentException ignore) {
log.trace(ignore.getMessage());
}
}
@Test
public void testDeleteNotExist() {
// 存在しないuseridを指定した場合
try {
client.user().delete(Arrays.asList("999999"));
//fail(); // エラーは発生しない
} catch (Exception ignore) {
log.trace(ignore.getMessage());
}
}
}