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