You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by la...@apache.org on 2012/11/14 22:23:13 UTC

svn commit: r1409413 - in /airavata/trunk/modules/airavata-rest-services/src: main/java/org/apache/airavata/services/registry/rest/security/ main/java/org/apache/airavata/services/registry/rest/security/basic/ main/java/org/apache/airavata/services/reg...

Author: lahiru
Date: Wed Nov 14 21:23:10 2012
New Revision: 1409413

URL: http://svn.apache.org/viewvc?rev=1409413&view=rev
Log:
adding amila's commit for issue https://issues.apache.org/jira/browse/AIRAVATA-560.

Added:
    airavata/trunk/modules/airavata-rest-services/src/main/java/org/apache/airavata/services/registry/rest/security/
    airavata/trunk/modules/airavata-rest-services/src/main/java/org/apache/airavata/services/registry/rest/security/HttpAuthenticatorFilter.java
    airavata/trunk/modules/airavata-rest-services/src/main/java/org/apache/airavata/services/registry/rest/security/basic/
    airavata/trunk/modules/airavata-rest-services/src/main/java/org/apache/airavata/services/registry/rest/security/basic/BasicAccessAuthenticator.java
    airavata/trunk/modules/airavata-rest-services/src/main/java/org/apache/airavata/services/registry/rest/security/session/
    airavata/trunk/modules/airavata-rest-services/src/main/java/org/apache/airavata/services/registry/rest/security/session/SessionAuthenticator.java
    airavata/trunk/modules/airavata-rest-services/src/main/resources/authenticators.xml
    airavata/trunk/modules/airavata-rest-services/src/test/java/
    airavata/trunk/modules/airavata-rest-services/src/test/java/org/
    airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/
    airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/
    airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/
    airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/configurations/
    airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/configurations/AuthenticatorConfigurationReaderTest.java
    airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/configurations/TestDBAuthenticator1.java
    airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/configurations/TestDBAuthenticator2.java
    airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/configurations/TestDBAuthenticator3.java
    airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/configurations/TestUserStore.java
    airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/userstore/
    airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/userstore/JDBCUserStoreTest.java
    airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/userstore/LDAPUserStoreTest.java
    airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/userstore/SessionDBUserStoreTest.java
    airavata/trunk/modules/airavata-rest-services/src/test/resources/authenticators.xml
    airavata/trunk/modules/airavata-rest-services/src/test/resources/disabled-authenticator.xml
    airavata/trunk/modules/airavata-rest-services/src/test/resources/jdbc-authenticator.xml
    airavata/trunk/modules/airavata-rest-services/src/test/resources/ldap-authenticator.xml
    airavata/trunk/modules/airavata-rest-services/src/test/resources/session-authenticator.xml
    airavata/trunk/modules/airavata-rest-services/src/test/resources/testdb/
    airavata/trunk/modules/airavata-rest-services/src/test/resources/testdb/test/
    airavata/trunk/modules/airavata-rest-services/src/test/resources/testdb/test.h2.db   (with props)
    airavata/trunk/modules/airavata-rest-services/src/test/resources/testdb/test.trace.db
    airavata/trunk/modules/airavata-rest-services/src/test/resources/testdb/test/test.trace.db

Added: airavata/trunk/modules/airavata-rest-services/src/main/java/org/apache/airavata/services/registry/rest/security/HttpAuthenticatorFilter.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-rest-services/src/main/java/org/apache/airavata/services/registry/rest/security/HttpAuthenticatorFilter.java?rev=1409413&view=auto
==============================================================================
--- airavata/trunk/modules/airavata-rest-services/src/main/java/org/apache/airavata/services/registry/rest/security/HttpAuthenticatorFilter.java (added)
+++ airavata/trunk/modules/airavata-rest-services/src/main/java/org/apache/airavata/services/registry/rest/security/HttpAuthenticatorFilter.java Wed Nov 14 21:23:10 2012
@@ -0,0 +1,182 @@
+/*
+ * 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.airavata.services.registry.rest.security;
+
+import org.apache.airavata.security.AuthenticationException;
+import org.apache.airavata.security.Authenticator;
+import org.apache.airavata.security.configurations.AuthenticatorConfigurationReader;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xml.sax.SAXException;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.xml.parsers.ParserConfigurationException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Calendar;
+import java.util.List;
+
+/**
+ * A servlet filter class which intercepts the request and do authentication.
+ */
+public class HttpAuthenticatorFilter implements Filter {
+
+    private List<Authenticator> authenticatorList;
+
+    private static Logger log = LoggerFactory.getLogger(HttpAuthenticatorFilter.class);
+
+    @Override
+    public void init(FilterConfig filterConfig) throws ServletException {
+        String authenticatorConfiguration = filterConfig.getInitParameter("authenticatorConfigurations");
+
+        //TODO make this able to read from a file as well
+
+
+        InputStream configurationFileStream = HttpAuthenticatorFilter.class.getClassLoader().
+                getResourceAsStream(authenticatorConfiguration);
+
+        if (configurationFileStream == null) {
+            String msg = "Invalid authenticator configuration. Cannot read file - ".concat(authenticatorConfiguration);
+            log.error(msg);
+            throw new ServletException(msg);
+        }
+
+        AuthenticatorConfigurationReader authenticatorConfigurationReader
+                = new AuthenticatorConfigurationReader();
+        try {
+            authenticatorConfigurationReader.init(configurationFileStream);
+        } catch (IOException e) {
+            String msg = "Error reading authenticator configurations.";
+
+            log.error(msg, e);
+            throw new ServletException(msg, e);
+        } catch (ParserConfigurationException e) {
+            String msg = "Error parsing authenticator configurations.";
+
+            log.error(msg, e);
+            throw new ServletException(msg, e);
+        } catch (SAXException e) {
+            String msg = "Error parsing authenticator configurations.";
+
+            log.error(msg, e);
+            throw new ServletException(msg, e);
+        } finally {
+            try {
+                configurationFileStream.close();
+            } catch (IOException e) {
+                log.error("Error closing authenticator file stream.", e);
+            }
+        }
+
+        this.authenticatorList = authenticatorConfigurationReader.getAuthenticatorList();
+
+        if (this.authenticatorList.isEmpty()) {
+            String msg = "No authenticators registered in the system. System cannot function without authenticators";
+            log.error(msg);
+            throw new ServletException(msg);
+        }
+
+    }
+
+    @Override
+    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+
+        // Firs check whether authenticators are disabled
+        if (! AuthenticatorConfigurationReader.isAuthenticationEnabled()) {
+            filterChain.doFilter(servletRequest, servletResponse);
+            return;
+        }
+
+        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
+
+        Authenticator authenticator = getAuthenticator(httpServletRequest);
+
+        if (authenticator == null) {
+            //sendUnauthorisedError(servletResponse, "Invalid request. Request does not contain sufficient credentials to authenticate");
+            populateUnauthorisedData(servletResponse, "Invalid request. Request does not contain sufficient credentials to authenticate");
+        } else {
+            if (authenticator.isAuthenticated(httpServletRequest)) {
+                // Allow request to flow
+                filterChain.doFilter(servletRequest, servletResponse);
+            } else {
+                try {
+                    if (!authenticator.authenticate(httpServletRequest)) {
+                        //sendUnauthorisedError(servletResponse, "Unauthorised : Provided credentials are not valid.");
+                        populateUnauthorisedData(servletResponse, "Invalid request. Request does not contain sufficient credentials to authenticate");
+                    } else {
+                        // Allow request to flow
+                        filterChain.doFilter(servletRequest, servletResponse);
+                    }
+                } catch (AuthenticationException e) {
+                    String msg = "An error occurred while authenticating request.";
+                    log.error(msg, e);
+                    //sendUnauthorisedError(servletResponse, e.getMessage());
+                    populateUnauthorisedData(servletResponse, "Invalid request. Request does not contain sufficient credentials to authenticate");
+                }
+            }
+        }
+    }
+
+    protected void sendUnauthorisedError(ServletResponse servletResponse, String message) throws IOException {
+        HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
+        httpServletResponse.sendError(HttpServletResponse.SC_UNAUTHORIZED, message);
+    }
+
+    @Override
+    public void destroy() {
+        if (this.authenticatorList != null) {
+            this.authenticatorList.clear();
+        }
+
+        this.authenticatorList = null;
+    }
+
+    private Authenticator getAuthenticator(HttpServletRequest httpServletRequest) {
+
+        for (Authenticator authenticator : authenticatorList) {
+            if (authenticator.canProcess(httpServletRequest)) {
+                return authenticator;
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * This method will create a 401 unauthorized response to be sent.
+     *
+     * @param servletResponse The HTTP response.
+     */
+    private void populateUnauthorisedData(ServletResponse servletResponse, String message) {
+
+        HttpServletResponse httpServletResponse = (HttpServletResponse)servletResponse;
+
+        httpServletResponse.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
+        httpServletResponse.addHeader("Server", "Airavata Server");
+        httpServletResponse.addHeader("Description", message);
+        httpServletResponse.addDateHeader("Date", Calendar.getInstance().getTimeInMillis());
+        httpServletResponse.addHeader("WWW-Authenticate", "Basic realm=Airavata");
+        httpServletResponse.setContentType("text/html");
+
+    }
+}

Added: airavata/trunk/modules/airavata-rest-services/src/main/java/org/apache/airavata/services/registry/rest/security/basic/BasicAccessAuthenticator.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-rest-services/src/main/java/org/apache/airavata/services/registry/rest/security/basic/BasicAccessAuthenticator.java?rev=1409413&view=auto
==============================================================================
--- airavata/trunk/modules/airavata-rest-services/src/main/java/org/apache/airavata/services/registry/rest/security/basic/BasicAccessAuthenticator.java (added)
+++ airavata/trunk/modules/airavata-rest-services/src/main/java/org/apache/airavata/services/registry/rest/security/basic/BasicAccessAuthenticator.java Wed Nov 14 21:23:10 2012
@@ -0,0 +1,214 @@
+/*
+ * 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.airavata.services.registry.rest.security.basic;
+
+import org.apache.airavata.security.AbstractAuthenticator;
+import org.apache.airavata.security.AuthenticationException;
+import org.apache.airavata.security.UserStoreException;
+import org.apache.commons.codec.binary.Base64;
+import org.w3c.dom.Node;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+/**
+ * This authenticator handles basic access authentication requests. In basic access authentication
+ * we get user name and password as HTTP headers. The password is encoded with base64.
+ * More information @link{http://en.wikipedia.org/wiki/Basic_access_authentication}
+ */
+public class BasicAccessAuthenticator extends AbstractAuthenticator {
+
+
+    private static final String AUTHENTICATOR_NAME = "BasicAccessAuthenticator";
+
+    /**
+     * Header names
+     */
+    private static final String AUTHORISATION_HEADER_NAME = "Authorization";
+    private static final String USER_IN_SESSION = "userName";
+
+    public BasicAccessAuthenticator() {
+        super(AUTHENTICATOR_NAME);
+    }
+
+    private String decode(String encoded) {
+        return new String(Base64.decodeBase64(encoded.getBytes()));
+    }
+
+    /**
+     * Returns user name and password as an array. The first element is user name and second is password.
+     *
+     * @param httpServletRequest The servlet request.
+     * @return User name password pair as an array.
+     * @throws AuthenticationException If an error occurred while extracting user name and password.
+     */
+    private String[] getUserNamePassword(HttpServletRequest httpServletRequest) throws AuthenticationException {
+
+        String basicHeader = httpServletRequest.getHeader(AUTHORISATION_HEADER_NAME);
+
+        if (basicHeader == null) {
+            throw new AuthenticationException("Authorization Required");
+        }
+
+        String[] userNamePasswordArray = basicHeader.split(" ");
+
+        if (userNamePasswordArray == null || userNamePasswordArray.length != 2) {
+            throw new AuthenticationException("Authorization Required");
+        }
+
+        String decodedString = decode(userNamePasswordArray[1]);
+
+        String[] array = decodedString.split(":");
+
+        if (array == null || array.length != 2) {
+            throw new AuthenticationException("Authorization Required");
+        }
+
+        return array;
+
+    }
+
+    @Override
+    protected boolean doAuthentication(Object credentials) throws AuthenticationException {
+        if (this.getUserStore() == null) {
+            throw new AuthenticationException("Authenticator is not initialized. Error processing request.");
+        }
+
+        if (credentials == null)
+            return false;
+
+        HttpServletRequest httpServletRequest = (HttpServletRequest) credentials;
+
+        String[] array = getUserNamePassword(httpServletRequest);
+
+        String userName = array[0];
+        String password = array[1];
+
+        try {
+            return this.getUserStore().authenticate(userName, password);
+
+        } catch (UserStoreException e) {
+            throw new AuthenticationException("Error querying database for session information.", e);
+        }
+    }
+
+    protected void addUserToSession(String userName, HttpServletRequest servletRequest) {
+
+        if (servletRequest.getSession() != null) {
+            servletRequest.getSession().setAttribute(USER_IN_SESSION, userName);
+        }
+    }
+
+    @Override
+    public void onSuccessfulAuthentication(Object authenticationInfo) {
+
+        HttpServletRequest httpServletRequest = (HttpServletRequest) authenticationInfo;
+
+        try {
+            String[] array = getUserNamePassword(httpServletRequest);
+
+            StringBuilder stringBuilder = new StringBuilder("User : ");
+
+            if (array != null) {
+
+                addUserToSession(array[0], httpServletRequest);
+
+                stringBuilder.append(array[0]).append(" successfully logged into system at ").append(getCurrentTime());
+                log.info(stringBuilder.toString());
+
+            } else {
+                log.error("System error occurred while extracting user name after authentication. " +
+                        "Couldn't extract user name from the request.");
+            }
+        } catch (AuthenticationException e) {
+            log.error("System error occurred while extracting user name after authentication.", e);
+        }
+
+    }
+
+    @Override
+    public void onFailedAuthentication(Object authenticationInfo) {
+
+        HttpServletRequest httpServletRequest = (HttpServletRequest) authenticationInfo;
+
+        try {
+            String[] array = getUserNamePassword(httpServletRequest);
+
+            StringBuilder stringBuilder = new StringBuilder("User : ");
+
+            if (array != null) {
+
+                stringBuilder.append(array[0]).append(" Failed login attempt to system at ").append(getCurrentTime());
+                log.warn(stringBuilder.toString());
+
+            } else {
+                stringBuilder.append("Failed login attempt to system at ").append(getCurrentTime()).append( ". User unknown.");
+                log.warn(stringBuilder.toString());
+            }
+        } catch (AuthenticationException e) {
+            log.error("System error occurred while extracting user name after authentication.", e);
+        }
+    }
+
+    @Override
+    public boolean isAuthenticated(Object credentials) {
+        HttpServletRequest httpServletRequest = (HttpServletRequest) credentials;
+
+        HttpSession httpSession = httpServletRequest.getSession();
+
+        return httpSession != null && httpSession.getAttribute(USER_IN_SESSION) != null;
+
+    }
+
+    @Override
+    public boolean canProcess(Object credentials) {
+
+        HttpServletRequest httpServletRequest = (HttpServletRequest) credentials;
+
+        return (httpServletRequest.getHeader(AUTHORISATION_HEADER_NAME) != null);
+    }
+
+    @Override
+    public void configure(Node node) throws RuntimeException {
+
+        /**
+         <specificConfigurations>
+         <database>
+         <jdbcUrl></jdbcUrl>
+         <databaseDriver></databaseDriver>
+         <userName></userName>
+         <password></password>
+         <userTableName></userTableName>
+         <userNameColumnName></userNameColumnName>
+         <passwordColumnName></passwordColumnName>
+         </database>
+         </specificConfigurations>
+         */
+
+        try {
+            this.getUserStore().configure(node);
+        } catch (UserStoreException e) {
+            throw new RuntimeException("Error while configuring authenticator user store", e);
+        }
+
+    }
+
+}

Added: airavata/trunk/modules/airavata-rest-services/src/main/java/org/apache/airavata/services/registry/rest/security/session/SessionAuthenticator.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-rest-services/src/main/java/org/apache/airavata/services/registry/rest/security/session/SessionAuthenticator.java?rev=1409413&view=auto
==============================================================================
--- airavata/trunk/modules/airavata-rest-services/src/main/java/org/apache/airavata/services/registry/rest/security/session/SessionAuthenticator.java (added)
+++ airavata/trunk/modules/airavata-rest-services/src/main/java/org/apache/airavata/services/registry/rest/security/session/SessionAuthenticator.java Wed Nov 14 21:23:10 2012
@@ -0,0 +1,120 @@
+/*
+ * 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.airavata.services.registry.rest.security.session;
+
+import org.apache.airavata.security.AbstractAuthenticator;
+import org.apache.airavata.security.AuthenticationException;
+import org.apache.airavata.security.UserStoreException;
+import org.w3c.dom.Node;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+/**
+ * This authenticator will authenticate requests based on a session (NOT HTTP Session) id stored
+ * in the database.
+ */
+public class SessionAuthenticator extends AbstractAuthenticator {
+
+    private static final String AUTHENTICATOR_NAME = "SessionAuthenticator";
+
+    private static final String SESSION_TICKET = "sessionTicket";
+
+    public SessionAuthenticator() {
+        super(AUTHENTICATOR_NAME);
+    }
+
+    @Override
+    public boolean doAuthentication(Object credentials) throws AuthenticationException {
+
+       if (credentials == null)
+            return false;
+
+        HttpServletRequest httpServletRequest = (HttpServletRequest)credentials;
+        String sessionTicket = httpServletRequest.getHeader(SESSION_TICKET);
+        try {
+            return this.getUserStore().authenticate(sessionTicket);
+        } catch (UserStoreException e) {
+            throw new AuthenticationException("Error querying database for session information.", e);
+        }
+    }
+
+    @Override
+    public boolean canProcess(Object credentials) {
+
+        if (credentials instanceof HttpServletRequest) {
+            HttpServletRequest request = (HttpServletRequest) credentials;
+
+            String ticket = request.getHeader(SESSION_TICKET);
+            if (ticket != null) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    @Override
+    public void onSuccessfulAuthentication(Object authenticationInfo) {
+
+        HttpServletRequest httpServletRequest = (HttpServletRequest)authenticationInfo;
+        String sessionTicket = httpServletRequest.getHeader(SESSION_TICKET);
+
+        // Add sessionTicket to http session
+        HttpSession httpSession = httpServletRequest.getSession();
+
+        if (httpSession != null) {
+            httpSession.setAttribute(SESSION_TICKET, sessionTicket);
+        }
+
+        log.info("A request with a session ticket is successfully logged in.");
+
+    }
+
+    @Override
+    public void onFailedAuthentication(Object authenticationInfo) {
+        log.warn("Failed attempt to login.");
+    }
+
+    @Override
+    public void configure(Node node) throws RuntimeException {
+
+        try {
+            this.getUserStore().configure(node);
+        } catch (UserStoreException e) {
+            throw new RuntimeException("Error while configuring authenticator user store", e);
+        }
+    }
+
+
+    @Override
+    public boolean isAuthenticated(Object credentials) {
+        HttpServletRequest httpServletRequest = (HttpServletRequest)credentials;
+
+        if (httpServletRequest.getSession() != null) {
+            String sessionTicket = (String)httpServletRequest.getSession().getAttribute(SESSION_TICKET);
+            return (sessionTicket != null);
+        }
+
+        return false;
+
+    }
+}

Added: airavata/trunk/modules/airavata-rest-services/src/main/resources/authenticators.xml
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-rest-services/src/main/resources/authenticators.xml?rev=1409413&view=auto
==============================================================================
--- airavata/trunk/modules/airavata-rest-services/src/main/resources/authenticators.xml (added)
+++ airavata/trunk/modules/airavata-rest-services/src/main/resources/authenticators.xml Wed Nov 14 21:23:10 2012
@@ -0,0 +1,64 @@
+<?xml version="1.0"?>
+
+<!--
+This file contains a sample authenticator configuration. We can define all authenticators in this file. Each authenticator
+configuration has to start with tag "authenticator". The name is the name given to the authenticator. The actual
+authenticator implementation is implemented in the class. There are configurations specific to authenticators.
+Those configurations are reside inside &lt;specificConfigurations&gt; tags.
+
+The "enabled parameter at root level will say whether authenticators are enabled or not.
+-->
+
+<authenticators enabled="true">
+    <authenticator name="sessionAuthenticator" class="org.apache.airavata.services.registry.rest.security.session.SessionAuthenticator"
+                   enabled="true" priority="6" userstore="org.apache.airavata.security.userstore.SessionDBUserStore">
+        <specificConfigurations>
+            <database>
+                <!--jdbcUrl>jdbc:h2:modules/commons/airavata-registry-rest/src/test/resources/testdb/test</jdbcUrl-->
+                <!-- Points to /Users/thejaka/development/apache/airavata/trunk/modules/commons/airavata-registry-rest/target/tomcat6x/. -->
+                <jdbcUrl>jdbc:h2:../../src/test/resources/testdb/test</jdbcUrl>
+                <userName>sa</userName>
+                <password>sa</password>
+                <databaseDriver>org.h2.Driver</databaseDriver>
+                <sessionTable>Persons</sessionTable>
+                <sessionColumn>sessionId</sessionColumn>
+                <comparingColumn>sessionId</comparingColumn>
+            </database>
+        </specificConfigurations>
+    </authenticator>
+
+    <authenticator name="basicAccessAuthenticator" class="org.apache.airavata.services.registry.rest.security.basic.BasicAccessAuthenticator"
+                   enabled="true" priority="7" userstore="org.apache.airavata.security.userstore.JDBCUserStore">
+        <specificConfigurations>
+            <database>
+                <!--jdbcUrl>jdbc:h2:modules/commons/airavata-registry-rest/src/test/resources/testdb/test</jdbcUrl-->
+                <jdbcUrl>jdbc:mysql://localhost/airavata</jdbcUrl>
+                <userName>root</userName>
+                <password>root123</password>
+                <databaseDriver>com.mysql.jdbc.Driver</databaseDriver>
+                <userTableName>AIRAVATA_USER</userTableName>
+                <userNameColumnName>USERID</userNameColumnName>
+                <passwordColumnName>PASSWORD</passwordColumnName>
+            </database>
+        </specificConfigurations>
+    </authenticator>
+
+    <authenticator name="basicAccessAuthenticatorLdap" class="org.apache.airavata.services.registry.rest.security.basic.BasicAccessAuthenticator"
+                   enabled="true" priority="8" userstore="org.apache.airavata.security.userstore.LDAPUserStore">
+        <specificConfigurations>
+            <ldap>
+                <!--
+                url - The URL which LDAP server is listening for requests
+                systemUser - The DN of the LDAP server connection user
+                systemUserPassword - The password of the LDAP server connection user
+                userDNTemplate - The DN structure of the users in LDAP
+            -->
+                <url>ldap://localhost:10389</url>
+                <systemUser>admin</systemUser>
+                <systemUserPassword>secret</systemUserPassword>
+                <userDNTemplate>uid={0},ou=users,ou=system</userDNTemplate>
+            </ldap>
+        </specificConfigurations>
+    </authenticator>
+
+</authenticators>
\ No newline at end of file

Added: airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/configurations/AuthenticatorConfigurationReaderTest.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/configurations/AuthenticatorConfigurationReaderTest.java?rev=1409413&view=auto
==============================================================================
--- airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/configurations/AuthenticatorConfigurationReaderTest.java (added)
+++ airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/configurations/AuthenticatorConfigurationReaderTest.java Wed Nov 14 21:23:10 2012
@@ -0,0 +1,117 @@
+/*
+ * 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.airavata.security.configurations;
+
+import junit.framework.TestCase;
+import org.apache.airavata.security.Authenticator;
+import org.apache.airavata.security.userstore.JDBCUserStore;
+import org.apache.airavata.security.userstore.LDAPUserStore;
+
+import java.io.File;
+import java.util.List;
+
+/**
+ * A test class for authenticator configuration reader.
+ * Reads the authenticators.xml in resources directory.
+ */
+public class AuthenticatorConfigurationReaderTest extends TestCase {
+
+    private String configurationFile = this.getClass().getClassLoader().getResource("authenticators.xml").getFile();
+
+    public void setUp() throws Exception {
+
+        File f = new File(".");
+        System.out.println(f.getAbsolutePath());
+
+        File file = new File(configurationFile);
+
+        if (!file.exists() && !file.canRead()) {
+            throw new Exception("Error reading configuration file " + configurationFile);
+
+        }
+    }
+
+    public void testInit() throws Exception {
+
+        AuthenticatorConfigurationReader authenticatorConfigurationReader
+                = new AuthenticatorConfigurationReader();
+        authenticatorConfigurationReader.init(configurationFile);
+
+        assertTrue(AuthenticatorConfigurationReader.isAuthenticationEnabled());
+
+        List<Authenticator> authenticators = authenticatorConfigurationReader.getAuthenticatorList();
+
+        assertEquals(authenticators.size(), 3);
+
+        for (Authenticator authenticator : authenticators) {
+            if (authenticator instanceof TestDBAuthenticator1) {
+                assertEquals("dbAuthenticator1", authenticator.getAuthenticatorName());
+                assertEquals(6, authenticator.getPriority());
+                assertEquals(true, authenticator.isEnabled());
+                assertEquals("jdbc:sql:thin:@//myhost:1521/mysql1", ((TestDBAuthenticator1) authenticator).getDatabaseURL());
+                assertEquals("org.myqsql.Driver1", ((TestDBAuthenticator1) authenticator).getDatabaseDriver());
+                assertEquals("mysql1", ((TestDBAuthenticator1) authenticator).getDatabaseUserName());
+                assertEquals("secret1", ((TestDBAuthenticator1) authenticator).getDatabasePassword());
+                assertNotNull(authenticator.getUserStore());
+                assertTrue(authenticator.getUserStore() instanceof JDBCUserStore);
+            } else if (authenticator instanceof TestDBAuthenticator2) {
+                assertEquals("dbAuthenticator2", authenticator.getAuthenticatorName());
+                assertEquals(7, authenticator.getPriority());
+                assertEquals(true, authenticator.isEnabled());
+                assertEquals("jdbc:sql:thin:@//myhost:1521/mysql2", ((TestDBAuthenticator2) authenticator).getDatabaseURL());
+                assertEquals("org.myqsql.Driver2", ((TestDBAuthenticator2) authenticator).getDatabaseDriver());
+                assertEquals("mysql2", ((TestDBAuthenticator2) authenticator).getDatabaseUserName());
+                assertEquals("secret2", ((TestDBAuthenticator2) authenticator).getDatabasePassword());
+                assertNotNull(authenticator.getUserStore());
+                assertTrue(authenticator.getUserStore() instanceof LDAPUserStore);
+            }  else if (authenticator instanceof TestDBAuthenticator3) {
+                assertEquals("dbAuthenticator3", authenticator.getAuthenticatorName());
+                assertEquals(8, authenticator.getPriority());
+                assertEquals(true, authenticator.isEnabled());
+                assertEquals("jdbc:sql:thin:@//myhost:1521/mysql3", ((TestDBAuthenticator3) authenticator).getDatabaseURL());
+                assertEquals("org.myqsql.Driver3", ((TestDBAuthenticator3) authenticator).getDatabaseDriver());
+                assertEquals("mysql3", ((TestDBAuthenticator3) authenticator).getDatabaseUserName());
+                assertEquals("secret3", ((TestDBAuthenticator3) authenticator).getDatabasePassword());
+                assertNotNull(authenticator.getUserStore());
+                assertTrue(authenticator.getUserStore() instanceof JDBCUserStore);
+            }
+        }
+
+        assertEquals(8, authenticators.get(0).getPriority());
+        assertEquals(7, authenticators.get(1).getPriority());
+        assertEquals(6, authenticators.get(2).getPriority());
+
+    }
+
+    public void testDisabledAuthenticator() throws Exception {
+
+        String disabledConfiguration
+                = this.getClass().getClassLoader().getResource("disabled-authenticator.xml").getFile();
+
+
+        AuthenticatorConfigurationReader authenticatorConfigurationReader
+                = new AuthenticatorConfigurationReader();
+        authenticatorConfigurationReader.init(disabledConfiguration);
+
+        assertFalse(AuthenticatorConfigurationReader.isAuthenticationEnabled());
+
+    }
+}

Added: airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/configurations/TestDBAuthenticator1.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/configurations/TestDBAuthenticator1.java?rev=1409413&view=auto
==============================================================================
--- airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/configurations/TestDBAuthenticator1.java (added)
+++ airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/configurations/TestDBAuthenticator1.java Wed Nov 14 21:23:10 2012
@@ -0,0 +1,57 @@
+/*
+ * 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.airavata.security.configurations;
+
+import org.apache.airavata.security.AbstractDatabaseAuthenticator;
+import org.apache.airavata.security.AuthenticationException;
+
+public class TestDBAuthenticator1 extends AbstractDatabaseAuthenticator {
+
+    public TestDBAuthenticator1() {
+        super();
+    }
+
+    @Override
+    public void onSuccessfulAuthentication(Object authenticationInfo) {
+        //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    @Override
+    public void onFailedAuthentication(Object authenticationInfo) {
+        //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    @Override
+    public boolean authenticate(Object credentials) throws AuthenticationException {
+        return false;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    @Override
+    protected boolean doAuthentication(Object credentials) throws AuthenticationException {
+        return false;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    @Override
+    public boolean isAuthenticated(Object credentials) {
+        return false;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+}
+

Added: airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/configurations/TestDBAuthenticator2.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/configurations/TestDBAuthenticator2.java?rev=1409413&view=auto
==============================================================================
--- airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/configurations/TestDBAuthenticator2.java (added)
+++ airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/configurations/TestDBAuthenticator2.java Wed Nov 14 21:23:10 2012
@@ -0,0 +1,59 @@
+/*
+ * 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.airavata.security.configurations;
+
+import org.apache.airavata.security.AbstractDatabaseAuthenticator;
+import org.apache.airavata.security.AuthenticationException;
+
+/**
+ * Test class for authenticator.
+ */
+public class TestDBAuthenticator2 extends AbstractDatabaseAuthenticator {
+
+    public TestDBAuthenticator2() {
+        super();
+    }
+
+    @Override
+    public void onSuccessfulAuthentication(Object authenticationInfo) {
+        //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    @Override
+    public void onFailedAuthentication(Object authenticationInfo) {
+        //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    @Override
+    public boolean authenticate(Object credentials) throws AuthenticationException {
+        return false;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    @Override
+    protected boolean doAuthentication(Object credentials) throws AuthenticationException {
+        return false;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    @Override
+    public boolean isAuthenticated(Object credentials) {
+        return false;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+}

Added: airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/configurations/TestDBAuthenticator3.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/configurations/TestDBAuthenticator3.java?rev=1409413&view=auto
==============================================================================
--- airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/configurations/TestDBAuthenticator3.java (added)
+++ airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/configurations/TestDBAuthenticator3.java Wed Nov 14 21:23:10 2012
@@ -0,0 +1,43 @@
+package org.apache.airavata.security.configurations;
+
+import org.apache.airavata.security.AbstractDatabaseAuthenticator;
+import org.apache.airavata.security.AuthenticationException;
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: thejaka
+ * Date: 9/6/12
+ * Time: 6:30 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class TestDBAuthenticator3 extends AbstractDatabaseAuthenticator {
+
+    public TestDBAuthenticator3() {
+        super();
+    }
+
+    @Override
+    public void onSuccessfulAuthentication(Object authenticationInfo) {
+        //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    @Override
+    public void onFailedAuthentication(Object authenticationInfo) {
+        //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    @Override
+    public boolean authenticate(Object credentials) throws AuthenticationException {
+        return false;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    @Override
+    protected boolean doAuthentication(Object credentials) throws AuthenticationException {
+        return false;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    @Override
+    public boolean isAuthenticated(Object credentials) {
+        return false;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+}

Added: airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/configurations/TestUserStore.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/configurations/TestUserStore.java?rev=1409413&view=auto
==============================================================================
--- airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/configurations/TestUserStore.java (added)
+++ airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/configurations/TestUserStore.java Wed Nov 14 21:23:10 2012
@@ -0,0 +1,44 @@
+/*
+ * 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.airavata.security.configurations;
+
+import org.apache.airavata.security.UserStore;
+import org.w3c.dom.Node;
+
+/**
+ * Test user store class.
+ */
+public class TestUserStore implements UserStore {
+    @Override
+    public boolean authenticate(String userName, Object credentials) {
+        return false;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    @Override
+    public boolean authenticate(Object credentials) {
+        return false;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    @Override
+    public void configure(Node node) throws RuntimeException {
+        //To change body of implemented methods use File | Settings | File Templates.
+    }
+}

Added: airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/userstore/JDBCUserStoreTest.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/userstore/JDBCUserStoreTest.java?rev=1409413&view=auto
==============================================================================
--- airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/userstore/JDBCUserStoreTest.java (added)
+++ airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/userstore/JDBCUserStoreTest.java Wed Nov 14 21:23:10 2012
@@ -0,0 +1,74 @@
+/*
+ * 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.airavata.security.userstore;
+
+import junit.framework.TestCase;
+import org.apache.airavata.security.Authenticator;
+import org.apache.airavata.security.UserStore;
+import org.apache.airavata.security.configurations.AuthenticatorConfigurationReader;
+import org.w3c.dom.Document;
+import org.w3c.dom.NodeList;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import java.io.File;
+import java.util.List;
+
+/**
+ * Test class for JDBC user store.
+ */
+public class JDBCUserStoreTest extends TestCase {
+
+    /**
+     * <specificConfigurations>
+     <database>
+     <!--jdbcUrl>jdbc:h2:modules/commons/airavata-registry-rest/src/test/resources/testdb/test</jdbcUrl-->
+     <jdbcUrl>jdbc:h2:src/test/resources/testdb/test</jdbcUrl>
+     <userName>sa</userName>
+     <password>sa</password>
+     <databaseDriver>org.h2.Driver</databaseDriver>
+     <userTableName>AIRAVATA_USER</userTableName>
+     <userNameColumnName>USERID</userNameColumnName>
+     <passwordColumnName>PASSWORD</passwordColumnName>
+     </database>
+     </specificConfigurations>
+     * @throws Exception
+     */
+
+
+
+    public void testAuthenticate() throws Exception {
+
+        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
+        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
+        Document doc = dBuilder.parse(this.getClass().getClassLoader().getResourceAsStream("jdbc-authenticator.xml"));
+        doc.getDocumentElement().normalize();
+
+        NodeList configurations = doc.getElementsByTagName("specificConfigurations");
+        UserStore userStore = new JDBCUserStore();
+        userStore.configure(configurations.item(0));
+
+        assertTrue(userStore.authenticate("amilaj", "secret"));
+        assertFalse(userStore.authenticate("amilaj", "1secret"));
+        assertFalse(userStore.authenticate("lahiru", "1234"));
+
+    }
+}

Added: airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/userstore/LDAPUserStoreTest.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/userstore/LDAPUserStoreTest.java?rev=1409413&view=auto
==============================================================================
--- airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/userstore/LDAPUserStoreTest.java (added)
+++ airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/userstore/LDAPUserStoreTest.java Wed Nov 14 21:23:10 2012
@@ -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.airavata.security.userstore;
+
+import junit.framework.TestCase;
+import org.apache.airavata.security.UserStore;
+import org.junit.Ignore;
+import org.w3c.dom.Document;
+import org.w3c.dom.NodeList;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+/**
+ * User store test 2
+ */
+@Ignore("Need LDAP server to run these tests")
+public class LDAPUserStoreTest extends TestCase{
+
+    private LDAPUserStore ldapUserStore;
+
+    public void setUp() {
+        ldapUserStore = new LDAPUserStore();
+
+        ldapUserStore.initializeLDAP("ldap://localhost:10389", "admin", "secret", "uid={0},ou=system");
+    }
+
+    public void testAuthenticate() throws Exception {
+        assertTrue(ldapUserStore.authenticate("amilaj", "secret"));
+        assertFalse(ldapUserStore.authenticate("amilaj", "secret1"));
+    }
+
+    public void testConfigure() throws Exception {
+        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
+        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
+        Document doc = dBuilder.parse(this.getClass().getClassLoader().getResourceAsStream("ldap-authenticator.xml"));
+        doc.getDocumentElement().normalize();
+
+        NodeList configurations = doc.getElementsByTagName("specificConfigurations");
+        UserStore userStore = new LDAPUserStore();
+        userStore.configure(configurations.item(0));
+
+        assertTrue(userStore.authenticate("amilaj", "secret"));
+    }
+
+
+
+}

Added: airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/userstore/SessionDBUserStoreTest.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/userstore/SessionDBUserStoreTest.java?rev=1409413&view=auto
==============================================================================
--- airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/userstore/SessionDBUserStoreTest.java (added)
+++ airavata/trunk/modules/airavata-rest-services/src/test/java/org/apache/airavata/security/userstore/SessionDBUserStoreTest.java Wed Nov 14 21:23:10 2012
@@ -0,0 +1,60 @@
+/*
+ * 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.airavata.security.userstore;
+
+import junit.framework.TestCase;
+import org.w3c.dom.Document;
+import org.w3c.dom.NodeList;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import java.io.File;
+import java.io.InputStream;
+
+/**
+ * Test class for session DB authenticator.
+ */
+public class SessionDBUserStoreTest extends TestCase {
+
+    private SessionDBUserStore sessionDBUserStore = new SessionDBUserStore();
+
+    private InputStream configurationFileStream
+            = this.getClass().getClassLoader().getResourceAsStream("session-authenticator.xml");
+
+    public void setUp() throws Exception {
+        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
+        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
+        Document doc = dBuilder.parse(configurationFileStream);
+        doc.getDocumentElement().normalize();
+
+        NodeList specificConfigurations = doc.getElementsByTagName("specificConfigurations");
+        sessionDBUserStore.configure(specificConfigurations.item(0));
+    }
+
+    public void testAuthenticate() throws Exception {
+        assertTrue(sessionDBUserStore.authenticate("1234"));
+
+    }
+
+    public void testAuthenticateFailure() throws Exception  {
+        assertFalse(sessionDBUserStore.authenticate("12345"));
+    }
+}

Added: airavata/trunk/modules/airavata-rest-services/src/test/resources/authenticators.xml
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-rest-services/src/test/resources/authenticators.xml?rev=1409413&view=auto
==============================================================================
--- airavata/trunk/modules/airavata-rest-services/src/test/resources/authenticators.xml (added)
+++ airavata/trunk/modules/airavata-rest-services/src/test/resources/authenticators.xml Wed Nov 14 21:23:10 2012
@@ -0,0 +1,72 @@
+<?xml version="1.0"?>
+
+<!--
+This file contains a sample authenticator configuration. We can define all authenticators in this file. Each authenticator
+configuration has to start with tag "authenticator". The name is the name given to the authenticator. The actual
+authenticator implementation is implemented in the class. There are configurations specific to authenticators.
+Those configurations are reside inside &lt;specificConfigurations&gt; tags.
+-->
+
+<authenticators>
+    <authenticator name="dbAuthenticator1" class="org.apache.airavata.security.configurations.TestDBAuthenticator1"
+                   enabled="true" priority="6" userstore="org.apache.airavata.security.userstore.JDBCUserStore">
+        <specificConfigurations>
+            <database>
+                <jdbcUrl>jdbc:sql:thin:@//myhost:1521/mysql1</jdbcUrl>
+                <userName>mysql1</userName>
+                <password>secret1</password>
+                <databaseDriver>org.myqsql.Driver1</databaseDriver>
+                <sessionTable>Session1</sessionTable>
+                <sessionColumn>sessioncolumn</sessionColumn>
+                <comparingColumn>comparecolumn</comparingColumn>
+                <!-- TODO add datasource.name></datasource.name -->
+            </database>
+        </specificConfigurations>
+    </authenticator>
+
+    <authenticator name="dbAuthenticator2" class="org.apache.airavata.security.configurations.TestDBAuthenticator2"
+                   enabled="true" priority="7" userstore="org.apache.airavata.security.userstore.LDAPUserStore">
+        <specificConfigurations>
+            <database>
+                <jdbcUrl>jdbc:sql:thin:@//myhost:1521/mysql2</jdbcUrl>
+                <userName>mysql2</userName>
+                <password>secret2</password>
+                <databaseDriver>org.myqsql.Driver2</databaseDriver>
+                <sessionTable>Session2</sessionTable>
+                <sessionColumn>sessioncolumn2</sessionColumn>
+                <comparingColumn>comparecolumn2</comparingColumn>
+            </database>
+        </specificConfigurations>
+    </authenticator>
+
+    <authenticator name="dbAuthenticator4" class="org.apache.airavata.security.configurations.TestDBAuthenticator2"
+                   enabled="false" priority="7" userstore="org.apache.airavata.security.userstore.JDBCUserStore">
+        <specificConfigurations>
+            <database>
+                <jdbcUrl>jdbc:sql:thin:@//myhost:1521/mysql2</jdbcUrl>
+                <userName>mysql2</userName>
+                <password>secret2</password>
+                <databaseDriver>org.myqsql.Driver2</databaseDriver>
+                <sessionTable>Session2</sessionTable>
+                <sessionColumn>sessioncolumn2</sessionColumn>
+                <comparingColumn>comparecolumn2</comparingColumn>
+            </database>
+        </specificConfigurations>
+    </authenticator>
+
+    <authenticator name="dbAuthenticator3" class="org.apache.airavata.security.configurations.TestDBAuthenticator3"
+                   enabled="true" priority="8" userstore="org.apache.airavata.security.userstore.JDBCUserStore">
+        <specificConfigurations>
+            <database>
+                <jdbcUrl>jdbc:sql:thin:@//myhost:1521/mysql3</jdbcUrl>
+                <userName>mysql3</userName>
+                <password>secret3</password>
+                <databaseDriver>org.myqsql.Driver3</databaseDriver>
+                <sessionTable>Session3</sessionTable>
+                <sessionColumn>sessioncolumn3</sessionColumn>
+                <comparingColumn>comparecolumn3</comparingColumn>
+            </database>
+        </specificConfigurations>
+    </authenticator>
+
+</authenticators>
\ No newline at end of file

Added: airavata/trunk/modules/airavata-rest-services/src/test/resources/disabled-authenticator.xml
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-rest-services/src/test/resources/disabled-authenticator.xml?rev=1409413&view=auto
==============================================================================
--- airavata/trunk/modules/airavata-rest-services/src/test/resources/disabled-authenticator.xml (added)
+++ airavata/trunk/modules/airavata-rest-services/src/test/resources/disabled-authenticator.xml Wed Nov 14 21:23:10 2012
@@ -0,0 +1,72 @@
+<?xml version="1.0"?>
+
+<!--
+This file contains a sample authenticator configuration. We can define all authenticators in this file. Each authenticator
+configuration has to start with tag "authenticator". The name is the name given to the authenticator. The actual
+authenticator implementation is implemented in the class. There are configurations specific to authenticators.
+Those configurations are reside inside &lt;specificConfigurations&gt; tags.
+-->
+
+<authenticators enabled="false">
+    <authenticator name="dbAuthenticator1" class="org.apache.airavata.security.configurations.TestDBAuthenticator1"
+                   enabled="true" priority="6" userstore="org.apache.airavata.security.userstore.JDBCUserStore">
+        <specificConfigurations>
+            <database>
+                <jdbcUrl>jdbc:sql:thin:@//myhost:1521/mysql1</jdbcUrl>
+                <userName>mysql1</userName>
+                <password>secret1</password>
+                <databaseDriver>org.myqsql.Driver1</databaseDriver>
+                <sessionTable>Session1</sessionTable>
+                <sessionColumn>sessioncolumn</sessionColumn>
+                <comparingColumn>comparecolumn</comparingColumn>
+                <!-- TODO add datasource.name></datasource.name -->
+            </database>
+        </specificConfigurations>
+    </authenticator>
+
+    <authenticator name="dbAuthenticator2" class="org.apache.airavata.security.configurations.TestDBAuthenticator2"
+                   enabled="true" priority="7" userstore="org.apache.airavata.security.userstore.LDAPUserStore">
+        <specificConfigurations>
+            <database>
+                <jdbcUrl>jdbc:sql:thin:@//myhost:1521/mysql2</jdbcUrl>
+                <userName>mysql2</userName>
+                <password>secret2</password>
+                <databaseDriver>org.myqsql.Driver2</databaseDriver>
+                <sessionTable>Session2</sessionTable>
+                <sessionColumn>sessioncolumn2</sessionColumn>
+                <comparingColumn>comparecolumn2</comparingColumn>
+            </database>
+        </specificConfigurations>
+    </authenticator>
+
+    <authenticator name="dbAuthenticator4" class="org.apache.airavata.security.configurations.TestDBAuthenticator2"
+                   enabled="false" priority="7" userstore="org.apache.airavata.security.userstore.JDBCUserStore">
+        <specificConfigurations>
+            <database>
+                <jdbcUrl>jdbc:sql:thin:@//myhost:1521/mysql2</jdbcUrl>
+                <userName>mysql2</userName>
+                <password>secret2</password>
+                <databaseDriver>org.myqsql.Driver2</databaseDriver>
+                <sessionTable>Session2</sessionTable>
+                <sessionColumn>sessioncolumn2</sessionColumn>
+                <comparingColumn>comparecolumn2</comparingColumn>
+            </database>
+        </specificConfigurations>
+    </authenticator>
+
+    <authenticator name="dbAuthenticator3" class="org.apache.airavata.security.configurations.TestDBAuthenticator3"
+                   enabled="true" priority="8" userstore="org.apache.airavata.security.userstore.JDBCUserStore">
+        <specificConfigurations>
+            <database>
+                <jdbcUrl>jdbc:sql:thin:@//myhost:1521/mysql3</jdbcUrl>
+                <userName>mysql3</userName>
+                <password>secret3</password>
+                <databaseDriver>org.myqsql.Driver3</databaseDriver>
+                <sessionTable>Session3</sessionTable>
+                <sessionColumn>sessioncolumn3</sessionColumn>
+                <comparingColumn>comparecolumn3</comparingColumn>
+            </database>
+        </specificConfigurations>
+    </authenticator>
+
+</authenticators>
\ No newline at end of file

Added: airavata/trunk/modules/airavata-rest-services/src/test/resources/jdbc-authenticator.xml
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-rest-services/src/test/resources/jdbc-authenticator.xml?rev=1409413&view=auto
==============================================================================
--- airavata/trunk/modules/airavata-rest-services/src/test/resources/jdbc-authenticator.xml (added)
+++ airavata/trunk/modules/airavata-rest-services/src/test/resources/jdbc-authenticator.xml Wed Nov 14 21:23:10 2012
@@ -0,0 +1,39 @@
+<!--
+  ~ /*
+  ~  *
+  ~  * 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.
+  ~  *
+  ~  */
+  -->
+<authenticators>
+    <authenticator name="dbAuthenticator1" class="org.apache.airavata.security.configurations.TestDBAuthenticator1"
+                   enabled="true" priority="6" userstore="org.apache.airavata.security.userstore.JDBCUserStore">
+        <specificConfigurations>
+            <database>
+                <!--jdbcUrl>jdbc:h2:modules/commons/airavata-registry-rest/src/test/resources/testdb/test</jdbcUrl-->
+                <jdbcUrl>jdbc:h2:../../src/test/resources/testdb/test</jdbcUrl>
+                <userName>sa</userName>
+                <password>sa</password>
+                <databaseDriver>org.h2.Driver</databaseDriver>
+                <userTableName>AIRAVATA_USER</userTableName>
+                <userNameColumnName>USERID</userNameColumnName>
+                <passwordColumnName>PASSWORD</passwordColumnName>
+            </database>
+        </specificConfigurations>
+    </authenticator>
+</authenticators>

Added: airavata/trunk/modules/airavata-rest-services/src/test/resources/ldap-authenticator.xml
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-rest-services/src/test/resources/ldap-authenticator.xml?rev=1409413&view=auto
==============================================================================
--- airavata/trunk/modules/airavata-rest-services/src/test/resources/ldap-authenticator.xml (added)
+++ airavata/trunk/modules/airavata-rest-services/src/test/resources/ldap-authenticator.xml Wed Nov 14 21:23:10 2012
@@ -0,0 +1,41 @@
+<!--
+  ~ /*
+  ~  *
+  ~  * 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.
+  ~  *
+  ~  */
+  -->
+<authenticators>
+    <authenticator name="dbAuthenticator1" class="org.apache.airavata.security.configurations.TestDBAuthenticator1"
+                   enabled="true" priority="6" userstore="org.apache.airavata.security.userstore.JDBCUserStore">
+        <specificConfigurations>
+            <ldap>
+                <!--
+                url - The URL which LDAP server is listening for requests
+                systemUser - The DN of the LDAP server connection user
+                systemUserPassword - The password of the LDAP server connection user
+                userDNTemplate - The DN structure of the users in LDAP
+            -->
+                <url>ldap://localhost:10389</url>
+                <systemUser>admin</systemUser>
+                <systemUserPassword>secret</systemUserPassword>
+                <userDNTemplate>uid={0},ou=system</userDNTemplate>
+            </ldap>
+        </specificConfigurations>
+    </authenticator>
+</authenticators>

Added: airavata/trunk/modules/airavata-rest-services/src/test/resources/session-authenticator.xml
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-rest-services/src/test/resources/session-authenticator.xml?rev=1409413&view=auto
==============================================================================
--- airavata/trunk/modules/airavata-rest-services/src/test/resources/session-authenticator.xml (added)
+++ airavata/trunk/modules/airavata-rest-services/src/test/resources/session-authenticator.xml Wed Nov 14 21:23:10 2012
@@ -0,0 +1,44 @@
+<!--
+  ~ /*
+  ~  *
+  ~  * 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.
+  ~  *
+  ~  */
+  -->
+
+<authenticators>
+    <authenticator name="sessionAuthenticator" class="org.apache.airavata.services.registry.rest.security.session.SessionAuthenticator"
+                   enabled="true" priority="6" userstore="org.apache.airavata.security.userstore.SessionDBUserStore">
+        <specificConfigurations>
+            <database>
+                <!--jdbcUrl>jdbc:h2:modules/commons/airavata-registry-rest/src/test/resources/testdb/test</jdbcUrl-->
+                <!-- Points to /Users/thejaka/development/apache/airavata/trunk/modules/commons/airavata-registry-rest/target/tomcat6x/. -->
+                <jdbcUrl>jdbc:h2:../../src/test/resources/testdb/test</jdbcUrl>
+                <!--jdbcUrl>jdbc:h2:modules/security/src/test/resources/testdb/test</jdbcUrl-->
+
+                <userName>sa</userName>
+                <password>sa</password>
+                <databaseDriver>org.h2.Driver</databaseDriver>
+                <sessionTable>Persons</sessionTable>
+                <sessionColumn>sessionId</sessionColumn>
+                <comparingColumn>sessionId</comparingColumn>
+            </database>
+        </specificConfigurations>
+    </authenticator>
+ </authenticators>
+

Added: airavata/trunk/modules/airavata-rest-services/src/test/resources/testdb/test.h2.db
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-rest-services/src/test/resources/testdb/test.h2.db?rev=1409413&view=auto
==============================================================================
Binary file - no diff available.

Propchange: airavata/trunk/modules/airavata-rest-services/src/test/resources/testdb/test.h2.db
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: airavata/trunk/modules/airavata-rest-services/src/test/resources/testdb/test.trace.db
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-rest-services/src/test/resources/testdb/test.trace.db?rev=1409413&view=auto
==============================================================================
--- airavata/trunk/modules/airavata-rest-services/src/test/resources/testdb/test.trace.db (added)
+++ airavata/trunk/modules/airavata-rest-services/src/test/resources/testdb/test.trace.db Wed Nov 14 21:23:10 2012
@@ -0,0 +1,97 @@
+09-10 15:20:58 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Column "1234" not found; SQL statement:
+SELECT sessionId FROM Persons WHERE sessionId = "1234" [42122-168]
+	at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
+	at org.h2.message.DbException.get(DbException.java:169)
+	at org.h2.message.DbException.get(DbException.java:146)
+	at org.h2.expression.ExpressionColumn.optimize(ExpressionColumn.java:138)
+	at org.h2.expression.Comparison.optimize(Comparison.java:161)
+	at org.h2.command.dml.Select.prepare(Select.java:802)
+	at org.h2.command.Parser.prepareCommand(Parser.java:218)
+	at org.h2.engine.Session.prepareLocal(Session.java:415)
+	at org.h2.engine.Session.prepareCommand(Session.java:364)
+	at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1109)
+	at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:164)
+	at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:152)
+	at org.h2.server.web.WebApp.getResult(WebApp.java:1311)
+	at org.h2.server.web.WebApp.query(WebApp.java:1001)
+	at org.h2.server.web.WebApp$1.next(WebApp.java:964)
+	at org.h2.server.web.WebApp$1.next(WebApp.java:967)
+	at org.h2.server.web.WebThread.process(WebThread.java:166)
+	at org.h2.server.web.WebThread.run(WebThread.java:93)
+	at java.lang.Thread.run(Thread.java:680)
+09-10 15:22:14 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Column "1234" not found; SQL statement:
+SELECT sessionID  FROM Persons where sessionid="1234" [42122-168]
+	at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
+	at org.h2.message.DbException.get(DbException.java:169)
+	at org.h2.message.DbException.get(DbException.java:146)
+	at org.h2.expression.ExpressionColumn.optimize(ExpressionColumn.java:138)
+	at org.h2.expression.Comparison.optimize(Comparison.java:161)
+	at org.h2.command.dml.Select.prepare(Select.java:802)
+	at org.h2.command.Parser.prepareCommand(Parser.java:218)
+	at org.h2.engine.Session.prepareLocal(Session.java:415)
+	at org.h2.engine.Session.prepareCommand(Session.java:364)
+	at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1109)
+	at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:164)
+	at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:152)
+	at org.h2.server.web.WebApp.getResult(WebApp.java:1311)
+	at org.h2.server.web.WebApp.query(WebApp.java:1001)
+	at org.h2.server.web.WebApp$1.next(WebApp.java:964)
+	at org.h2.server.web.WebApp$1.next(WebApp.java:967)
+	at org.h2.server.web.WebThread.process(WebThread.java:166)
+	at org.h2.server.web.WebThread.run(WebThread.java:93)
+	at java.lang.Thread.run(Thread.java:680)
+09-11 14:46:11 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "INSERT INTO AIRAVATA_USER (LASTNAME, FIRSTNAME , USERID , PASSWORD ) VALUE[*] ('Jayasekara', 'Amila', 'amilaj', 'secret') "; expected "DIRECT, SORTED, DEFAULT, VALUES, SET, (, SELECT, FROM"; SQL statement:
+insert into airavata_user (LastName, firstname , userid , password ) value ('Jayasekara', 'Amila', 'amilaj', 'secret') [42001-168]
+09-11 14:46:44 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "INSERT INTO AIRAVATA_USER (LASTNAME, FIRSTNAME , USERID , PASSWORD ) VALUE[*] ('Jayasekara', 'Amila', 'amilaj', 'secret') "; expected "DIRECT, SORTED, DEFAULT, VALUES, SET, (, SELECT, FROM"; SQL statement:
+insert into airavata_user (LastName, firstname , userid , password ) value ('Jayasekara', 'Amila', 'amilaj', 'secret') [42001-168]
+09-11 14:46:48 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "INSERT INTO AIRAVATA_USER (LASTNAME, FIRSTNAME , USERID , PASSWORD ) VALUE[*] ('Jayasekara', 'Amila', 'amilaj', 'secret') "; expected "DIRECT, SORTED, DEFAULT, VALUES, SET, (, SELECT, FROM"; SQL statement:
+insert into airavata_user (LastName, firstname , userid , password ) value ('Jayasekara', 'Amila', 'amilaj', 'secret') [42001-168]
+11-14 16:22:34 jdbc[4]: null
+org.h2.message.DbException: The connection was not closed by the application and is garbage collected [90018-168]
+	at org.h2.message.DbException.get(DbException.java:169)
+	at org.h2.message.DbException.get(DbException.java:146)
+	at org.h2.message.DbException.get(DbException.java:135)
+	at org.h2.jdbc.JdbcConnection.closeOld(JdbcConnection.java:172)
+	at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:119)
+	at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:92)
+	at org.h2.Driver.connect(Driver.java:72)
+	at java.sql.DriverManager.getConnection(DriverManager.java:582)
+	at java.sql.DriverManager.getConnection(DriverManager.java:154)
+	at org.apache.airavata.security.util.DBLookup.getConnection(DBLookup.java:105)
+	at org.apache.airavata.security.util.DBLookup.getMatchingColumnValue(DBLookup.java:60)
+	at org.apache.airavata.security.util.DBLookup.getMatchingColumnValue(DBLookup.java:47)
+	at org.apache.airavata.security.userstore.SessionDBUserStore.authenticate(SessionDBUserStore.java:64)
+	at org.apache.airavata.security.userstore.SessionDBUserStoreTest.testAuthenticateFailure(SessionDBUserStoreTest.java:58)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+	at java.lang.reflect.Method.invoke(Method.java:597)
+	at junit.framework.TestCase.runTest(TestCase.java:168)
+	at junit.framework.TestCase.runBare(TestCase.java:134)
+	at junit.framework.TestResult$1.protect(TestResult.java:110)
+	at junit.framework.TestResult.runProtected(TestResult.java:128)
+	at junit.framework.TestResult.run(TestResult.java:113)
+	at junit.framework.TestCase.run(TestCase.java:124)
+	at junit.framework.TestSuite.runTest(TestSuite.java:232)
+	at junit.framework.TestSuite.run(TestSuite.java:227)
+	at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)
+	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:236)
+	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:134)
+	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:113)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+	at java.lang.reflect.Method.invoke(Method.java:597)
+	at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
+	at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
+	at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
+	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:103)
+	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:74)
+Caused by: org.h2.jdbc.JdbcSQLException: The connection was not closed by the application and is garbage collected [90018-168]
+	at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
+	... 39 more

Added: airavata/trunk/modules/airavata-rest-services/src/test/resources/testdb/test/test.trace.db
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-rest-services/src/test/resources/testdb/test/test.trace.db?rev=1409413&view=auto
==============================================================================
--- airavata/trunk/modules/airavata-rest-services/src/test/resources/testdb/test/test.trace.db (added)
+++ airavata/trunk/modules/airavata-rest-services/src/test/resources/testdb/test/test.trace.db Wed Nov 14 21:23:10 2012
@@ -0,0 +1,6 @@
+09-04 16:20:30 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TABLE" not found; SQL statement:
+delete table session [42102-168]
+09-04 16:20:40 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TABLE" not found; SQL statement:
+delete table session [42102-168]