You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ol...@apache.org on 2016/09/13 10:41:26 UTC
[09/51] [abbrv] ambari git commit: AMBARI-18227. Add unit tests for
Log Search components and refactor them as needed - Vol 1. (Miklos Gergely
via oleewere)
http://git-wip-us.apache.org/repos/asf/ambari/blob/dfa9bd38/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/util/StringUtil.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/util/StringUtil.java b/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/util/StringUtil.java
deleted file mode 100644
index de83e7e..0000000
--- a/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/util/StringUtil.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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.logsearch.util;
-
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
-
-@Component
-public class StringUtil {
-
- private static Logger logger = Logger.getLogger(StringUtil.class);
-
- public boolean isEmpty(String str) {
- return str == null || str.trim().length() == 0;
- }
-}
http://git-wip-us.apache.org/repos/asf/ambari/blob/dfa9bd38/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchSecurityContextFormationFilter.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchSecurityContextFormationFilter.java b/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchSecurityContextFormationFilter.java
index 69132e8..9fb285e 100644
--- a/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchSecurityContextFormationFilter.java
+++ b/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchSecurityContextFormationFilter.java
@@ -29,12 +29,10 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
-import org.apache.ambari.logsearch.common.RequestContext;
-import org.apache.ambari.logsearch.common.UserSessionInfo;
+import org.apache.ambari.logsearch.common.LogSearchContext;
import org.apache.ambari.logsearch.manager.SessionMgr;
-import org.apache.ambari.logsearch.security.context.LogsearchContextHolder;
-import org.apache.ambari.logsearch.security.context.LogsearchSecurityContext;
import org.apache.ambari.logsearch.util.CommonUtil;
+import org.apache.ambari.logsearch.web.model.User;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AnonymousAuthenticationToken;
@@ -89,31 +87,21 @@ public class LogsearchSecurityContextFormationFilter extends GenericFilterBean {
httpResponse.addCookie(cookie);
}
// [1]get the context from session
- LogsearchSecurityContext context = (LogsearchSecurityContext) httpSession
+ LogSearchContext context = (LogSearchContext) httpSession
.getAttribute(LOGSEARCH_SC_SESSION_KEY);
if (context == null) {
- context = new LogsearchSecurityContext();
+ context = new LogSearchContext();
httpSession.setAttribute(LOGSEARCH_SC_SESSION_KEY, context);
}
- String userAgent = httpRequest.getHeader(USER_AGENT);
- // Get the request specific info
- RequestContext requestContext = new RequestContext();
- String reqIP = httpRequest.getRemoteAddr();
- requestContext.setIpAddress(reqIP);
- requestContext.setMsaCookie(msaCookie);
- requestContext.setUserAgent(userAgent);
- requestContext.setServerRequestId(CommonUtil.genGUI());
- requestContext.setRequestURL(httpRequest.getRequestURI());
- context.setRequestContext(requestContext);
- LogsearchContextHolder.setSecurityContext(context);
- UserSessionInfo userSession = sessionMgr.processSuccessLogin(0, userAgent);
- context.setUserSession(userSession);
+ LogSearchContext.setContext(context);
+ User user = sessionMgr.processSuccessLogin();
+ context.setUser(user);
}
chain.doFilter(request, response);
} finally {
// [4]remove context from thread-local
- LogsearchContextHolder.resetSecurityContext();
+ LogSearchContext.resetContext();
}
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/dfa9bd38/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchExternalServerAuthenticationProvider.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchExternalServerAuthenticationProvider.java b/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchExternalServerAuthenticationProvider.java
index f1f2e31..72ee60f 100644
--- a/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchExternalServerAuthenticationProvider.java
+++ b/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchExternalServerAuthenticationProvider.java
@@ -26,8 +26,8 @@ import javax.annotation.PostConstruct;
import org.apache.ambari.logsearch.util.ExternalServerClient;
import org.apache.ambari.logsearch.util.JSONUtil;
import org.apache.ambari.logsearch.util.PropertiesUtil;
-import org.apache.ambari.logsearch.util.StringUtil;
import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.BadCredentialsException;
@@ -99,9 +99,6 @@ public class LogsearchExternalServerAuthenticationProvider extends
ExternalServerClient externalServerClient;
@Autowired
- StringUtil stringUtil;
-
- @Autowired
JSONUtil jsonUtil;
private String loginAPIURL = "/api/v1/users/$USERNAME/privileges?fields=*";// default
@@ -130,10 +127,10 @@ public class LogsearchExternalServerAuthenticationProvider extends
}
String username = authentication.getName();
String password = (String) authentication.getCredentials();
- if (stringUtil.isEmpty(username)) {
+ if (StringUtils.isBlank(username)) {
throw new BadCredentialsException("Username can't be null or empty.");
}
- if (stringUtil.isEmpty(password)) {
+ if (StringUtils.isBlank(password)) {
throw new BadCredentialsException("Password can't be null or empty.");
}
// html unescape
http://git-wip-us.apache.org/repos/asf/ambari/blob/dfa9bd38/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchFileAuthenticationProvider.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchFileAuthenticationProvider.java b/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchFileAuthenticationProvider.java
index a5ff295..44c31c5 100644
--- a/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchFileAuthenticationProvider.java
+++ b/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchFileAuthenticationProvider.java
@@ -20,9 +20,9 @@ package org.apache.ambari.logsearch.web.security;
import java.util.Collection;
-import org.apache.ambari.logsearch.dao.UserDao;
-import org.apache.ambari.logsearch.util.StringUtil;
+import org.apache.ambari.logsearch.util.CommonUtil;
import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.BadCredentialsException;
@@ -40,12 +40,6 @@ public class LogsearchFileAuthenticationProvider extends LogsearchAbstractAuthen
private static Logger logger = Logger.getLogger(LogsearchFileAuthenticationProvider.class);
@Autowired
- UserDao userDao;
-
- @Autowired
- StringUtil stringUtil;
-
- @Autowired
private UserDetailsService userDetailsService;
@Override
@@ -56,10 +50,10 @@ public class LogsearchFileAuthenticationProvider extends LogsearchAbstractAuthen
}
String username = authentication.getName();
String password = (String) authentication.getCredentials();
- if (stringUtil.isEmpty(username)) {
+ if (StringUtils.isBlank(username)) {
throw new BadCredentialsException("Username can't be null or empty.");
}
- if (stringUtil.isEmpty(password)) {
+ if (StringUtils.isBlank(password)) {
throw new BadCredentialsException("Password can't be null or empty.");
}
// html unescape
@@ -76,7 +70,7 @@ public class LogsearchFileAuthenticationProvider extends LogsearchAbstractAuthen
throw new BadCredentialsException("Password can't be null or empty.");
}
- String encPassword = userDao.encryptPassword(username, password);
+ String encPassword = CommonUtil.encryptPassword(username, password);
if (!encPassword.equals(user.getPassword())) {
logger.error("Wrong password for user=" + username);
throw new BadCredentialsException("Wrong password");
http://git-wip-us.apache.org/repos/asf/ambari/blob/dfa9bd38/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchSimpleAuthenticationProvider.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchSimpleAuthenticationProvider.java b/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchSimpleAuthenticationProvider.java
index 7e0546e..ec2516c 100644
--- a/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchSimpleAuthenticationProvider.java
+++ b/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchSimpleAuthenticationProvider.java
@@ -18,11 +18,10 @@
*/
package org.apache.ambari.logsearch.web.security;
-import org.apache.ambari.logsearch.util.StringUtil;
import org.apache.ambari.logsearch.web.model.User;
import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
@@ -34,9 +33,6 @@ public class LogsearchSimpleAuthenticationProvider extends LogsearchAbstractAuth
private static Logger logger = Logger.getLogger(LogsearchSimpleAuthenticationProvider.class);
- @Autowired
- StringUtil stringUtil;
-
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
if (!this.isEnable()) {
@@ -46,7 +42,7 @@ public class LogsearchSimpleAuthenticationProvider extends LogsearchAbstractAuth
String username = authentication.getName();
String password = (String) authentication.getCredentials();
username = StringEscapeUtils.unescapeHtml(username);
- if (stringUtil.isEmpty(username)) {
+ if (StringUtils.isBlank(username)) {
throw new BadCredentialsException("Username can't be null or empty.");
}
User user = new User();
http://git-wip-us.apache.org/repos/asf/ambari/blob/dfa9bd38/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/common/LogSearchContextUtilTest.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/common/LogSearchContextUtilTest.java b/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/common/LogSearchContextUtilTest.java
new file mode 100644
index 0000000..cd33741
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/common/LogSearchContextUtilTest.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.logsearch.common;
+
+import org.apache.ambari.logsearch.web.model.User;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.Assert;
+
+public class LogSearchContextUtilTest {
+
+ @Before
+ public void resetContext() {
+ LogSearchContext.resetContext();
+ }
+
+ @Test
+ public void testNoContext() {
+ Assert.assertNull(LogSearchContext.getCurrentUsername());
+ }
+
+ @Test
+ public void testUserSession() {
+ User user = new User("UserName", "Password", null);
+
+ LogSearchContext context = new LogSearchContext();
+ context.setUser(user);
+
+ LogSearchContext.setContext(context);
+
+ Assert.assertEquals(LogSearchContext.getCurrentUsername(), "UserName");
+ }
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/dfa9bd38/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/common/ManageStartEndTimeTest.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/common/ManageStartEndTimeTest.java b/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/common/ManageStartEndTimeTest.java
new file mode 100644
index 0000000..6b75d87
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/common/ManageStartEndTimeTest.java
@@ -0,0 +1,35 @@
+/*
+ * 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.logsearch.common;
+
+import java.util.Date;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class ManageStartEndTimeTest {
+
+ @Test
+ public void testManageStartEndTime() {
+ ManageStartEndTime.manage();
+ Date[] range = ManageStartEndTime.getStartEndTime();
+ Assert.assertEquals(range[1].getTime() - range[0].getTime(), 60*60*1000);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/dfa9bd38/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/dao/AuditSolrDaoTest.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/dao/AuditSolrDaoTest.java b/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/dao/AuditSolrDaoTest.java
new file mode 100644
index 0000000..0b94b60
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/dao/AuditSolrDaoTest.java
@@ -0,0 +1,68 @@
+/*
+ * 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.logsearch.dao;
+
+import java.util.ArrayList;
+
+import org.apache.solr.client.solrj.SolrClient;
+import org.apache.solr.client.solrj.request.CollectionAdminRequest;
+import org.apache.solr.common.util.NamedList;
+import org.easymock.Capture;
+import org.easymock.CaptureType;
+import org.easymock.EasyMock;
+import org.junit.Test;
+
+import junit.framework.Assert;
+
+public class AuditSolrDaoTest {
+
+ @Test
+ public void testAuditSolrDaoPostConstructor() throws Exception {
+ SolrClient mockSolrClient = EasyMock.strictMock(SolrClient.class);
+
+ NamedList<Object> response = new NamedList<Object>();
+ NamedList<Object> header = new NamedList<Object>();
+ header.add("status", 0);
+ response.add("responseHeader", header);
+ response.add("collections", new ArrayList<String>());
+
+ Capture<CollectionAdminRequest.Create> captureCreateRequest = EasyMock.newCapture(CaptureType.LAST);
+
+ EasyMock.expect(mockSolrClient.request(EasyMock.anyObject(CollectionAdminRequest.List.class), EasyMock.anyString())).andReturn(response);
+
+ mockSolrClient.request(EasyMock.capture(captureCreateRequest), EasyMock.anyString());
+ EasyMock.expectLastCall().andReturn(response);
+
+ EasyMock.replay(mockSolrClient);
+
+ AuditSolrDao dao = new AuditSolrDao();
+ dao.solrClient = mockSolrClient;
+ dao.isZkConnectString = true;
+
+ dao.postConstructor();
+ EasyMock.verify(mockSolrClient);
+
+ CollectionAdminRequest.Create createRequest = captureCreateRequest.getValue();
+ Assert.assertEquals(createRequest.getConfigName(), "test_audit_logs_config_name");
+ Assert.assertEquals(createRequest.getNumShards().intValue(), 123);
+ Assert.assertEquals(createRequest.getReplicationFactor().intValue(), 456);
+ Assert.assertEquals(createRequest.getCollectionName(), "test_audit_logs_collection");
+ }
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/dfa9bd38/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/dao/ServiceLogsSolrDaoTest.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/dao/ServiceLogsSolrDaoTest.java b/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/dao/ServiceLogsSolrDaoTest.java
new file mode 100644
index 0000000..2985a62
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/dao/ServiceLogsSolrDaoTest.java
@@ -0,0 +1,66 @@
+/*
+ * 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.logsearch.dao;
+
+import java.util.ArrayList;
+
+import org.apache.solr.client.solrj.SolrClient;
+import org.apache.solr.client.solrj.request.CollectionAdminRequest;
+import org.apache.solr.common.util.NamedList;
+import org.easymock.Capture;
+import org.easymock.CaptureType;
+import org.easymock.EasyMock;
+import org.junit.Test;
+
+import junit.framework.Assert;
+
+public class ServiceLogsSolrDaoTest {
+
+ @Test
+ public void testServiceLogsSolrDaoPostConstructor() throws Exception {
+ SolrClient mockSolrClient = EasyMock.strictMock(SolrClient.class);
+
+ NamedList<Object> response = new NamedList<Object>();
+ NamedList<Object> header = new NamedList<Object>();
+ header.add("status", 0);
+ response.add("responseHeader", header);
+ response.add("collections", new ArrayList<String>());
+
+ Capture<CollectionAdminRequest.Create> captureCreateRequest = EasyMock.newCapture(CaptureType.LAST);
+
+ EasyMock.expect(mockSolrClient.request(EasyMock.anyObject(CollectionAdminRequest.List.class), EasyMock.anyString())).andReturn(response);
+ mockSolrClient.request(EasyMock.capture(captureCreateRequest), EasyMock.anyString()); EasyMock.expectLastCall().andReturn(response);
+
+ EasyMock.replay(mockSolrClient);
+
+ ServiceLogsSolrDao dao = new ServiceLogsSolrDao();
+ dao.solrClient = mockSolrClient;
+ dao.isZkConnectString = true;
+
+ dao.postConstructor();
+ EasyMock.verify(mockSolrClient);
+
+ CollectionAdminRequest.Create createRequest = captureCreateRequest.getValue();
+ Assert.assertEquals(createRequest.getConfigName(), "test_service_logs_config_name");
+ Assert.assertEquals(createRequest.getNumShards().intValue(), 789);
+ Assert.assertEquals(createRequest.getReplicationFactor().intValue(), 987);
+ Assert.assertEquals(createRequest.getCollectionName(), "test_service_logs_collection");
+ }
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/dfa9bd38/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/dao/SolrDaoBaseTest.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/dao/SolrDaoBaseTest.java b/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/dao/SolrDaoBaseTest.java
new file mode 100644
index 0000000..0ded95d
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/dao/SolrDaoBaseTest.java
@@ -0,0 +1,286 @@
+/*
+ * 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.logsearch.dao;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import javax.ws.rs.WebApplicationException;
+
+import org.apache.ambari.logsearch.manager.MgrBase.LogType;
+import org.apache.ambari.logsearch.util.RESTErrorUtil;
+import org.apache.solr.client.solrj.SolrClient;
+import org.apache.solr.client.solrj.SolrQuery;
+import org.apache.solr.client.solrj.SolrRequest;
+import org.apache.solr.client.solrj.SolrRequest.METHOD;
+import org.apache.solr.client.solrj.impl.CloudSolrClient;
+import org.apache.solr.client.solrj.impl.HttpSolrClient;
+import org.apache.solr.client.solrj.request.CollectionAdminRequest;
+import org.apache.solr.client.solrj.response.QueryResponse;
+import org.apache.solr.client.solrj.response.UpdateResponse;
+import org.apache.solr.common.SolrInputDocument;
+import org.apache.solr.common.util.NamedList;
+import org.easymock.EasyMock;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+import junit.framework.Assert;
+
+public class SolrDaoBaseTest {
+ @Rule
+ public ExpectedException expectedException = ExpectedException.none();
+
+ // ----------------------------------------------------------- connectToSolr -----------------------------------------------------------
+
+ @Test
+ public void testConnectToSolrWithConnectString() throws Exception {
+ SolrDaoBase dao = new SolrDaoBase(null) {};
+ SolrClient solrClient = dao.connectToSolr(null, "zk_connect_string", "collection");
+
+ Assert.assertEquals(solrClient.getClass(), CloudSolrClient.class);
+ }
+
+ @Test
+ public void testConnectToSolrWithUrl() throws Exception {
+ SolrDaoBase dao = new SolrDaoBase(null) {};
+ SolrClient solrClient = dao.connectToSolr("url", null, "collection");
+
+ Assert.assertEquals(solrClient.getClass(), HttpSolrClient.class);
+ }
+
+ @Test
+ public void testConnectToSolrWithBoth() throws Exception {
+ SolrDaoBase dao = new SolrDaoBase(null) {};
+ SolrClient solrClient = dao.connectToSolr("url", "zk_connect_string", "collection");
+
+ Assert.assertEquals(solrClient.getClass(), CloudSolrClient.class);
+ }
+
+ @Test
+ public void testConnectToSolrWithNeither() throws Exception {
+ expectedException.expect(Exception.class);
+ expectedException.expectMessage("Both zkConnectString and URL are empty. zkConnectString=null, collection=collection, url=null");
+
+ SolrDaoBase dao = new SolrDaoBase(null) {};
+ dao.connectToSolr(null, null, "collection");
+ }
+
+ @Test
+ public void testConnectToSolrWithoutCollection() throws Exception {
+ expectedException.expect(Exception.class);
+ expectedException.expectMessage("For solr, collection name is mandatory. zkConnectString=zk_connect_string, collection=null, url=url");
+
+ SolrDaoBase dao = new SolrDaoBase(null) {};
+ dao.connectToSolr("url", "zk_connect_string", null);
+ }
+
+ // ---------------------------------------------------------- checkSolrStatus ----------------------------------------------------------
+
+ @Test
+ public void testCheckSolrStatus() throws Exception {
+ SolrClient mockSolrClient = EasyMock.strictMock(SolrClient.class);
+
+ NamedList<Object> response = new NamedList<Object>();
+ NamedList<Object> header = new NamedList<Object>();
+ header.add("status", 0);
+ response.add("responseHeader", header);
+ response.add("collections", new ArrayList<String>());
+
+ EasyMock.expect(mockSolrClient.request(EasyMock.anyObject(CollectionAdminRequest.List.class), EasyMock.anyString())).andReturn(response);
+ EasyMock.replay(mockSolrClient);
+
+ SolrDaoBase dao = new SolrDaoBase(null) {};
+ dao.solrClient = mockSolrClient;
+
+ boolean status = dao.checkSolrStatus(10000);
+ Assert.assertTrue(status);
+
+ EasyMock.verify(mockSolrClient);
+ }
+
+ @Test
+ public void testCheckSolrStatusNotSuccessful() throws Exception {
+ SolrClient mockSolrClient = EasyMock.strictMock(SolrClient.class);
+ EasyMock.replay(mockSolrClient);
+
+ SolrDaoBase dao = new SolrDaoBase(null) {};
+ dao.solrClient = mockSolrClient;
+
+ boolean status = dao.checkSolrStatus(10000);
+ Assert.assertFalse(status);
+
+ EasyMock.verify(mockSolrClient);
+ }
+
+ // ------------------------------------------------------------- setupAlias ------------------------------------------------------------
+
+ @Test
+ public void testSetupAlias() throws Exception {
+ SolrClient mockSolrClient = EasyMock.strictMock(SolrClient.class);
+ CloudSolrClient mockSolrClouldClient = EasyMock.strictMock(CloudSolrClient.class);
+
+ NamedList<Object> response = new NamedList<Object>();
+ NamedList<Object> header = new NamedList<Object>();
+ header.add("status", 0);
+ response.add("responseHeader", header);
+ response.add("collections", Arrays.asList("collection1", "collection2"));
+
+ EasyMock.expect(mockSolrClient.request(EasyMock.anyObject(CollectionAdminRequest.List.class), EasyMock.anyString())).andReturn(response);
+ EasyMock.expect(mockSolrClouldClient.request(EasyMock.anyObject(CollectionAdminRequest.CreateAlias.class), EasyMock.anyString())).andReturn(response);
+ mockSolrClouldClient.setDefaultCollection("alias_name"); EasyMock.expectLastCall();
+
+ EasyMock.replay(mockSolrClient, mockSolrClouldClient);
+
+ SolrDaoBase dao = new SolrDaoBase(null) {};
+ dao.isZkConnectString = true;
+ dao.solrClient = mockSolrClient;
+ dao.solrClouldClient = mockSolrClouldClient;
+ dao.collectionName = "test_collection";
+
+ dao.setupAlias("alias_name", Arrays.asList("collection1", "collection2"));
+
+ Thread.sleep(1000);
+
+ EasyMock.verify(mockSolrClient, mockSolrClouldClient);
+ }
+
+ // ---------------------------------------------------------- setupCollections ---------------------------------------------------------
+
+ @Test
+ public void testCreateCollectionsDontSplitPopulate() throws Exception {
+ SolrClient mockSolrClient = EasyMock.strictMock(SolrClient.class);
+
+ NamedList<Object> response = new NamedList<Object>();
+ NamedList<Object> header = new NamedList<Object>();
+ header.add("status", 0);
+ response.add("responseHeader", header);
+ response.add("collections", new ArrayList<String>());
+
+ EasyMock.expect(mockSolrClient.request(EasyMock.anyObject(CollectionAdminRequest.List.class), EasyMock.anyString())).andReturn(response);
+ EasyMock.expect(mockSolrClient.request(EasyMock.anyObject(CollectionAdminRequest.Create.class), EasyMock.anyString())).andReturn(response);
+ EasyMock.replay(mockSolrClient);
+
+ SolrDaoBase dao = new SolrDaoBase(null) {};
+ dao.isZkConnectString = true;
+ dao.solrClient = mockSolrClient;
+ dao.collectionName = "test_collection";
+
+ dao.setupCollections("none", "configName", 1, 1, true);
+
+ EasyMock.verify(mockSolrClient);
+ }
+
+ @Test
+ public void testCreateCollectionsSplitDontPopulate() throws Exception {
+ SolrClient mockSolrClient = EasyMock.strictMock(SolrClient.class);
+
+ NamedList<Object> response = new NamedList<Object>();
+ NamedList<Object> header = new NamedList<Object>();
+ header.add("status", 0);
+ response.add("responseHeader", header);
+ response.add("collections", new ArrayList<String>());
+
+ EasyMock.expect(mockSolrClient.request(EasyMock.anyObject(CollectionAdminRequest.List.class), EasyMock.anyString())).andReturn(response);
+ EasyMock.expect(mockSolrClient.request(EasyMock.anyObject(CollectionAdminRequest.Create.class), EasyMock.anyString())).andReturn(response);
+ EasyMock.replay(mockSolrClient);
+
+ SolrDaoBase dao = new SolrDaoBase(null) {};
+ dao.isZkConnectString = true;
+ dao.solrClient = mockSolrClient;
+
+ dao.setupCollections("1", "configName", 3, 1, false);
+
+ EasyMock.verify(mockSolrClient);
+ }
+
+ // -------------------------------------------------------------- process --------------------------------------------------------------
+
+ @Test
+ public void testProcess() throws Exception {
+ SolrClient mockSolrClient = EasyMock.strictMock(SolrClient.class);
+ EasyMock.expect(mockSolrClient.query(EasyMock.anyObject(SolrQuery.class), EasyMock.eq(METHOD.POST))).andReturn(new QueryResponse());
+ EasyMock.replay(mockSolrClient);
+
+ SolrDaoBase dao = new SolrDaoBase(null) {};
+ dao.solrClient = mockSolrClient;
+
+ dao.process(new SolrQuery());
+
+ EasyMock.verify(mockSolrClient);
+ }
+
+ @Test
+ public void testProcessNoConnection() throws Exception {
+ expectedException.expect(WebApplicationException.class);
+
+ SolrDaoBase dao = new SolrDaoBase(LogType.SERVICE) {};
+ dao.restErrorUtil = new RESTErrorUtil();
+ dao.process(new SolrQuery());
+ }
+
+ // ----------------------------------------------------------- add/removeDoc -----------------------------------------------------------
+
+ @Test
+ public void testAddDoc() throws Exception {
+ SolrClient mockSolrClient = EasyMock.strictMock(SolrClient.class);
+
+ UpdateResponse updateResponse = new UpdateResponse();
+ NamedList<Object> response = new NamedList<Object>();
+ NamedList<Object> header = new NamedList<Object>();
+ header.add("QTime", 1);
+ response.add("responseHeader", header);
+ updateResponse.setResponse(response);
+
+ EasyMock.expect(mockSolrClient.add(EasyMock.anyObject(SolrInputDocument.class))).andReturn(updateResponse);
+ EasyMock.expect(mockSolrClient.commit()).andReturn(updateResponse);
+ EasyMock.replay(mockSolrClient);
+
+ SolrDaoBase dao = new SolrDaoBase(null) {};
+ dao.solrClient = mockSolrClient;
+
+ dao.addDocs(new SolrInputDocument());
+
+ EasyMock.verify(mockSolrClient);
+ }
+
+ @Test
+ public void testRemoveDoc() throws Exception {
+ SolrClient mockSolrClient = EasyMock.strictMock(SolrClient.class);
+
+ UpdateResponse updateResponse = new UpdateResponse();
+ NamedList<Object> response = new NamedList<Object>();
+ NamedList<Object> header = new NamedList<Object>();
+ header.add("QTime", 1);
+ response.add("responseHeader", header);
+ updateResponse.setResponse(response);
+
+ EasyMock.expect(mockSolrClient.deleteByQuery(EasyMock.anyString())).andReturn(updateResponse);
+ EasyMock.expect(mockSolrClient.commit()).andReturn(updateResponse);
+ EasyMock.replay(mockSolrClient);
+
+ SolrDaoBase dao = new SolrDaoBase(null) {};
+ dao.solrClient = mockSolrClient;
+
+ dao.removeDoc("query");
+
+ EasyMock.verify(mockSolrClient);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/dfa9bd38/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/dao/UserConfigSolrDaoTest.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/dao/UserConfigSolrDaoTest.java b/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/dao/UserConfigSolrDaoTest.java
new file mode 100644
index 0000000..5ef286f
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/dao/UserConfigSolrDaoTest.java
@@ -0,0 +1,129 @@
+/*
+ * 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.logsearch.dao;
+
+import java.util.ArrayList;
+
+import org.apache.solr.client.solrj.SolrClient;
+import org.apache.solr.client.solrj.SolrRequest.METHOD;
+import org.apache.solr.client.solrj.request.CollectionAdminRequest;
+import org.apache.solr.client.solrj.response.QueryResponse;
+import org.apache.solr.client.solrj.response.UpdateResponse;
+import org.apache.solr.common.SolrInputDocument;
+import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.NamedList;
+import org.easymock.Capture;
+import org.easymock.CaptureType;
+import org.easymock.EasyMock;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import junit.framework.Assert;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = { "/applicationContext.xml" })
+public class UserConfigSolrDaoTest {
+
+ @Autowired
+ private UserConfigSolrDao dao;
+
+ @Test
+ public void testUserConfigDaoPostConstructor() throws Exception {
+ SolrClient mockSolrClient = EasyMock.strictMock(SolrClient.class);
+
+ NamedList<Object> requestResponse = new NamedList<Object>();
+ NamedList<Object> requestResponseHeader = new NamedList<Object>();
+ requestResponseHeader.add("status", 0);
+ requestResponse.add("responseHeader", requestResponseHeader);
+ requestResponse.add("collections", new ArrayList<String>());
+
+ QueryResponse queryResponse = new QueryResponse();
+
+ UpdateResponse updateResponse = new UpdateResponse();
+ NamedList<Object> updateResponseContent = new NamedList<Object>();
+ NamedList<Object> updateResponseHeader = new NamedList<Object>();
+ updateResponseHeader.add("QTime", 1);
+ updateResponseContent.add("responseHeader", updateResponseHeader);
+ updateResponse.setResponse(updateResponseContent);
+
+ Capture<CollectionAdminRequest.Create> captureCreateRequest = EasyMock.newCapture(CaptureType.LAST);
+ Capture<SolrParams> captureSolrParams = EasyMock.newCapture(CaptureType.LAST);
+ Capture<METHOD> captureMethod = EasyMock.newCapture(CaptureType.LAST);
+ Capture<SolrInputDocument> captureSolrInputDocument = EasyMock.newCapture(CaptureType.LAST);
+
+ EasyMock.expect(mockSolrClient.request(EasyMock.anyObject(CollectionAdminRequest.List.class), EasyMock.anyString())).andReturn(requestResponse);
+ mockSolrClient.request(EasyMock.capture(captureCreateRequest), EasyMock.anyString()); EasyMock.expectLastCall().andReturn(requestResponse);
+ mockSolrClient.query(EasyMock.capture(captureSolrParams), EasyMock.capture(captureMethod)); EasyMock.expectLastCall().andReturn(queryResponse);
+ mockSolrClient.add(EasyMock.capture(captureSolrInputDocument)); EasyMock.expectLastCall().andReturn(updateResponse);
+ EasyMock.expect(mockSolrClient.commit()).andReturn(updateResponse);
+ EasyMock.replay(mockSolrClient);
+
+ dao.solrClient = mockSolrClient;
+ dao.isZkConnectString = true;
+
+ dao.postConstructor();
+ EasyMock.verify(mockSolrClient);
+
+ CollectionAdminRequest.Create createRequest = captureCreateRequest.getValue();
+ Assert.assertEquals(createRequest.getConfigName(), "test_history_logs_config_name");
+ Assert.assertEquals(createRequest.getReplicationFactor().intValue(), 234);
+ Assert.assertEquals(createRequest.getCollectionName(), "test_history_logs_collection");
+
+ SolrParams solrParams = captureSolrParams.getValue();
+ Assert.assertEquals(solrParams.get("q"), "*:*");
+ Assert.assertEquals(solrParams.get("fq"), "rowtype:log_feeder_config");
+
+ METHOD method = captureMethod.getValue();
+ Assert.assertEquals(method, METHOD.POST);
+
+ SolrInputDocument solrInputDocument = captureSolrInputDocument.getValue();
+ Assert.assertNotNull(solrInputDocument.getFieldValue("id"));
+ Assert.assertEquals(solrInputDocument.getFieldValue("rowtype"), "log_feeder_config");
+ Assert.assertEquals(solrInputDocument.getFieldValue("jsons"), "{\"filter\":{\"test_component2\":{\"label\":\"test_component2\",\"hosts\":[],\"defaultLevels\":[\"FATAL\",\"ERROR\",\"WARN\",\"INFO\",\"DEBUG\",\"TRACE\"],\"overrideLevels\":[]},\"test_component1\":{\"label\":\"test_component1\",\"hosts\":[],\"defaultLevels\":[\"FATAL\",\"ERROR\",\"WARN\",\"INFO\",\"DEBUG\",\"TRACE\"],\"overrideLevels\":[]}},\"id\":\"" + solrInputDocument.getFieldValue("id") + "\"}");
+ Assert.assertEquals(solrInputDocument.getFieldValue("username"), "log_feeder_config");
+ Assert.assertEquals(solrInputDocument.getFieldValue("filtername"), "log_feeder_config");
+ }
+
+ @Test
+ public void testDeleteUserConfig() throws Exception {
+ SolrClient mockSolrClient = EasyMock.strictMock(SolrClient.class);
+
+ UpdateResponse updateResponse = new UpdateResponse();
+ NamedList<Object> response = new NamedList<Object>();
+ NamedList<Object> header = new NamedList<Object>();
+ header.add("QTime", 1);
+ response.add("responseHeader", header);
+ updateResponse.setResponse(response);
+
+ EasyMock.expect(mockSolrClient.deleteByQuery("id:test_id")).andReturn(updateResponse);
+ EasyMock.expect(mockSolrClient.commit()).andReturn(updateResponse);
+ EasyMock.replay(mockSolrClient);
+
+ dao.solrClient = mockSolrClient;
+ dao.isZkConnectString = true;
+
+ dao.deleteUserConfig("test_id");
+
+ EasyMock.verify(mockSolrClient);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/dfa9bd38/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/dao/UserDaoTest.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/dao/UserDaoTest.java b/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/dao/UserDaoTest.java
new file mode 100644
index 0000000..703d877
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-portal/src/test/java/org/apache/ambari/logsearch/dao/UserDaoTest.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.logsearch.dao;
+
+import java.util.Collection;
+
+import org.apache.ambari.logsearch.web.model.Role;
+import org.apache.ambari.logsearch.web.model.User;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertTrue;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = { "/applicationContext.xml" })
+public class UserDaoTest {
+
+ @Autowired
+ private UserDao dao;
+
+ @Test
+ public void testUserDaoInitAndFindUser() throws Exception {
+ User user = dao.loadUserByUsername("testUserName");
+ assertEquals(user.getUsername(), "testUserName");
+ assertEquals(user.getFirstName(), "Test User Name");
+ assertEquals(user.getLastName(), "Test User Name");
+
+ Collection<? extends GrantedAuthority> authorities = user.getAuthorities();
+ assertTrue(authorities.size() == 1);
+
+ Role authority = (Role)authorities.iterator().next();
+ assertEquals(authority.getName(), "ROLE_USER");
+ assertTrue(authority.getPrivileges().size() == 1);
+ assertEquals(authority.getPrivileges().get(0).getName(), "READ_PRIVILEGE");
+ }
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/dfa9bd38/ambari-logsearch/ambari-logsearch-portal/src/test/resources/HadoopServiceConfig.json
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/test/resources/HadoopServiceConfig.json b/ambari-logsearch/ambari-logsearch-portal/src/test/resources/HadoopServiceConfig.json
new file mode 100644
index 0000000..344dc3d
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-portal/src/test/resources/HadoopServiceConfig.json
@@ -0,0 +1,17 @@
+{
+ "service": {
+ "accumulo": {
+ "label": "TestService",
+ "components": [
+ {
+ "name": "test_component1"
+ },
+ {
+ "name": "test_component2"
+ }
+ ],
+ "dependencies": [
+ ]
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/dfa9bd38/ambari-logsearch/ambari-logsearch-portal/src/test/resources/applicationContext.xml
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/test/resources/applicationContext.xml b/ambari-logsearch/ambari-logsearch-portal/src/test/resources/applicationContext.xml
new file mode 100644
index 0000000..5e24d88
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-portal/src/test/resources/applicationContext.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+xmlns:aop="http://www.springframework.org/schema/aop" xmlns:jee="http://www.springframework.org/schema/jee"
+xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
+xmlns:task="http://www.springframework.org/schema/task" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xmlns:util="http://www.springframework.org/schema/util"
+xsi:schemaLocation="http://www.springframework.org/schema/aop
+http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
+http://www.springframework.org/schema/beans
+http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
+http://www.springframework.org/schema/context
+http://www.springframework.org/schema/context/spring-context-4.2.xsd
+http://www.springframework.org/schema/jee
+http://www.springframework.org/schema/jee/spring-jee-4.2.xsd
+http://www.springframework.org/schema/tx
+http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
+http://www.springframework.org/schema/task
+http://www.springframework.org/schema/task/spring-task-4.2.xsd
+http://www.springframework.org/schema/util
+http://www.springframework.org/schema/util/spring-util.xsd">
+
+ <context:component-scan base-package="org.apache.ambari.logsearch" />
+ <task:annotation-driven />
+ <bean id="xmlPropertyConfigurer" class="org.apache.ambari.logsearch.util.XMLPropertiesUtil" />
+
+ <bean id="propertyConfigurer" class="org.apache.ambari.logsearch.util.PropertiesUtil">
+ <property name="locations">
+ <list>
+ <value>classpath:default.properties</value>
+ <value>classpath:logsearch.properties</value>
+ <value>classpath:logsearch-admin-site.xml</value>
+ </list>
+ </property>
+ <property name="propertiesPersister" ref="xmlPropertyConfigurer" />
+ </bean>
+
+</beans>
http://git-wip-us.apache.org/repos/asf/ambari/blob/dfa9bd38/ambari-logsearch/ambari-logsearch-portal/src/test/resources/applicationContext_testManagers.xml
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/test/resources/applicationContext_testManagers.xml b/ambari-logsearch/ambari-logsearch-portal/src/test/resources/applicationContext_testManagers.xml
new file mode 100644
index 0000000..f1d1dbe
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-portal/src/test/resources/applicationContext_testManagers.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+xmlns:aop="http://www.springframework.org/schema/aop" xmlns:jee="http://www.springframework.org/schema/jee"
+xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
+xmlns:task="http://www.springframework.org/schema/task" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xmlns:util="http://www.springframework.org/schema/util"
+xsi:schemaLocation="http://www.springframework.org/schema/aop
+http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
+http://www.springframework.org/schema/beans
+http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
+http://www.springframework.org/schema/context
+http://www.springframework.org/schema/context/spring-context-4.2.xsd
+http://www.springframework.org/schema/jee
+http://www.springframework.org/schema/jee/spring-jee-4.2.xsd
+http://www.springframework.org/schema/tx
+http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
+http://www.springframework.org/schema/task
+http://www.springframework.org/schema/task/spring-task-4.2.xsd
+http://www.springframework.org/schema/util
+http://www.springframework.org/schema/util/spring-util.xsd">
+
+ <context:component-scan base-package="org.apache.ambari.logsearch.manager.dao, org.apache.ambari.logsearch.util" />
+ <task:annotation-driven />
+ <bean id="xmlPropertyConfigurer" class="org.apache.ambari.logsearch.util.XMLPropertiesUtil" />
+
+ <bean id="propertyConfigurer" class="org.apache.ambari.logsearch.util.PropertiesUtil">
+ <property name="locations">
+ <list>
+ <value>classpath:default.properties</value>
+ <value>classpath:logsearch.properties</value>
+ <value>classpath:logsearch-admin-site.xml</value>
+ </list>
+ </property>
+ <property name="propertiesPersister" ref="xmlPropertyConfigurer" />
+ </bean>
+
+</beans>
http://git-wip-us.apache.org/repos/asf/ambari/blob/dfa9bd38/ambari-logsearch/ambari-logsearch-portal/src/test/resources/logsearch.properties
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/test/resources/logsearch.properties b/ambari-logsearch/ambari-logsearch-portal/src/test/resources/logsearch.properties
new file mode 100755
index 0000000..fa3efb8
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-portal/src/test/resources/logsearch.properties
@@ -0,0 +1,32 @@
+# 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.
+
+logsearch.solr.audit.logs.config.name=test_audit_logs_config_name
+logsearch.collection.audit.logs.numshards=123
+logsearch.collection.audit.logs.replication.factor=456
+logsearch.solr.collection.audit.logs=test_audit_logs_collection
+
+logsearch.solr.service.logs.config.name=test_service_logs_config_name
+logsearch.collection.service.logs.numshards=789
+logsearch.collection.service.logs.replication.factor=987
+logsearch.solr.collection.service.logs=test_service_logs_collection
+logsearch.service.logs.split.interval.mins=1
+
+logsearch.solr.history.config.name=test_history_logs_config_name
+logsearch.collection.history.replication.factor=234
+logsearch.solr.collection.history=test_history_logs_collection
+
+logsearch.auth.file.enable=true
+logsearch.login.credentials.file=user_pass.json
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/dfa9bd38/ambari-logsearch/ambari-logsearch-portal/src/test/resources/user_pass.json
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/test/resources/user_pass.json b/ambari-logsearch/ambari-logsearch-portal/src/test/resources/user_pass.json
new file mode 100644
index 0000000..0a04afe
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-portal/src/test/resources/user_pass.json
@@ -0,0 +1,8 @@
+{
+ "users": [{
+ "name": "Test User Name",
+ "username": "testUserName",
+ "password": "testUserPassword",
+ "en_password": ""
+ }]
+}
\ No newline at end of file