@@ -395,6 +395,49 @@ def test_create_table_bad_value(self):
395395 with self .assertRaises (ValueError ):
396396 connection .create_table (name , families )
397397
398+ def _create_table_error_helper (self , err_val , err_type ):
399+ from gcloud ._testing import _Monkey
400+ from gcloud .bigtable .happybase import connection as MUT
401+
402+ cluster = _Cluster () # Avoid implicit environ check.
403+ connection = self ._makeOne (autoconnect = False , cluster = cluster )
404+
405+ tables_created = []
406+
407+ def make_table (* args , ** kwargs ):
408+ kwargs ['create_error' ] = err_val
409+ result = _MockLowLevelTable (* args , ** kwargs )
410+ tables_created .append (result )
411+ return result
412+
413+ name = 'table-name'
414+ families = {'foo' : {}}
415+ with _Monkey (MUT , _LowLevelTable = make_table ):
416+ with self .assertRaises (err_type ):
417+ connection .create_table (name , families )
418+
419+ self .assertEqual (len (tables_created ), 1 )
420+ self .assertEqual (tables_created [0 ].create_calls , 1 )
421+
422+ def test_create_table_already_exists (self ):
423+ from grpc .beta import interfaces
424+ from grpc .framework .interfaces .face import face
425+ from happybase .hbase import ttypes
426+
427+ err_val = face .NetworkError (None , None ,
428+ interfaces .StatusCode .ALREADY_EXISTS , None )
429+ self ._create_table_error_helper (err_val , ttypes .AlreadyExists )
430+
431+ def test_create_table_connection_error (self ):
432+ from grpc .beta import interfaces
433+ from grpc .framework .interfaces .face import face
434+ err_val = face .NetworkError (None , None ,
435+ interfaces .StatusCode .INTERNAL , None )
436+ self ._create_table_error_helper (err_val , face .NetworkError )
437+
438+ def test_create_table_other_error (self ):
439+ self ._create_table_error_helper (RuntimeError , RuntimeError )
440+
398441 def _delete_table_helper (self , disable = False ):
399442 from gcloud ._testing import _Monkey
400443 from gcloud .bigtable .happybase import connection as MUT
@@ -612,6 +655,7 @@ class _MockLowLevelTable(object):
612655 def __init__ (self , * args , ** kwargs ):
613656 self .args = args
614657 self .kwargs = kwargs
658+ self .create_error = kwargs .get ('create_error' )
615659 self .delete_calls = 0
616660 self .create_calls = 0
617661 self .col_fam_created = []
@@ -621,6 +665,8 @@ def delete(self):
621665
622666 def create (self ):
623667 self .create_calls += 1
668+ if self .create_error :
669+ raise self .create_error
624670
625671 def column_family (self , column_family_id , gc_rule = None ):
626672 result = _MockLowLevelColumnFamily (column_family_id , gc_rule = gc_rule )
0 commit comments