Skip to content

Commit 05aa31e

Browse files
skuruppuIlya Gurov
and
Ilya Gurov
authored
test: enable tests to run on kokoro (#134)
Co-authored-by: Ilya Gurov <[email protected]>
1 parent 1c3ff7d commit 05aa31e

File tree

11 files changed

+74
-62
lines changed

11 files changed

+74
-62
lines changed

.circleci/config.yml

-19
This file was deleted.

.kokoro/presubmit/presubmit.cfg

-6
Original file line numberDiff line numberDiff line change
@@ -1,7 +1 @@
11
# Format: //devtools/kokoro/config/proto/build.proto
2-
3-
# Disable system tests.
4-
env_vars: {
5-
key: "RUN_SYSTEM_TESTS"
6-
value: "false"
7-
}

create_test_database.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -82,11 +82,11 @@ def create_test_instance():
8282
instance = CLIENT.instance(instance_id, instance_config, labels=labels)
8383

8484
created_op = instance.create()
85-
created_op.result(120) # block until completion
85+
created_op.result(1800) # block until completion
8686

8787
database = instance.database("compliance-test")
8888
created_op = database.create()
89-
created_op.result(120)
89+
created_op.result(1800)
9090

9191
config = configparser.ConfigParser()
9292
url = "spanner:///projects/{project}/instances/{instance_id}/databases/compliance-test".format(

google/cloud/sqlalchemy_spanner/requirements.py

+8
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,14 @@
1717

1818

1919
class Requirements(SuiteRequirements):
20+
@property
21+
def sane_rowcount(self):
22+
return exclusions.closed()
23+
24+
@property
25+
def sane_multi_rowcount(self):
26+
return exclusions.closed()
27+
2028
@property
2129
def foreign_key_constraint_name_reflection(self):
2230
return exclusions.open()

google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,7 @@ class SpannerDialect(DefaultDialect):
394394
execute_sequence_format = list
395395

396396
supports_alter = True
397-
supports_sane_rowcount = True
397+
supports_sane_rowcount = False
398398
supports_sane_multi_rowcount = False
399399
supports_default_values = False
400400
supports_sequences = True

migration_test_cleanup.py

+14-14
Original file line numberDiff line numberDiff line change
@@ -14,24 +14,24 @@
1414
# See the License for the specific language governing permissions and
1515
# limitations under the License.
1616

17-
import configparser
18-
import os
1917
import re
18+
import sys
2019

2120
from google.cloud import spanner
2221

23-
config = configparser.ConfigParser()
24-
if os.path.exists("test.cfg"):
25-
config.read("test.cfg")
26-
else:
27-
config.read("setup.cfg")
28-
db_url = config.get("db", "default")
2922

30-
project = re.findall(r"projects(.*?)instances", db_url)
31-
instance_id = re.findall(r"instances(.*?)databases", db_url)
23+
def main(argv):
24+
db_url = argv[0]
3225

33-
client = spanner.Client(project="".join(project).replace("/", ""))
34-
instance = client.instance(instance_id="".join(instance_id).replace("/", ""))
35-
database = instance.database("compliance-test")
26+
project = re.findall(r"projects(.*?)instances", db_url)
27+
instance_id = re.findall(r"instances(.*?)databases", db_url)
3628

37-
database.update_ddl(["DROP TABLE account", "DROP TABLE alembic_version"]).result(120)
29+
client = spanner.Client(project="".join(project).replace("/", ""))
30+
instance = client.instance(instance_id="".join(instance_id).replace("/", ""))
31+
database = instance.database("compliance-test")
32+
33+
database.update_ddl(["DROP TABLE account", "DROP TABLE alembic_version"]).result(120)
34+
35+
36+
if __name__ == "__main__":
37+
main(sys.argv[1:])

noxfile.py

+10-2
Original file line numberDiff line numberDiff line change
@@ -147,12 +147,20 @@ def migration_test(session):
147147
session.install("-e", ".")
148148
session.install("alembic")
149149

150+
project = os.getenv(
151+
"GOOGLE_CLOUD_PROJECT", os.getenv("PROJECT_ID", "emulator-test-project"),
152+
)
153+
db_url = (
154+
f"spanner:///projects/{project}/instances/"
155+
"sqlalchemy-dialect-test/databases/compliance-test"
156+
)
157+
150158
config = configparser.ConfigParser()
151159
if os.path.exists("test.cfg"):
152160
config.read("test.cfg")
153161
else:
154162
config.read("setup.cfg")
155-
db_url = config.get("db", "default")
163+
db_url = config.get("db", "default", fallback=db_url)
156164

157165
session.run("alembic", "init", "test_migration")
158166

@@ -181,7 +189,7 @@ def migration_test(session):
181189
# clearing the migration data
182190
os.remove("alembic.ini")
183191
shutil.rmtree("test_migration")
184-
session.run("python", "migration_test_cleanup.py")
192+
session.run("python", "migration_test_cleanup.py", db_url)
185193
if os.path.exists("test.cfg"):
186194
os.remove("test.cfg")
187195

samples/conftest.py

+14-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15+
import configparser
1516
import datetime
17+
import os
1618
import uuid
1719

1820
import pytest
@@ -30,11 +32,21 @@
3032

3133
@pytest.fixture
3234
def db_url():
33-
return (
34-
"spanner:///projects/appdev-soda-spanner-staging/instances/"
35+
project = os.getenv(
36+
"GOOGLE_CLOUD_PROJECT", os.getenv("PROJECT_ID", "emulator-test-project"),
37+
)
38+
db_url = (
39+
f"spanner:///projects/{project}/instances/"
3540
"sqlalchemy-dialect-test/databases/compliance-test"
3641
)
3742

43+
config = configparser.ConfigParser()
44+
if os.path.exists("test.cfg"):
45+
config.read("test.cfg")
46+
else:
47+
config.read("setup.cfg")
48+
return config.get("db", "default", fallback=db_url)
49+
3850

3951
@pytest.fixture
4052
def table_id():

setup.cfg

-3
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,3 @@ python_files=test/*test_*.py
2424
[sqla_testing]
2525
requirement_cls=google.cloud.sqlalchemy_spanner.requirements:Requirements
2626
profile_file=test/profiles.txt
27-
28-
[db]
29-
default=spanner:///projects/appdev-soda-spanner-staging/instances/sqlalchemy-dialect-test/databases/compliance-test

test/_helpers.py

+20
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
# https://developers.google.com/open-source/licenses/bsd
66

77

8+
import configparser
89
import mock
10+
import os
911
from sqlalchemy.testing import fixtures
1012

1113
try:
@@ -29,6 +31,24 @@
2931
_TEST_OT_PROVIDER_INITIALIZED = False
3032

3133

34+
PROJECT = os.getenv(
35+
"GOOGLE_CLOUD_PROJECT", os.getenv("PROJECT_ID", "emulator-test-project"),
36+
)
37+
DB_URL = (
38+
f"spanner:///projects/{PROJECT}/instances/"
39+
"sqlalchemy-dialect-test/databases/compliance-test"
40+
)
41+
42+
43+
def get_db_url():
44+
config = configparser.ConfigParser()
45+
if os.path.exists("test.cfg"):
46+
config.read("test.cfg")
47+
else:
48+
config.read("setup.cfg")
49+
return config.get("db", "default", fallback=DB_URL)
50+
51+
3252
def get_test_ot_exporter():
3353
global _TEST_OT_EXPORTER
3454

test/test_suite.py

+5-13
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@
111111
UnicodeTextTest as _UnicodeTextTest,
112112
_UnicodeFixture as _UnicodeFixtureTest,
113113
)
114+
from test._helpers import get_db_url
114115

115116
config.test_schema = ""
116117

@@ -678,7 +679,7 @@ def define_temp_tables(cls, metadata):
678679
Column("foo", sqlalchemy.INT),
679680
sqlalchemy.Index("user_tmp_uq", "name", unique=True),
680681
sqlalchemy.Index("user_tmp_ix", "foo"),
681-
**kw
682+
**kw,
682683
)
683684
if (
684685
testing.requires.view_reflection.enabled
@@ -1508,10 +1509,7 @@ class InterleavedTablesTest(fixtures.TestBase):
15081509
"""
15091510

15101511
def setUp(self):
1511-
self._engine = create_engine(
1512-
"spanner:///projects/appdev-soda-spanner-staging/instances/"
1513-
"sqlalchemy-dialect-test/databases/compliance-test"
1514-
)
1512+
self._engine = create_engine(get_db_url())
15151513
self._metadata = MetaData(bind=self._engine)
15161514

15171515
def test_interleave(self):
@@ -1560,10 +1558,7 @@ class UserAgentTest(fixtures.TestBase):
15601558
"""Check that SQLAlchemy dialect uses correct user agent."""
15611559

15621560
def setUp(self):
1563-
self._engine = create_engine(
1564-
"spanner:///projects/appdev-soda-spanner-staging/instances/"
1565-
"sqlalchemy-dialect-test/databases/compliance-test"
1566-
)
1561+
self._engine = create_engine(get_db_url())
15671562
self._metadata = MetaData(bind=self._engine)
15681563

15691564
def test_user_agent(self):
@@ -1583,10 +1578,7 @@ class ExecutionOptionsTest(fixtures.TestBase):
15831578
"""
15841579

15851580
def setUp(self):
1586-
self._engine = create_engine(
1587-
"spanner:///projects/appdev-soda-spanner-staging/instances/"
1588-
"sqlalchemy-dialect-test/databases/compliance-test"
1589-
)
1581+
self._engine = create_engine(get_db_url())
15901582
self._metadata = MetaData(bind=self._engine)
15911583

15921584
self._table = Table(

0 commit comments

Comments
 (0)