Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1etE0f-000453-W6 for pgadmin-hackers@arkaria.postgresql.org; Tue, 06 Mar 2018 14:56:10 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1etE0e-0003eM-Eq for pgadmin-hackers@arkaria.postgresql.org; Tue, 06 Mar 2018 14:56:08 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1etE0d-0003eC-P3 for pgadmin-hackers@lists.postgresql.org; Tue, 06 Mar 2018 14:56:08 +0000 Received: from mail-it0-x22e.google.com ([2607:f8b0:4001:c0b::22e]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1etE0Y-0001NZ-5t for pgadmin-hackers@postgresql.org; Tue, 06 Mar 2018 14:56:05 +0000 Received: by mail-it0-x22e.google.com with SMTP id w63so14052628ita.3 for ; Tue, 06 Mar 2018 06:56:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pivotal-io.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=mxDhE2uHBa5yax+DnR1CQteeCZABqgZfpqnM2fabb0I=; b=lBO/xLIZ7P7tc6rhQQb2Z6VK0wXObl1zg3mzIil0mx9yyaYbccqUvqURQkszi5sTsU 55JEuRs85XeycpVU8h16Ar4Q+ysK8xw2y1SReYp0J4QqlS/KacJSBETU97Zped4xEcdS T0YXz5cDA6GZRjdA/hfYhJBHaD2yPrgt+Tn4NTVIZw8KNFWjQe4FYqVAyU9AgHYUQpIr arbKoe6nNy7lN31oFdrf77VFVXnoywQ7QlrcOtUGq4rr+2ry4Tf/pRPOWKK8woHVCnFV Wcqqv957RwyDRh2VHb6w3hAk8W5g3C1mVG5fIHpaq6MQAOs9S32vYrfXdOpdWbsQFFis e6VA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=mxDhE2uHBa5yax+DnR1CQteeCZABqgZfpqnM2fabb0I=; b=JNJ7QIJfkY8yWd+EvGRsKr6V5SBmE1e2bzLAH8pthfRpAQvWTAuFt6GTyvPQYx5moN O18y8fa2UhRO0nfJafj3WNU7eGCepYz+vCBy32vfqvmYr+fZ55e4rNHQpOXb2/tRw3Sb nIb4m1Fqfb+774pLfpbAdzsNNdCrcL6TW47Sb7uZhFXWdz+rmhO3AS5/xAMrEPJ17qTL +k9vRLAzHiorGvFQPN9iYpF4DyOTLFVIaH0iAuXsoCDjFThDyuDrbQgmuJLkn4+7+Fnn MMzvv/mw51tyRZZRuEvQUu6ZgkH4qEQE5bvYvgJqtk1zPTLOlHBnnTbg+BbtiISCOOvi vb1w== X-Gm-Message-State: AElRT7HtBRNEUGzg2vLdoms37stEtNbjEnBIt7pJGo1Q+cLAln7cwlcR iMgUzyop2zSwJwhlA1VZNBpfVdWbxjjNx/iFnFvdZA== X-Google-Smtp-Source: AG47ELvutXfFeOBkBBTBVOBPPl6lp6mgFo9wnkx+CJB1sstcfAdxaq2mP7nVxjM2HBzO+syyQR6nfCacEdv7MF2mx2o= X-Received: by 10.36.203.67 with SMTP id u64mr17418763itg.133.1520348160178; Tue, 06 Mar 2018 06:56:00 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Joao De Almeida Pereira Date: Tue, 06 Mar 2018 14:55:49 +0000 Message-ID: Subject: Re: pgAdmin 4 commit: Support for external tables in GPDB. Fixes #3168 To: Neel Patel Cc: pgadmin-hackers , Dave Page Content-Type: multipart/mixed; boundary="94eb2c0af848067d520566bfa421" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --94eb2c0af848067d520566bfa421 Content-Type: multipart/alternative; boundary="94eb2c0af848067d4e0566bfa41f" --94eb2c0af848067d4e0566bfa41f Content-Type: text/plain; charset="UTF-8" Hello Neel, You can find attached the corrections of the path's needed for windows. The fix should correct TestExternalTablesView and TestTemplateCreate but for the ChangePasswordTestCase I need more information to help you out. We need to understand what is the response that the endpoint /user_management/user is returning. Thanks Joao On Tue, Mar 6, 2018 at 2:29 AM Neel Patel wrote: > Hi Joao, > > I ran the testsuite in windows 10 with Python 3.4 and it fails for > external tables. Linux it is working fine. Let me know if I miss anything. > > Please check the below logs. > > python runtests.py --pkg browser --exclude feature_tests > > ######## > > ====================================================================== > ERROR: runTest > (pgadmin.browser.server_groups.servers.databases.schemas.tables.tests.test_template_create.TestTemplateCreate) > When rendering GreenPlum 5.3 template, when no distribution is present, > when no primary key is present, it returns "DISTRIBUTED RANDOMLY" > ---------------------------------------------------------------------- > Traceback (most recent call last): > File > "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\schemas\tables\tests\test_template_create.py", > line 99, in runTest > self.template_path, **self.input_parameters) > File > "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\flask\templating.py", > line 133, in render_template > return > _render(ctx.app.jinja_env.get_or_select_template(template_name_or_list), > File > "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\jinja2\environment.py", > line 830, in get_or_select_template > return self.get_template(template_name_or_list, parent, globals) > File > "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\jinja2\environment.py", > line 791, in get_template > return self._load_template(name, self.make_globals(globals)) > File > "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\jinja2\environment.py", > line 765, in _load_template > template = self.loader.load(self, name, globals) > File > "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\jinja2\loaders.py", > line 113, in load > source, filename, uptodate = self.get_source(environment, name) > File > "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\flask\templating.py", > line 57, in get_source > return self._get_source_fast(environment, template) > File > "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\flask\templating.py", > line 85, in _get_source_fast > raise TemplateNotFound(template) > jinja2.exceptions.TemplateNotFound: table\sql\gpdb_5.0_plus\create.sql > > ====================================================================== > ERROR: runTest > (pgadmin.browser.server_groups.servers.databases.schemas.tables.tests.test_template_create.TestTemplateCreate) > When rendering GreenPlum 5.3 template, when no distribution is present, > when primary key is present, it returns "DISTRIBUTED BY (attr_primary_key)" > ---------------------------------------------------------------------- > Traceback (most recent call last): > File > "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\schemas\tables\tests\test_template_create.py", > line 99, in runTest > self.template_path, **self.input_parameters) > File > "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\flask\templating.py", > line 133, in render_template > return > _render(ctx.app.jinja_env.get_or_select_template(template_name_or_list), > File > "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\jinja2\environment.py", > line 830, in get_or_select_template > return self.get_template(template_name_or_list, parent, globals) > File > "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\jinja2\environment.py", > line 791, in get_template > return self._load_template(name, self.make_globals(globals)) > File > "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\jinja2\environment.py", > line 765, in _load_template > template = self.loader.load(self, name, globals) > File > "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\jinja2\loaders.py", > line 113, in load > source, filename, uptodate = self.get_source(environment, name) > File > "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\flask\templating.py", > line 57, in get_source > return self._get_source_fast(environment, template) > File > "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\flask\templating.py", > line 85, in _get_source_fast > raise TemplateNotFound(template) > jinja2.exceptions.TemplateNotFound: table\sql\gpdb_5.0_plus\create.sql > > ====================================================================== > ERROR: runTest > (pgadmin.browser.server_groups.servers.databases.schemas.tables.tests.test_template_create.TestTemplateCreate) > When rendering GreenPlum 5.3 template, when distribution is present, it > returns "DISTRIBUTED BY (attr1, attr2, attr4)" > ---------------------------------------------------------------------- > Traceback (most recent call last): > File > "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\schemas\tables\tests\test_template_create.py", > line 99, in runTest > self.template_path, **self.input_parameters) > File > "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\flask\templating.py", > line 133, in render_template > return > _render(ctx.app.jinja_env.get_or_select_template(template_name_or_list), > File > "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\jinja2\environment.py", > line 830, in get_or_select_template > return self.get_template(template_name_or_list, parent, globals) > File > "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\jinja2\environment.py", > line 791, in get_template > return self._load_template(name, self.make_globals(globals)) > File > "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\jinja2\environment.py", > line 765, in _load_template > template = self.loader.load(self, name, globals) > File > "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\jinja2\loaders.py", > line 113, in load > source, filename, uptodate = self.get_source(environment, name) > File > "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\flask\templating.py", > line 57, in get_source > return self._get_source_fast(environment, template) > File > "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\flask\templating.py", > line 85, in _get_source_fast > raise TemplateNotFound(template) > jinja2.exceptions.TemplateNotFound: table\sql\gpdb_5.0_plus\create.sql > > ====================================================================== > ERROR: runTest > (pgadmin.browser.tests.test_change_password.ChangePasswordTestCase) > TestCase for Changing Valid_Password > ---------------------------------------------------------------------- > Traceback (most recent call last): > File > "C:\Projects\pgadmin4\web\pgadmin\browser\tests\test_change_password.py", > line 91, in runTest > user_id = json.loads(response.data.decode('utf-8'))['id'] > KeyError: 'id' > > ====================================================================== > FAIL: runTest > (pgadmin.browser.server_groups.servers.databases.external_tables.tests.test_external_tables_view.TestExternalTablesView) > #nodes When retrieving the nodes and the database does not have external > tables, it return no child nodes and status 200 > ---------------------------------------------------------------------- > Traceback (most recent call last): > File "C:\Python34\Lib\unittest\mock.py", line 1142, in patched > return func(*args, **keywargs) > File > "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\external_tables\tests\test_external_tables_view.py", > line 314, in runTest > self.__test_nodes() > File "C:\Python34\Lib\unittest\mock.py", line 1142, in patched > return func(*args, **keywargs) > File > "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\external_tables\tests\test_external_tables_view.py", > line 367, in __test_nodes > self.expect_render_template_called_with > File "C:\Python34\Lib\unittest\mock.py", line 777, in assert_called_with > raise AssertionError(_error_message()) from cause > AssertionError: Expected call: render_template('sql/#gpdb#80323#/list.sql') > Actual call: render_template('sql/#gpdb#80323#\\list.sql') > > ====================================================================== > FAIL: runTest > (pgadmin.browser.server_groups.servers.databases.external_tables.tests.test_external_tables_view.TestExternalTablesView) > #nodes When retrieving the nodes and an error happens while executing the > query, it return an internal server error and status 500 > ---------------------------------------------------------------------- > Traceback (most recent call last): > File "C:\Python34\Lib\unittest\mock.py", line 1142, in patched > return func(*args, **keywargs) > File > "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\external_tables\tests\test_external_tables_view.py", > line 314, in runTest > self.__test_nodes() > File "C:\Python34\Lib\unittest\mock.py", line 1142, in patched > return func(*args, **keywargs) > File > "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\external_tables\tests\test_external_tables_view.py", > line 367, in __test_nodes > self.expect_render_template_called_with > File "C:\Python34\Lib\unittest\mock.py", line 777, in assert_called_with > raise AssertionError(_error_message()) from cause > AssertionError: Expected call: render_template('sql/#gpdb#80323#/list.sql') > Actual call: render_template('sql/#gpdb#80323#\\list.sql') > > ====================================================================== > FAIL: runTest > (pgadmin.browser.server_groups.servers.databases.external_tables.tests.test_external_tables_view.TestExternalTablesView) > #nodes When retrieving the nodes and the database has 2 external tables, > it return 2 child nodes and status 200 > ---------------------------------------------------------------------- > Traceback (most recent call last): > File "C:\Python34\Lib\unittest\mock.py", line 1142, in patched > return func(*args, **keywargs) > File > "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\external_tables\tests\test_external_tables_view.py", > line 314, in runTest > self.__test_nodes() > File "C:\Python34\Lib\unittest\mock.py", line 1142, in patched > return func(*args, **keywargs) > File > "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\external_tables\tests\test_external_tables_view.py", > line 367, in __test_nodes > self.expect_render_template_called_with > File "C:\Python34\Lib\unittest\mock.py", line 777, in assert_called_with > raise AssertionError(_error_message()) from cause > AssertionError: Expected call: render_template('sql/#gpdb#80323#/list.sql') > Actual call: render_template('sql/#gpdb#80323#\\list.sql') > > ====================================================================== > FAIL: runTest > (pgadmin.browser.server_groups.servers.databases.external_tables.tests.test_external_tables_view.TestExternalTablesView) > #node When retrieving the information about 1 external table and an error > happens while executing the query, it return an internal server error and > status 500 > ---------------------------------------------------------------------- > Traceback (most recent call last): > File "C:\Python34\Lib\unittest\mock.py", line 1142, in patched > return func(*args, **keywargs) > File > "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\external_tables\tests\test_external_tables_view.py", > line 316, in runTest > self.__test_node() > File "C:\Python34\Lib\unittest\mock.py", line 1142, in patched > return func(*args, **keywargs) > File > "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\external_tables\tests\test_external_tables_view.py", > line 393, in __test_node > **self.expect_render_template_called_with > File "C:\Python34\Lib\unittest\mock.py", line 777, in assert_called_with > raise AssertionError(_error_message()) from cause > AssertionError: Expected call: render_template(external_table_id=11, > template_name_or_list='sql/#gpdb#80323#/node.sql') > Actual call: render_template(external_table_id=11, > template_name_or_list='sql/#gpdb#80323#\\node.sql') > > ====================================================================== > FAIL: runTest > (pgadmin.browser.server_groups.servers.databases.external_tables.tests.test_external_tables_view.TestExternalTablesView) > #node When retrieving the information about 1 external table and table > does not exist, it return an error message and status 404 > ---------------------------------------------------------------------- > Traceback (most recent call last): > File "C:\Python34\Lib\unittest\mock.py", line 1142, in patched > return func(*args, **keywargs) > File > "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\external_tables\tests\test_external_tables_view.py", > line 316, in runTest > self.__test_node() > File "C:\Python34\Lib\unittest\mock.py", line 1142, in patched > return func(*args, **keywargs) > File > "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\external_tables\tests\test_external_tables_view.py", > line 393, in __test_node > **self.expect_render_template_called_with > File "C:\Python34\Lib\unittest\mock.py", line 777, in assert_called_with > raise AssertionError(_error_message()) from cause > AssertionError: Expected call: render_template(external_table_id=11, > template_name_or_list='sql/#gpdb#80323#/node.sql') > Actual call: render_template(external_table_id=11, > template_name_or_list='sql/#gpdb#80323#\\node.sql') > > ====================================================================== > FAIL: runTest > (pgadmin.browser.server_groups.servers.databases.external_tables.tests.test_external_tables_view.TestExternalTablesView) > #nodes When retrieving the information about 1 external table and the > table exists, it return external node information and status 200 > ---------------------------------------------------------------------- > Traceback (most recent call last): > File "C:\Python34\Lib\unittest\mock.py", line 1142, in patched > return func(*args, **keywargs) > File > "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\external_tables\tests\test_external_tables_view.py", > line 316, in runTest > self.__test_node() > File "C:\Python34\Lib\unittest\mock.py", line 1142, in patched > return func(*args, **keywargs) > File > "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\external_tables\tests\test_external_tables_view.py", > line 393, in __test_node > **self.expect_render_template_called_with > File "C:\Python34\Lib\unittest\mock.py", line 777, in assert_called_with > raise AssertionError(_error_message()) from cause > AssertionError: Expected call: render_template(external_table_id=11, > template_name_or_list='sql/#gpdb#80323#/node.sql') > Actual call: render_template(external_table_id=11, > template_name_or_list='sql/#gpdb#80323#\\node.sql') > > ====================================================================== > FAIL: runTest > (pgadmin.browser.server_groups.servers.databases.external_tables.tests.test_external_tables_view.TestExternalTablesView) > #properties When retrieving the properties of a external table and the > table exists, it return the properties and status 200 > ---------------------------------------------------------------------- > Traceback (most recent call last): > File "C:\Python34\Lib\unittest\mock.py", line 1142, in patched > return func(*args, **keywargs) > File > "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\external_tables\tests\test_external_tables_view.py", > line 320, in runTest > self.__test_properties() > File "C:\Python34\Lib\unittest\mock.py", line 1142, in patched > return func(*args, **keywargs) > File > "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\external_tables\tests\test_external_tables_view.py", > line 419, in __test_properties > **self.expect_render_template_called_with > File "C:\Python34\Lib\unittest\mock.py", line 777, in assert_called_with > raise AssertionError(_error_message()) from cause > AssertionError: Expected call: > render_template(template_name_or_list='sql/#gpdb#80323#/get_table_information.sql', > table_oid=11) > Actual call: > render_template(template_name_or_list='sql/#gpdb#80323#\\get_table_information.sql', > table_oid=11) > > ---------------------------------------------------------------------- > Ran 256 tests in 77.123s > > FAILED (failures=7, errors=4, skipped=25) > > ====================================================================== > Test Result Summary > ====================================================================== > > PostgreSQL 9.6: > > 234 tests passed > 3 tests failed: > TestExternalTablesView (#node When retrieving the > information about 1 external table and table does not exist, it return an > error message and status 404, > #node When retrieving the > information about 1 external table and an error happens while executing the > query, it return an internal server error and status 500, > #nodes When retrieving the nodes > and the database has 2 external tables, it return 2 child nodes and status > 200, > #nodes When retrieving the > information about 1 external table and the table exists, it return external > node information and status 200, > #nodes When retrieving the nodes > and an error happens while executing the query, it return an internal > server error and status 500, > #properties When retrieving the > properties of a external table and the table exists, it return the > properties and status 200, > #nodes When retrieving the nodes > and the database does not have external tables, it return no child nodes > and status 200) > ChangePasswordTestCase (TestCase for Changing > Valid_Password) > TestTemplateCreate (When rendering GreenPlum 5.3 template, > when no distribution is present, when no primary key is present, it returns > "DISTRIBUTED RANDOMLY", > When rendering GreenPlum 5.3 > template, when distribution is present, it returns "DISTRIBUTED BY (attr1, > attr2, attr4)", > When rendering GreenPlum 5.3 > template, when no distribution is present, when primary key is present, it > returns "DISTRIBUTED BY (attr_primary_key)") > 19 tests skipped: > ResourceGroupsGetTestCase (Get resource groups) > TableSpaceDeleteTestCase (Check Tablespace Node) > ResourceGroupsDeleteTestCase (Delete resource groups) > SynonymDeleteTestCase (Fetch synonym Node URL) > TestSSLConnection (Test for SSL connection) > PackageAddTestCase (Fetch Package Node URL) > SynonymPutTestCase (Fetch synonym Node URL) > TablespaceGetTestCase (Check Tablespace Node) > SynonymAddTestCase (Default Node URL) > PackagePutTestCase (Fetch Package Node URL) > TableAddTestCase (Create Range partitioned table with 2 > partitions, > Create List partitioned table with > 2 partitions) > PackageGetTestCase (Fetch Package Node URL) > PackageDeleteTestCase (Fetch Package Node URL) > TableSpaceAddTestCase (Check Tablespace Node) > ResourceGroupsAddTestCase (Add resource groups) > SynonymGetTestCase (Fetch synonym Node URL) > ResourceGroupsPutTestCase (Put resource groups) > TableSpaceUpdateTestCase (Check Tablespace Node) > TableUpdateTestCase (Attach partition to existing range > partitioned table, > Detach partition from existing > range partitioned table, > Create partitions of existing > range partitioned table, > Detach partition from existing > list partitioned table, > Create partitions of existing list > partitioned table, > Attach partition to existing list > partitioned table) > > ====================================================================== > > ######## > > > Thanks, > Neel Patel > > On Fri, Mar 2, 2018 at 10:19 PM, Dave Page wrote: > >> Support for external tables in GPDB. Fixes #3168 >> >> Branch >> ------ >> master >> >> Details >> ------- >> >> https://git.postgresql.org/gitweb?p=pgadmin4.git;a=commitdiff;h=427314cfdfeb96c3a7835eab5a4d638903bc6dc3 >> Author: Joao Pedro De Almeida Pereira >> >> Modified Files >> -------------- >> .../servers/databases/external_tables/__init__.py | 275 +++++++++++++ >> .../databases/external_tables/actions/__init__.py | 0 >> .../external_tables/actions/get_all_nodes.py | 4 + >> .../databases/external_tables/mapping_utils.py | 165 ++++++++ >> .../databases/external_tables/properties.py | 78 ++++ >> .../external_tables/reverse_engineer_ddl.py | 69 ++++ >> .../static/img/coll-external_table.svg | 1 + >> .../external_tables/static/img/external_table.svg | 1 + >> .../templates/sql/gpdb_5.0_plus/create.sql | 60 +++ >> .../templates/sql/gpdb_5.0_plus/get_columns.sql | 12 + >> .../sql/gpdb_5.0_plus/get_table_information.sql | 22 ++ >> .../templates/sql/gpdb_5.0_plus/list.sql | 6 + >> .../templates/sql/gpdb_5.0_plus/node.sql | 5 + >> .../databases/external_tables/tests/__init__.py | 0 >> .../tests/test_external_tables_module.py | 99 +++++ >> .../tests/test_external_tables_view.py | 428 >> +++++++++++++++++++++ >> .../external_tables/tests/test_mapping_utils.py | 375 >> ++++++++++++++++++ >> .../external_tables/tests/test_properties.py | 156 ++++++++ >> .../tests/test_reverse_engineer_ddl.py | 261 +++++++++++++ >> .../tests/test_sql_template_create_integration.py | 0 >> .../templates/table/sql/gpdb_5.0_plus/nodes.sql | 1 + >> web/pgadmin/static/bundle/browser.js | 1 + >> .../databases/external_tables/external_tables.js | 88 +++++ >> .../servers/databases/external_tables/index.js | 18 + >> web/pgadmin/tools/sqleditor/__init__.py | 1 + >> .../external_tables/external_tables_spec.js | 56 +++ >> web/webpack.config.js | 9 + >> web/webpack.shim.js | 3 + >> 28 files changed, 2194 insertions(+) >> >> > --94eb2c0af848067d4e0566bfa41f Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hello Neel,

You can find attached the c= orrections of the path's needed for windows. The fix should correct=C2= =A0TestExternalTablesV= iew and=C2=A0Te= stTemplateCreate but for the ChangePasswordTestCase I need more information= to help you out. We need to understand what is the response that the endpo= int /user_management/user is returning.

Tha= nks
Joao

On = Tue, Mar 6, 2018 at 2:29 AM Neel Patel <neel.patel@enterprisedb.com> wrote:
Hi=C2=A0= Joao,

I ran the testsuite in windows 10 with Python 3.4 and it = fails for external tables. Linux it is working fine. Let me know if I miss anything.

Please check = the below logs.

python runtests.py --pkg br= owser --exclude feature_tests

########

=
=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
ERROR: runTest (pgadmin.b= rowser.server_groups.servers.databases.schemas.tables.tests.test_template_c= reate.TestTemplateCreate)
When rendering GreenPlum 5.3 template, = when no distribution is present, when no primary key is present, it returns= "DISTRIBUTED RANDOMLY"
-------------------------------= ---------------------------------------
Traceback (most recent ca= ll last):
=C2=A0 File "C:\Projects\pgadmin4\web\pgadmin\brow= ser\server_groups\servers\databases\schemas\tables\tests\test_template_crea= te.py", line 99, in runTest
=C2=A0 =C2=A0 self.template_path= , **self.input_parameters)
=C2=A0 File "C:\Projects\venv_pga= dmin4_py_3_4\lib\site-packages\flask\templating.py", line 133, in rend= er_template
=C2=A0 =C2=A0 return _render(ctx.app.jinja_env.get_or= _select_template(template_name_or_list),
=C2=A0 File "C:\Pro= jects\venv_pgadmin4_py_3_4\lib\site-packages\jinja2\environment.py", l= ine 830, in get_or_select_template
=C2=A0 =C2=A0 return self.get_= template(template_name_or_list, parent, globals)
=C2=A0 File &quo= t;C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\jinja2\environment.py&= quot;, line 791, in get_template
=C2=A0 =C2=A0 return self._load_= template(name, self.make_globals(globals))
=C2=A0 File "C:\P= rojects\venv_pgadmin4_py_3_4\lib\site-packages\jinja2\environment.py",= line 765, in _load_template
=C2=A0 =C2=A0 template =3D self.load= er.load(self, name, globals)
=C2=A0 File "C:\Projects\venv_p= gadmin4_py_3_4\lib\site-packages\jinja2\loaders.py", line 113, in load=
=C2=A0 =C2=A0 source, filename, uptodate =3D self.get_source(env= ironment, name)
=C2=A0 File "C:\Projects\venv_pgadmin4_py_3_= 4\lib\site-packages\flask\templating.py", line 57, in get_source
=
=C2=A0 =C2=A0 return self._get_source_fast(environment, template)
=C2=A0 File "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\= flask\templating.py", line 85, in _get_source_fast
=C2=A0 = =C2=A0 raise TemplateNotFound(template)
jinja2.exceptions.Templat= eNotFound: table\sql\gpdb_5.0_plus\create.sql

=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
ERROR: = runTest (pgadmin.browser.server_groups.servers.databases.schemas.tables.tes= ts.test_template_create.TestTemplateCreate)
When rendering GreenP= lum 5.3 template, when no distribution is present, when primary key is pres= ent, it returns "DISTRIBUTED BY (attr_primary_key)"
---= -------------------------------------------------------------------
Traceback (most recent call last):
=C2=A0 File "C:\Projec= ts\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\schemas\tab= les\tests\test_template_create.py", line 99, in runTest
=C2= =A0 =C2=A0 self.template_path, **self.input_parameters)
=C2=A0 Fi= le "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\flask\templatin= g.py", line 133, in render_template
=C2=A0 =C2=A0 return _re= nder(ctx.app.jinja_env.get_or_select_template(template_name_or_list),
=
=C2=A0 File "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\j= inja2\environment.py", line 830, in get_or_select_template
= =C2=A0 =C2=A0 return self.get_template(template_name_or_list, parent, globa= ls)
=C2=A0 File "C:\Projects\venv_pgadmin4_py_3_4\lib\site-p= ackages\jinja2\environment.py", line 791, in get_template
= =C2=A0 =C2=A0 return self._load_template(name, self.make_globals(globals))<= /div>
=C2=A0 File "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packa= ges\jinja2\environment.py", line 765, in _load_template
=C2= =A0 =C2=A0 template =3D self.loader.load(self, name, globals)
=C2= =A0 File "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\jinja2\lo= aders.py", line 113, in load
=C2=A0 =C2=A0 source, filename,= uptodate =3D self.get_source(environment, name)
=C2=A0 File &quo= t;C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\flask\templating.py&qu= ot;, line 57, in get_source
=C2=A0 =C2=A0 return self._get_source= _fast(environment, template)
=C2=A0 File "C:\Projects\venv_p= gadmin4_py_3_4\lib\site-packages\flask\templating.py", line 85, in _ge= t_source_fast
=C2=A0 =C2=A0 raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: table\sql\gpdb_5.0_plus\create.sq= l

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D
ERROR: runTest (pgadmin.browser.server_groups.server= s.databases.schemas.tables.tests.test_template_create.TestTemplateCreate)
When rendering GreenPlum 5.3 template, when distribution is presen= t, it returns "DISTRIBUTED BY (attr1, attr2, attr4)"
--= --------------------------------------------------------------------
<= div>Traceback (most recent call last):
=C2=A0 File "C:\Proje= cts\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\schemas\ta= bles\tests\test_template_create.py", line 99, in runTest
=C2= =A0 =C2=A0 self.template_path, **self.input_parameters)
=C2=A0 Fi= le "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\flask\templatin= g.py", line 133, in render_template
=C2=A0 =C2=A0 return _re= nder(ctx.app.jinja_env.get_or_select_template(template_name_or_list),
=
=C2=A0 File "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\j= inja2\environment.py", line 830, in get_or_select_template
= =C2=A0 =C2=A0 return self.get_template(template_name_or_list, parent, globa= ls)
=C2=A0 File "C:\Projects\venv_pgadmin4_py_3_4\lib\site-p= ackages\jinja2\environment.py", line 791, in get_template
= =C2=A0 =C2=A0 return self._load_template(name, self.make_globals(globals))<= /div>
=C2=A0 File "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packa= ges\jinja2\environment.py", line 765, in _load_template
=C2= =A0 =C2=A0 template =3D self.loader.load(self, name, globals)
=C2= =A0 File "C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\jinja2\lo= aders.py", line 113, in load
=C2=A0 =C2=A0 source, filename,= uptodate =3D self.get_source(environment, name)
=C2=A0 File &quo= t;C:\Projects\venv_pgadmin4_py_3_4\lib\site-packages\flask\templating.py&qu= ot;, line 57, in get_source
=C2=A0 =C2=A0 return self._get_source= _fast(environment, template)
=C2=A0 File "C:\Projects\venv_p= gadmin4_py_3_4\lib\site-packages\flask\templating.py", line 85, in _ge= t_source_fast
=C2=A0 =C2=A0 raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: table\sql\gpdb_5.0_plus\create.sq= l

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D
ERROR: runTest (pgadmin.browser.tests.test_change_pa= ssword.ChangePasswordTestCase)
TestCase for Changing Valid_Passwo= rd
--------------------------------------------------------------= --------
Traceback (most recent call last):
=C2=A0 File= "C:\Projects\pgadmin4\web\pgadmin\browser\tests\test_change_password.= py", line 91, in runTest
=C2=A0 =C2=A0 user_id =3D json.load= s(response.data.decode('utf-8'))['id']
KeyError: = 'id'

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D
FAIL: runTest (pgadmin.browser.server_gr= oups.servers.databases.external_tables.tests.test_external_tables_view.Test= ExternalTablesView)
#nodes When retrieving the nodes and the data= base does not have external tables, it return no child nodes and status 200=
----------------------------------------------------------------= ------
Traceback (most recent call last):
=C2=A0 File &= quot;C:\Python34\Lib\unittest\mock.py", line 1142, in patched
=C2=A0 =C2=A0 return func(*args, **keywargs)
=C2=A0 File "= C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\ex= ternal_tables\tests\test_external_tables_view.py", line 314, in runTes= t
=C2=A0 =C2=A0 self.__test_nodes()
=C2=A0 File "C= :\Python34\Lib\unittest\mock.py", line 1142, in patched
=C2= =A0 =C2=A0 return func(*args, **keywargs)
=C2=A0 File "C:\Pr= ojects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\externa= l_tables\tests\test_external_tables_view.py", line 367, in __test_node= s
=C2=A0 =C2=A0 self.expect_render_template_called_with
=C2=A0 File "C:\Python34\Lib\unittest\mock.py", line 777, in ass= ert_called_with
=C2=A0 =C2=A0 raise AssertionError(_error_message= ()) from cause
AssertionError: Expected call: render_template(= 9;sql/#gpdb#80323#/list.sql')
Actual call: render_template(&#= 39;sql/#gpdb#80323#\\list.sql')

=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
FAIL: runTest (p= gadmin.browser.server_groups.servers.databases.external_tables.tests.test_e= xternal_tables_view.TestExternalTablesView)
#nodes When retrievin= g the nodes and an error happens while executing the query, it return an in= ternal server error and status 500
------------------------------= ----------------------------------------
Traceback (most recent c= all last):
=C2=A0 File "C:\Python34\Lib\unittest\mock.py&quo= t;, line 1142, in patched
=C2=A0 =C2=A0 return func(*args, **keyw= args)
=C2=A0 File "C:\Projects\pgadmin4\web\pgadmin\browser\= server_groups\servers\databases\external_tables\tests\test_external_tables_= view.py", line 314, in runTest
=C2=A0 =C2=A0 self.__test_nod= es()
=C2=A0 File "C:\Python34\Lib\unittest\mock.py", li= ne 1142, in patched
=C2=A0 =C2=A0 return func(*args, **keywargs)<= /div>
=C2=A0 File "C:\Projects\pgadmin4\web\pgadmin\browser\server= _groups\servers\databases\external_tables\tests\test_external_tables_view.p= y", line 367, in __test_nodes
=C2=A0 =C2=A0 self.expect_rend= er_template_called_with
=C2=A0 File "C:\Python34\Lib\unittes= t\mock.py", line 777, in assert_called_with
=C2=A0 =C2=A0 ra= ise AssertionError(_error_message()) from cause
AssertionError: E= xpected call: render_template('sql/#gpdb#80323#/list.sql')
Actual call: render_template('sql/#gpdb#80323#\\list.sql')
<= div>
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D
FAIL: runTest (pgadmin.browser.server_groups.servers.datab= ases.external_tables.tests.test_external_tables_view.TestExternalTablesView= )
#nodes When retrieving the nodes and the database has 2 externa= l tables, it return 2 child nodes and status 200
----------------= ------------------------------------------------------
Traceback = (most recent call last):
=C2=A0 File "C:\Python34\Lib\unitte= st\mock.py", line 1142, in patched
=C2=A0 =C2=A0 return func= (*args, **keywargs)
=C2=A0 File "C:\Projects\pgadmin4\web\pg= admin\browser\server_groups\servers\databases\external_tables\tests\test_ex= ternal_tables_view.py", line 314, in runTest
=C2=A0 =C2=A0 s= elf.__test_nodes()
=C2=A0 File "C:\Python34\Lib\unittest\moc= k.py", line 1142, in patched
=C2=A0 =C2=A0 return func(*args= , **keywargs)
=C2=A0 File "C:\Projects\pgadmin4\web\pgadmin\= browser\server_groups\servers\databases\external_tables\tests\test_external= _tables_view.py", line 367, in __test_nodes
=C2=A0 =C2=A0 se= lf.expect_render_template_called_with
=C2=A0 File "C:\Python= 34\Lib\unittest\mock.py", line 777, in assert_called_with
= =C2=A0 =C2=A0 raise AssertionError(_error_message()) from cause
A= ssertionError: Expected call: render_template('sql/#gpdb#80323#/list.sq= l')
Actual call: render_template('sql/#gpdb#80323#\\list.= sql')

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D
FAIL: runTest (pgadmin.browser.server_group= s.servers.databases.external_tables.tests.test_external_tables_view.TestExt= ernalTablesView)
#node When retrieving the information about 1 ex= ternal table and an error happens while executing the query, it return an i= nternal server error and status 500
-----------------------------= -----------------------------------------
Traceback (most recent = call last):
=C2=A0 File "C:\Python34\Lib\unittest\mock.py&qu= ot;, line 1142, in patched
=C2=A0 =C2=A0 return func(*args, **key= wargs)
=C2=A0 File "C:\Projects\pgadmin4\web\pgadmin\browser= \server_groups\servers\databases\external_tables\tests\test_external_tables= _view.py", line 316, in runTest
=C2=A0 =C2=A0 self.__test_no= de()
=C2=A0 File "C:\Python34\Lib\unittest\mock.py", li= ne 1142, in patched
=C2=A0 =C2=A0 return func(*args, **keywargs)<= /div>
=C2=A0 File "C:\Projects\pgadmin4\web\pgadmin\browser\server= _groups\servers\databases\external_tables\tests\test_external_tables_view.p= y", line 393, in __test_node
=C2=A0 =C2=A0 **self.expect_ren= der_template_called_with
=C2=A0 File "C:\Python34\Lib\unitte= st\mock.py", line 777, in assert_called_with
=C2=A0 =C2=A0 r= aise AssertionError(_error_message()) from cause
AssertionError: = Expected call: render_template(external_table_id=3D11, template_name_or_lis= t=3D'sql/#gpdb#80323#/node.sql')
Actual call: render_temp= late(external_table_id=3D11, template_name_or_list=3D'sql/#gpdb#80323#\= \node.sql')

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D
FAIL: runTest (pgadmin.browser.server= _groups.servers.databases.external_tables.tests.test_external_tables_view.T= estExternalTablesView)
#node When retrieving the information abou= t 1 external table and table does not exist, it return an error message and= status 404
-----------------------------------------------------= -----------------
Traceback (most recent call last):
= =C2=A0 File "C:\Python34\Lib\unittest\mock.py", line 1142, in pat= ched
=C2=A0 =C2=A0 return func(*args, **keywargs)
=C2= =A0 File "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\serve= rs\databases\external_tables\tests\test_external_tables_view.py", line= 316, in runTest
=C2=A0 =C2=A0 self.__test_node()
=C2= =A0 File "C:\Python34\Lib\unittest\mock.py", line 1142, in patche= d
=C2=A0 =C2=A0 return func(*args, **keywargs)
=C2=A0 F= ile "C:\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\da= tabases\external_tables\tests\test_external_tables_view.py", line 393,= in __test_node
=C2=A0 =C2=A0 **self.expect_render_template_calle= d_with
=C2=A0 File "C:\Python34\Lib\unittest\mock.py", = line 777, in assert_called_with
=C2=A0 =C2=A0 raise AssertionErro= r(_error_message()) from cause
AssertionError: Expected call: ren= der_template(external_table_id=3D11, template_name_or_list=3D'sql/#gpdb= #80323#/node.sql')
Actual call: render_template(external_tabl= e_id=3D11, template_name_or_list=3D'sql/#gpdb#80323#\\node.sql')

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D
FAIL: runTest (pgadmin.browser.server_groups.servers.da= tabases.external_tables.tests.test_external_tables_view.TestExternalTablesV= iew)
#nodes When retrieving the information about 1 external tabl= e and the table exists, it return external node information and status 200<= /div>
-----------------------------------------------------------------= -----
Traceback (most recent call last):
=C2=A0 File &q= uot;C:\Python34\Lib\unittest\mock.py", line 1142, in patched
=C2=A0 =C2=A0 return func(*args, **keywargs)
=C2=A0 File "C= :\Projects\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\ext= ernal_tables\tests\test_external_tables_view.py", line 316, in runTest=
=C2=A0 =C2=A0 self.__test_node()
=C2=A0 File "C:\= Python34\Lib\unittest\mock.py", line 1142, in patched
=C2=A0= =C2=A0 return func(*args, **keywargs)
=C2=A0 File "C:\Proje= cts\pgadmin4\web\pgadmin\browser\server_groups\servers\databases\external_t= ables\tests\test_external_tables_view.py", line 393, in __test_node
=C2=A0 =C2=A0 **self.expect_render_template_called_with
= =C2=A0 File "C:\Python34\Lib\unittest\mock.py", line 777, in asse= rt_called_with
=C2=A0 =C2=A0 raise AssertionError(_error_message(= )) from cause
AssertionError: Expected call: render_template(exte= rnal_table_id=3D11, template_name_or_list=3D'sql/#gpdb#80323#/node.sql&= #39;)
Actual call: render_template(external_table_id=3D11, templa= te_name_or_list=3D'sql/#gpdb#80323#\\node.sql')

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
FAIL: runTest (pgadmin.browser.server_groups.servers.databases.external_t= ables.tests.test_external_tables_view.TestExternalTablesView)
#pr= operties When retrieving the properties of a external table and the table e= xists, it return the properties and status 200
------------------= ----------------------------------------------------
Traceback (m= ost recent call last):
=C2=A0 File "C:\Python34\Lib\unittest= \mock.py", line 1142, in patched
=C2=A0 =C2=A0 return func(*= args, **keywargs)
=C2=A0 File "C:\Projects\pgadmin4\web\pgad= min\browser\server_groups\servers\databases\external_tables\tests\test_exte= rnal_tables_view.py", line 320, in runTest
=C2=A0 =C2=A0 sel= f.__test_properties()
=C2=A0 File "C:\Python34\Lib\unittest\= mock.py", line 1142, in patched
=C2=A0 =C2=A0 return func(*a= rgs, **keywargs)
=C2=A0 File "C:\Projects\pgadmin4\web\pgadm= in\browser\server_groups\servers\databases\external_tables\tests\test_exter= nal_tables_view.py", line 419, in __test_properties
=C2=A0 = =C2=A0 **self.expect_render_template_called_with
=C2=A0 File &quo= t;C:\Python34\Lib\unittest\mock.py", line 777, in assert_called_with
=C2=A0 =C2=A0 raise AssertionError(_error_message()) from cause
AssertionError: Expected call: render_template(template_name_or_lis= t=3D'sql/#gpdb#80323#/get_table_information.sql', table_oid=3D11)
Actual call: render_template(template_name_or_list=3D'sql/#gpd= b#80323#\\get_table_information.sql', table_oid=3D11)

-------------------------------------------------------------------= ---
Ran 256 tests in 77.123s

FAILED (fai= lures=3D7, errors=3D4, skipped=3D25)

=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
Test Result Summ= ary
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=

PostgreSQL 9.6:

=C2=A0 = =C2=A0 =C2=A0 =C2=A0 234 tests passed
=C2=A0 =C2=A0 =C2=A0 =C2=A0= 3 tests failed:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 TestExternalTablesView (#node When retrieving the information about= 1 external table and table does not exist, it return an error message and = status 404,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 #node When retrieving the information about 1 external table = and an error happens while executing the query, it return an internal serve= r error and status 500,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 #nodes When retrieving the nodes and the database = has 2 external tables, it return 2 child nodes and status 200,
= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 #nodes W= hen retrieving the information about 1 external table and the table exists,= it return external node information and status 200,
=C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 #nodes When retriev= ing the nodes and an error happens while executing the query, it return an = internal server error and status 500,
=C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 #properties When retrieving the prop= erties of a external table and the table exists, it return the properties a= nd status 200,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 #nodes When retrieving the nodes and the database does no= t have external tables, it return no child nodes and status 200)
= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ChangePasswordTestC= ase (TestCase for Changing Valid_Password)
=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 TestTemplateCreate (When rendering Green= Plum 5.3 template, when no distribution is present, when no primary key is = present, it returns "DISTRIBUTED RANDOMLY",
=C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 When rendering Gree= nPlum 5.3 template, when distribution is present, it returns "DISTRIBU= TED BY (attr1, attr2, attr4)",
=C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 When rendering GreenPlum 5.3 templat= e, when no distribution is present, when primary key is present, it returns= "DISTRIBUTED BY (attr_primary_key)")
=C2=A0 =C2=A0 =C2= =A0 =C2=A0 19 tests skipped:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 ResourceGroupsGetTestCase (Get resource groups)
<= div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 TableSpaceDelet= eTestCase (Check Tablespace Node)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 ResourceGroupsDeleteTestCase (Delete resource grou= ps)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Synon= ymDeleteTestCase (Fetch synonym Node URL)
=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 TestSSLConnection (Test for SSL connecti= on)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Packa= geAddTestCase (Fetch Package Node URL)
=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 SynonymPutTestCase (Fetch synonym Node URL)=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Tablespa= ceGetTestCase (Check Tablespace Node)
=C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 SynonymAddTestCase (Default Node URL)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 PackagePutTestCas= e (Fetch Package Node URL)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 TableAddTestCase (Create Range partitioned table with 2 p= artitions,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 Create List partitioned table with 2 partitions)
= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 PackageGetTestCase = (Fetch Package Node URL)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 PackageDeleteTestCase (Fetch Package Node URL)
= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 TableSpaceAddTestCa= se (Check Tablespace Node)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 ResourceGroupsAddTestCase (Add resource groups)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 SynonymGetTestCase= (Fetch synonym Node URL)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 ResourceGroupsPutTestCase (Put resource groups)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 TableSpaceUpdateTe= stCase (Check Tablespace Node)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 TableUpdateTestCase (Attach partition to existing ran= ge partitioned table,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 Detach partition from existing range partitioned t= able,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 Create partitions of existing range partitioned table,
=C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Detach parti= tion from existing list partitioned table,
=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Create partitions of existing= list partitioned table,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 Attach partition to existing list partitioned t= able)

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D

########


Thanks,
Neel Patel

O= n Fri, Mar 2, 2018 at 10:19 PM, Dave Page <dpage@pgadmin.org> wrote:
Support for external tables in G= PDB. Fixes #3168

Branch
------
master

Details
-------
https://git.postgresql.org/gitweb?p=3Dpgadmin4.git;a=3Dcommitdi= ff;h=3D427314cfdfeb96c3a7835eab5a4d638903bc6dc3
Author: Joao Pedro De Almeida Pereira <jdealmeidapereira@pivotal.io>

Modified Files
--------------
.../servers/databases/external_tables/__init__.py=C2=A0 | 275 +++++++++++++=
.../databases/external_tables/actions/__init__.py=C2=A0 |=C2=A0 =C2=A00
.../external_tables/actions/get_all_nodes.py=C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2= =A0 =C2=A04 +
.../databases/external_tables/mapping_utils.py=C2=A0 =C2=A0 =C2=A0| 165 +++= +++++
.../databases/external_tables/properties.py=C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2= =A0 78 ++++
.../external_tables/reverse_engineer_ddl.py=C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2= =A0 69 ++++
.../static/img/coll-external_table.svg=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0|=C2=A0 =C2=A01 +
.../external_tables/static/img/external_table.svg=C2=A0 |=C2=A0 =C2=A01 + .../templates/sql/gpdb_5.0_plus/create.sql=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0|=C2=A0 60 +++
.../templates/sql/gpdb_5.0_plus/get_columns.sql=C2=A0 =C2=A0 |=C2=A0 12 + .../sql/gpdb_5.0_plus/get_table_information.sql=C2=A0 =C2=A0 |=C2=A0 22 ++<= br> .../templates/sql/gpdb_5.0_plus/list.sql=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0|=C2=A0 =C2=A06 +
.../templates/sql/gpdb_5.0_plus/node.sql=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0|=C2=A0 =C2=A05 +
.../databases/external_tables/tests/__init__.py=C2=A0 =C2=A0 |=C2=A0 =C2=A0= 0
.../tests/test_external_tables_module.py=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0|=C2=A0 99 +++++
.../tests/test_external_tables_view.py=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0| 428 +++++++++++++++++++++
.../external_tables/tests/test_mapping_utils.py=C2=A0 =C2=A0 | 375 ++++++++= ++++++++++
.../external_tables/tests/test_properties.py=C2=A0 =C2=A0 =C2=A0 =C2=A0| 15= 6 ++++++++
.../tests/test_reverse_engineer_ddl.py=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0| 261 +++++++++++++
.../tests/test_sql_template_create_integration.py=C2=A0 |=C2=A0 =C2=A00
.../templates/table/sql/gpdb_5.0_plus/nodes.sql=C2=A0 =C2=A0 |=C2=A0 =C2=A0= 1 +
web/pgadmin/static/bundle/browser.js=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0|=C2=A0 =C2=A01 +
.../databases/external_tables/external_tables.js=C2=A0 =C2=A0|=C2=A0 88 +++= ++
.../servers/databases/external_tables/index.js=C2=A0 =C2=A0 =C2=A0|=C2=A0 1= 8 +
web/pgadmin/tools/sqleditor/__init__.py=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 |=C2=A0 =C2=A01 +
.../external_tables/external_tables_spec.js=C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2= =A0 56 +++
web/webpack.config.js=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 =C2=A09 +
web/webpack.shim.js=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 =C2=A03 + 28 files changed, 2194 insertions(+)


--94eb2c0af848067d4e0566bfa41f-- --94eb2c0af848067d520566bfa421 Content-Type: text/x-patch; charset="US-ASCII"; name="path-correction-for-windows.diff" Content-Disposition: attachment; filename="path-correction-for-windows.diff" Content-Transfer-Encoding: base64 Content-ID: <161fbcfa7c31642a7fb1> X-Attachment-Id: 161fbcfa7c31642a7fb1 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2Rh dGFiYXNlcy9leHRlcm5hbF90YWJsZXMvdGVzdHMvdGVzdF9leHRlcm5hbF90YWJsZXNfdmlldy5w eSBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9l eHRlcm5hbF90YWJsZXMvdGVzdHMvdGVzdF9leHRlcm5hbF90YWJsZXNfdmlldy5weQppbmRleCBh Y2VkYzYxYi4uM2YwOGU0MGUgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVy X2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9leHRlcm5hbF90YWJsZXMvdGVzdHMvdGVzdF9leHRl cm5hbF90YWJsZXNfdmlldy5weQorKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91 cHMvc2VydmVycy9kYXRhYmFzZXMvZXh0ZXJuYWxfdGFibGVzL3Rlc3RzL3Rlc3RfZXh0ZXJuYWxf dGFibGVzX3ZpZXcucHkKQEAgLTcsNiArNyw3IEBACiAjCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCitp bXBvcnQgb3MKIGltcG9ydCBzeXMKIAogZnJvbSBwZ2FkbWluLmJyb3dzZXIuc2VydmVyX2dyb3Vw cy5zZXJ2ZXJzLmRhdGFiYXNlcy5leHRlcm5hbF90YWJsZXMgaW1wb3J0IFwKQEAgLTY4LDcgKzY5 LDkgQEAgY2xhc3MgVGVzdEV4dGVybmFsVGFibGVzVmlldyhCYXNlVGVzdEdlbmVyYXRvcik6CiAg ICAgICAgICAgICAgY29ubmVjdGlvbj1NYWdpY01vY2soZXhlY3V0ZV8yZGFycmF5PU1hZ2ljTW9j aygpKSwKICAgICAgICAgICAgICBleGVjdXRlXzJkYXJyYXlfcmV0dXJuX3ZhbHVlPShUcnVlLCBk aWN0KHJvd3M9W10pKSwKIAotICAgICAgICAgICAgIGV4cGVjdF9yZW5kZXJfdGVtcGxhdGVfY2Fs bGVkX3dpdGg9J3NxbC8jZ3BkYiM4MDMyMyMvbGlzdC5zcWwnLAorICAgICAgICAgICAgIGV4cGVj dF9yZW5kZXJfdGVtcGxhdGVfY2FsbGVkX3dpdGg9b3MucGF0aC5qb2luKCdzcWwnLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcj Z3BkYiM4MDMyMyMnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLCAnbGlzdC5zcWwnKSwKICAgICAgICAgICAgICBleHBlY3RlZF9t YWtlX2pzb25fcmVzcG9uc2VfY2FsbGVkX3dpdGg9ZGljdCgKICAgICAgICAgICAgICAgICAgZGF0 YT1bXSwKICAgICAgICAgICAgICAgICAgc3RhdHVzPTIwMApAQCAtOTAsNyArOTMsOSBAQCBjbGFz cyBUZXN0RXh0ZXJuYWxUYWJsZXNWaWV3KEJhc2VUZXN0R2VuZXJhdG9yKToKICAgICAgICAgICAg ICBjb25uZWN0aW9uPU1hZ2ljTW9jayhleGVjdXRlXzJkYXJyYXk9TWFnaWNNb2NrKCkpLAogICAg ICAgICAgICAgIGV4ZWN1dGVfMmRhcnJheV9yZXR1cm5fdmFsdWU9KEZhbHNlLCAnU29tZSBlcnJv ciBtZXNzYWdlJyksCiAKLSAgICAgICAgICAgICBleHBlY3RfcmVuZGVyX3RlbXBsYXRlX2NhbGxl ZF93aXRoPSdzcWwvI2dwZGIjODAzMjMjL2xpc3Quc3FsJywKKyAgICAgICAgICAgICBleHBlY3Rf cmVuZGVyX3RlbXBsYXRlX2NhbGxlZF93aXRoPW9zLnBhdGguam9pbignc3FsJywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2dw ZGIjODAzMjMjJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnbGlzdC5zcWwnKSwKICAgICAgICAgICAgICBleHBlY3RlZF9pbnRl cm5hbF9zZXJ2ZXJfZXJyb3JfY2FsbGVkX3dpdGg9ZGljdCgKICAgICAgICAgICAgICAgICAgZXJy b3Jtc2c9J1NvbWUgZXJyb3IgbWVzc2FnZScKICAgICAgICAgICAgICApLApAQCAtMTIyLDcgKzEy Nyw5IEBAIGNsYXNzIFRlc3RFeHRlcm5hbFRhYmxlc1ZpZXcoQmFzZVRlc3RHZW5lcmF0b3IpOgog ICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgKSksCiAKLSAgICAgICAgICAgICBleHBl Y3RfcmVuZGVyX3RlbXBsYXRlX2NhbGxlZF93aXRoPSdzcWwvI2dwZGIjODAzMjMjL2xpc3Quc3Fs JywKKyAgICAgICAgICAgICBleHBlY3RfcmVuZGVyX3RlbXBsYXRlX2NhbGxlZF93aXRoPW9zLnBh dGguam9pbignc3FsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAnI2dwZGIjODAzMjMjJywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGlzdC5zcWwnKSwKICAg ICAgICAgICAgICBleHBlY3RlZF9tYWtlX2pzb25fcmVzcG9uc2VfY2FsbGVkX3dpdGg9ZGljdCgK ICAgICAgICAgICAgICAgICAgZGF0YT1bCiAgICAgICAgICAgICAgICAgICAgICB7CkBAIC0xNjcs NyArMTc0LDkgQEAgY2xhc3MgVGVzdEV4dGVybmFsVGFibGVzVmlldyhCYXNlVGVzdEdlbmVyYXRv cik6CiAgICAgICAgICAgICAgZXhlY3V0ZV8yZGFycmF5X3JldHVybl92YWx1ZT0oRmFsc2UsICdT b21lIGVycm9yIG1lc3NhZ2UnKSwKIAogICAgICAgICAgICAgIGV4cGVjdF9yZW5kZXJfdGVtcGxh dGVfY2FsbGVkX3dpdGg9ZGljdCgKLSAgICAgICAgICAgICAgICAgdGVtcGxhdGVfbmFtZV9vcl9s aXN0PSdzcWwvI2dwZGIjODAzMjMjL25vZGUuc3FsJywKKyAgICAgICAgICAgICAgICAgdGVtcGxh dGVfbmFtZV9vcl9saXN0PW9zLnBhdGguam9pbignc3FsJywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2dwZGIjODAzMjMjJywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9kZS5zcWwnKSwK ICAgICAgICAgICAgICAgICAgZXh0ZXJuYWxfdGFibGVfaWQ9MTEKICAgICAgICAgICAgICApLAog ICAgICAgICAgICAgIGV4cGVjdGVkX2ludGVybmFsX3NlcnZlcl9lcnJvcl9jYWxsZWRfd2l0aD1k aWN0KApAQCAtMTkyLDcgKzIwMSw5IEBAIGNsYXNzIFRlc3RFeHRlcm5hbFRhYmxlc1ZpZXcoQmFz ZVRlc3RHZW5lcmF0b3IpOgogICAgICAgICAgICAgIGV4ZWN1dGVfMmRhcnJheV9yZXR1cm5fdmFs dWU9KFRydWUsIGRpY3Qocm93cz1bXSkpLAogCiAgICAgICAgICAgICAgZXhwZWN0X3JlbmRlcl90 ZW1wbGF0ZV9jYWxsZWRfd2l0aD1kaWN0KAotICAgICAgICAgICAgICAgICB0ZW1wbGF0ZV9uYW1l X29yX2xpc3Q9J3NxbC8jZ3BkYiM4MDMyMyMvbm9kZS5zcWwnLAorICAgICAgICAgICAgICAgICB0 ZW1wbGF0ZV9uYW1lX29yX2xpc3Q9b3MucGF0aC5qb2luKCdzcWwnLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjZ3BkYiM4MDMyMyMnLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub2RlLnNx bCcpLAogICAgICAgICAgICAgICAgICBleHRlcm5hbF90YWJsZV9pZD0xMQogICAgICAgICAgICAg ICksCiAgICAgICAgICAgICAgZXhwZWN0ZWRfbWFrZV9qc29uX3Jlc3BvbnNlX2NhbGxlZF93aXRo PWRpY3QoCkBAIC0yMjksNyArMjQwLDkgQEAgY2xhc3MgVGVzdEV4dGVybmFsVGFibGVzVmlldyhC YXNlVGVzdEdlbmVyYXRvcik6CiAgICAgICAgICAgICAgKSksCiAKICAgICAgICAgICAgICBleHBl Y3RfcmVuZGVyX3RlbXBsYXRlX2NhbGxlZF93aXRoPWRpY3QoCi0gICAgICAgICAgICAgICAgIHRl bXBsYXRlX25hbWVfb3JfbGlzdD0nc3FsLyNncGRiIzgwMzIzIy9ub2RlLnNxbCcsCisgICAgICAg ICAgICAgICAgIHRlbXBsYXRlX25hbWVfb3JfbGlzdD1vcy5wYXRoLmpvaW4oJ3NxbCcsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNncGRiIzgw MzIzIycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJ25vZGUuc3FsJyksCiAgICAgICAgICAgICAgICAgIGV4dGVybmFsX3RhYmxlX2lkPTExCiAg ICAgICAgICAgICAgKSwKICAgICAgICAgICAgICBleHBlY3RlZF9tYWtlX2pzb25fcmVzcG9uc2Vf Y2FsbGVkX3dpdGg9ZGljdCgKQEAgLTI4Myw4ICsyOTYsMTEgQEAgY2xhc3MgVGVzdEV4dGVybmFs VGFibGVzVmlldyhCYXNlVGVzdEdlbmVyYXRvcik6CiAgICAgICAgICAgICAgKSksCiAKICAgICAg ICAgICAgICBleHBlY3RfcmVuZGVyX3RlbXBsYXRlX2NhbGxlZF93aXRoPWRpY3QoCi0gICAgICAg ICAgICAgICAgIHRlbXBsYXRlX25hbWVfb3JfbGlzdD0nc3FsLyNncGRiIzgwMzIzIy8nCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X3RhYmxlX2luZm9ybWF0aW9u LnNxbCcsCisgICAgICAgICAgICAgICAgIHRlbXBsYXRlX25hbWVfb3JfbGlzdD1vcy5wYXRoLmpv aW4oCisgICAgICAgICAgICAgICAgICAgICAnc3FsJywKKyAgICAgICAgICAgICAgICAgICAgICcj Z3BkYiM4MDMyMyMnLAorICAgICAgICAgICAgICAgICAgICAgJ2dldF90YWJsZV9pbmZvcm1hdGlv bi5zcWwnCisgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgIHRhYmxlX29pZD0x MQogICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgZXhwZWN0ZWRfbWFrZV9yZXNwb25zZV9j YWxsZWRfd2l0aD1kaWN0KApkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJf Z3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3Rlc3RzL3Rlc3RfdGVtcGxh dGVfY3JlYXRlLnB5IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMv ZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3Rlc3RzL3Rlc3RfdGVtcGxhdGVfY3JlYXRlLnB5Cmlu ZGV4IDI1ZDU4OTI1Li5jZDc2NWFhZiAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9z ZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3Rlc3RzL3Rlc3Rf dGVtcGxhdGVfY3JlYXRlLnB5CisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vw cy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZXN0cy90ZXN0X3RlbXBsYXRlX2Ny ZWF0ZS5weQpAQCAtMTE3LDIwICsxMTcsMjYgQEAgY2xhc3MgRmFrZUFwcChGbGFzayk6CiAgICAg ICAgIHNlbGYuamluamFfZW52LmZpbHRlcnNbJ3F0VHlwZUlkZW50J10gPSBkcml2ZXIucXRUeXBl SWRlbnQKICAgICAgICAgc2VsZi5qaW5qYV9sb2FkZXIgPSBDaG9pY2VMb2FkZXIoWwogICAgICAg ICAgICAgRmlsZVN5c3RlbUxvYWRlcigKLSAgICAgICAgICAgICAgICBvcy5wYXRoLmRpcm5hbWUo Ci0gICAgICAgICAgICAgICAgICAgIG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKSArICcvLi4v dGVtcGxhdGVzLycKKyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1l KAorICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLnJlYWxwYXRoKF9fZmlsZV9fKQorICAgICAg ICAgICAgICAgICksIG9zLnBhcmRpciwgJ3RlbXBsYXRlcycpCiAgICAgICAgICAgICApLAogICAg ICAgICAgICAgRmlsZVN5c3RlbUxvYWRlcigKLSAgICAgICAgICAgICAgICBvcy5wYXRoLmRpcm5h bWUoCi0gICAgICAgICAgICAgICAgICAgIG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKSArICcv Li4vLi4vdGVtcGxhdGVzLycKKyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oCisgICAgICAg ICAgICAgICAgICAgIG9zLnBhdGguZGlybmFtZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG9z LnBhdGgucmVhbHBhdGgoX19maWxlX18pCisgICAgICAgICAgICAgICAgICAgICksIG9zLnBhcmRp ciwgb3MucGFyZGlyLCAndGVtcGxhdGVzJykKICAgICAgICAgICAgICksCiAgICAgICAgICAgICBG aWxlU3lzdGVtTG9hZGVyKAotICAgICAgICAgICAgICAgIG9zLnBhdGguZGlybmFtZSgKLSAgICAg ICAgICAgICAgICAgICAgb3MucGF0aC5yZWFscGF0aChfX2ZpbGVfXykpICsgJy8uLi8uLi90eXBl cy90ZW1wbGF0ZXMvJworICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5h bWUoCisgICAgICAgICAgICAgICAgICAgIG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKQorICAg ICAgICAgICAgICAgICAgICAsIG9zLnBhcmRpciwgb3MucGFyZGlyLCAndHlwZXMnLCAndGVtcGxh dGVzJykKICAgICAgICAgICAgICksCiAgICAgICAgICAgICBGaWxlU3lzdGVtTG9hZGVyKAotICAg ICAgICAgICAgICAgIG9zLnBhdGguZGlybmFtZSgKLSAgICAgICAgICAgICAgICAgICAgb3MucGF0 aC5yZWFscGF0aChfX2ZpbGVfXykpICsgJy8uLi8uLi8uLi8uLi90ZW1wbGF0ZXMvJworICAgICAg ICAgICAgICAgIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoCisgICAgICAgICAgICAgICAg ICAgIG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKQorICAgICAgICAgICAgICAgICAgICAsIG9z LnBhcmRpciwgb3MucGFyZGlyLCBvcy5wYXJkaXIsIG9zLnBhcmRpciwKKyAgICAgICAgICAgICAg ICAgICAgJ3RlbXBsYXRlcycpCiAgICAgICAgICAgICApLAogICAgICAgICBdCiAgICAgICAgICkK --94eb2c0af848067d520566bfa421--