public inbox for [email protected]  
help / color / mirror / Atom feed
From: Priyanka Shendge <[email protected]>
To: Dave Page <[email protected]>
Cc: pgadmin-hackers <[email protected]>
Cc: Kanchan Mohitey <[email protected]>
Subject: Re: pgAdmin IV API test cases patch
Date: Thu, 9 Jun 2016 18:07:08 +0530
Message-ID: <CAKmZXFRj8yY91TTxwQQ01eOQE8Rc7FPWuxGcjxaVY+QcWpgWDg@mail.gmail.com> (raw)
In-Reply-To: <CAKmZXFTX9D_qOXGrvPa9sfFjc1A6VPebcpBn7vyzPEOH4pWfEg@mail.gmail.com>
References: <CAKmZXFQ2Hj1-OZpSGFEBB-vOypQ_=1b4Yr_VytZ-E1=CBw9Yhw@mail.gmail.com>
	<CA+OCxow8Q83e7Tm+BC2bxq=oqwd-m4JS3y2KpzgFemc=wX=f=A@mail.gmail.com>
	<CAKmZXFTX9D_qOXGrvPa9sfFjc1A6VPebcpBn7vyzPEOH4pWfEg@mail.gmail.com>
List-Unsubscribe:  <mailto:[email protected]?body=unsub%20pgadmin-hackers>

Hi Dave,

PFA updated patch. I have made changes suggested by you.

Kindly, review and let me know for more changes.

On 6 June 2016 at 14:09, Priyanka Shendge <[email protected]
> wrote:

>
>
> On 6 June 2016 at 14:03, Dave Page <[email protected]> wrote:
>
>> Hi
>>
>> On Sun, Jun 5, 2016 at 6:56 PM, Priyanka Shendge
>> <[email protected]> wrote:
>> > Hi,
>> >
>> > PFA patch for API test cases for tree nodes/modules. This patch does not
>> > include
>> > api tests for following modules:
>> >
>> > 1. Type
>> > 2. Table child nodes
>> > 3. FTS modules
>> >
>> > Kindly, review the same and let me know for any modification.
>>
>> I took a very quick look at the patch and immediately saw a serious
>> problem I'm afraid - you cannot hard-code paths like this:
>>
>> +            if
>> os.path.isfile('/home/edb/Downloads/pgadmin4/web/regression/'
>> +                              'parent_id.pkl'):
>> +                exst_server_id = open('/home/edb/Downloads/pgadmin4/web'
>> +                                      '/regression/''parent_id.pkl',
>> 'rb')
>>
>> You need to dynamically generate such paths so this will work on any
>> machine. Look at line 19 of web/pgAdmin4.py to see how to get the
>> patch to the current file as an example.
>>
> Sure, i'll check and update accordingly.
>
>>
>> Also; despite this not being part of the end-user interface, please
>> try to follow the standards for messages, e.g. instead of:
>>
>> No event trigger(s) to update!!!
>>
>> use
>>
>> No event trigger(s) to update.
>>
> Noted. I will update for all applicable files.
>
>>
>> There is likely more to change of course, but please fix these issues
>> first.
>>
> Sure.
>
> Thank you.
>
>>
>> Thanks!
>>
>> --
>> Dave Page
>> Blog: http://pgsnake.blogspot.com
>> Twitter: @pgsnake
>>
>> EnterpriseDB UK: http://www.enterprisedb.com
>> The Enterprise PostgreSQL Company
>>
>
>
>
> --
> Best,
> Priyanka
>
> EnterpriseDB Corporation
> The Enterprise PostgreSQL Company
>



-- 
Best,
Priyanka

EnterpriseDB Corporation
The Enterprise PostgreSQL Company


-- 
Sent via pgadmin-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers


Attachments:

  [application/octet-stream] pgadmin_api_test2.patch (240.1K, 3-pgadmin_api_test2.patch)
  download | inline diff:
diff --git a/web/pgadmin/browser/server_groups/servers/__init__.py b/web/pgadmin/browser/server_groups/servers/__init__.py
index 6f3453b..489d324 100644
--- a/web/pgadmin/browser/server_groups/servers/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/__init__.py
@@ -14,12 +14,12 @@ from flask.ext.security import current_user
 from pgadmin.model import db, Server, ServerGroup, User
 from pgadmin.utils.menu import MenuItem
 from pgadmin.utils.ajax import make_json_response, bad_request, forbidden, \
-    make_response as ajax_response, internal_server_error, unauthorized, gone
+    make_response as ajax_response, internal_server_error, unauthorized
 from pgadmin.browser.utils import PGChildNodeView
 import traceback
 from flask.ext.babel import gettext
 import pgadmin.browser.server_groups as sg
-from pgadmin.utils.crypto import encrypt, decrypt, pqencryptpassword
+from pgadmin.utils.crypto import encrypt
 from config import PG_DEFAULT_DRIVER
 from pgadmin.browser.server_groups.servers.types import ServerType
 import config
@@ -70,22 +70,14 @@ class ServerModule(sg.ServerGroupPluginModule):
             conn = manager.connection()
             connected = conn.connected()
             if connected:
-                status, result = conn.execute_dict("""
+                status, in_recovery = conn.execute_scalar("""
                     SELECT CASE WHEN usesuper
                            THEN pg_is_in_recovery()
                            ELSE FALSE
-                           END as inrecovery,
-                           CASE WHEN usesuper AND pg_is_in_recovery()
-                           THEN pg_is_xlog_replay_paused()
-                           ELSE FALSE
-                           END as isreplaypaused
+                           END as inrecovery
                     FROM pg_user WHERE usename=current_user""")
-
-                in_recovery = result['rows'][0]['inrecovery'];
-                wal_paused = result['rows'][0]['isreplaypaused']
             else:
                 in_recovery = None
-                wal_paused = None
 
             yield self.generate_browser_node(
                     "%d" % (server.id),
@@ -100,8 +92,7 @@ class ServerModule(sg.ServerGroupPluginModule):
                     version=manager.version,
                     db=manager.db,
                     user=manager.user_info if connected else None,
-                    in_recovery=in_recovery,
-                    wal_pause=wal_paused
+                    in_recovery=in_recovery
                     )
 
     @property
@@ -170,7 +161,7 @@ class ServerModule(sg.ServerGroupPluginModule):
         Override it so that - it does not register the show_node preference for
         server type.
         """
-        ServerType.register_preferences()
+        pass
 
 class ServerMenuItem(MenuItem):
     def __init__(self, **kwargs):
@@ -204,11 +195,7 @@ class ServerNode(PGChildNodeView):
             [{'post': 'create_restore_point'}],
         'connect': [{
             'get': 'connect_status', 'post': 'connect', 'delete': 'disconnect'
-            }],
-        'change_password': [{'post': 'change_password'}],
-        'wal_replay': [{
-            'delete': 'pause_wal_replay', 'put': 'resume_wal_replay'
-        }]
+            }]
     })
 
     def nodes(self, gid):
@@ -228,24 +215,6 @@ class ServerNode(PGChildNodeView):
             conn = manager.connection()
             connected = conn.connected()
 
-            if connected:
-                status, result = conn.execute_dict("""
-                    SELECT CASE WHEN usesuper
-                           THEN pg_is_in_recovery()
-                           ELSE FALSE
-                           END as inrecovery,
-                           CASE WHEN usesuper AND pg_is_in_recovery()
-                           THEN pg_is_xlog_replay_paused()
-                           ELSE FALSE
-                           END as isreplaypaused
-                    FROM pg_user WHERE usename=current_user""")
-
-                in_recovery = result['rows'][0]['inrecovery'];
-                wal_paused = result['rows'][0]['isreplaypaused']
-            else:
-                in_recovery = None
-                wal_paused = None
-
             res.append(
                 self.blueprint.generate_browser_node(
                     "%d" % (server.id),
@@ -259,9 +228,7 @@ class ServerNode(PGChildNodeView):
                     server_type=manager.server_type if connected else 'pg',
                     version=manager.version,
                     db=manager.db,
-                    user=manager.user_info if connected else None,
-                    in_recovery=in_recovery,
-                    wal_pause=wal_paused
+                    user=manager.user_info if connected else None
                     )
                 )
         return make_json_response(result=res)
@@ -288,24 +255,6 @@ class ServerNode(PGChildNodeView):
         conn = manager.connection()
         connected = conn.connected()
 
-        if connected:
-            status, result = conn.execute_dict("""
-                SELECT CASE WHEN usesuper
-                    THEN pg_is_in_recovery()
-                    ELSE FALSE
-                    END as inrecovery,
-                    CASE WHEN usesuper AND pg_is_in_recovery()
-                    THEN pg_is_xlog_replay_paused()
-                    ELSE FALSE
-                    END as isreplaypaused
-                FROM pg_user WHERE usename=current_user""")
-
-            in_recovery = result['rows'][0]['inrecovery'];
-            wal_paused = result['rows'][0]['isreplaypaused']
-        else:
-            in_recovery = None
-            wal_paused = None
-
         return make_json_response(
                 result=self.blueprint.generate_browser_node(
                     "%d" % (server.id),
@@ -319,9 +268,7 @@ class ServerNode(PGChildNodeView):
                     server_type=manager.server_type if connected else 'pg',
                     version=manager.version,
                     db=manager.db,
-                    user=manager.user_info if connected else None,
-                    in_recovery=in_recovery,
-                    wal_pause=wal_paused
+                    user=manager.user_info if connected else None
                     )
                 )
 
@@ -350,14 +297,14 @@ class ServerNode(PGChildNodeView):
                     success=0,
                     errormsg=e.message)
 
-        try:
-            info = traceback.format_exc()
-        except Exception as e:
-            current_app.logger.exception(e)
-            info = str(e)
+        # try:
+        #     info = traceback.format_exc()
+        # except Exception as e:
+        #     current_app.logger.exception(e)
+        #     info = str(e)
 
         return make_json_response(success=1,
-                                  info=info)
+                                  info= "success")
 
     def update(self, gid, sid):
         """Update the server settings"""
@@ -782,24 +729,6 @@ class ServerNode(PGChildNodeView):
 
             current_app.logger.info('Connection Established for server: \
                 %s - %s' % (server.id, server.name))
-            # Update the recovery and wal pause option for the server if connected successfully
-            status, result = conn.execute_dict("""
-                    SELECT CASE WHEN usesuper
-                           THEN pg_is_in_recovery()
-                           ELSE FALSE
-                           END as inrecovery,
-                           CASE WHEN usesuper AND pg_is_in_recovery()
-                           THEN pg_is_xlog_replay_paused()
-                           ELSE FALSE
-                           END as isreplaypaused
-                    FROM pg_user WHERE usename=current_user""")
-            if status:
-                in_recovery = result['rows'][0]['inrecovery'];
-                wal_paused = result['rows'][0]['isreplaypaused']
-            else:
-                in_recovery = None
-                wal_paused = None
-
             return make_json_response(
                         success=1,
                         info=gettext("Server connected."),
@@ -811,9 +740,7 @@ class ServerNode(PGChildNodeView):
                             'type': manager.server_type,
                             'version': manager.version,
                             'db': manager.db,
-                            'user': manager.user_info,
-                            'in_recovery': in_recovery,
-                            'wal_pause': wal_paused
+                            'user': manager.user_info
                             }
                         )
 
@@ -911,177 +838,4 @@ class ServerNode(PGChildNodeView):
             )
             return internal_server_error(errormsg=str(e))
 
-    def change_password(self, gid, sid):
-        """
-        This function is used to change the password of the
-        Database Server.
-
-        Args:
-            gid: Group id
-            sid: Server id
-        """
-        try:
-            data = json.loads(request.form['data'])
-            if data and ('password' not in data or
-                         data['password'] == '' or
-                         'newPassword' not in data or
-                         data['newPassword'] == '' or
-                         'confirmPassword' not in data or
-                         data['confirmPassword'] == ''):
-                return make_json_response(
-                    status=400,
-                    success=0,
-                    errormsg=gettext(
-                        "Couldn't find the required parameter(s)."
-                    )
-                )
-
-            if data['newPassword'] != data['confirmPassword']:
-                return make_json_response(
-                    status=200,
-                    success=0,
-                    errormsg=gettext(
-                        "Passwords do not match."
-                    )
-                )
-
-            # Fetch Server Details
-            server = Server.query.filter_by(id=sid).first()
-            if server is None:
-                return bad_request(gettext("Server not found."))
-
-            # Fetch User Details.
-            user = User.query.filter_by(id=current_user.id).first()
-            if user is None:
-                return unauthorized(gettext("Unauthorized request."))
-
-            from pgadmin.utils.driver import get_driver
-            manager = get_driver(PG_DEFAULT_DRIVER).connection_manager(sid)
-            conn = manager.connection()
-
-            decrypted_password = decrypt(manager.password, user.password)
-
-            if isinstance(decrypted_password, bytes):
-                decrypted_password = decrypted_password.decode()
-
-            password = data['password']
-
-            # Validate old password before setting new.
-            if password != decrypted_password:
-                return unauthorized(gettext("Incorrect password."))
-
-            # Hash new password before saving it.
-            password = pqencryptpassword(data['newPassword'], manager.user)
-
-            SQL = render_template("/".join([
-                        'servers/sql',
-                        '9.2_plus' if manager.version >= 90200 else '9.1_plus',
-                        'change_password.sql'
-                        ]),
-                conn=conn, _=gettext,
-                user=manager.user, encrypted_password=password)
-
-            status, res = conn.execute_scalar(SQL)
-
-            if not status:
-                return internal_server_error(errormsg=res)
-
-            password = encrypt(data['newPassword'], user.password)
-            # Check if old password was stored in pgadmin4 sqlite database.
-            # If yes then update that password.
-            if server.password is not None:
-                setattr(server, 'password', password)
-                db.session.commit()
-            # Also update password in connection manager.
-            manager.password = password
-            manager.update_session()
-
-            return make_json_response(
-                    status=200,
-                    success=1,
-                    info=gettext(
-                        "Password changed successfully."
-                    )
-                )
-
-        except Exception as e:
-            return internal_server_error(errormsg=str(e))
-
-    def wal_replay(self, sid, pause=True):
-        """
-        Utility function for wal_replay for resume/pause.
-        """
-        server = Server.query.filter_by(
-            user_id=current_user.id, id=sid
-        ).first()
-
-        if server is None:
-            return make_json_response(
-                success=0,
-                errormsg=gettext("Could not find the required server.")
-            )
-
-        try:
-            from pgadmin.utils.driver import get_driver
-            manager = get_driver(PG_DEFAULT_DRIVER).connection_manager(sid)
-            conn = manager.connection()
-
-            # Execute SQL to pause or resume WAL replay
-            if conn.connected():
-                if pause:
-                    status, res = conn.execute_scalar(
-                        "SELECT pg_xlog_replay_pause();"
-                    )
-                    if not status:
-                        return internal_server_error(
-                            errormsg=str(res)
-                        )
-                else:
-                    status, res = conn.execute_scalar(
-                        "SELECT pg_xlog_replay_resume();"
-                    )
-                    if not status:
-                        return internal_server_error(
-                            errormsg=str(res)
-                        )
-                return make_json_response(
-                    success=1,
-                    info=gettext('WAL replay paused'),
-                    data={'in_recovery': True, 'wal_pause': pause}
-                )
-            return gone(errormsg=_('Please connect the server!'))
-        except Exception as e:
-            current_app.logger.error(
-                'WAL replay pause/resume failed'
-            )
-            return internal_server_error(errormsg=str(e))
-
-    def resume_wal_replay(self, gid, sid):
-        """
-        This method will resume WAL replay
-
-        Args:
-            gid: Server group ID
-            sid: Server ID
-
-        Returns:
-            None
-        """
-        return self.wal_replay(sid, False)
-
-    def pause_wal_replay(self, gid, sid):
-        """
-        This method will pause WAL replay
-
-        Args:
-            gid: Server group ID
-            sid: Server ID
-
-        Returns:
-            None
-        """
-        return self.wal_replay(sid, True)
-
-
-
 ServerNode.register_node_view(blueprint)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/casts/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/casts/tests/__init__.py
new file mode 100644
index 0000000..bfb0263
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/casts/tests/__init__.py
@@ -0,0 +1,16 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from pgadmin.utils.route import BaseTestGenerator
+
+
+class CastTestGenerator(BaseTestGenerator):
+
+    def runTest(self):
+       return []
diff --git a/web/pgadmin/browser/server_groups/servers/databases/casts/tests/test_cast_add.py b/web/pgadmin/browser/server_groups/servers/databases/casts/tests/test_cast_add.py
new file mode 100644
index 0000000..5f22f84
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/casts/tests/test_cast_add.py
@@ -0,0 +1,77 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data, pickle_path
+from pgadmin.browser.tests.test_login import LoginTestCase
+import json, pickle, os
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+
+
+class CastsAddTestCase(LoginTestCase):
+    """This class will add cast under database node. """
+
+    priority = 19
+
+    scenarios = [
+        # Fetching default URL for cast node.
+        ('Check Cast Node', dict(url='/browser/cast/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will add cast under 1st server of tree node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            data =\
+                {
+                    "castcontext": config_data['test_casts_credentials']
+                                              ['test_cast_context'],
+                    "encoding": config_data['test_casts_credentials']
+                                           ['test_encoding'],
+                    "name": config_data['test_casts_credentials']
+                                       ['test_name'],
+                    "srctyp": config_data['test_casts_credentials']
+                                         ['test_source_type'],
+                    "trgtyp": config_data['test_casts_credentials']
+                                         ['test_target_type']
+
+                }
+
+            response = self.tester.post(self.url + str(srv_grp) + '/' +
+                                        str(server_id) + '/' + str(db_id) + '/',
+                                        data=json.dumps(data),
+                                        content_type='html/json')
+
+            self.assertTrue(response.status_code, 200)
+
+            respdata = json.loads(response.data.decode())
+
+            cast_id = respdata['node']['_id']
+
+            if os.path.isfile(pickle_path):
+                exst_server_id = open(pickle_path, 'rb')
+                all_id = pickle.load(exst_server_id)
+                pickle_id_dict = all_id
+
+            pickle_id_dict["cid"].append(cast_id)
+
+            cast_output = open(pickle_path, 'wb')
+            pickle.dump(pickle_id_dict, cast_output)
+            cast_output.close()
+
+
diff --git a/web/pgadmin/browser/server_groups/servers/databases/casts/tests/test_cast_delete.py b/web/pgadmin/browser/server_groups/servers/databases/casts/tests/test_cast_delete.py
new file mode 100644
index 0000000..0340b42
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/casts/tests/test_cast_delete.py
@@ -0,0 +1,62 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+import json
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+
+
+class CastsDeleteTestCase(LoginTestCase):
+    """
+    This class will delete cast node present on the object browser's
+    tree node by response code.
+    """
+
+    priority = 22
+
+    scenarios = [
+        # Fetching default URL for cast node.
+        ('Check Cast Node', dict(url='/browser/cast/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will delete added cast node under database node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        cast_id = all_id["cid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Fetch added cast node.
+            response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                       str(server_id) + '/' + str(db_id) +
+                                       '/' + str(cast_id),
+                                       content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            if len(respdata) == 0:
+                raise Exception("No cast(s) to delete.")
+
+            del_response = self.tester.delete(self.url + str(srv_grp) + '/' +
+                                              str(server_id) + '/' +
+                                              str(db_id) + '/' + str(cast_id),
+                                              follow_redirects=True)
+
+            del_respdata = json.loads(del_response.data.decode())
+
+            self.assertTrue(del_respdata['success'], 1)
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/casts/tests/test_cast_get.py b/web/pgadmin/browser/server_groups/servers/databases/casts/tests/test_cast_get.py
new file mode 100644
index 0000000..5603707
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/casts/tests/test_cast_get.py
@@ -0,0 +1,46 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+
+
+class CastsGetTestCase(LoginTestCase):
+    """ This class will fetch the cast node added under database. """
+
+    priority = 20
+
+    scenarios = [
+        # Fetching default URL for cast node.
+        ('Check Cast Node', dict(url='/browser/cast/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will get cast under 1st server of tree node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        cast_id = all_id["cid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                       str(server_id) + '/' + str(db_id) +
+                                       '/' + str(cast_id),
+                                       content_type='html/json')
+
+            self.assertEquals(response.status_code, 200)
+
diff --git a/web/pgadmin/browser/server_groups/servers/databases/casts/tests/test_cast_put.py b/web/pgadmin/browser/server_groups/servers/databases/casts/tests/test_cast_put.py
new file mode 100644
index 0000000..432ec8e
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/casts/tests/test_cast_put.py
@@ -0,0 +1,67 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+import json
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+
+
+class CastsUpdateTestCase(LoginTestCase):
+    """
+    This class will update cast node present on the object browser's
+    tree node by response code.
+    """
+    priority = 21
+
+    scenarios = [
+        # Fetching default URL for cast node.
+        ('Check Cast Node', dict(url='/browser/cast/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will update cast under 1st server of tree node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        cast_id = all_id["cid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Fetch added cast node.
+            response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                       str(server_id) + '/' + str(db_id) +
+                                       '/' + str(cast_id),
+                                       content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            if len(respdata) == 0:
+                raise Exception("No cast(s) to update.")
+
+            data = {
+                "description": config_data["test_cast_update_data"]
+                                   ["test_comment"],
+                "id": cast_id
+               }
+
+            put_response = self.tester.put(self.url + str(srv_grp) + '/' +
+                                           str(server_id) + '/' + str(db_id) +
+                                           '/' + str(cast_id),
+                                           data=json.dumps(data),
+                                           follow_redirects=True)
+
+            self.assertEquals(put_response.status_code, 200)
+
diff --git a/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/__init__.py
new file mode 100644
index 0000000..4b8df06
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/__init__.py
@@ -0,0 +1,16 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from pgadmin.utils.route import BaseTestGenerator
+
+
+class EventTriggerGeneratorTestCase(BaseTestGenerator):
+
+    def runTest(self):
+        return []
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/test_event_trigger_add.py b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/test_event_trigger_add.py
new file mode 100644
index 0000000..51a7ed9
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/test_event_trigger_add.py
@@ -0,0 +1,77 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data, pickle_path
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+import pickle
+import os
+
+
+class EventTriggerAddTestCase(LoginTestCase):
+    """ This class will add new event trigger under schema node. """
+
+    priority = 39
+
+    scenarios = [
+        # Fetching default URL for event trigger node.
+        ('Fetch Event Trigger Node URL',
+         dict(url='/browser/event_trigger/obj/'))
+        ]
+
+    def runTest(self):
+        """ This function will add event trigger under database node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            data = \
+                {
+                    "enabled": config_data['test_event_trigger_credentials']
+                                          ['test_enable'],
+                    "eventfunname": config_data['test_event_trigger_credentials']
+                                               ['test_event_func'],
+                    "eventname": config_data['test_event_trigger_credentials']
+                                            ['test_event_name'],
+                    "eventowner": config_data['test_event_trigger_credentials']
+                                             ['test_event_owner'],
+                    "name": config_data['test_event_trigger_credentials']
+                                       ['test_name'],
+                    "providers": config_data['test_event_trigger_credentials']
+                                            ['test_provider']
+                }
+
+            response = self.tester.post(self.url + str(srv_grp) + '/' +
+                                        str(server_id) + '/' + str(db_id) +
+                                        '/', data=json.dumps(data),
+                                        content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            event_trigger_id = respdata['node']['_id']
+
+            if os.path.isfile(pickle_path):
+                exst_server_id = open(pickle_path, 'rb')
+                all_id = pickle.load(exst_server_id)
+                pickle_id_dict = all_id
+
+            pickle_id_dict["etid"].append(event_trigger_id)
+
+            event_trigger_output = open(pickle_path, 'wb')
+            pickle.dump(pickle_id_dict, event_trigger_output)
+            event_trigger_output.close()
diff --git a/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/test_event_trigger_delete.py b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/test_event_trigger_delete.py
new file mode 100644
index 0000000..8081e52
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/test_event_trigger_delete.py
@@ -0,0 +1,61 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+
+
+class EventTriggerDeleteTestCase(LoginTestCase):
+    """ This class will delete added event trigger under database node. """
+
+    priority = 42
+
+    scenarios = [
+        # Fetching default URL for event trigger  node.
+        ('Fetch Event Trigger Node URL',
+         dict(url='/browser/event_trigger/obj/'))
+        ]
+
+    def runTest(self):
+        """ This function will delete event trigger under database node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        event_trigger_id = all_id["etid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Fetch added event trigger node.
+            response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                       str(server_id) + '/' + str(db_id) +
+                                       '/' + str(event_trigger_id),
+                                       content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            if len(respdata) == 0:
+                raise Exception("No event trigger(s) to delete.")
+
+            del_response = self.tester.delete(self.url + str(srv_grp) + '/' +
+                                              str(server_id) + '/' +
+                                              str(db_id) + '/' +
+                                              str(event_trigger_id),
+                                              follow_redirects=True)
+
+            del_respdata = json.loads(del_response.data.decode())
+
+            self.assertTrue(del_respdata['success'], 1)
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/test_event_trigger_get.py b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/test_event_trigger_get.py
new file mode 100644
index 0000000..92b417b
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/test_event_trigger_get.py
@@ -0,0 +1,47 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+
+
+class EventTriggerGetTestCase(LoginTestCase):
+    """ This class will fetch added event trigger under schema node. """
+
+    priority = 40
+
+    scenarios = [
+        # Fetching default URL for event trigger  node.
+        ('Fetch Event Trigger Node URL',
+         dict(url='/browser/event_trigger/obj/'))
+        ]
+
+    def runTest(self):
+        """ This function will fetch event trigger under database node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        event_trigger_id = all_id["etid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                       str(server_id) + '/' + str(db_id) +
+                                       '/' + str(event_trigger_id),
+                                       content_type='html/json')
+
+            self.assertEquals(response.status_code, 200)
+
diff --git a/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/test_event_trigger_put.py b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/test_event_trigger_put.py
new file mode 100644
index 0000000..2cfd04c
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/tests/test_event_trigger_put.py
@@ -0,0 +1,66 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+
+
+class EventTriggerPutTestCase(LoginTestCase):
+    """ This class will update added event trigger under schema node. """
+
+    priority = 41
+
+    scenarios = [
+        # Fetching default URL for event trigger  node.
+        ('Fetch Event Trigger Node URL',
+         dict(url='/browser/event_trigger/obj/'))
+        ]
+
+    def runTest(self):
+        """ This function will update event trigger under database node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        event_trigger_id = all_id["etid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Fetch added event trigger node.
+            response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                       str(server_id) + '/' + str(db_id) +
+                                       '/' + str(event_trigger_id),
+                                       content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            if len(respdata) == 0:
+                raise Exception("No event trigger(s) to update.")
+
+            data = \
+                {
+                    "comment": config_data['test_event_trigger_update_data']
+                                          ['test_comment'],
+                    "id": event_trigger_id
+                }
+
+            put_response = self.tester.put(self.url + str(srv_grp) + '/' +
+                                           str(server_id) + '/' + str(db_id) +
+                                           '/' + str(event_trigger_id),
+                                           data=json.dumps(data),
+                                           follow_redirects=True)
+
+            self.assertEquals(put_response.status_code, 200)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/__init__.py
new file mode 100644
index 0000000..025b57e
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/__init__.py
@@ -0,0 +1,16 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from pgadmin.utils.route import BaseTestGenerator
+
+
+class ExtensionGeneratorTestCase(BaseTestGenerator):
+
+    def runTest(self):
+        return []
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/test_extension_add.py b/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/test_extension_add.py
new file mode 100644
index 0000000..11c61c2
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/test_extension_add.py
@@ -0,0 +1,74 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data, pickle_path
+from pgadmin.browser.tests.test_login import LoginTestCase
+import json
+import pickle
+import os
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+
+
+class ExtensionsAddTestCase(LoginTestCase):
+    """ This class will add new extension under extension node. """
+    priority = 33
+
+    scenarios = [
+        # Fetching default URL for extension node.
+        ('Check Extension Node', dict(url='/browser/extension/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will add extension under 1st server of tree node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            data =\
+                {
+                    "name": config_data['test_extension_credentials']
+                                              ['test_name'],
+                    "relocatable": config_data['test_extension_credentials']
+                                           ['test_relocate'],
+                    "schema": config_data['test_extension_credentials']
+                                       ['test_schema'],
+                    "version": config_data['test_extension_credentials']
+                                         ['test_version']
+
+                }
+
+            response = self.tester.post(self.url + str(srv_grp) + '/' +
+                                        str(server_id) + '/' + str(db_id) + '/',
+                                        data=json.dumps(data),
+                                        content_type='html/json')
+
+            self.assertTrue(response.status_code, 200)
+
+            respdata = json.loads(response.data.decode())
+
+            extension_id = respdata['node']['_id']
+
+            if os.path.isfile(pickle_path):
+                exst_server_id = open(pickle_path, 'rb')
+                all_id = pickle.load(exst_server_id)
+                pickle_id_dict = all_id
+
+            pickle_id_dict["eid"].append(extension_id)
+
+            extension_output = open(pickle_path, 'wb')
+            pickle.dump(pickle_id_dict, extension_output)
+            extension_output.close()
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/test_extension_delete.py b/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/test_extension_delete.py
new file mode 100644
index 0000000..a775c8e
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/test_extension_delete.py
@@ -0,0 +1,60 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+import json
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+
+
+class ExtensionDeleteTestCase(LoginTestCase):
+    """ This class will delete extension node added under database node. """
+
+    priority = 96
+
+    scenarios = [
+        # Fetching default URL for extension node.
+        ('Check Cast Node', dict(url='/browser/extension/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will delete added extension under database node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        extension_id = all_id["eid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Fetch added extension node.
+            response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                       str(server_id) + '/' +
+                                       str(db_id) + '/' + str(extension_id),
+                                       content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            if len(respdata) == 0:
+                raise Exception("No extension(s) to delete.")
+
+            del_response = self.tester.delete(self.url + str(srv_grp) + '/' +
+                                              str(server_id) + '/' +
+                                              str(db_id) + '/' +
+                                              str(extension_id),
+                                              follow_redirects=True)
+
+            del_respdata = json.loads(del_response.data.decode())
+
+            self.assertTrue(del_respdata['success'], 1)
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/test_extension_get.py b/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/test_extension_get.py
new file mode 100644
index 0000000..0fba2c7
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/test_extension_get.py
@@ -0,0 +1,45 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+
+
+class ExtensionGetTestCase(LoginTestCase):
+    """ This class will fetch the extension node added under database. """
+
+    priority = 34 #24
+
+    scenarios = [
+        # Fetching default URL for extension node.
+        ('Check extension Node', dict(url='/browser/extension/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will fetch added extension under database node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        extension_id = all_id["eid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                       str(server_id) + '/' + str(db_id) +
+                                       '/' + str(extension_id),
+                                       content_type='html/json')
+
+            self.assertEquals(response.status_code, 200)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/test_extension_put.py b/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/test_extension_put.py
new file mode 100644
index 0000000..5645af3
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/extensions/tests/test_extension_put.py
@@ -0,0 +1,67 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+import json
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+
+
+class ExtensionPutTestCase(LoginTestCase):
+    """
+    This class will update extension node present on the object browser's
+    tree node by response code.
+    """
+    priority = 35
+
+    scenarios = [
+        # Fetching default URL for extension node.
+        ('Check extension Node', dict(url='/browser/extension/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will update extension node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        extension_id = all_id["eid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Fetch added extension node.
+            response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                       str(server_id) + '/' + str(db_id) +
+                                       '/' + str(extension_id),
+                                       content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            if len(respdata) == 0:
+                raise Exception("No extension(s) to update.")
+
+            data = \
+                {
+                    "id": extension_id,
+                    "schema": config_data["test_extension_update_data"]
+                                         ["test_schema"]
+                }
+
+            put_response = self.tester.put(self.url + str(srv_grp) + '/' +
+                                           str(server_id) + '/' + str(db_id) +
+                                           '/' + str(extension_id),
+                                           data=json.dumps(data),
+                                           follow_redirects=True)
+
+            self.assertEquals(put_response.status_code, 200)
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/__init__.py
new file mode 100644
index 0000000..f5a240e
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/__init__.py
@@ -0,0 +1,16 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from pgadmin.utils.route import BaseTestGenerator
+
+
+class LanguageTestGenerator(BaseTestGenerator):
+
+   def generate_tests(self):
+       return []
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/tests/test_language_get.py b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/test_language_get.py
new file mode 100644
index 0000000..14ec42d
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/test_language_get.py
@@ -0,0 +1,47 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_nodes import test_getnodes
+from regression.test_utils import get_ids
+
+
+class LanguageGetTestCase(LoginTestCase):
+    """
+    This class will fetch default language node available under database node.
+    """
+    priority = 31
+
+    scenarios = [
+        # Fetching default URL for language node.
+        ('Check language Node', dict(url='/browser/language/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will fetch default language node present under
+        database. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        lang_id = all_id["lid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                       str(server_id) + '/' +
+                                       str(db_id) + '/' + str(lang_id),
+                                       content_type='html/json')
+
+            self.assertEquals(response.status_code, 200)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/tests/test_language_put.py b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/test_language_put.py
new file mode 100644
index 0000000..63fab63
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/test_language_put.py
@@ -0,0 +1,64 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+import json
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+
+
+class LanguageUpdateTestCase(LoginTestCase):
+    """ This class will update available language node under database node. """
+
+    priority = 32
+
+    scenarios = [
+        # Fetching default URL for cast node.
+        ('Check Language Node URL', dict(url='/browser/language/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will update language node's comments field. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        lang_id = all_id["lid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Fetch available language node.
+            response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                       str(server_id) + '/' + str(db_id) +
+                                       '/' + str(lang_id),
+                                       content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            if len(respdata) == 0:
+                raise Exception("No language(s) to update.")
+
+            data = {
+                "description": config_data["test_language_update_data"]
+                                   ["test_comment"],
+                "id": lang_id
+               }
+
+            put_response = self.tester.put(self.url + str(srv_grp) + '/' +
+                                           str(server_id) + '/' + str(db_id) +
+                                           '/' + str(lang_id),
+                                           data=json.dumps(data),
+                                           follow_redirects=True)
+
+            self.assertEquals(put_response.status_code, 200)
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/__init__.py
new file mode 100644
index 0000000..ba78cb1
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/__init__.py
@@ -0,0 +1,16 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+from pgadmin.utils.route import BaseTestGenerator
+
+
+class CollationTestGenerator(BaseTestGenerator):
+
+   def generate_tests(self):
+       return []
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/test_collation_add.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/test_collation_add.py
new file mode 100644
index 0000000..4dcc565
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/test_collation_add.py
@@ -0,0 +1,80 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data, pickle_path
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+import pickle
+import os
+
+
+class CollationAddTestCase(LoginTestCase):
+    """ This class will add new collation under schema node. """
+
+    priority = 48
+
+    scenarios = [
+        # Fetching default URL for collation node.
+        ('Default Node URL', dict(url='/browser/collation/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will add collation under schema node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        schema_id = all_id["scid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Fetch added schema node.
+            response = self.tester.get('/browser/schema/obj/' + str(srv_grp) +
+                                       '/' + str(server_id) + '/' +
+                                       str(db_id) + '/' + str(schema_id),
+                                       content_type='html/json')
+
+            data = \
+                {
+                    "copy_collation": config_data['test_collation_credentials']
+                                                 ['test_copy_collation'],
+                    "name": config_data['test_collation_credentials']
+                                       ['test_name'],
+                    "owner": config_data['test_collation_credentials']
+                                        ['test_owner'],
+                    "schema": config_data['test_collation_credentials']
+                                         ['test_schema']
+                }
+
+            response = self.tester.post(self.url + str(srv_grp) + '/' +
+                                        str(server_id) + '/' + str(db_id) +
+                                        '/' + str(schema_id) + '/',
+                                        data=json.dumps(data),
+                                        content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            collation_id = respdata['node']['_id']
+
+            if os.path.isfile(pickle_path):
+                exst_server_id = open(pickle_path, 'rb')
+                all_id = pickle.load(exst_server_id)
+                pickle_id_dict = all_id
+
+            pickle_id_dict["coid"].append(collation_id)
+
+            collation_output = open(pickle_path, 'wb')
+            pickle.dump(pickle_id_dict, collation_output)
+            collation_output.close()
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/test_collation_delete.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/test_collation_delete.py
new file mode 100644
index 0000000..9187c5a
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/test_collation_delete.py
@@ -0,0 +1,73 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+
+
+class CollationDeleteTestCase(LoginTestCase):
+    """ This class will delete added collation under schema node. """
+
+    priority = 51
+
+    scenarios = [
+        # Fetching default URL for collation node.
+        ('Fetch collation Node URL', dict(url='/browser/collation/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will delete collation under schema node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        schema_id = all_id["scid"][0]
+        collation_id = all_id["coid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Fetch added schema node.
+            response = self.tester.get('/browser/schema/obj/'
+                                       '{0}/{1}/{2}/{3}'.format
+                                       (srv_grp, server_id, db_id, schema_id),
+                                       content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            if len(respdata) != 0:
+
+                get_response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                               str(server_id) + '/' +
+                                               str(db_id) + '/' +
+                                               str(schema_id) + '/' +
+                                               str(collation_id),
+                                               content_type='html/json')
+
+                get_respdata = json.loads(get_response.data.decode())
+
+                if len(get_respdata) == 0:
+                        raise Exception("No collation node to delete.")
+
+                del_response = self.tester.delete(self.url + str(srv_grp) +
+                                                  '/' + str(server_id) + '/' +
+                                                  str(db_id) + '/' +
+                                                  str(schema_id) + '/' +
+                                                  str(collation_id),
+                                                  follow_redirects=True)
+
+                del_respdata = json.loads(del_response.data.decode())
+
+                self.assertTrue(del_respdata['success'], 1)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/test_collation_get.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/test_collation_get.py
new file mode 100644
index 0000000..4c95915
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/test_collation_get.py
@@ -0,0 +1,59 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+
+
+class CollationGetTestCase(LoginTestCase):
+    """ This class will fetch new collation under schema node. """
+
+    priority = 49
+
+    scenarios = [
+        # Fetching default URL for collation node.
+        ('Fecth collation Node URL', dict(url='/browser/collation/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will fetch collation under schema node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        schema_id = all_id["scid"][0]
+        collation_id = all_id["coid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Fetch added schema node.
+            response = self.tester.get('/browser/schema/obj/'
+                                       '{0}/{1}/{2}/{3}'.format
+                                       (srv_grp, server_id, db_id, schema_id),
+                                       content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            if len(respdata) != 0:
+
+                get_response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                               str(server_id) + '/' +
+                                               str(db_id) + '/' +
+                                               str(schema_id) + '/' +
+                                               str(collation_id),
+                                               content_type='html/json')
+
+                self.assertEquals(get_response.status_code, 200)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/test_collation_put.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/test_collation_put.py
new file mode 100644
index 0000000..069d22e
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/tests/test_collation_put.py
@@ -0,0 +1,79 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+
+
+class CollationPutTestCase(LoginTestCase):
+    """ This class will update added collation under schema node. """
+
+    priority = 50
+
+    scenarios = [
+        # Fetching default URL for collation node.
+        ('Fetch collation Node URL', dict(url='/browser/collation/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will update collation under schema node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        schema_id = all_id["scid"][0]
+        collation_id = all_id["coid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Fetch added schema node.
+            response = self.tester.get('/browser/schema/obj/'
+                                       '{0}/{1}/{2}/{3}'.format
+                                       (srv_grp, server_id, db_id, schema_id),
+                                       content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            if len(respdata) != 0:
+
+                get_response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                               str(server_id) + '/' +
+                                               str(db_id) + '/' +
+                                               str(schema_id) + '/' +
+                                               str(collation_id),
+                                               content_type='html/json')
+
+                get_respdata = json.loads(get_response.data.decode())
+
+                if len(get_respdata) == 0:
+                        raise Exception("No collation node to update.")
+
+                data = \
+                    {
+                      "description": config_data['test_collation_update_data']
+                                                ['test_comment'],
+                      "id": collation_id,
+                    }
+
+                put_response = self.tester.put(self.url + str(srv_grp) + '/' +
+                                               str(server_id) + '/' +
+                                               str(db_id) + '/' +
+                                               str(schema_id) + '/' +
+                                               str(collation_id),
+                                               data=json.dumps(data),
+                                               follow_redirects=True)
+
+                self.assertEquals(put_response.status_code, 200)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/__init__.py
new file mode 100644
index 0000000..7dca204
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/__init__.py
@@ -0,0 +1,16 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+from pgadmin.utils.route import BaseTestGenerator
+
+
+class DomainTestGenerator(BaseTestGenerator):
+
+   def generate_tests(self):
+       return []
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/test_domain_add.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/test_domain_add.py
new file mode 100644
index 0000000..60518e6
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/test_domain_add.py
@@ -0,0 +1,96 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data, pickle_path
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+import pickle
+import os
+
+
+class DomainAddTestCase(LoginTestCase):
+    """ This class will add new domain under schema node. """
+
+    priority = 52
+
+    scenarios = [
+        # Fetching default URL for domain node.
+        ('Fecth domain Node URL', dict(url='/browser/domain/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will add domain under schema node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        schema_id = all_id["scid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Fetch added schema node.
+            response = self.tester.get('/browser/schema/obj/'
+                                       '{0}/{1}/{2}/{3}'.format
+                                       (srv_grp, server_id, db_id, schema_id),
+                                       content_type='html/json')
+
+            data = \
+                {
+                    "basensp": config_data['test_domain_data']
+                                          ['test_schema'],
+                    "basetype": config_data['test_domain_data']
+                                           ['test_basetype'],
+                    "collname": config_data['test_domain_data']
+                                           ['test_collation'],
+                    "constraints": config_data['test_domain_data']
+                                              ['test_constraints'],
+                    "is_tlength": config_data['test_domain_data']
+                                             ['test_lenght'],
+                    "max_val": config_data['test_domain_data']
+                                          ['test_max_value'],
+                    "min_val": config_data['test_domain_data']
+                                          ['test_min_value'],
+                    "name": config_data['test_domain_data']
+                                       ['test_name'],
+                    "owner": config_data['test_domain_data']
+                                        ['test_owner'],
+                    "seclabels": config_data['test_domain_data']
+                                            ['test_security'],
+                    "typdefault": config_data['test_domain_data']
+                                             ['test_defalt_type'],
+                    "typlen": config_data['test_domain_data']
+                                         ['test_type_len'],
+                }
+
+            response = self.tester.post(self.url + str(srv_grp) + '/' +
+                                        str(server_id) + '/' + str(db_id) +
+                                        '/' + str(schema_id) + '/',
+                                        data=json.dumps(data),
+                                        content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            domain_id = respdata['node']['_id']
+
+            if os.path.isfile(pickle_path):
+                exst_server_id = open(pickle_path, 'rb')
+                all_id = pickle.load(exst_server_id)
+                pickle_id_dict = all_id
+
+            pickle_id_dict["doid"].append(domain_id)
+
+            domain_output = open(pickle_path, 'wb')
+            pickle.dump(pickle_id_dict, domain_output)
+            domain_output.close()
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/test_domain_delete.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/test_domain_delete.py
new file mode 100644
index 0000000..906ee45
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/test_domain_delete.py
@@ -0,0 +1,72 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+
+
+class DomainDeleteTestCase(LoginTestCase):
+    """ This class will delete new domain under schema node. """
+
+    priority = 55
+
+    scenarios = [
+        # Fetching default URL for domain node.
+        ('Fecth domain Node URL', dict(url='/browser/domain/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will delete domain under schema node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        schema_id = all_id["scid"][0]
+        domain_id= all_id["doid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Fetch added schema node.
+            response = self.tester.get('/browser/schema/obj/'
+                                       '{0}/{1}/{2}/{3}'.format
+                                       (srv_grp, server_id, db_id, schema_id),
+                                       content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            if len(respdata) != 0:
+                get_response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                               str(server_id) + '/' +
+                                               str(db_id) + '/' +
+                                               str(schema_id) + '/' +
+                                               str(domain_id),
+                                               content_type='html/json')
+
+                get_respdata = json.loads(get_response.data.decode())
+
+                if len(get_respdata) == 0:
+                        raise Exception("No domain node to delete.")
+
+                del_response = self.tester.delete(self.url + str(srv_grp) +
+                                                  '/' + str(server_id) + '/' +
+                                                  str(db_id) + '/' +
+                                                  str(schema_id) + '/' +
+                                                  str(domain_id),
+                                                  follow_redirects=True)
+
+                del_respdata = json.loads(del_response.data.decode())
+
+                self.assertTrue(del_respdata['success'], 1)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/test_domain_get.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/test_domain_get.py
new file mode 100644
index 0000000..cc0fe5c
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/test_domain_get.py
@@ -0,0 +1,59 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+
+
+class DomainGetTestCase(LoginTestCase):
+    """ This class will fetch new collation under schema node. """
+
+    priority = 53
+
+    scenarios = [
+        # Fetching default URL for domain node.
+        ('Fetch domain Node URL', dict(url='/browser/domain/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will add domain under schema node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        schema_id = all_id["scid"][0]
+        domain_id= all_id["doid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Fetch added schema node.
+            response = self.tester.get('/browser/schema/obj/'
+                                       '{0}/{1}/{2}/{3}'.format
+                                       (srv_grp, server_id, db_id, schema_id),
+                                       content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            if len(respdata) != 0:
+
+                get_response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                               str(server_id) + '/' +
+                                               str(db_id) + '/' +
+                                               str(schema_id) + '/' +
+                                               str(domain_id),
+                                               content_type='html/json')
+
+                self.assertEquals(response.status_code, 200)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/test_domain_put.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/test_domain_put.py
new file mode 100644
index 0000000..b2ab972
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/tests/test_domain_put.py
@@ -0,0 +1,79 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+
+
+class DomainPutTestCase(LoginTestCase):
+    """ This class will fetch new collation under schema node. """
+
+    priority = 54
+
+    scenarios = [
+        # Fetching default URL for domain node.
+        ('Fecth domain Node URL', dict(url='/browser/domain/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will update domain under schema node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        schema_id = all_id["scid"][0]
+        domain_id= all_id["doid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Fetch added schema node.
+            response = self.tester.get('/browser/schema/obj/'
+                                       '{0}/{1}/{2}/{3}'.format
+                                       (srv_grp, server_id, db_id, schema_id),
+                                       content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            if len(respdata) != 0:
+
+                get_response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                               str(server_id) + '/' +
+                                               str(db_id) + '/' +
+                                               str(schema_id) + '/' +
+                                               str(domain_id),
+                                               content_type='html/json')
+
+                get_respdata = json.loads(get_response.data.decode())
+
+                if len(get_respdata) == 0:
+                        raise Exception("No domain node to update.")
+
+                data = \
+                    {
+                          "description": config_data['test_domain_update_data']
+                                                    ['test_comment'],
+                          "id": domain_id,
+                    }
+
+            put_response = self.tester.put(self.url + str(srv_grp) + '/' +
+                                           str(server_id) + '/' +
+                                           str(db_id) + '/' +
+                                           str(schema_id) + '/' +
+                                           str(domain_id),
+                                           data=json.dumps(data),
+                                           follow_redirects=True)
+
+            self.assertEquals(put_response.status_code, 200)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/__init__.py
new file mode 100644
index 0000000..03bf3f6
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/__init__.py
@@ -0,0 +1,16 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+from pgadmin.utils.route import BaseTestGenerator
+
+
+class TriggerFunctionTestGenerator(BaseTestGenerator):
+
+   def generate_tests(self):
+       return []
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_trigger_func_add.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_trigger_func_add.py
new file mode 100644
index 0000000..365248b
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_trigger_func_add.py
@@ -0,0 +1,109 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data, pickle_path
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+import pickle
+import os
+
+
+class TriggerFuncAddTestCase(LoginTestCase):
+    """ This class will add new trigger function under schema node. """
+
+    priority = 36
+
+    scenarios = [
+        # Fetching default URL for trigger function node.
+        ('Fecth Trigger Function Node URL',
+         dict(url='/browser/trigger_function/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will add trigger function under schema node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        schema_id = all_id["scid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            response = self.tester.get('/browser/schema/obj/' + str(srv_grp) +
+                                       '/' + str(server_id) + '/' +
+                                       str(db_id) + '/' + str(schema_id),
+                                       content_type='html/json')
+
+            data = \
+                {
+                    "acl": config_data
+                    ['test_trigger_function_credentials']['test_acl'],
+                    "arguments": config_data
+                    ['test_trigger_function_credentials']['test_args'],
+                    "funcowner": config_data
+                    ['test_trigger_function_credentials']['test_fun_owner'],
+                    "lanname": config_data
+                    ['test_trigger_function_credentials']['test_language'],
+                    "name": config_data
+                    ['test_trigger_function_credentials']['test_name'],
+                    "options": config_data
+                    ['test_trigger_function_credentials']['test_options'],
+                    "probin": config_data
+                    ['test_trigger_function_credentials']['test_probe'],
+                    "proleakproof": config_data
+                    ['test_trigger_function_credentials']['test_leak_proof'],
+                    "pronamespace": config_data
+                    ['test_trigger_function_credentials']['test_namespace'],
+                    "prorettypename": config_data
+                    ['test_trigger_function_credentials']['test_type'],
+                    "prosecdef": config_data
+                    ['test_trigger_function_credentials']['test_sec_def'],
+                    "prosrc": config_data
+                    ['test_trigger_function_credentials']['test_code'],
+                    "provolatile": config_data
+                    ['test_trigger_function_credentials']['test_volitile'],
+                    "seclabels": config_data
+                    ['test_trigger_function_credentials']['test_sec_label'],
+                    "variables": config_data
+                    ['test_trigger_function_credentials']['test_Variable']
+                }
+
+            if schema_id:
+                data['pronamespace'] = schema_id
+            else:
+                schema_id = data['pronamespace']
+
+            response = self.tester.post(self.url + str(srv_grp) + '/' +
+                                        str(server_id) + '/' + str(db_id) +
+                                        '/' + str(schema_id) + '/',
+                                        data=json.dumps(data),
+                                        content_type='html/json')
+
+            self.assertTrue(response.status_code, 200)
+
+            respdata = json.loads(response.data.decode())
+
+            trg_func__id = respdata['node']['_id']
+
+            if os.path.isfile(pickle_path):
+                exst_server_id = open(pickle_path, 'rb')
+                all_id = pickle.load(exst_server_id)
+                pickle_id_dict = all_id
+
+            pickle_id_dict["tfnid"].append(trg_func__id)
+
+            extension_output = open(pickle_path, 'wb')
+            pickle.dump(pickle_id_dict, extension_output)
+            extension_output.close()
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_trigger_func_delete.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_trigger_func_delete.py
new file mode 100644
index 0000000..a64cd5f
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_trigger_func_delete.py
@@ -0,0 +1,74 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+
+
+class TriggerFuncDeleteTestCase(LoginTestCase):
+    """ This class will add new trigger function under schema node. """
+
+    priority = 43
+
+    scenarios = [
+        # Fetching default URL for trigger function node.
+        ('Fetch Trigger Function Node URL',
+         dict(url='/browser/trigger_function/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will delete trigger function under database node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        schema_id = all_id["scid"][0]
+        trg_func__id = all_id["tfnid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Fetch added schema node.
+            response = self.tester.get('/browser/schema/obj/'
+                                       '{0}/{1}/{2}/{3}'.format
+                                       (srv_grp, server_id, db_id, schema_id),
+                                       content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            if len(respdata) != 0:
+                get_response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                               str(server_id) + '/' +
+                                               str(db_id) + '/' +
+                                               str(schema_id) + '/' +
+                                               str(trg_func__id),
+                                               content_type='html/json')
+
+                respdata = json.loads(get_response.data.decode())
+
+                if len(respdata) == 0:
+                    raise Exception("No trigger function(s) to delete.")
+
+                del_response = self.tester.delete(self.url + str(srv_grp) +
+                                                  '/' +
+                                                  str(server_id) + '/' +
+                                                  str(db_id) + '/' +
+                                                  str(schema_id) + '/' +
+                                                  str(trg_func__id),
+                                                  follow_redirects=True)
+
+                del_respdata = json.loads(del_response.data.decode())
+
+                self.assertTrue(del_respdata['success'], 1)
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_trigger_func_get.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_trigger_func_get.py
new file mode 100644
index 0000000..ab05fe0
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_trigger_func_get.py
@@ -0,0 +1,61 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+
+
+class TriggerFuncGetTestCase(LoginTestCase):
+    """ This class will fetch added trigger function under schema node. """
+
+    priority = 37
+
+    scenarios = [
+        # Fetching default URL for trigger function node.
+        ('Fetch Trigger Function Node URL',
+         dict(url='/browser/trigger_function/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will fetch trigger function under database node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        schema_id = all_id["scid"][0]
+        trg_func__id = all_id["tfnid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Get schema id
+            response = self.tester.get('/browser/schema/obj/'
+                                       '{0}/{1}/{2}/{3}'.format
+                                       (srv_grp, server_id, db_id, schema_id),
+                                       content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            if len(respdata) != 0:
+
+                get_response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                               str(server_id) + '/' +
+                                               str(db_id) + '/' +
+                                               str(schema_id) + '/' +
+                                               str(trg_func__id),
+                                               content_type='html/json')
+
+                self.assertEquals(response.status_code, 200)
+
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_trigger_func_put.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_trigger_func_put.py
new file mode 100644
index 0000000..619f4ea
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_trigger_func_put.py
@@ -0,0 +1,80 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+
+
+class TriggerFuncPutTestCase(LoginTestCase):
+    """ This class will update new trigger function under schema node. """
+
+    priority = 38
+
+    scenarios = [
+        # Fetching default URL for trigger function node.
+        ('Fecth Trigger Function Node URL',
+         dict(url='/browser/trigger_function/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will update trigger function under database node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        schema_id = all_id["scid"][0]
+        trg_func__id = all_id["tfnid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Get schema id
+            response = self.tester.get('/browser/schema/obj/'
+                                       '{0}/{1}/{2}/{3}'.format
+                                       (srv_grp, server_id, db_id, schema_id),
+                                       content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            if len(respdata) != 0:
+                get_response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                               str(server_id) + '/' +
+                                               str(db_id) + '/' +
+                                               str(schema_id) + '/' +
+                                               str(trg_func__id),
+                                               content_type='html/json')
+
+                respdata = json.loads(get_response.data.decode())
+
+                if len(respdata) == 0:
+                    raise Exception("No trigger function(s) to update.")
+
+                data = \
+                    {
+                        "description": config_data
+                        ['test_trigger_func_update_data']['test_comment'],
+                        "id": trg_func__id
+                    }
+
+                put_response = self.tester.put(self.url + str(srv_grp) + '/' +
+                                               str(server_id) + '/' +
+                                               str(db_id) + '/' +
+                                               str(schema_id) + '/' +
+                                               str(trg_func__id),
+                                               data=json.dumps(data),
+                                               follow_redirects=True)
+
+                self.assertEquals(put_response.status_code, 200)
+
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/__init__.py
new file mode 100644
index 0000000..ff11e3e
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/__init__.py
@@ -0,0 +1,16 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+from pgadmin.utils.route import BaseTestGenerator
+
+
+class SequenceTestGenerator(BaseTestGenerator):
+
+   def generate_tests(self):
+       return []
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/test_sequence_add.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/test_sequence_add.py
new file mode 100644
index 0000000..b833972
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/test_sequence_add.py
@@ -0,0 +1,94 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data, pickle_path
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+import pickle
+import os
+
+
+class SequenceAddTestCase(LoginTestCase):
+    """ This class will add new collation under schema node. """
+
+    priority = 56
+
+    scenarios = [
+        # Fetching default URL for sequence node.
+        ('Fetch sequence Node URL', dict(url='/browser/sequence/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will add sequence under schema node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        schema_id = all_id["scid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Get schema id
+            response = self.tester.get('/browser/schema/obj/'
+                                       '{0}/{1}/{2}/{3}'.format
+                                       (srv_grp, server_id, db_id, schema_id),
+                                       content_type='html/json')
+
+            data = \
+                {
+                    "cache": config_data['test_sequence_credentials']
+                                        ['test_cache'],
+                    "cycled": config_data['test_sequence_credentials']
+                                         ['test_cycled'],
+                    "increment": config_data['test_sequence_credentials']
+                                            ['test_increment'],
+                    "maximum": config_data['test_sequence_credentials']
+                                          ['test_max_value'],
+                    "minimum": config_data['test_sequence_credentials']
+                                          ['test_min_value'],
+                    "name": config_data['test_sequence_credentials']
+                                       ['test_name'],
+                    "relacl": config_data['test_sequence_credentials']
+                                         ['test_acl'],
+                    "schema": config_data['test_sequence_credentials']
+                                         ['test_schema_name'],
+                    "securities": config_data['test_sequence_credentials']
+                                             ['test_security'],
+                    "seqowner": config_data['test_sequence_credentials']
+                                           ['test_owner'],
+                    "start": config_data['test_sequence_credentials']
+                                        ['test_start_val']
+                }
+
+            response = self.tester.post(self.url + str(srv_grp) + '/' +
+                                        str(server_id) + '/' + str(db_id) +
+                                        '/' + str(schema_id) + '/',
+                                        data=json.dumps(data),
+                                        content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            sequence_id = respdata['node']['_id']
+
+            if os.path.isfile(pickle_path):
+                exst_server_id = open(pickle_path, 'rb')
+                all_id = pickle.load(exst_server_id)
+                pickle_id_dict = all_id
+
+            pickle_id_dict["seid"].append(sequence_id)
+
+            sequence_output = open(pickle_path, 'wb')
+            pickle.dump(pickle_id_dict, sequence_output)
+            sequence_output.close()
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/test_sequence_delete.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/test_sequence_delete.py
new file mode 100644
index 0000000..3f952e4
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/test_sequence_delete.py
@@ -0,0 +1,73 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+
+
+class SequenceDeleteTestCase(LoginTestCase):
+    """ This class will delete added sequence node under schema node. """
+
+    priority = 59
+
+    scenarios = [
+        # Fetching default URL for sequence node.
+        ('Fecth sequence Node URL', dict(url='/browser/sequence/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will delete added sequence under schema node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        schema_id = all_id["scid"][0]
+        sequence_id = all_id["seid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Fetch added schema node.
+            response = self.tester.get('/browser/schema/obj/'
+                                       '{0}/{1}/{2}/{3}'.format
+                                       (srv_grp, server_id, db_id, schema_id),
+                                       content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            if len(respdata) != 0:
+
+                get_response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                               str(server_id) + '/' +
+                                               str(db_id) + '/' +
+                                               str(schema_id) + '/' +
+                                               str(sequence_id),
+                                               content_type='html/json')
+
+                get_respdata = json.loads(get_response.data.decode())
+
+                if len(get_respdata) == 0:
+                    raise Exception("No sequence node to delete.")
+
+                del_response = self.tester.delete(self.url + str(srv_grp) +
+                                                  '/' + str(server_id) + '/' +
+                                                  str(db_id) + '/' +
+                                                  str(schema_id) + '/' +
+                                                  str(sequence_id),
+                                                  follow_redirects=True)
+
+                del_respdata = json.loads(del_response.data.decode())
+
+                self.assertTrue(del_respdata['success'], 1)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/test_sequence_get.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/test_sequence_get.py
new file mode 100644
index 0000000..f3b6f10
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/test_sequence_get.py
@@ -0,0 +1,59 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+
+
+class SequenceGetTestCase(LoginTestCase):
+    """ This class will add new collation under schema node. """
+
+    priority = 57
+
+    scenarios = [
+        # Fetching default URL for sequence node.
+        ('Fetch sequence Node URL', dict(url='/browser/sequence/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will fetch added sequence under schema node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        schema_id = all_id["scid"][0]
+        sequence_id = all_id["seid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Fetch added schema node.
+            response = self.tester.get('/browser/schema/obj/'
+                                       '{0}/{1}/{2}/{3}'.format
+                                       (srv_grp, server_id, db_id, schema_id),
+                                       content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            if len(respdata) != 0:
+
+                get_response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                               str(server_id) + '/' +
+                                               str(db_id) + '/' +
+                                               str(schema_id) + '/' +
+                                               str(sequence_id),
+                                               content_type='html/json')
+
+                self.assertEquals(response.status_code, 200)
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/test_sequence_put.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/test_sequence_put.py
new file mode 100644
index 0000000..035315f
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/tests/test_sequence_put.py
@@ -0,0 +1,80 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+
+
+class SequenceUpdateTestCase(LoginTestCase):
+    """ This class will update new sequence node under schema node. """
+
+    priority = 58
+
+    scenarios = [
+        # Fetching default URL for sequence node.
+        ('Fetch sequence Node URL', dict(url='/browser/sequence/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will update added sequence under schema node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        schema_id = all_id["scid"][0]
+        sequence_id = all_id["seid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Fetch added schema node.
+            response = self.tester.get('/browser/schema/obj/'
+                                       '{0}/{1}/{2}/{3}'.format
+                                       (srv_grp, server_id, db_id, schema_id),
+                                       content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            if len(respdata) != 0:
+
+                get_response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                               str(server_id) + '/' +
+                                               str(db_id) + '/' +
+                                               str(schema_id) + '/' +
+                                               str(sequence_id),
+                                               content_type='html/json')
+
+                get_respdata = json.loads(get_response.data.decode())
+
+                if len(get_respdata) == 0:
+                    raise Exception("No sequence node to update.")
+
+                data =\
+                    {
+                        "comment": config_data['test_sequnce_update_data']
+                                              ['test_comment'],
+                        "id": sequence_id
+                    }
+
+                put_response = self.tester.put(self.url + str(srv_grp) + '/' +
+                                               str(server_id) + '/' +
+                                               str(db_id) + '/' +
+                                               str(schema_id) + '/' +
+                                               str(sequence_id),
+                                               data=json.dumps(data),
+                                               follow_redirects=True)
+
+                self.assertEquals(put_response.status_code, 200)
+
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/__init__.py
new file mode 100644
index 0000000..2450edb
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/__init__.py
@@ -0,0 +1,16 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+from pgadmin.utils.route import BaseTestGenerator
+
+
+class TableTestGenerator(BaseTestGenerator):
+
+   def generate_tests(self):
+       return []
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_table_add.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_table_add.py
new file mode 100644
index 0000000..42011c2
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_table_add.py
@@ -0,0 +1,113 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data, pickle_path
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+import pickle
+import os
+
+
+class TableAddTestCase(LoginTestCase):
+    """ This class will add new collation under schema node. """
+
+    priority = 60
+
+    scenarios = [
+        # Fetching default URL for table node.
+        ('Fecth table Node URL', dict(url='/browser/table/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will add table under schema node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        schema_id = all_id["scid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Fetch added schema node.
+            response = self.tester.get('/browser/schema/obj/'
+                                       '{0}/{1}/{2}/{3}'.format
+                                       (srv_grp, server_id, db_id, schema_id),
+                                       content_type='html/json')
+            data = \
+                {
+                    "check_constraint": config_data
+                    ['test_table_credentials']['test_constraint'],
+                    "coll_inherits": config_data
+                    ['test_table_credentials']['test_col_inherit'],
+                    "columns": config_data
+                    ['test_table_credentials']['test_columns'],
+                    "exclude_constraint": config_data
+                    ['test_table_credentials']['test_has_constraint'],
+                    "fillfactor": config_data
+                    ['test_table_credentials']['test_fillfactor'],
+                    "foreign_key": config_data
+                    ['test_table_credentials']['test_has_FK'],
+                    "hastoasttable": config_data
+                    ['test_table_credentials']['test_has_toast_tbl'],
+                    "like_constraints": config_data
+                    ['test_table_credentials']['test_like_constraint'],
+                    "like_default_value": config_data
+                    ['test_table_credentials']['test_like_default_value'],
+                    "like_relation": config_data
+                    ['test_table_credentials']['test_like_relation'],
+                    "name": config_data
+                    ['test_table_credentials']['test_name'],
+                    "primary_key": config_data
+                    ['test_table_credentials']['test_PK'],
+                    "relacl": config_data
+                    ['test_table_credentials']['test_acl'],
+                    "relhasoids": config_data
+                    ['test_table_credentials']['test_has_oid'],
+                    "relowner": config_data
+                    ['test_table_credentials']['test_owner'],
+                    "schema": config_data
+                    ['test_table_credentials']['test_schema'],
+                    "seclabels": config_data
+                    ['test_table_credentials']['test_sec_acl'],
+                    "spcname": config_data
+                    ['test_table_credentials']['test_tbscp'],
+                    "unique_constraint": config_data
+                    ['test_table_credentials']['test_unique_constraint'],
+                    "vacuum_table": config_data
+                    ['test_table_credentials']['test_vacuum_tbl'],
+                    "vacuum_toast": config_data
+                    ['test_table_credentials']['test_vacuum_toast']
+                }
+
+            response = self.tester.post(self.url + str(srv_grp) + '/' +
+                                        str(server_id) + '/' + str(db_id) +
+                                        '/' + str(schema_id) + '/',
+                                        data=json.dumps(data),
+                                        content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            table_id = respdata['node']['_id']
+
+            if os.path.isfile(pickle_path):
+                exst_server_id = open(pickle_path, 'rb')
+                all_id = pickle.load(exst_server_id)
+                pickle_id_dict = all_id
+
+            pickle_id_dict["tid"].append(table_id)
+
+            table_output = open(pickle_path, 'wb')
+            pickle.dump(pickle_id_dict, table_output)
+            table_output.close()
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_table_delete.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_table_delete.py
new file mode 100644
index 0000000..6481815
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_table_delete.py
@@ -0,0 +1,73 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+
+
+class TableDeleteTestCase(LoginTestCase):
+    """ This class will delete new table under schema node. """
+
+    priority = 97
+
+    scenarios = [
+        # Fetching default URL for table node.
+        ('Fetch table Node URL', dict(url='/browser/table/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will delete added table under schema node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        schema_id = all_id["scid"][0]
+        table_id = all_id["tid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Fetch added schema node.
+            response = self.tester.get('/browser/schema/obj/'
+                                       '{0}/{1}/{2}/{3}'.format
+                                       (srv_grp, server_id, db_id, schema_id),
+                                       content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            if len(respdata) != 0:
+
+                get_response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                               str(server_id) + '/' +
+                                               str(db_id) + '/' +
+                                               str(schema_id) + '/' +
+                                               str(table_id),
+                                               content_type='html/json')
+
+                get_respdata = json.loads(get_response.data.decode())
+
+                if len(get_respdata) == 0:
+                    raise Exception("No table(s) to delete.")
+
+                del_response = self.tester.delete(self.url + str(srv_grp) +
+                                                  '/' + str(server_id) + '/' +
+                                                  str(db_id) + '/' +
+                                                  str(schema_id) + '/' +
+                                                  str(table_id),
+                                                  follow_redirects=True)
+
+                del_respdata = json.loads(del_response.data.decode())
+
+                self.assertTrue(del_respdata['success'], 1)
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_table_get.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_table_get.py
new file mode 100644
index 0000000..a98a3d3
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_table_get.py
@@ -0,0 +1,59 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+
+
+class TableGetTestCase(LoginTestCase):
+    """ This class will add new collation under schema node. """
+
+    priority = 61
+
+    scenarios = [
+        # Fetching default URL for table node.
+        ('Fecth table Node URL', dict(url='/browser/table/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will fetch added table under schema node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        schema_id = all_id["scid"][0]
+        table_id = all_id["tid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Get schema id
+            response = self.tester.get('/browser/schema/obj/'
+                                       '{0}/{1}/{2}/{3}'.format
+                                       (srv_grp, server_id, db_id, schema_id),
+                                       content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            if len(respdata) != 0:
+
+                get_response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                               str(server_id) + '/' +
+                                               str(db_id) + '/' +
+                                               str(schema_id) + '/' +
+                                               str(table_id),
+                                               content_type='html/json')
+
+                self.assertEquals(response.status_code, 200)
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_table_put.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_table_put.py
new file mode 100644
index 0000000..0ce42bc
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_table_put.py
@@ -0,0 +1,79 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+
+
+class TableUpdateTestCase(LoginTestCase):
+    """ This class will add new collation under schema node. """
+
+    priority = 62
+
+    scenarios = [
+        # Fetching default URL for table node.
+        ('Fecth table Node URL', dict(url='/browser/table/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will fetch added table under schema node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        schema_id = all_id["scid"][0]
+        table_id = all_id["tid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Fetch added schema node.
+            response = self.tester.get('/browser/schema/obj/'
+                                       '{0}/{1}/{2}/{3}'.format
+                                       (srv_grp, server_id, db_id, schema_id),
+                                       content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            if len(respdata) != 0:
+
+                get_response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                               str(server_id) + '/' +
+                                               str(db_id) + '/' +
+                                               str(schema_id) + '/' +
+                                               str(table_id),
+                                               content_type='html/json')
+
+                get_respdata = json.loads(get_response.data.decode())
+
+                if len(get_respdata) == 0:
+                    raise Exception("No table(s) to update.")
+
+                data =\
+                    {
+                        "description": config_data['test_table_update_data']
+                                              ['test_comment'],
+                        "id": table_id
+                    }
+
+                put_response = self.tester.put(self.url + str(srv_grp) + '/' +
+                                               str(server_id) + '/' +
+                                               str(db_id) + '/' +
+                                               str(schema_id) + '/' +
+                                               str(table_id),
+                                               data=json.dumps(data),
+                                               follow_redirects=True)
+
+                self.assertEquals(put_response.status_code, 200)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/__init__.py
new file mode 100644
index 0000000..3403f4f
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/__init__.py
@@ -0,0 +1,16 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+from pgadmin.utils.route import BaseTestGenerator
+
+
+class SchemaTestGenerator(BaseTestGenerator):
+
+   def generate_tests(self):
+       return []
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_add.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_add.py
new file mode 100644
index 0000000..ecc0952
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_add.py
@@ -0,0 +1,87 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data, pickle_path
+from pgadmin.browser.tests.test_login import LoginTestCase
+import json
+import pickle
+import os
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+
+
+class SchemaAddTestCase(LoginTestCase):
+    """ This class will add new schema under database node. """
+
+    priority = 23
+
+    scenarios = [
+        # Fetching default URL for schema node.
+        ('Check Schema Node URL', dict(url='/browser/schema/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will add schema under database node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            data =\
+            {
+                "deffuncacl": config_data['test_schema_credentials']
+                                              ['test_func_acl'],
+                "defseqacl": config_data['test_schema_credentials']
+                                              ['test_seq_acl'],
+                "deftblacl": config_data['test_schema_credentials']
+                                              ['test_tbl_acl'],
+                "deftypeacl": config_data['test_schema_credentials']
+                                              ['test_type_acl'],
+                "name": config_data['test_schema_credentials']
+                                              ['test_name'],
+                "namespaceowner": config_data['test_schema_credentials']
+                                              ['test_owner'],
+                "nspacl": config_data['test_schema_credentials']
+                                              ['test_privilege'],
+                "seclabels": config_data['test_schema_credentials']
+                                              ['test_sec_label']
+            }
+
+            response = self.tester.post(self.url + str(srv_grp) + '/' +
+                                        str(server_id) + '/' + str(db_id) +
+                                        '/', data=json.dumps(data),
+                                        content_type='html/json')
+
+            self.assertTrue(response.status_code, 200)
+
+            respdata = json.loads(response.data.decode())
+
+            schema_id = respdata['node']['_id']
+
+            if os.path.isfile(pickle_path):
+                exst_server_id = open(pickle_path, 'rb')
+                all_id = pickle.load(exst_server_id)
+                pickle_id_dict = all_id
+
+            pickle_id_dict["scid"].append(schema_id)
+
+            schema_output = open(pickle_path, 'wb')
+            pickle.dump(pickle_id_dict, schema_output)
+            schema_output.close()
+
+
+
+
+
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_delete.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_delete.py
new file mode 100644
index 0000000..e1649dc
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_delete.py
@@ -0,0 +1,60 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+
+
+class SchemaDeleteTestCase(LoginTestCase):
+    """ This class will add new schema under database node. """
+
+    priority = 98
+
+    scenarios = [
+        # Fetching default URL for extension node.
+        ('Check Schema Node URL', dict(url='/browser/schema/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will delete schema under database node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        schema_id = all_id["scid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Fetch added schema node.
+            response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                       str(server_id) + '/' + str(db_id) +
+                                       '/' + str(schema_id),
+                                       content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            if len(respdata) == 0:
+                raise Exception("No schema(s) to delete.")
+
+            del_response = self.tester.delete(self.url + str(srv_grp) + '/' +
+                                              str(server_id) + '/' +
+                                              str(db_id) + '/' +
+                                              str(schema_id),
+                                              follow_redirects=True)
+
+            del_respdata = json.loads(del_response.data.decode())
+
+            self.assertTrue(del_respdata['success'], 1)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_get.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_get.py
new file mode 100644
index 0000000..a8a9b93
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_get.py
@@ -0,0 +1,44 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+
+
+class SchemaGetTestCase(LoginTestCase):
+    """ This class will add new schema under database node. """
+
+    priority = 24 #34
+
+    scenarios = [
+        # Fetching default URL for extension node.
+        ('Check Schema Node URL', dict(url='/browser/schema/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will fetch schema under database node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        schema_id = all_id["scid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+            response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                       str(server_id) + '/' + str(db_id) +
+                                       '/' + str(schema_id),
+                                       content_type='html/json')
+
+            self.assertEquals(response.status_code, 200)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_put.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_put.py
new file mode 100644
index 0000000..67e778e
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tests/test_schema_put.py
@@ -0,0 +1,71 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+
+
+class SchemaPutTestCase(LoginTestCase):
+    """ This class will add new schema under database node. """
+
+    priority = 25
+
+    scenarios = [
+        # Fetching default URL for schema node.
+        ('Check Schema Node URL', dict(url='/browser/schema/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will update schema under database node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        schema_id = all_id["scid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Fetch added schema node.
+            response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                       str(server_id) + '/' + str(db_id) +
+                                       '/' + str(schema_id),
+                                       content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            if len(respdata) == 0:
+                raise Exception("No schema(s) to update.")
+
+            data =\
+                {
+                    "deffuncacl": config_data["test_schema_update_data"]
+                                             ["test_func_acl"],
+                    "defseqacl": config_data["test_schema_update_data"]
+                                            ["test_seq_acl"],
+                    "deftblacl": config_data["test_schema_update_data"]
+                                            ["test_tbl_acl"],
+                    "id": schema_id
+                }
+
+            put_response = self.tester.put(self.url + str(srv_grp) + '/' +
+                                           str(server_id) + '/' + str(db_id) +
+                                           '/' + str(schema_id),
+                                           data=json.dumps(data),
+                                           follow_redirects=True)
+
+            self.assertEquals(put_response.status_code, 200)
+            respdata = json.loads(put_response.data.decode())
+            self.assertTrue(respdata['success'], 1)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/__init__.py
new file mode 100644
index 0000000..138c249
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/__init__.py
@@ -0,0 +1,16 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+from pgadmin.utils.route import BaseTestGenerator
+
+
+class ViewTestGenerator(BaseTestGenerator):
+
+   def generate_tests(self):
+       return []
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_mview_add.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_mview_add.py
new file mode 100644
index 0000000..f0ccde1
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_mview_add.py
@@ -0,0 +1,99 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data, pickle_path
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+import pickle
+import os
+
+
+class MViewAddTestCase(LoginTestCase):
+    """ This class will add new view under schema node. """
+
+    priority = 67
+
+    scenarios = [
+        # Fetching default URL for materialized view node.
+        ('Fecth materialized view Node URL', dict(url='/browser/mview/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will add materialized view under schema node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        schema_id = all_id["scid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Get schema id
+            response = self.tester.get('/browser/schema/obj/'
+                                       '{0}/{1}/{2}/{3}'.format
+                                       (srv_grp, server_id, db_id, schema_id),
+                                       content_type='html/json')
+
+            data = \
+                {
+                    "datacl": config_data
+                    ['test_mview_credentials']['test_acl'],
+                    "definition": config_data
+                    ['test_mview_credentials']['test_definition'],
+                    "fillfactor": config_data
+                    ['test_mview_credentials']['test_fillfactor'],
+                    "name": config_data
+                    ['test_mview_credentials']['test_name'],
+                    "owner": config_data
+                    ['test_mview_credentials']['test_owner'],
+                    "schema": config_data
+                    ['test_mview_credentials']['test_schema_name'],
+                    "seclabels": config_data
+                    ['test_mview_credentials']['test_sec_label'],
+                    "spcname": config_data
+                    ['test_mview_credentials']['test_tbscp'],
+                    "toast_autovacuum": config_data
+                    ['test_mview_credentials']['test_toast_autovacuum'],
+                    "toast_autovacuum_enabled": config_data
+                    ['test_mview_credentials']['test_toast_autovacuum_enabled'],
+                    "vacuum_table": config_data
+                    ['test_mview_credentials']['test_vacuum_tbl'],
+                    "vacuum_toast": config_data
+                    ['test_mview_credentials']['test_vacuum_toast'],
+                    "with_data": config_data
+                    ['test_mview_credentials']['test_with_data']
+
+                }
+
+            response = self.tester.post(self.url + str(srv_grp) + '/' +
+                                        str(server_id) + '/' + str(db_id) +
+                                        '/' + str(schema_id) + '/',
+                                        data=json.dumps(data),
+                                        content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            mview_id = respdata['node']['_id']
+
+            if os.path.isfile(pickle_path):
+                exst_server_id = open(pickle_path, 'rb')
+                all_id = pickle.load(exst_server_id)
+                pickle_id_dict = all_id
+
+            pickle_id_dict["mvid"].append(mview_id)
+
+            mview_output = open(pickle_path, 'wb')
+            pickle.dump(pickle_id_dict, mview_output)
+            mview_output.close()
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_mview_delete.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_mview_delete.py
new file mode 100644
index 0000000..bb64dc0
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_mview_delete.py
@@ -0,0 +1,75 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+import pickle
+import os
+
+
+class MViewDeleteTestCase(LoginTestCase):
+    """ This class will delete new materialized view under schema node. """
+
+    priority = 70
+
+    scenarios = [
+        # Fetching default URL for materialized view node.
+        ('Fetch materialized view Node URL', dict(url='/browser/mview/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will add materialized view under schema node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        schema_id = all_id["scid"][0]
+        mview_id = all_id["mvid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Fetch added schema node.
+            response = self.tester.get('/browser/schema/obj/'
+                                       '{0}/{1}/{2}/{3}'.format
+                                       (srv_grp, server_id, db_id, schema_id),
+                                       content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            if len(respdata) != 0:
+
+                get_response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                               str(server_id) + '/' +
+                                               str(db_id) + '/' +
+                                               str(schema_id) + '/' +
+                                               str(mview_id),
+                                               content_type='html/json')
+
+                get_respdata = json.loads(get_response.data.decode())
+
+                if len(get_respdata) == 0:
+                    raise Exception("No materialized view to delete.")
+
+                del_response = self.tester.delete(self.url + str(srv_grp) +
+                                                  '/' + str(server_id) + '/' +
+                                                  str(db_id) + '/' +
+                                                  str(schema_id) + '/' +
+                                                  str(mview_id),
+                                                  follow_redirects=True)
+
+                del_respdata = json.loads(del_response.data.decode())
+
+                self.assertTrue(del_respdata['success'], 1)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_mview_get.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_mview_get.py
new file mode 100644
index 0000000..432e9a9
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_mview_get.py
@@ -0,0 +1,60 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+
+
+class MViewGetTestCase(LoginTestCase):
+    """ This class will fetch new materialized view under schema node. """
+
+    priority = 68
+
+    scenarios = [
+        # Fetching default URL for materialized view node.
+        ('Fetch materialized view Node URL', dict(url='/browser/mview/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will add materialized view under schema node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        schema_id = all_id["scid"][0]
+        mview_id = all_id["mvid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Fetch added schema node.
+            response = self.tester.get('/browser/schema/obj'
+                                       '/{0}/{1}/{2}/{3}'.format
+                                       (srv_grp, server_id, db_id, schema_id),
+                                       content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            if len(respdata) != 0:
+
+                get_response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                               str(server_id) + '/' +
+                                               str(db_id) + '/' +
+                                               str(schema_id) + '/' +
+                                               str(mview_id),
+                                               content_type='html/json')
+
+                self.assertEquals(response.status_code, 200)
+
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_mview_put.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_mview_put.py
new file mode 100644
index 0000000..36ccebe
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_mview_put.py
@@ -0,0 +1,80 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+
+
+class MViewPutTestCase(LoginTestCase):
+    """ This class will fetch new materialized view under schema node. """
+
+    priority = 69
+
+    scenarios = [
+        # Fetching default URL for materialized view node.
+        ('Fetch materialized view Node URL', dict(url='/browser/mview/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will add materialized view under schema node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        schema_id = all_id["scid"][0]
+        mview_id = all_id["mvid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Fetch added schema node.
+            response = self.tester.get('/browser/schema/obj/'
+                                       '{0}/{1}/{2}/{3}'.format
+                                       (srv_grp, server_id, db_id, schema_id),
+                                       content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            if len(respdata) != 0:
+
+                get_response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                               str(server_id) + '/' +
+                                               str(db_id) + '/' +
+                                               str(schema_id) + '/' +
+                                               str(mview_id),
+                                               content_type='html/json')
+
+                get_respdata = json.loads(get_response.data.decode())
+
+                if len(get_respdata) == 0:
+                    raise Exception("No materialized view to update.")
+
+                data =\
+                    {
+                        "comment": config_data['test_view_update_data']
+                                              ['test_comment'],
+                        "id": mview_id
+                    }
+
+                put_response = self.tester.put(self.url + str(srv_grp) + '/' +
+                                               str(server_id) + '/' +
+                                               str(db_id) + '/' +
+                                               str(schema_id) + '/' +
+                                               str(mview_id),
+                                               data=json.dumps(data),
+                                               follow_redirects=True)
+
+                self.assertEquals(put_response.status_code, 200)
+
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_view_add.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_view_add.py
new file mode 100644
index 0000000..0cbde19
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_view_add.py
@@ -0,0 +1,86 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data, pickle_path
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+import pickle
+import os
+
+
+class ViewAddTestCase(LoginTestCase):
+    """ This class will add new view under schema node. """
+
+    priority = 63
+
+    scenarios = [
+        # Fetching default URL for view node.
+        ('Fetch view Node URL', dict(url='/browser/view/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will add view under schema node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        schema_id = all_id["scid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Fetch added schema node.
+            response = self.tester.get('/browser/schema/obj/'
+                                       '{0}/{1}/{2}/{3}'.format
+                                       (srv_grp, server_id, db_id, schema_id),
+                                       content_type='html/json')
+
+            data = \
+                {
+                    "check_option": config_data
+                    ['test_view_credentials']['test_check_options'],
+                    "datacl": config_data
+                    ['test_view_credentials']['test_acl'],
+                    "definition": config_data
+                    ['test_view_credentials']['test_definition'],
+                    "name": config_data
+                    ['test_view_credentials']['test_name'],
+                    "owner": config_data
+                    ['test_view_credentials']['test_owner'],
+                    "schema": config_data
+                    ['test_view_credentials']['test_schema_name'],
+                    "seclabels": config_data
+                    ['test_view_credentials']['test_sec_label']
+                }
+
+            response = self.tester.post(self.url + str(srv_grp) + '/' +
+                                        str(server_id) + '/' + str(db_id) +
+                                        '/' + str(schema_id) + '/',
+                                        data=json.dumps(data),
+                                        content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            view_id = respdata['node']['_id']
+
+            if os.path.isfile(pickle_path):
+                exst_server_id = open(pickle_path, 'rb')
+                all_id = pickle.load(exst_server_id)
+                pickle_id_dict = all_id
+
+            pickle_id_dict["vid"].append(view_id)
+
+            view_output = open(pickle_path, 'wb')
+            pickle.dump(pickle_id_dict, view_output)
+            view_output.close()
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_view_delete.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_view_delete.py
new file mode 100644
index 0000000..d552ece
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_view_delete.py
@@ -0,0 +1,75 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+
+
+class ViewDeleteTestCase(LoginTestCase):
+    """ This class will update new view under schema node. """
+
+    priority = 66
+
+    scenarios = [
+        # Fetching default URL for view node.
+        ('Fetch view Node URL', dict(url='/browser/view/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will delete view under schema node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        schema_id = all_id["scid"][0]
+        view_id = all_id["vid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Fetch added schema node.
+            response = self.tester.get('/browser/schema/obj/'
+                                       '{0}/{1}/{2}/{3}'.format
+                                       (srv_grp, server_id, db_id, schema_id),
+                                       content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            if len(respdata) != 0:
+
+                get_response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                               str(server_id) + '/' +
+                                               str(db_id) + '/' +
+                                               str(schema_id) + '/' +
+                                               str(view_id),
+                                               content_type='html/json')
+
+                get_respdata = json.loads(get_response.data.decode())
+
+                if len(get_respdata) == 0:
+                    raise Exception("No view to delete.")
+
+                del_response = self.tester.delete(self.url + str(srv_grp) +
+                                                  '/' + str(server_id) + '/' +
+                                                  str(db_id) + '/' +
+                                                  str(schema_id) + '/' +
+                                                  str(view_id),
+                                                  follow_redirects=True)
+
+                del_respdata = json.loads(del_response.data.decode())
+
+                self.assertTrue(del_respdata['success'], 1)
+
+
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_view_get.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_view_get.py
new file mode 100644
index 0000000..611018f
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_view_get.py
@@ -0,0 +1,61 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+import pickle
+import os
+
+
+class ViewGetTestCase(LoginTestCase):
+    """ This class will fetch new view under schema node. """
+
+    priority = 64
+
+    scenarios = [
+        # Fetching default URL for view node.
+        ('Fetch view Node URL', dict(url='/browser/view/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will add view under schema node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        schema_id = all_id["scid"][0]
+        view_id = all_id["vid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Fetch added schema node.
+            response = self.tester.get('/browser/schema/obj/'
+                                       '{0}/{1}/{2}/{3}'.format
+                                       (srv_grp, server_id, db_id, schema_id),
+                                       content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            if len(respdata) != 0:
+
+                get_response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                               str(server_id) + '/' +
+                                               str(db_id) + '/' +
+                                               str(schema_id) + '/' +
+                                               str(view_id),
+                                               content_type='html/json')
+
+                self.assertEquals(response.status_code, 200)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_view_put.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_view_put.py
new file mode 100644
index 0000000..8c9421c
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/tests/test_view_put.py
@@ -0,0 +1,79 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+import json
+
+
+class ViewPutTestCase(LoginTestCase):
+    """ This class will update new view under schema node. """
+
+    priority = 65
+
+    scenarios = [
+        # Fetching default URL for view node.
+        ('Fecth view Node URL', dict(url='/browser/view/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will update view under schema node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        schema_id = all_id["scid"][0]
+        view_id = all_id["vid"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            # Fetch added schema node.
+            response = self.tester.get('/browser/schema/obj/'
+                                       '{0}/{1}/{2}/{3}'.format
+                                       (srv_grp, server_id, db_id, schema_id),
+                                       content_type='html/json')
+
+            respdata = json.loads(response.data.decode())
+
+            if len(respdata) != 0:
+
+                get_response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                               str(server_id) + '/' +
+                                               str(db_id) + '/' +
+                                               str(schema_id) + '/' +
+                                               str(view_id),
+                                               content_type='html/json')
+
+                get_respdata = json.loads(get_response.data.decode())
+
+                if len(get_respdata) == 0:
+                    raise Exception("No view to update.")
+
+                data =\
+                    {
+                        "comment": config_data['test_view_update_data']
+                                              ['test_comment'],
+                        "id": view_id
+                    }
+
+                put_response = self.tester.put(self.url + str(srv_grp) + '/' +
+                                               str(server_id) + '/' +
+                                               str(db_id) + '/' +
+                                               str(schema_id) + '/' +
+                                               str(view_id),
+                                               data=json.dumps(data),
+                                               follow_redirects=True)
+
+                self.assertEquals(put_response.status_code, 200)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/tests/__init__.py
new file mode 100644
index 0000000..60ed4c7
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/tests/__init__.py
@@ -0,0 +1,16 @@
+# ##########################################################################
+#
+# #pgAdmin 4 - PostgreSQL Tools
+#
+# #Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# #This software is released under the PostgreSQL Licence
+#
+# ##########################################################################
+
+from pgadmin.utils.route import BaseTestGenerator
+
+
+class DatabaseGenerateTestCase(BaseTestGenerator):
+
+    def runTest(self):
+        return
diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_add.py b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_add.py
new file mode 100644
index 0000000..02dda68
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_add.py
@@ -0,0 +1,99 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data, pickle_path
+from pgadmin.browser.tests.test_login import LoginTestCase
+import json, pickle, uuid, os
+from regression.test_utils import get_ids
+
+
+class DatabaseAddTestCase(LoginTestCase):
+    """
+    This class will check server group node present on the object browser's
+    tree node by response code.
+    """
+    priority = 8
+
+    scenarios = [
+        # Fetching default URL for database node.
+        ('Check Databases Node URL', dict(url='/browser/database/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will add database under 1st server of tree node. """
+
+        srv_id = get_ids()
+
+        server_id = srv_id["sid"][0]
+        srv_grp = config_data['test_server_group']
+
+        response = self.tester.post('browser/server/connect/' + str(srv_grp) +
+                                    '/' + server_id,
+                                    data=dict(
+                                    password=config_data
+                                    ['test_server_credentials'][0]
+                                    ['test_db_password']),
+                                    follow_redirects=True)
+
+        self.assertEquals(response.status_code, 200)
+
+        srv_connect = json.loads(response.data.decode())
+
+        if srv_connect['data']['connected']:
+
+            data = {
+                     "datacl": config_data['test_add_database_data']
+                                          ['test_privileges_acl'],
+                     "datconnlimit": config_data['test_add_database_data']
+                                                ['test_conn_limit'],
+                     "datowner": config_data['test_add_database_data']
+                                            ['test_owner'],
+                     "deffuncacl": config_data['test_add_database_data']
+                                              ['test_fun_acl'],
+                     "defseqacl": config_data['test_add_database_data']
+                                             ['test_seq_acl'],
+                     "deftblacl": config_data['test_add_database_data']
+                                             ['test_tbl_acl'],
+                     "deftypeacl": config_data['test_add_database_data']
+                                              ['test_type_acl'],
+                     "encoding": config_data['test_add_database_data']
+                                            ['test_encoding'],
+                     "name": str(uuid.uuid4())[1:8],
+                     "privileges": config_data['test_add_database_data']
+                                              ['test_privileges'],
+                     "securities": config_data['test_add_database_data']
+                                              ['test_securities'],
+                     "variables": config_data['test_add_database_data']
+                                             ['test_variables']
+                    }
+
+            db_response = self.tester.post(self.url + str(srv_grp) + "/" +
+                                           server_id + "/",
+                                           data=json.dumps(data),
+                                           content_type='html/json')
+
+            self.assertTrue(db_response.status_code, 200)
+
+            respdata = json.loads(db_response.data.decode())
+
+            db_id = respdata['node']['_id']
+
+            if os.path.isfile(pickle_path):
+
+                exst_server_id = open(pickle_path, 'rb')
+
+                tol_server_id = pickle.load(exst_server_id)
+                pickle_id_dict = tol_server_id
+
+                pickle_id_dict["did"].append(db_id)
+
+                db_output = open(pickle_path, 'wb')
+                pickle.dump(pickle_id_dict, db_output)
+                db_output.close()
+
diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_delete.py b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_delete.py
new file mode 100644
index 0000000..e008df3
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_delete.py
@@ -0,0 +1,47 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+import json
+from regression.test_nodes import test_getnodes
+from regression.test_utils import get_ids
+
+
+class DatabaseDeleteTestCase(LoginTestCase):
+    """ This class will delete the database under last added server. """
+
+    priority = 99
+
+    scenarios = [
+        # Fetching default URL for database node.
+        ('Check Databases Node URL', dict(url='/browser/database/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will delete the database."""
+
+        all_id = get_ids()
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if len(db_con) == 0:
+            raise Exception("No database(s) to delete.")
+
+        response = self.tester.delete(self.url + str(srv_grp) + '/' +
+                                      str(server_id) + '/' + str(db_id),
+                                      follow_redirects=True)
+
+        respdata = json.loads(response.data.decode())
+
+        self.assertTrue(respdata['success'], 1)
+
diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_get.py b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_get.py
new file mode 100644
index 0000000..bbbd7ec
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_get.py
@@ -0,0 +1,43 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.test_nodes import test_getnodes
+from regression.test_utils import get_ids
+
+
+class DatabasesGetTestCase(LoginTestCase):
+    """
+    This class will fetch database added under last added server.
+    """
+    priority = 9
+
+    scenarios = [
+        # Fetching default URL for database node.
+        ('Check Databases Node URL', dict(url='/browser/database/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will fetch added database. """
+
+        all_id = get_ids()
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con["info"] == "Database Connected.":
+
+            response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                       str(server_id) + '/' + str(db_id),
+                                       follow_redirects=True)
+
+            self.assertEquals(response.status_code, 200)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_put.py b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_put.py
new file mode 100644
index 0000000..809a51e
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/tests/test_db_put.py
@@ -0,0 +1,50 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+import json
+from regression.test_utils import get_ids
+from regression.test_nodes import test_getnodes
+
+
+class DatabasesUpdateTestCase(LoginTestCase):
+    """
+    This class will update the database under last added server.
+    """
+    priority = 10
+
+    scenarios = [
+        # Fetching default URL for database node.
+        ('Check Databases Node', dict(url='/browser/database/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will update the comments field of database."""
+
+        all_id = get_ids()
+        server_id = all_id["sid"][0]
+        db_id = all_id["did"][0]
+        srv_grp = config_data['test_server_group']
+
+        db_con = test_getnodes(node=self)
+
+        if db_con['data']["connected"]:
+
+            data = {"comments": config_data["test_db_update_data"]
+                                           ["test_comment"],
+                    "id": db_id
+                   }
+
+            put_response = self.tester.put(self.url + str(srv_grp) + '/' +
+                                           str(server_id) + '/' + str(db_id),
+                                           data=json.dumps(data),
+                                           follow_redirects=True)
+
+            self.assertEquals(put_response.status_code, 200)
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/roles/tests/__init__.py
new file mode 100644
index 0000000..4a11bf8
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/__init__.py
@@ -0,0 +1,16 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from pgadmin.utils.route import BaseTestGenerator
+
+
+class RoleGeneratorTestCase(BaseTestGenerator):
+
+    def runTest(self):
+        return
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/test_role_add.py b/web/pgadmin/browser/server_groups/servers/roles/tests/test_role_add.py
new file mode 100644
index 0000000..66de64c
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/test_role_add.py
@@ -0,0 +1,89 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data, pickle_path
+from pgadmin.browser.tests.test_login import LoginTestCase
+import json, pickle, uuid, os
+from regression.test_utils import get_ids
+
+
+class LoginRoleAddTestCase(LoginTestCase):
+    """ This class will add login role node under added server. """
+
+    priority = 12
+
+    scenarios = [
+        # Fetching default URL for roles node.
+        ('Check Role Node', dict(url='/browser/role/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will add new role under 1st server of tree node. """
+
+        srv_id = get_ids()
+
+        server_id = srv_id["sid"][0]
+
+        srv_grp = config_data['test_server_group']
+
+        response = self.tester.post('browser/server/connect/' + str(srv_grp) +
+                                    '/' + server_id,
+                                    data=dict(
+                                    password=config_data
+                                    ['test_server_credentials'][0]
+                                    ['test_db_password']),
+                                    follow_redirects=True)
+
+        srv_connect = json.loads(response.data.decode())
+
+        if srv_connect['data']['connected']:
+
+            data = {
+                    "rolcanlogin": config_data['test_lr_credentials']
+                                              ['test_can_login'],
+                    "rolconnlimit": config_data['test_lr_credentials']
+                                               ['test_conn_limit'],
+                    "rolcreaterole": config_data['test_lr_credentials']
+                                                ['test_create_role'],
+                    "rolinherit": config_data['test_lr_credentials']
+                                             ['test_role_inherit'],
+                    "rolmembership": config_data['test_lr_credentials']
+                                                ['test_role_membership'],
+                    "rolname": str(uuid.uuid4())[1:8],
+                    "rolpassword": config_data['test_lr_credentials']
+                                              ['test_lr_password'],
+                    "rolvaliduntil": config_data['test_lr_credentials']
+                                                ['test_lr_validity'],
+                    "seclabels": config_data['test_lr_credentials']
+                                            ['test_sec_lable'],
+                    "variables": config_data['test_lr_credentials']
+                                            ['test_variable']
+                   }
+
+            response = self.tester.post(self.url + str(srv_grp) + '/'
+                                       + server_id + '/', data=json.dumps(data),
+                                        content_type='html/json')
+
+            self.assertTrue(response.status_code, 200)
+
+            respdata = json.loads(response.data.decode())
+
+            lr_id = respdata['node']['_id']
+
+            if os.path.isfile(pickle_path):
+                exst_server_id = open(pickle_path, 'rb')
+                all_id = pickle.load(exst_server_id)
+                pickle_id_dict = all_id
+
+            pickle_id_dict["lrid"].append(lr_id)
+
+            lr_output = open(pickle_path, 'wb')
+            pickle.dump(pickle_id_dict, lr_output)
+            lr_output.close()
+
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/test_role_delete.py b/web/pgadmin/browser/server_groups/servers/roles/tests/test_role_delete.py
new file mode 100644
index 0000000..445fd7c
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/test_role_delete.py
@@ -0,0 +1,47 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+import json
+from .test_role_func import test_getrole
+from regression.test_utils import get_ids
+
+
+class LoginRoleDeleteTestCase(LoginTestCase):
+    """ This class will delete added login role present under server node. """
+
+    priority = 14
+
+    scenarios = [
+        # Fetching default URL for roles node.
+        ('Check Role Node', dict(url='/browser/role/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will delete the role. """
+
+        all_id = get_ids()
+        server_id = all_id["sid"][0]
+        srv_grp = config_data['test_server_group']
+
+        respdata = test_getrole(node=self)
+
+        role_id = respdata['oid']
+
+        if len(respdata) == 0:
+            raise Exception("No roles(s) to delete!!!")
+
+        del_response = self.tester.delete(self.url + str(srv_grp) + '/' +
+                                          str(server_id) + '/' + str(role_id),
+                                          follow_redirects=True)
+
+        del_respdata = json.loads(del_response.data.decode())
+
+        self.assertTrue(del_respdata['success'], 1)
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/test_role_func.py b/web/pgadmin/browser/server_groups/servers/roles/tests/test_role_func.py
new file mode 100644
index 0000000..3e06b08
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/test_role_func.py
@@ -0,0 +1,48 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+import json
+from regression.test_utils import get_ids
+
+
+def test_getrole(node=None):
+
+    if not node:
+        return None
+
+    all_id = get_ids()
+
+    server_id = all_id["sid"][0]
+    role_id = all_id["lrid"][0]
+
+    srv_grp = config_data['test_server_group']
+
+    response = node.tester.post('browser/server/connect/{0}/{1}'.format
+                                (srv_grp, server_id),
+                                data=dict(
+                                password=config_data
+                                ['test_server_credentials'][0]
+                                ['test_db_password']),
+                                follow_redirects=True)
+
+    srv_connect = json.loads(response.data.decode())
+
+    if srv_connect['data']['connected']:
+
+        response = node.tester.get('/browser/role/obj/{0}/{1}/{2}'.format
+                                   (srv_grp, server_id, role_id),
+                                   content_type='html/json')
+
+        respdata = json.loads(response.data.decode())
+
+        return respdata
+
+
+
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/test_role_get.py b/web/pgadmin/browser/server_groups/servers/roles/tests/test_role_get.py
new file mode 100644
index 0000000..636ce1c
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/test_role_get.py
@@ -0,0 +1,56 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+import json
+from regression.utils import get_ids
+
+
+class LoginRoleGetTestCase(LoginTestCase):
+    """
+    This class will fetch login roles node present under the object browser's
+    tree node by response code.
+    """
+
+    priority = 13
+
+    scenarios = [
+        # Fetching default URL for roles node.
+        ('Check Role Node', dict(url='/browser/role/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will fetch added login role under tree node. """
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        role_id = all_id["lrid"][0]
+        srv_grp = config_data['test_server_group']
+
+        response = self.tester.post('browser/server/connect/' + str(srv_grp) +
+                                    '/' + server_id,
+                                    data=dict(
+                                    password=config_data
+                                    ['test_server_credentials'][0]
+                                    ['test_db_password']),
+                                    follow_redirects=True)
+
+        srv_connect = json.loads(response.data.decode())
+
+        if srv_connect['data']['connected']:
+
+            response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                       str(server_id) + '/' + str(role_id),
+                                       content_type='html/json')
+
+            self.assertEquals(response.status_code, 200)
+
+
diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/test_role_put.py b/web/pgadmin/browser/server_groups/servers/roles/tests/test_role_put.py
new file mode 100644
index 0000000..34879f4
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/roles/tests/test_role_put.py
@@ -0,0 +1,51 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+import json
+from .test_role_func import test_getrole
+from regression.test_utils import get_ids
+
+
+class LoginRolePutTestCase(LoginTestCase):
+    """This class update the comment field of login roles node."""
+
+    priority = 13
+
+    scenarios = [
+        # Fetching default URL for roles node.
+        ('Check Role Node', dict(url='/browser/role/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will update the role's comment field."""
+
+        all_id = get_ids()
+
+        srv_grp = config_data['test_server_group']
+
+        server_id = all_id["sid"][0]
+
+        respdata = test_getrole(node=self)
+
+        role_id = respdata['oid']
+
+        data = {
+                "description": config_data["test_lr_update_data"]
+                                          ["test_comment"],
+                "oid": role_id
+               }
+
+        put_response = self.tester.put(self.url + str(srv_grp) + '/' +
+                                       str(server_id) + '/' + str(role_id),
+                                       data=json.dumps(data),
+                                       follow_redirects=True)
+
+        self.assertEquals(put_response.status_code, 200)
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/tablespaces/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/tablespaces/tests/__init__.py
new file mode 100644
index 0000000..28fcc16
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/tablespaces/tests/__init__.py
@@ -0,0 +1,16 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from pgadmin.utils.route import BaseTestGenerator
+
+
+class TblspaceGeneratorTestCase(BaseTestGenerator):
+
+    def runTest(self):
+        return
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/tablespaces/tests/test_tbspc_add.py b/web/pgadmin/browser/server_groups/servers/tablespaces/tests/test_tbspc_add.py
new file mode 100644
index 0000000..2d1651f
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/tablespaces/tests/test_tbspc_add.py
@@ -0,0 +1,78 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data, pickle_path
+from pgadmin.browser.tests.test_login import LoginTestCase
+import json, pickle, uuid, os
+from regression.test_utils import get_ids
+
+
+class TbspcAddTestCase(LoginTestCase):
+    """ This class will add tablespace node under server. """
+    priority = 15
+
+    scenarios = [
+        # Fetching default URL for tablespace node.
+        ('Check Tablespace Node', dict(url='/browser/tablespace/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will add new tablespace under server node."""
+
+        srv_id = get_ids()
+
+        srv_grp = config_data['test_server_group']
+
+        server_id = srv_id["sid"][0]
+
+        response = self.tester.post('browser/server/connect/' + str(srv_grp) +
+                                    '/' + server_id,
+                                    data=dict(
+                                    password=config_data
+                                    ['test_server_credentials'][0]
+                                    ['test_db_password']),
+                                    follow_redirects=True)
+
+        srv_connect = json.loads(response.data.decode())
+
+        if srv_connect['data']['connected']:
+            data = \
+                {
+                    "name": str(uuid.uuid4())[1:8],
+                    "seclabels": config_data["test_tablespc_credentials"]
+                                            ["test_spc_seclable"],
+                    "spcacl": config_data["test_tablespc_credentials"]
+                                         ["test_spc_acl"],
+                    "spclocation": config_data["test_tablespc_credentials"]
+                                              ["test_spc_location"],
+                    "spcoptions": config_data["test_tablespc_credentials"]
+                                             ["test_spc_opts"],
+                    "spcuser": config_data["test_tablespc_credentials"]
+                                          ["test_spc_user"]
+                }
+#
+            response = self.tester.post(self.url + str(srv_grp) + '/'
+                                                   + server_id + '/',
+                                       data=json.dumps(data),
+                                        content_type='html/json')
+            self.assertTrue(response.status_code, 200)
+            respdata = json.loads(response.data.decode())
+            tbspc_id = respdata['node']['_id']
+
+            if os.path.isfile(pickle_path):
+                exst_ids = open(pickle_path, 'rb')
+                all_id = pickle.load(exst_ids)
+                pickle_id_dict = all_id
+
+            pickle_id_dict["tsid"].append(tbspc_id)
+
+            spc_output = open(pickle_path, 'wb')
+            pickle.dump(pickle_id_dict, spc_output)
+            spc_output.close()
+
diff --git a/web/pgadmin/browser/server_groups/servers/tablespaces/tests/test_tbspc_delete.py b/web/pgadmin/browser/server_groups/servers/tablespaces/tests/test_tbspc_delete.py
new file mode 100644
index 0000000..8674ba4
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/tablespaces/tests/test_tbspc_delete.py
@@ -0,0 +1,51 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+import json
+from regression.test_utils import get_ids
+from .test_tbspc_func import test_gettblspc
+
+class TbspcDeleteTestCase(LoginTestCase):
+    """
+    This class will delete tablespace node present under the object browser's
+    tree node by response code.
+    """
+
+    priority = 18
+
+    scenarios = [
+        # Fetching default URL for tablespace node.
+        ('Check Tablespace Node', dict(url='/browser/tablespace/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will delete the added tablespace"""
+
+        all_id = get_ids()
+
+        srv_grp = config_data['test_server_group']
+
+        server_id = all_id["sid"][0]
+
+        respdata = test_gettblspc(node=self)
+
+        tbspc_id = respdata['oid']
+
+        if len(respdata) == 0:
+            raise Exception("No tablespace(s) to delete!!!")
+
+        del_response = self.tester.delete(self.url + str(srv_grp) + '/' +
+                                          str(server_id) + '/' + str(tbspc_id),
+                                          follow_redirects=True)
+
+        del_respdata = json.loads(del_response.data.decode())
+
+        self.assertTrue(del_respdata['success'], 1)
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/tablespaces/tests/test_tbspc_func.py b/web/pgadmin/browser/server_groups/servers/tablespaces/tests/test_tbspc_func.py
new file mode 100644
index 0000000..2abcf8d
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/tablespaces/tests/test_tbspc_func.py
@@ -0,0 +1,45 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.test_utils import get_ids
+from regression.config import config_data
+import json
+
+
+def test_gettblspc(node=None):
+
+    if not node:
+        return None
+
+    all_id = get_ids()
+
+    server_id = all_id["sid"][0]
+    tbspc_id = all_id["tsid"][0]
+
+    srv_grp = config_data['test_server_group']
+
+    response = node.tester.post('browser/server/connect/{0}/{1}'.format
+                                (srv_grp, server_id),
+                                data=dict(password=config_data
+                                ['test_server_credentials'][0]
+                                ['test_db_password']), follow_redirects=True)
+
+    srv_connect = json.loads(response.data.decode())
+
+    if srv_connect['data']['connected']:
+
+        response = node.tester.get('/browser/tablespace/obj/{0}/{1}/{2}'.format
+                                   (srv_grp, server_id, tbspc_id),
+                                   content_type='html/json')
+
+        node.assertEquals(response.status_code, 200)
+
+        respdata = json.loads(response.data.decode())
+
+        return respdata
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/tablespaces/tests/test_tbspc_get.py b/web/pgadmin/browser/server_groups/servers/tablespaces/tests/test_tbspc_get.py
new file mode 100644
index 0000000..0d85f46
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/tablespaces/tests/test_tbspc_get.py
@@ -0,0 +1,57 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+import json
+from regression.test_utils import get_ids
+
+
+class TbspcGetTestCase(LoginTestCase):
+    """
+    This class will fetch added tablespace under the object browser's
+    tree node by response code.
+    """
+    priority = 16
+
+    scenarios = [
+        # Fetching default URL for tablespace node.
+        ('Check Tablespace Node', dict(url='/browser/tablespace/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will get the added tablespace."""
+
+        all_id = get_ids()
+
+        srv_grp = config_data['test_server_group']
+
+        server_id = all_id["sid"][0]
+        tbspc_id = all_id["tsid"][0]
+
+        response = self.tester.post('browser/server/connect/' + str(srv_grp) +
+                                    '/' + server_id,
+                                    data=dict(
+                                    password=config_data
+                                    ['test_server_credentials'][0]
+                                    ['test_db_password']),
+                                    follow_redirects=True)
+
+        srv_connect = json.loads(response.data.decode())
+
+        if srv_connect['data']['connected']:
+
+            response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                       str(server_id) + '/' + str(tbspc_id),
+                                       content_type='html/json')
+
+            self.assertEquals(response.status_code, 200)
+
+            respdata = json.loads(response.data.decode())
+            self.assertTrue(respdata['oid'], tbspc_id)
diff --git a/web/pgadmin/browser/server_groups/servers/tablespaces/tests/test_tbspc_put.py b/web/pgadmin/browser/server_groups/servers/tablespaces/tests/test_tbspc_put.py
new file mode 100644
index 0000000..59a38f3
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/tablespaces/tests/test_tbspc_put.py
@@ -0,0 +1,56 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+from pgadmin.browser.tests.test_login import LoginTestCase
+import json
+from .test_tbspc_func import test_gettblspc
+from regression.test_utils import get_ids
+
+
+class TbspcUpdateTestCase(LoginTestCase):
+    """
+    This class will update comment field of  added tablespace under the
+    object browser's tree node.
+    """
+
+    priority = 17
+
+    scenarios = [
+        # Fetching default URL for tablespace node.
+        ('Check Tablespace Node', dict(url='/browser/tablespace/obj/'))
+    ]
+
+    def runTest(self):
+        """ This function will update the added tablespace."""
+
+        all_id = get_ids()
+
+        server_id = all_id["sid"][0]
+        srv_grp = config_data['test_server_group']
+
+        respdata = test_gettblspc(node=self)
+
+        tbspc_id = respdata['oid']
+
+        data = \
+            {
+                "description": config_data["test_lr_update_data"]
+                               ["test_comment"],
+                "id": tbspc_id
+            }
+
+        put_response = self.tester.put(self.url + str(srv_grp) + '/' +
+                                       str(server_id) + '/' + str(tbspc_id),
+                                       data=json.dumps(data),
+                                       follow_redirects=True)
+
+        self.assertEquals(put_response.status_code, 200)
+
+
diff --git a/web/pgadmin/browser/server_groups/servers/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/tests/__init__.py
index 28cdb94..39d4823 100644
--- a/web/pgadmin/browser/server_groups/servers/tests/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/tests/__init__.py
@@ -12,4 +12,4 @@ from pgadmin.utils.route import BaseTestGenerator
 
 class ServerGenerateTestCase(BaseTestGenerator):
     def runTest(self):
-        print ("In ServerGenerateTestCase...")
+        return 
diff --git a/web/pgadmin/browser/server_groups/servers/tests/test_server_add.py b/web/pgadmin/browser/server_groups/servers/tests/test_server_add.py
index 0af13d3..74526ae 100644
--- a/web/pgadmin/browser/server_groups/servers/tests/test_server_add.py
+++ b/web/pgadmin/browser/server_groups/servers/tests/test_server_add.py
@@ -8,16 +8,14 @@
 # ##########################################################################
 
 import json
-
+import pickle
+import os
 from pgadmin.browser.tests.test_login import LoginTestCase
-from regression.config import config_data
+from regression.config import config_data, pickle_path
 
 
 class ServersAddTestCase(LoginTestCase):
-    """
-    This class will add the servers under default server group and verify with
-    server's name.
-    """
+    """ This class will add the servers under default server group. """
 
     priority = 4
 
@@ -27,10 +25,31 @@ class ServersAddTestCase(LoginTestCase):
     ]
 
     def runTest(self):
-        """
-        This function will add the server under default server group.
-        Verify the added server with response code as well as server name.
-        """
+        """ This function will add the server under default server group."""
+
+        # Storing parent id's into pickle dict
+        pickle_id_dict = {
+            "sid": [],  #server
+            "did": [],  #database
+            "lrid": [], #login role
+            "tsid": [], #tablspace
+            "cid": [],  #cast
+            "eid": [],  #extention
+            "lid": [12397], #language
+            "scid": [],     #schema
+            "tfnid": [],    #trigger function
+            "etid": [],     #event trigger
+            "coid": [],     #collation
+            "fid": [],  #FDW
+            "doid": [], #Domain
+            "seid": [],  #Sequence
+            "tid": [],   #table
+            "vid": [],  #view
+            "mvid": [],  #mview
+            "fsid": [],  #foreign server
+            "umid": [],  #User mapping
+            "foid": []  #foreign table
+        }
 
         srv_grp = config_data['test_server_group']
 
@@ -48,6 +67,17 @@ class ServersAddTestCase(LoginTestCase):
 
             response = self.tester.post(url, data=json.dumps(data),
                                         content_type='html/json')
+
             self.assertTrue(response.status_code, 200)
-            respdata = json.loads(response.data)
-            self.assertTrue(respdata['node']['label'], srv['test_name'])
+            respdata = json.loads(response.data.decode())
+
+            server_id = respdata['node']['_id']
+
+            if os.path.isfile(pickle_path):
+                exst_server_id = open(pickle_path, 'rb')
+                pickle_id_dict = pickle.load(exst_server_id)
+
+            pickle_id_dict["sid"].append(server_id)
+            output = open(pickle_path, 'wb')
+            pickle.dump(pickle_id_dict, output)
+            output.close()
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/tests/test_server_delete.py b/web/pgadmin/browser/server_groups/servers/tests/test_server_delete.py
index 329d74f..4bde3ee 100644
--- a/web/pgadmin/browser/server_groups/servers/tests/test_server_delete.py
+++ b/web/pgadmin/browser/server_groups/servers/tests/test_server_delete.py
@@ -8,16 +8,13 @@
 # ##################################################################
 
 import json
-
 from pgadmin.browser.tests.test_login import LoginTestCase
 from regression.config import config_data
 
 
-class ServersDeleteTestCase(LoginTestCase):
-    """
-    This class will check server node present on the object browser's tree node
-    by response code.
-    """
+class ServerDeleteTestCase(LoginTestCase):
+    """ This class will delete the last server present under tree node."""
+
     priority = 7
 
     scenarios = [
@@ -26,32 +23,22 @@ class ServersDeleteTestCase(LoginTestCase):
     ]
 
     def runTest(self):
-        """
-        This function will get all available servers under object browser
-        and delete the servers using server id.
-        """
+        """ This function will get all available servers under object browser
+        and delete the last server using server id."""
 
         srv_grp = config_data['test_server_group']
 
-        for srv in config_data['test_server_credentials']:
-
-            data = {"name": srv['test_name'],
-                    "host": srv['test_host'],
-                    "port": srv['test_db_port'],
-                    "db": srv['test_maintenance_db'],
-                    "username": srv['test_db_username'],
-                    "role": "",
-                    "sslmode": srv['test_sslmode']}
+        url = self.url + str(srv_grp) + "/"
 
-            url = self.url + str(srv_grp) + "/"
+        response = self.tester.get(url)
+        respdata = json.loads(response.data.decode())
 
-            response = self.tester.get(url, data=json.dumps(data),
-                                       content_type='html/json')
-            self.assertTrue(response.status_code, 200)
-            respdata = json.loads(response.data)
+        if len(respdata) == 0:
+            raise Exception("No server(s) to delete.")
 
-            for server in respdata:
-                response = self.tester.delete(url + json.dumps(server['id']))
-                self.assertTrue(response.status_code, 200)
-                respdata = json.loads(response.data)
-                self.assertTrue(respdata['success'], 1)
+        # delete last server
+        server = respdata[-1]
+        response = self.tester.delete(url + str(server['id']))
+        self.assertTrue(response.status_code, 200)
+        respdata = json.loads(response.data.decode())
+        self.assertTrue(respdata['success'], 1)
diff --git a/web/pgadmin/browser/server_groups/servers/tests/test_server_get.py b/web/pgadmin/browser/server_groups/servers/tests/test_server_get.py
index 050843e..163fef3 100644
--- a/web/pgadmin/browser/server_groups/servers/tests/test_server_get.py
+++ b/web/pgadmin/browser/server_groups/servers/tests/test_server_get.py
@@ -7,15 +7,14 @@
 #
 # ##########################################################################
 
-import json
-
 from pgadmin.browser.tests.test_login import LoginTestCase
 from regression.config import config_data
+from regression.test_utils import get_ids
 
 
 class ServersGetTestCase(LoginTestCase):
     """
-    This class will check server node present on the object browser's tree node
+    This class will fetch added servers under default server group
     by response code.
     """
 
@@ -27,23 +26,16 @@ class ServersGetTestCase(LoginTestCase):
     ]
 
     def runTest(self):
-        """
-        This function will get all available servers present under
-        object browser.
-        """
+        """ This function will fetch the added servers to object browser. """
 
+        all_id = get_ids()
+        server_id = all_id["sid"]
         srv_grp = config_data['test_server_group']
 
-        for srv in config_data['test_server_credentials']:
-            data = {"name": srv['test_name'],
-                    "host": srv['test_host'],
-                    "port": srv['test_db_port'],
-                    "db": srv['test_maintenance_db'],
-                    "username": srv['test_db_username'],
-                    "role": "",
-                    "sslmode": srv['test_sslmode']}
-
-            url = self.url + str(srv_grp) + "/"
-            response = self.tester.get(url, data=json.dumps(data),
+        for srv in server_id:
+
+            response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                       str(srv),
                                        content_type='html/json')
-            self.assertTrue(response.status_code, 200)
+
+            self.assertEquals(response.status_code, 200)
diff --git a/web/pgadmin/browser/server_groups/servers/tests/test_server_put.py b/web/pgadmin/browser/server_groups/servers/tests/test_server_put.py
index 306bb03..8c02a41 100644
--- a/web/pgadmin/browser/server_groups/servers/tests/test_server_put.py
+++ b/web/pgadmin/browser/server_groups/servers/tests/test_server_put.py
@@ -8,16 +8,13 @@
 # ##########################################################################
 
 import json
-
 from pgadmin.browser.tests.test_login import LoginTestCase
 from regression.config import config_data
+from regression.test_utils import get_ids
 
 
-class ServersUpdateTestCase(LoginTestCase):
-    """
-    This class will check server node present on the object browser's tree node
-    by response code.
-    """
+class ServerUpdateTestCase(LoginTestCase):
+    """ This class will update server's comment field. """
 
     priority = 6
 
@@ -27,39 +24,40 @@ class ServersUpdateTestCase(LoginTestCase):
     ]
 
     def runTest(self):
-        """
-        This function will edit and update the server's comment field
-        by the server id.
-        """
+        """ This function will update the server's comment field. """
 
+        all_id = get_ids()
+        server_id = all_id["sid"][0]
         srv_grp = config_data['test_server_group']
 
-        for srv in config_data['test_server_credentials']:
+        response = self.tester.get(self.url + str(srv_grp) + '/' +
+                                   str(server_id),
+                                   follow_redirects=True)
 
-            data = {"name": srv['test_name'],
-                    "host": srv['test_host'],
-                    "port": srv['test_db_port'],
-                    "db": srv['test_maintenance_db'],
-                    "username": srv['test_db_username'],
-                    "role": "",
-                    "sslmode": srv['test_sslmode']}
+        con_response = self.tester.post('browser/server/connect/{0}/{1}'.format
+                                        (srv_grp, server_id),
+                                        data=dict(password=config_data
+                                        ['test_server_credentials'][0]
+                                        ['test_db_password']),
+                                        follow_redirects=True)
 
-            url = self.url + str(srv_grp) + "/"
+        srv_con = json.loads(con_response.data.decode())
 
-            response = self.tester.get(url, data=json.dumps(data),
-                                       content_type='html/json')
+        if len(srv_con) == 0:
+            raise Exception("No Server(s) connected to update.")
 
-            self.assertTrue(response.status_code, 200)
-            respdata = json.loads(response.data)
+        data = \
+            {
+                "comment": config_data
+                ['test_server_update_data']['test_comment'],
+                "id": server_id
+            }
 
-            for server in respdata:
+        put_response = self.tester.put(self.url + str(srv_grp) + '/' +
+                                       str(server_id), data=json.dumps(data),
+                                       content_type='html/json')
 
-                url = self.url + str(srv_grp) + "/" + json.dumps(server['id'])
+        self.assertEquals(put_response.status_code, 200)
 
-                for server in config_data['test_server_update_data']:
-                    data = {"comment": server['test_comment']}
-                    response = self.tester.put(url, data=json.dumps(data),
-                                               content_type='html/json')
-                    self.assertTrue(response.status_code, 200)
-                    respdata = json.loads(response.data)
-                    self.assertTrue(respdata['success'], 1)
+        respdata = json.loads(put_response.data.decode())
+        self.assertTrue(respdata['success'], 1)
diff --git a/web/pgadmin/browser/server_groups/tests/test_sg_add.py b/web/pgadmin/browser/server_groups/tests/test_sg_add.py
deleted file mode 100644
index e70bb65..0000000
--- a/web/pgadmin/browser/server_groups/tests/test_sg_add.py
+++ /dev/null
@@ -1,36 +0,0 @@
-###########################################################################
-#
-# pgAdmin 4 - PostgreSQL Tools
-#
-# Copyright (C) 2013 - 2016, The pgAdmin Development Team
-# This software is released under the PostgreSQL Licence
-#
-###########################################################################
-
-import json
-
-from pgadmin.browser.tests.test_login import LoginTestCase
-from regression.config import config_data
-
-
-class SgNodeTestCase(LoginTestCase):
-    """
-     This class will check available server groups in pgAdmin.
-    """
-
-    priority = 1
-
-    scenarios = [
-        # Fetching the default url for server group node
-        ('Check Server Group Node', dict(url='/browser/server-group/obj/'))
-    ]
-
-    def runTest(self):
-        """This function will check available server groups."""
-
-        i = config_data['test_server_group']
-
-        response = self.tester.get(self.url + str(i), content_type='html/json')
-        self.assertTrue(response.status_code, 200)
-        respdata = json.loads(response.data)
-        self.assertTrue(respdata['id'], i)
diff --git a/web/pgadmin/browser/server_groups/tests/test_sg_get.py b/web/pgadmin/browser/server_groups/tests/test_sg_get.py
new file mode 100644
index 0000000..c552d8e
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/tests/test_sg_get.py
@@ -0,0 +1,36 @@
+###########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+###########################################################################
+
+import json
+from pgadmin.browser.tests.test_login import LoginTestCase
+from regression.config import config_data
+
+
+class SgGetTestCase(LoginTestCase):
+    """
+     This class will check available server groups in pgAdmin.
+    """
+
+    priority = 3
+
+    scenarios = [
+        # Fetching the default url for server group node
+        ('Check Server Group Node', dict(url='/browser/server-group/obj/'))
+    ]
+
+    def runTest(self):
+        """This function will check available server groups."""
+
+        srv_grp = config_data['test_server_group']
+
+        response = self.tester.get(self.url + str(srv_grp),
+                                   content_type='html/json')
+        self.assertEquals(response.status_code, 200)
+        respdata = json.loads(response.data.decode())
+        self.assertTrue(respdata['id'], srv_grp)
diff --git a/web/pgadmin/browser/tests/test_change_password.py b/web/pgadmin/browser/tests/test_change_password.py
index ca89b4c..e911903 100644
--- a/web/pgadmin/browser/tests/test_change_password.py
+++ b/web/pgadmin/browser/tests/test_change_password.py
@@ -77,17 +77,16 @@ class ChangePasswordTestCase(LoginTestCase):
                 config_data['pgAdmin4_login_credentials']
                 ['test_login_password']),
             respdata='You successfully changed your password.'))
-
     ]
 
     def runTest(self):
         """This function will check change password functionality."""
 
         response = self.tester.get('/change', follow_redirects=True)
-        self.assertIn('pgAdmin 4 Password Change', response.data)
+        self.assertIn('pgAdmin 4 Password Change', response.data.decode())
         response = self.tester.post('/change', data=dict(
             password=self.password,
             new_password=self.new_password,
             new_password_confirm=self.new_password_confirm),
                                     follow_redirects=True)
-        self.assertIn(self.respdata, response.data)
+        self.assertIn(self.respdata, response.data.decode('utf-8'))
diff --git a/web/pgadmin/browser/tests/test_login.py b/web/pgadmin/browser/tests/test_login.py
index 7c2b796..d272a63 100644
--- a/web/pgadmin/browser/tests/test_login.py
+++ b/web/pgadmin/browser/tests/test_login.py
@@ -8,7 +8,6 @@
 ##########################################################################
 
 import uuid
-
 from pgadmin.utils.route import BaseTestGenerator
 from regression.config import config_data
 
@@ -67,7 +66,9 @@ class LoginTestCase(BaseTestGenerator):
                    ['test_login_username']),
             password=(config_data['pgAdmin4_login_credentials']
                       ['test_login_password']),
-            respdata='You are currently running version'))
+            respdata='Gravatar image for %s' %
+                     config_data['pgAdmin4_login_credentials']
+                     ['test_login_username']))
     ]
 
     def runTest(self):
@@ -76,4 +77,4 @@ class LoginTestCase(BaseTestGenerator):
         response = self.tester.post('/login', data=dict(
             email=self.email, password=self.password),
                                     follow_redirects=True)
-        self.assertIn(self.respdata, response.data)
+        self.assertIn(self.respdata, response.data.decode('utf8'))
diff --git a/web/pgadmin/browser/tests/test_logout.py b/web/pgadmin/browser/tests/test_logout.py
index 8971e72..d9611ae 100644
--- a/web/pgadmin/browser/tests/test_logout.py
+++ b/web/pgadmin/browser/tests/test_logout.py
@@ -14,14 +14,13 @@ from regression.config import config_data
 class LogoutTest(LoginTestCase):
     """
     This class verifies the logout functionality; provided the user is already
-    logged-in. Dictionary parameters define the scenario appended by test
-    name.
+    logged-in.
     """
 
-    priority = 3
+    priority = 100
 
     scenarios = [
-        # This test case validate the logout page
+        # This test case validate the logout page.
         ('Logging Out', dict(respdata='Redirecting...'))
     ]
 
@@ -29,7 +28,7 @@ class LogoutTest(LoginTestCase):
         """This function checks the logout functionality."""
 
         response = self.tester.get('/logout')
-        self.assertIn(self.respdata, response.data)
+        self.assertIn(self.respdata, response.data.decode('utf8'))
 
     def tearDown(self):
         """
diff --git a/web/pgadmin/browser/tests/test_reset_password.py b/web/pgadmin/browser/tests/test_reset_password.py
index a2ce1df..04c2439 100644
--- a/web/pgadmin/browser/tests/test_reset_password.py
+++ b/web/pgadmin/browser/tests/test_reset_password.py
@@ -8,10 +8,10 @@
 # ##########################################################################
 
 import uuid
-
 from pgadmin.utils.route import BaseTestGenerator
 from regression.config import config_data
 
+
 class ResetPasswordTestCase(BaseTestGenerator):
     """
     This class validates the reset password functionality by defining
@@ -40,8 +40,8 @@ class ResetPasswordTestCase(BaseTestGenerator):
         """This function checks reset password functionality."""
 
         response = self.tester.get('/reset')
-        self.assertIn('Recover pgAdmin 4 Password', response.data)
+        self.assertIn('Recover pgAdmin 4 Password', response.data.decode())
         response = self.tester.post(
             '/reset', data=dict(email=self.email),
             follow_redirects=True)
-        self.assertIn(self.respdata, response.data)
+        self.assertIn(self.respdata, response.data.decode('utf-8'))
diff --git a/web/pgadmin/utils/route.py b/web/pgadmin/utils/route.py
index 1ff41de..3d41e0f 100644
--- a/web/pgadmin/utils/route.py
+++ b/web/pgadmin/utils/route.py
@@ -9,6 +9,8 @@
 
 from abc import ABCMeta, abstractmethod
 import unittest
+from importlib import import_module
+from werkzeug.utils import find_modules
 
 
 class TestsGeneratorRegistry(ABCMeta):
@@ -48,18 +50,18 @@ class TestsGeneratorRegistry(ABCMeta):
 
         cls.registry = dict()
 
-        from importlib import import_module
-        from werkzeug.utils import find_modules
-
         for module_name in find_modules(pkg, False, True):
-            module = import_module(module_name)
-
+            try:
+                module = import_module(module_name)
+            except ImportError:
+                pass
 
 import six
 
 
 @six.add_metaclass(TestsGeneratorRegistry)
 class BaseTestGenerator(unittest.TestCase):
+
     # Defining abstract method which will override by individual testcase.
     @abstractmethod
     def runTest(self):
diff --git a/web/regression/config.py b/web/regression/config.py
index bdc107b..a07c072 100644
--- a/web/regression/config.py
+++ b/web/regression/config.py
@@ -13,4 +13,8 @@ import os
 root = os.path.dirname(os.path.realpath(__file__))
 
 with open(root + '/test_config.json') as data_file:
-    config_data = json.load(data_file)
\ No newline at end of file
+    config_data = json.load(data_file)
+
+pickle_path = os.path.join(root, 'parent_id.pkl')
+
+print(pickle_path)
\ No newline at end of file
diff --git a/web/regression/test_config.json b/web/regression/test_config.json
new file mode 100644
index 0000000..fc3d326
--- /dev/null
+++ b/web/regression/test_config.json
@@ -0,0 +1,910 @@
+{
+  "pgAdmin4_login_credentials":
+  {
+    "test_new_password" : "newpass",
+    "test_login_password" : "test123",
+    "test_login_username" : "[email protected]"
+  },
+
+
+  "test_server_group" : 1,
+
+  "test_server_credentials":
+  [{
+    "test_name" : "PG9.5",
+    "test_db_username" : "postgres",
+    "test_host" : "localhost",
+    "test_db_password" : "edb",
+    "test_db_port" : 5433,
+    "test_maintenance_db" : "postgres",
+    "test_sslmode" :"prefer"
+  },
+  {
+    "test_name" : "PPAS9.4",
+    "test_db_username" : "enterprisedb",
+    "test_host" : "localhost",
+    "test_db_password" : "edb",
+    "test_db_port" : 5444,
+    "test_maintenance_db" : "edb",
+    "test_sslmode" :"prefer"
+  }],
+
+  "test_server_update_data":
+  {
+      "test_comment": "This is test update comment"
+  },
+
+  "test_add_database_data": {
+    "test_privileges_acl": [
+      {
+        "grantee": "postgres",
+        "grantor": "postgres",
+        "privileges": [
+          {
+            "privilege_type": "C",
+            "privilege": true,
+            "with_grant": true
+          },
+          {
+            "privilege_type": "T",
+            "privilege": true,
+            "with_grant": false
+          }
+        ]
+      }
+    ],
+    "test_conn_limit": -1,
+    "test_owner": "postgres",
+    "test_fun_acl": [
+      {
+        "grantee": "postgres",
+        "grantor": "postgres",
+        "privileges": [
+          {
+            "privilege_type": "X",
+            "privilege": true,
+            "with_grant": false
+          }
+        ]
+      }
+    ],
+    "test_seq_acl": [
+      {
+        "grantee": "postgres",
+        "grantor": "postgres",
+        "privileges": [
+          {
+            "privilege_type": "r",
+            "privilege": true,
+            "with_grant": false
+          },
+          {
+            "privilege_type": "w",
+            "privilege": true,
+            "with_grant": false
+          },
+          {
+            "privilege_type": "U",
+            "privilege": true,
+            "with_grant": false
+          }
+        ]
+      }
+    ],
+    "test_tbl_acl": [
+      {
+        "grantee": "postgres",
+        "grantor": "postgres",
+        "privileges": [
+          {
+            "privilege_type": "a",
+            "privilege": true,
+            "with_grant": true
+          },
+          {
+            "privilege_type": "r",
+            "privilege": true,
+            "with_grant": false
+          }
+        ]
+      }
+    ],
+    "test_type_acl": [
+      {
+        "grantee": "postgres",
+        "grantor": "postgres",
+        "privileges": [
+          {
+            "privilege_type": "U",
+            "privilege": true,
+            "with_grant": false
+          }
+        ]
+      }
+    ],
+    "test_encoding": "UTF8",
+    "test_name": "test_db_automation",
+    "test_privileges": [],
+    "test_securities": [],
+    "test_variables": []
+  },
+
+    "test_db_update_data":
+  {
+      "test_comment": "This is db update comment"
+  },
+
+    "test_lr_credentials":
+    {
+      "test_can_login": "true",
+      "test_conn_limit": -1,
+      "test_create_role": "true",
+      "test_role_inherit": "true",
+      "test_role_membership": [],
+      "test_lr_name":  "testlrg1",
+      "test_lr_password": "edb",
+      "test_lr_validity": "12/27/2016",
+      "test_sec_lable": [],
+      "test_variable":[
+        {"name":"work_mem",
+          "database":"postgres",
+          "value":65
+        }
+      ]
+    },
+
+  "test_lr_update_data":
+  {
+    "test_comment": "This is login role update comment"
+  },
+
+  "test_tablespc_credentials":
+  {
+    "test_tblspace_name": "test_tablespace",
+    "test_spc_seclable": [],
+    "test_spc_acl": [
+      {
+        "grantee":"postgres",
+        "grantor":"postgres",
+        "privileges":[
+          {
+            "privilege_type":"C",
+            "privilege":true,
+            "with_grant":false
+          }
+        ]
+      }
+    ],
+    "test_spc_location": "/opt/PostgreSQL/9.5/data",
+    "test_spc_opts": [],
+    "test_spc_user": "postgres"
+  },
+
+    "test_tbspc_update_data":
+  {
+    "test_comment": "This is tablespace update comment"
+  },
+
+  "test_casts_credentials":
+  {
+    "test_cast_context": "IMPLICIT",
+    "test_encoding": "UTF8",
+    "test_name": "money->bigint",
+    "test_source_type": "money",
+    "test_target_type": "bigint"
+  },
+
+     "test_cast_update_data":
+  {
+    "test_comment": "This is cast update comment"
+  },
+
+    "test_extension_credentials":
+  {
+    "test_name": "postgres_fdw",
+    "test_relocate": true,
+    "test_schema": "public",
+    "test_version": "1.0"
+  },
+
+    "test_extension_update_data":
+  {
+    "test_schema": "test_schema"
+  },
+
+      "test_language_update_data":
+  {
+    "test_comment": "This is language update comment"
+  },
+
+  "test_schema_credentials":
+  {
+    "test_func_acl": [],
+    "test_seq_acl": [],
+    "test_tbl_acl": [],
+    "test_type_acl": [],
+    "test_name": "test_schema",
+    "test_owner": "postgres",
+    "test_privilege":
+    [
+      {
+        "grantee":"postgres",
+        "grantor":"postgres",
+        "privileges":
+        [
+          {
+            "privilege_type":"C",
+            "privilege":true,
+            "with_grant":false
+          },
+          {
+            "privilege_type":"U",
+            "privilege":true,
+            "with_grant":false
+          }
+        ]
+      }
+    ],
+    "test_sec_label": []
+  },
+
+  "test_schema_update_data":
+  {
+  "test_tbl_acl":
+  {
+    "added":
+    [
+      {
+        "grantee": "public",
+        "grantor": "postgres",
+        "privileges":
+        [
+          {
+            "privilege_type": "D",
+            "privilege": true,
+            "with_grant": false
+          },
+          {
+            "privilege_type": "x",
+            "privilege": true,
+            "with_grant": false
+          }
+        ]
+      }
+    ]
+  },
+    "test_func_acl":
+    {
+      "added":
+      [
+        {
+          "grantee":"postgres",
+          "grantor":"postgres",
+          "privileges":
+          [
+            {
+              "privilege_type":"X",
+              "privilege":true,
+              "with_grant":true
+            }
+          ]
+        }
+      ]
+    },
+    "test_seq_acl":
+    {
+      "added":
+      [
+        {
+          "grantee":"postgres",
+          "grantor":"postgres",
+          "privileges":
+          [
+            {
+              "privilege_type":"r",
+              "privilege":true,
+              "with_grant":false
+            },
+            {
+              "privilege_type":"w",
+              "privilege":true,
+              "with_grant":false
+            },
+            {
+              "privilege_type":"U",
+              "privilege":true,
+              "with_grant":false
+            }
+          ]
+        }
+      ]
+    }
+  },
+
+  "test_trigger_function_credentials":
+  {
+    "test_acl":
+    [
+      {
+        "grantee":"postgres",
+        "grantor":"postgres",
+        "privileges":
+        [
+          {
+            "privilege_type":"X",
+            "privilege":true,
+            "with_grant":true
+          }
+        ]
+      }
+    ],
+    "test_args": [],
+    "test_fun_owner": "postgres",
+    "test_language": "plpgsql",
+    "test_name": "test_abort_any_command",
+    "test_options": [],
+    "test_probe": "$libdir/",
+    "test_leak_proof": true,
+    "test_namespace": 2200,
+    "test_type": "event_trigger",
+    "test_sec_def": true,
+    "test_code": "BEGIN   RAISE EXCEPTION 'command % is disabled', tg_tag; END;",
+    "test_volitile": "s",
+    "test_sec_label": [],
+    "test_Variable":
+    [
+      {
+        "name":"enable_sort",
+        "value":true
+      }
+    ]
+  },
+
+  "test_trigger_func_update_data":
+  {
+    "test_comment": "This is trigger function update comment"
+  },
+
+  "test_event_trigger_credentials":
+  {
+    "test_enable": "O",
+    "test_event_func": "test_schema.test_abort_any_command",
+    "test_event_name":  "DDL_COMMAND_END",
+    "test_event_owner":  "postgres",
+    "test_name": "test_event_trg",
+    "test_provider": []
+  },
+
+   "test_event_trigger_update_data":
+  {
+    "test_comment": "This is event trigger update comment"
+  },
+
+  "test_FDW_credentials":
+  {
+    "test_acl":
+    [
+      {
+        "grantee":"postgres",
+        "grantor":"postgres",
+        "privileges":
+        [
+          {
+            "privilege_type":"U",
+            "privilege":true,
+            "with_grant":true
+          }
+        ]
+      }
+    ],
+
+    "test_handler": "postgres_fdw_handler",
+    "test_options": [],
+    "test_owner": "postgres",
+    "test_validator": "postgresql_fdw_validator",
+    "test_name": "test_fdw"
+  },
+
+    "test_FDW_update_data":
+  {
+    "test_comment": "This is FDW update comment"
+  },
+
+  "test_collation_credentials":
+  {
+    "test_copy_collation": "pg_catalog.\"POSIX\"",
+    "test_name": "test_collation",
+    "test_owner": "postgres",
+    "test_schema": "test_schema"
+  },
+
+   "test_collation_update_data":
+  {
+    "test_comment": "This is collation update comment"
+  },
+
+
+  "test_domain_data":
+  {
+    "test_schema": "test_schema",
+    "test_basetype": "character",
+    "test_collation": "pg_catalog.\"en_AG\"",
+    "test_constraints":
+    [
+      {
+        "conname":"num",
+        "convalidated":true
+      }
+    ],
+    "test_lenght": true,
+    "test_max_value":  2147483647,
+    "test_min_value": 1,
+    "test_name": "test_domain",
+    "test_owner": "postgres",
+    "test_security": [],
+    "test_defalt_type": "1",
+    "test_type_len": "10"
+  },
+
+  "test_domain_update_data":
+  {
+    "test_comment": "This is domain update comment"
+  },
+
+  "test_sequence_credentials":
+  {
+    "test_cache": "1",
+    "test_cycled": true,
+    "test_increment":  "1",
+    "test_max_value": "100000",
+    "test_min_value": "1",
+    "test_name": "test_empno",
+    "test_acl":
+    [
+      {
+        "grantee":"postgres",
+        "grantor":"postgres",
+        "privileges":
+        [
+          {
+            "privilege_type":"r",
+            "privilege":true,
+            "with_grant":false
+          },
+          {
+            "privilege_type":"w",
+            "privilege":true,
+            "with_grant":false
+          },
+          {
+            "privilege_type":"U",
+            "privilege":true,
+            "with_grant":false
+          }
+        ]
+      }
+    ],
+    "test_schema_name": "test_schema",
+    "test_security":  [],
+    "test_owner":  "postgres",
+    "test_start_val": "100"
+  },
+
+    "test_sequnce_update_data":
+  {
+    "test_comment": "This is sequence update comment"
+  },
+
+  "test_table_credentials":
+  {
+    "test_constraint": [],
+    "test_col_inherit": "[]",
+    "test_columns":
+    [
+      {
+        "name":"empno",
+        "cltype":"numeric",
+        "attacl":[],
+        "is_primary_key":false,
+        "attoptions":[],
+        "seclabels":[]
+      },
+      {
+        "name":"empname",
+        "cltype":"character[]",
+        "attacl":[],
+        "is_primary_key":false,
+        "attoptions":[],
+        "seclabels":[]
+      },
+      {"name":"DOJ",
+        "cltype":"date[]",
+        "attacl":[],
+        "is_primary_key":false,
+        "attoptions":[],
+        "seclabels":[]
+      }
+    ],
+    "test_has_constraint": [],
+    "test_fillfactor": "11",
+    "test_has_FK": [],
+    "test_has_toast_tbl": true,
+    "test_like_constraint":  true,
+    "test_like_default_value": true,
+    "test_like_relation": "pg_catalog.pg_tables",
+    "test_name": "test_emp",
+    "test_PK": [],
+    "test_acl":
+    [
+      {
+        "grantee":"postgres",
+        "grantor":"postgres",
+        "privileges":
+        [
+          {
+            "privilege_type":"a",
+            "privilege":true,
+            "with_grant":true
+          },
+          {
+            "privilege_type":"r",
+            "privilege":true,
+            "with_grant":false
+          },
+          {
+            "privilege_type":"w",
+            "privilege":true,
+            "with_grant":false
+          }
+        ]
+      }
+    ],
+    "test_has_oid": true,
+    "test_owner":  "postgres",
+    "test_schema": "test_schema",
+    "test_sec_acl":  [],
+    "test_tbscp": "pg_default",
+    "test_unique_constraint": [],
+    "test_vacuum_tbl":
+    [
+      {
+        "name":"autovacuum_analyze_scale_factor"
+      },
+      {
+        "name":"autovacuum_analyze_threshold"
+      },
+      {
+        "name":"autovacuum_freeze_max_age"
+      },
+      {
+        "name":"autovacuum_vacuum_cost_delay"
+      },
+      {
+        "name":"autovacuum_vacuum_cost_limit"
+      },
+      {
+        "name":"autovacuum_vacuum_scale_factor"
+      },
+      {
+        "name":"autovacuum_vacuum_threshold"
+      },
+      {
+        "name":"autovacuum_freeze_min_age"
+      },
+      {
+        "name":"autovacuum_freeze_table_age"
+      }
+    ],
+
+    "test_vacuum_toast":
+    [
+      {
+        "name":"autovacuum_freeze_max_age"
+      },
+      {
+        "name":"autovacuum_vacuum_cost_delay"
+      },
+      {
+        "name":"autovacuum_vacuum_cost_limit"
+      },
+      {
+        "name":"autovacuum_vacuum_scale_factor"
+      },
+      {
+        "name":"autovacuum_vacuum_threshold"
+      },
+      {
+        "name":"autovacuum_freeze_min_age"
+      },
+      {
+        "name":"autovacuum_freeze_table_age"
+      }
+    ]
+
+  },
+
+    "test_table_update_data":
+  {
+    "test_comment": "This is table update comment"
+  },
+
+  "test_view_credentials":
+  {
+    "test_check_options": "local",
+    "test_acl":
+    [
+      {
+        "grantee":"postgres",
+        "grantor":"postgres",
+        "privileges":
+        [
+          {
+            "privilege_type":"a",
+            "privilege":true,
+            "with_grant":true
+          },
+          {
+            "privilege_type":"r",
+            "privilege":true,
+            "with_grant":false
+          }
+        ]
+      }
+    ],
+    "test_definition":  "select test_emp.empname from test_schema.test_emp;",
+    "test_name":  "test_view",
+    "test_owner": "postgres",
+    "test_schema_name": "test_schema",
+    "test_sec_label": []
+  },
+
+  "test_view_update_data":
+  {
+    "test_comment": "This is view update comment"
+  },
+
+  "test_mview_credentials":
+  {
+    "test_acl":
+    [
+      {
+        "grantee":"postgres",
+        "grantor":"postgres",
+        "privileges":
+        [
+          {
+            "privilege_type":"a",
+            "privilege":true,
+            "with_grant":false
+          }
+        ]
+      }
+    ],
+    "test_definition": "select test_emp.empname from test_schema.test_emp where test_emp.empno = 1;",
+    "test_fillfactor":  "11",
+    "test_name": "test_mview",
+    "test_owner": "postgres",
+    "test_schema_name": "test_schema",
+    "test_sec_label": [],
+    "test_tbscp": "pg_default",
+    "test_toast_autovacuum": true,
+    "test_toast_autovacuum_enabled": false,
+    "test_vacuum_tbl":
+    [
+      {
+        "name":"autovacuum_analyze_scale_factor"
+      },
+      {
+        "name":"autovacuum_analyze_threshold"
+      },
+      {
+        "name":"autovacuum_freeze_max_age"
+      },
+      {
+        "name":"autovacuum_vacuum_cost_delay"
+      },
+      {
+        "name":"autovacuum_vacuum_cost_limit"
+      },
+      {
+        "name":"autovacuum_vacuum_scale_factor"
+      },
+      {
+        "name":"autovacuum_vacuum_threshold"
+      },
+      {
+        "name":"autovacuum_freeze_min_age"
+      },
+      {
+        "name":"autovacuum_freeze_table_age"
+      }
+    ],
+    "test_vacuum_toast":
+    [
+      {
+        "name":"autovacuum_freeze_max_age"
+      },
+      {
+        "name":"autovacuum_vacuum_cost_delay"
+      },
+      {
+        "name":"autovacuum_vacuum_cost_limit"
+      },
+      {
+        "name":"autovacuum_vacuum_scale_factor"
+      },
+      {
+        "name":"autovacuum_vacuum_threshold"
+      },
+      {
+        "name":"autovacuum_freeze_min_age"
+      },
+      {
+        "name":"autovacuum_freeze_table_age"
+      }
+    ],
+
+    "test_with_data": true
+  },
+
+    "test_mview_update_data":
+  {
+    "test_comment": "This is materialized view update comment"
+  },
+
+  "test_foreign_server_credentials":
+  {
+    "test_fsr_acl":
+    [
+      {
+        "grantee":"postgres",
+        "grantor":"postgres",
+        "privileges":
+        [
+          {
+            "privilege_type":"U",
+            "privilege":true,
+            "with_grant":false
+          }
+        ]
+      }
+    ],
+
+    "test_fsr_optns":
+    [
+      {
+        "fsrvoption":"host",
+        "fsrvvalue":"localhost"
+      },
+      {
+        "fsrvoption":"port",
+        "fsrvvalue":"5433"
+      },
+      {
+        "fsrvoption":"dbname",
+        "fsrvvalue":"postgres"
+      }
+    ],
+    "test_fsr_owner": "postgres",
+    "test_name": "test_foreign_server"
+  },
+
+  "test_FRS_update_data":
+  {
+    "test_comment": "This is foreign server update comment"
+  },
+
+  "test_user_mapping_credentials":
+  {
+    "test_name": "postgres",
+    "test_option": [],
+    "test_options":
+    [
+      {
+        "umoption":"user",
+        "umvalue":"postgres"
+      },
+      {
+        "umoption":"password",
+        "umvalue":"edb"
+      }
+    ]
+  },
+
+  "test_user_mapping_update_data":
+  {
+    "test_options":
+    {
+      "changed":
+      [
+        {"umoption":"password",
+          "umvalue":"edb1"
+        }
+      ]
+    }
+  },
+
+  "test_foreign_table_credentials":
+  {
+    "test_acl":
+    [
+      {
+        "grantee":"postgres",
+        "grantor":"postgres",
+        "privileges":
+        [
+          {
+            "privilege_type":"a",
+            "privilege":true,
+            "with_grant":false
+          },
+          {
+            "privilege_type":"r",
+            "privilege":true,
+            "with_grant":false
+          },
+          {
+            "privilege_type":"w",
+            "privilege":true,
+            "with_grant":false
+          },
+          {
+            "privilege_type":"x",
+            "privilege":true,
+            "with_grant":false
+          }
+        ]
+      }
+    ],
+    "test_schema_name": "test_schema",
+    "test_column":
+    [
+      {
+        "attname":"enme",
+        "datatype":"text",
+        "attnotnull":true,
+        "collname":"pg_catalog.\"default\"",
+        "is_tlength":false,
+        "is_precision":false
+      }
+    ],
+    "test_constraints": [],
+    "test_options": [],
+    "test_frs_name":  "test_foreign_server",
+    "test_name": "test_ft",
+    "test_owner":  "postgres",
+    "test_rel_acl":  [],
+    "test_sec_lable": [],
+    "test_str_acl": []
+  },
+
+    "test_FT_update_data":
+  {
+    "test_comment": "This is foreign table update comment"
+  }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
diff --git a/web/regression/test_nodes.py b/web/regression/test_nodes.py
new file mode 100644
index 0000000..9877a04
--- /dev/null
+++ b/web/regression/test_nodes.py
@@ -0,0 +1,40 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+from regression.config import config_data
+import json
+from regression.test_utils import get_ids
+
+
+def test_getnodes(node=None):
+    # Connect to server and database.
+
+    if not node:
+        return None
+
+    all_id = get_ids()
+
+    server_id = all_id["sid"][0]
+    db_id = all_id["did"][0]
+    srv_grp = config_data['test_server_group']
+
+    response = node.tester.post('browser/server/connect/{0}/{1}'.format
+                                (srv_grp, server_id),
+                                data=dict(password=config_data
+                                ['test_server_credentials'][0]
+                                ['test_db_password']), follow_redirects=True)
+
+    con_response = node.tester.post('browser/database/connect/'
+                                    '{0}/{1}/{2}'.format
+                                    (srv_grp, server_id, db_id),
+                                    follow_redirects=True)
+
+    db_con = json.loads(con_response.data.decode())
+
+    return db_con
diff --git a/web/regression/test_utils.py b/web/regression/test_utils.py
new file mode 100644
index 0000000..50b8310
--- /dev/null
+++ b/web/regression/test_utils.py
@@ -0,0 +1,20 @@
+# #################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+# ##################################################################
+
+import pickle
+from regression.config import pickle_path
+
+
+def get_ids(url=pickle_path):
+    # This function will read parent nodes id's and return it.
+
+    output = open(url, 'rb')
+    ids = pickle.load(output)
+    output.close()
+    return ids
diff --git a/web/regression/testsuite.py b/web/regression/testsuite.py
index 9ec7ffe..0bb2db2 100644
--- a/web/regression/testsuite.py
+++ b/web/regression/testsuite.py
@@ -9,10 +9,12 @@
 
 """ This file collect all modules/files present in tests directory and add
 them to TestSuite. """
-
+from __future__ import print_function
 import os
 import sys
 import unittest
+import operator
+import logging
 from testscenarios.scenarios import generate_scenarios
 
 # We need to include the root directory in sys.path to ensure that we can
@@ -45,6 +47,23 @@ TestsGeneratorRegistry.load_generators('pgadmin')
 test_client = app.test_client()
 
 
+class StreamToLogger(object):
+    """
+    Fake file-like stream object that redirects writes to a logger instance.
+    """
+    def __init__(self, logger, log_level=logging.INFO):
+        self.logger = logger
+        self.log_level = log_level
+        self.linebuf = ''
+
+    def write(self, buf):
+        for line in buf.rstrip().splitlines():
+            self.logger.log(self.log_level, line.rstrip())
+
+    def flush(self):
+        pass
+
+
 def suite():
     """ Defining test suite which will execute all the testcases present in
     tests directory according to set priority."""
@@ -58,6 +77,8 @@ def suite():
 
         modules.insert(gen.priority, gen)
 
+    modules.sort(key=operator.attrgetter('priority'))
+
     for m in modules:
         obj = m()
         obj.setTestClient(test_client)
@@ -66,7 +87,26 @@ def suite():
 
     return pgadmin_suite
 
-
 if __name__ == '__main__':
+
+    print("Please check output in file: logger.log placed at "
+          ".../pgadmin4/web/regression")
+
+    logging.basicConfig(level=logging.DEBUG,
+                        format='%(asctime)s:%(levelname)s:%(name)s:%(message)s',
+                        filename="logger.log",
+                        filemode='w'
+                        )
+
+    stdout_logger = logging.getLogger('STDOUT')
+    sl = StreamToLogger(stdout_logger, logging.INFO)
+    sys.stdout = sl
+
+    stderr_logger = logging.getLogger('STDERR')
+    sl = StreamToLogger(stderr_logger, logging.ERROR)
+    sys.stderr = sl
+
     suite = suite()
-    tests = unittest.TextTestRunner(descriptions=True, verbosity=2).run(suite)
+    tests = unittest.TextTestRunner(descriptions=True, verbosity=2,
+                                    stream=sys.stdout).run(suite)
+    os.remove("parent_id.pkl")


view thread (27+ messages)  latest in thread

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected], [email protected]
  Subject: Re: pgAdmin IV API test cases patch
  In-Reply-To: <CAKmZXFRj8yY91TTxwQQ01eOQE8Rc7FPWuxGcjxaVY+QcWpgWDg@mail.gmail.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox