3838def sample_name ():
3939 """Sample testcase modules must define this fixture.
4040
41- The name is used to label the instance created by the sample, to
42- aid in debugging leaked instances.
43- """
44- raise NotImplementedError (
45- "Define 'sample_name' fixture in sample test driver" )
41+ The name is used to label the instance created by the sample, to
42+ aid in debugging leaked instances.
43+ """
44+ raise NotImplementedError ("Define 'sample_name' fixture in sample test driver" )
4645
4746
4847@pytest .fixture (scope = "module" )
4948def database_dialect ():
5049 """Database dialect to be used for this sample.
5150
52- The dialect is used to initialize the dialect for the database.
53- It can either be GoogleStandardSql or PostgreSql.
54- """
51+ The dialect is used to initialize the dialect for the database.
52+ It can either be GoogleStandardSql or PostgreSql.
53+ """
5554 # By default, we consider GOOGLE_STANDARD_SQL dialect. Other specific tests
5655 # can override this if required.
5756 return DatabaseDialect .GOOGLE_STANDARD_SQL
@@ -105,7 +104,7 @@ def multi_region_instance_id():
105104@pytest .fixture (scope = "module" )
106105def instance_config (spanner_client ):
107106 return "{}/instanceConfigs/{}" .format (
108- spanner_client .project_name , "regional-us-central1"
107+ spanner_client .project_name , "regional-us-central1"
109108 )
110109
111110
@@ -116,20 +115,20 @@ def multi_region_instance_config(spanner_client):
116115
117116@pytest .fixture (scope = "module" )
118117def sample_instance (
119- spanner_client ,
120- cleanup_old_instances ,
121- instance_id ,
122- instance_config ,
123- sample_name ,
118+ spanner_client ,
119+ cleanup_old_instances ,
120+ instance_id ,
121+ instance_config ,
122+ sample_name ,
124123):
125124 sample_instance = spanner_client .instance (
126- instance_id ,
127- instance_config ,
128- labels = {
129- "cloud_spanner_samples" : "true" ,
130- "sample_name" : sample_name ,
131- "created" : str (int (time .time ())),
132- },
125+ instance_id ,
126+ instance_config ,
127+ labels = {
128+ "cloud_spanner_samples" : "true" ,
129+ "sample_name" : sample_name ,
130+ "created" : str (int (time .time ())),
131+ },
133132 )
134133 op = retry_429 (sample_instance .create )()
135134 op .result (INSTANCE_CREATION_TIMEOUT ) # block until completion
@@ -151,20 +150,20 @@ def sample_instance(
151150
152151@pytest .fixture (scope = "module" )
153152def multi_region_instance (
154- spanner_client ,
155- cleanup_old_instances ,
156- multi_region_instance_id ,
157- multi_region_instance_config ,
158- sample_name ,
153+ spanner_client ,
154+ cleanup_old_instances ,
155+ multi_region_instance_id ,
156+ multi_region_instance_config ,
157+ sample_name ,
159158):
160159 multi_region_instance = spanner_client .instance (
161- multi_region_instance_id ,
162- multi_region_instance_config ,
163- labels = {
164- "cloud_spanner_samples" : "true" ,
165- "sample_name" : sample_name ,
166- "created" : str (int (time .time ())),
167- },
160+ multi_region_instance_id ,
161+ multi_region_instance_config ,
162+ labels = {
163+ "cloud_spanner_samples" : "true" ,
164+ "sample_name" : sample_name ,
165+ "created" : str (int (time .time ())),
166+ },
168167 )
169168 op = retry_429 (multi_region_instance .create )()
170169 op .result (INSTANCE_CREATION_TIMEOUT ) # block until completion
@@ -188,44 +187,49 @@ def multi_region_instance(
188187def database_id ():
189188 """Id for the database used in samples.
190189
191- Sample testcase modules can override as needed.
192- """
190+ Sample testcase modules can override as needed.
191+ """
193192 return "my-database-id"
194193
195194
195+ @pytest .fixture (scope = "module" )
196+ def bit_reverse_sequence_database_id ():
197+ """Id for the database used in bit reverse sequence samples.
198+
199+ Sample testcase modules can override as needed.
200+ """
201+ return "sequence-database-id"
202+
203+
196204@pytest .fixture (scope = "module" )
197205def database_ddl ():
198206 """Sequence of DDL statements used to set up the database.
199207
200- Sample testcase modules can override as needed.
201- """
208+ Sample testcase modules can override as needed.
209+ """
202210 return []
203211
204212
205213@pytest .fixture (scope = "module" )
206214def sample_database (
207- spanner_client ,
208- sample_instance ,
209- database_id ,
210- database_ddl ,
211- database_dialect ):
215+ spanner_client , sample_instance , database_id , database_ddl , database_dialect
216+ ):
212217 if database_dialect == DatabaseDialect .POSTGRESQL :
213218 sample_database = sample_instance .database (
214- database_id ,
215- database_dialect = DatabaseDialect .POSTGRESQL ,
219+ database_id ,
220+ database_dialect = DatabaseDialect .POSTGRESQL ,
216221 )
217222
218223 if not sample_database .exists ():
219224 operation = sample_database .create ()
220225 operation .result (OPERATION_TIMEOUT_SECONDS )
221226
222227 request = spanner_admin_database_v1 .UpdateDatabaseDdlRequest (
223- database = sample_database .name ,
224- statements = database_ddl ,
228+ database = sample_database .name ,
229+ statements = database_ddl ,
225230 )
226231
227- operation = \
228- spanner_client .database_admin_api .update_database_ddl (request )
232+ operation = spanner_client .database_admin_api .update_database_ddl (request )
229233 operation .result (OPERATION_TIMEOUT_SECONDS )
230234
231235 yield sample_database
@@ -234,8 +238,8 @@ def sample_database(
234238 return
235239
236240 sample_database = sample_instance .database (
237- database_id ,
238- ddl_statements = database_ddl ,
241+ database_id ,
242+ ddl_statements = database_ddl ,
239243 )
240244
241245 if not sample_database .exists ():
@@ -247,11 +251,43 @@ def sample_database(
247251 sample_database .drop ()
248252
249253
254+ @pytest .fixture (scope = "module" )
255+ def bit_reverse_sequence_database (
256+ spanner_client , sample_instance , bit_reverse_sequence_database_id , database_dialect
257+ ):
258+ if database_dialect == DatabaseDialect .POSTGRESQL :
259+ bit_reverse_sequence_database = sample_instance .database (
260+ bit_reverse_sequence_database_id ,
261+ database_dialect = DatabaseDialect .POSTGRESQL ,
262+ )
263+
264+ if not bit_reverse_sequence_database .exists ():
265+ operation = bit_reverse_sequence_database .create ()
266+ operation .result (OPERATION_TIMEOUT_SECONDS )
267+
268+ yield bit_reverse_sequence_database
269+
270+ bit_reverse_sequence_database .drop ()
271+ return
272+
273+ bit_reverse_sequence_database = sample_instance .database (
274+ bit_reverse_sequence_database_id
275+ )
276+
277+ if not bit_reverse_sequence_database .exists ():
278+ operation = bit_reverse_sequence_database .create ()
279+ operation .result (OPERATION_TIMEOUT_SECONDS )
280+
281+ yield bit_reverse_sequence_database
282+
283+ bit_reverse_sequence_database .drop ()
284+
285+
250286@pytest .fixture (scope = "module" )
251287def kms_key_name (spanner_client ):
252288 return "projects/{}/locations/{}/keyRings/{}/cryptoKeys/{}" .format (
253- spanner_client .project ,
254- "us-central1" ,
255- "spanner-test-keyring" ,
256- "spanner-test-cmek" ,
289+ spanner_client .project ,
290+ "us-central1" ,
291+ "spanner-test-keyring" ,
292+ "spanner-test-cmek" ,
257293 )
0 commit comments